Netty is not Apache, but Eclipse.

We are discussing the error at the moment, trying to move away the SSLFilter synchronized block.

On 10/02/2024 08:10, Kishore Mokkarala wrote:
We had to revert mina version to 2.0.25 from 2.2.1 to make it work in production and  trying for other alternatives like apache netty.

On Fri, 9 Feb, 2024, 1:59 pm Emmanuel Lécharny, <[email protected] <mailto:[email protected]>> wrote:

    Hi Jonathan,

    in this very case, I think there is a race condition when using the
    SSLFilter in conjonction with the StateMachine filter.

    On 09/02/2024 05:33, Jonathan Valliere wrote:
     >   No, you should not have to create multiple instances.  The
    necessary
     > stateful data is saved to the Connection.
     >
     >
     > On Feb 1, 2024 at 5:22:36 AM, Kishore Mokkarala
    <[email protected] <mailto:[email protected]>>
     > wrote:
     >
     >> Any response would be greatly appreciated.
     >> ------------------------------------------
     >> M.V.S.Kishore
     >> 91-9886412814
     >>
     >>
     >> On Wed, 31 Jan 2024 at 22:17, Kishore Mokkarala
    <[email protected] <mailto:[email protected]>>
     >> wrote:
     >>
     >> Hi Emmanuel,
     >>
     >>
     >> Do we need to create a new instance of SSLFilter per tcp ip
    connection or
     >>
     >> can we reuse it ?
     >>
     >>
     >> For example, do we need to repeat the same code for each tcp ip
    connection
     >>
     >> ?
     >>
     >>
     >> *Approach 1:*
     >>
     >> for(int i=0;i< 500;i++)
     >>
     >> {
     >>
     >> NioSocketConnector connector = new NioSocketConnector();
     >>
     >> connector.getFilterChain().addLast("LoggingFilter",
     >>
     >> G10CaptureService.loggingFilter);
     >>
     >> connector.getFilterChain().addLast("codecFilter",
     >>
     >> G10CaptureService.probeCodecFilter);
     >>
     >> connector.getFilterChain().addLast("executorFilter",
     >>
     >> G10CaptureService.executorFilter);
     >>
     >> connector.getFilterChain().addLast("gpbMessageFilter",
     >>
     >> G10CaptureService.gpbMessageFilter);
     >>
     >> connector.getFilterChain().addLast("keepAliveFilter",
     >>
     >> G10CaptureService.keepAliveFilter);
     >>
     >> SslFilter sslFilter;
     >>
     >> try {
     >>
     >> SSLContext sslContext = TLSUtil.getSSLContext();
     >>
     >> sslFilter = new CustomSslFilter(sslContext);
     >>
     >> connector.getFilterChain().addFirst("sslFilter", sslFilter);
     >>
     >> } catch (Exception e) {
     >>
     >> e.printStackTrace();
     >>
     >> LOG.error("Exception during creating SSL context..." +
     >>
     >> XError.getStackTrace(e));
     >>
     >> }
     >>
     >> //io handler creation
     >>
     >> StateMachine stateMachine =
     >>
     >> StateMachineFactory.getInstance(IoHandlerTransition.class).create(
     >>
     >>                  G10MinaClient.CONNECTED, new
    G10MinaClient(processor));
     >>
     >>
     >>          IoHandler ioHandler = new
     >>
     >> StateMachineProxyBuilder().setStateContextLookup(
     >>
     >>                  new IoSessionStateContextLookup(new
    StateContextFactory() {
     >>
     >>                      @Override
     >>
     >>                      public StateContext create() {
     >>
     >>                          final G10StateContext stateContext = new
     >>
     >> G10StateContext();
     >>
     >>                          stateContext.setStartedTime(new Date());
     >>
     >>                          LOG.info("G10StateContext initialized at:{}
     >>
     >> ",System.currentTimeMillis());
     >>
     >>                          return stateContext;
     >>
     >>                      }
     >>
     >>                  })).create(IoHandler.class, stateMachine);
     >>
     >> connector.setHandler(ioHandler);
     >>
     >> connector.connect(primaryAddress);
     >>
     >> connectFuture.awaitUninterruptibly();
     >>
     >> if (connectFuture.isConnected()) {
     >>
     >> IoSession session = connectFuture.getSession();
     >>
     >> // Do something with the session if needed
     >>
     >> } else {
     >>
     >> System.err.println("Connection failed for iteration: " + i);
     >>
     >> }
     >>
     >> }
     >>
     >>
     >> *Approach 2:*
     >>
     >> Reuse the generic connector implemented above for opening all TCP/IP
     >>
     >> connections.
     >>
     >> //just do the below for getting connections for example
     >>
     >> NioSocketConnector connector = new NioSocketConnector();
     >>
     >> //filter chain creation
     >>
     >> //add SSLFilter to filer chain
     >>
     >>
     >> for(int i=0;i< 500;i++)
     >>
     >> {
     >>
     >> ConnectFuture connectFuture = connector.connect(serverAddress);
     >>
     >> connectFuture.awaitUninterruptibly();
     >>
     >> if (connectFuture.isConnected()) {
     >>
     >> IoSession session = connectFuture.getSession();
     >>
     >> // Do something with the session if needed
     >>
     >> } else {
     >>
     >> System.err.println("Connection failed for iteration: " + i);
     >>
     >> }
     >>
     >> }
     >>
     >>
     >> Which approach is better ?
     >>
     >>
     >> Regards,
     >>
     >> ------------------------------------------
     >>
     >> M.V.S.Kishore
     >>
     >> 91-9886412814
     >>
     >>
     >>
     >

-- *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
    [email protected] <mailto:[email protected]>

    ---------------------------------------------------------------------
    To unsubscribe, e-mail: [email protected]
    <mailto:[email protected]>
    For additional commands, e-mail: [email protected]
    <mailto:[email protected]>


--
*Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
[email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to