Here is an scenario, I have one gate way IP which i connect initially ,this
gate way will return list of ips.
now i will close the previous IOsession and will create a nio connection
with the first ip in the list.if it did n't work then again i will try to
connect to next ip etc..
All these are in the critical section. i.e i will acquire a lock and then
after successful connection i will release the lock.
But problem i have noticed is with the awaitUninterruptibly().

I have a state machine too.So connection set up is in one thread and
response processing is in another thread.

*Thread1:*

 private static final ExecutorFilter executorFilter = *new
 ExecutorFilter(16,32);



     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());
                         return stateContext;
                     }
                 })).create(IoHandler.class, stateMachine);

 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);
         connector.setHandler(ioHandler);
  connectionLock.lock(); // connectionLock is private variable.
 try{
 ConnectFuture primaryConnectFuture = connector.connect(primaryAddress,
 initializer);
 primaryConnectFuture.awaitUninterruptibly(); // no timeout specified.

 if (!primaryConnectFuture.isConnected())
 {

                     if (handleIOException(searchExpression,
 captureHandler)) {
                         return;
                     }
                     LOG.info("{} Apache mina connection setup time out
 happend.",
                     handleConnectionFailed(primaryAddress, captureHandler,
 "Primary IP connection timeout");
                     return;
 }
 }
 finally
 {
 connectionLock.unLock();
 }

*Thread2:*

public void processGatewaySrQueryResponseSuccess(G10StateContext context,
IoSession session, GatewaySrQueryResponse response) {

if(response.getIpPortCount() > 0) {
        try {
        List<IpAddrPort> msgIpPorts = response.getIpPortList();
        List<InetSocketAddress> probeIpPorts = new
ArrayList<InetSocketAddress>();
        for (IpAddrPort ipp : msgIpPorts) {
           InetSocketAddress inetSockAddr = new
InetSocketAddress(InetAddress.getByAddress(ipp.getIp().toByteArray()),
ipp.getPort());
        probeIpPorts.add(inetSockAddr);
        }
        g10CaptureService.setProbeIps(probeIpPorts);
        } catch (Exception ex) {
        LOG.error("{} Exception occured while creating probe
IP/Port.Exception:{}", getLogStr(session), ex);
        }

      context.addGeoBladeGwSession(session);

        g10CaptureService.closeConnectionForSession(session);
        g10CaptureService.setIsGeoBladeIdlSession(true);

        g10CaptureService.startRecordCapture(searchExpression,
captureHandler, captureId);





}

------------------------------------------
M.V.S.Kishore
Lead Dev Engineer
NetScout S/w Pvt. Ltd.
91-9886412814


On Tue, 25 Apr 2023 at 16:36, Jonathan Valliere <john...@apache.org> wrote:

> Please make a Jira. I also need an example to run which reproduces the
> error.
>
> On Tue, Apr 25, 2023 at 6:35 AM Kishore Mokkarala <kishore....@gmail.com>
> wrote:
>
> > Hi,
> > I have migrated from 2.0.21 to 2.023 for solving CVE, i have seen thread
> > blocking issue, So used latest mina verstion 2.2.1 but still threads were
> > blocked here is the sample code.Thread hungs at awaitUninterruptibly.
> Once
> > this issue comes  in sub sequest launches nothing will work all threads
> > will be blocked forever,i have to restart the process to make it work.
> For
> > single thread working fine,if i start 50-100 threads this thread blocking
> > issue will surface.
> >
> > *Here is the sample thread dump:*
> > "pool-118-thread-6" #508 prio=5 os_prio=0 cpu=345.84ms elapsed=*1929.48s*
> > tid=0x00007ec6fc001800 nid=0x4b5d4 in Object.wait()  [0x00007ec7792d4000]
> >    java.lang.Thread.State: TIMED_WAITING (on object monitor)
> >         at java.lang.Object.wait(java.base@11.0.14.1/Native Method)
> >         - waiting on <no object reference available>
> >         at
> >
> >
> org.apache.mina.core.future.DefaultIoFuture.await0(DefaultIoFuture.java:218)
> >         - waiting to re-lock in wait() <0x00007ed90d1b2c40> (a
> >
> org.apache.mina.core.polling.AbstractPollingIoConnector$ConnectionRequest)
> >         at
> >
> >
> org.apache.mina.core.future.DefaultIoFuture.awaitUninterruptibly(DefaultIoFuture.java:148)
> >         at
> >
> >
> org.apache.mina.core.future.DefaultConnectFuture.awaitUninterruptibly(DefaultConnectFuture.java:149)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.g10.service.G10CaptureService.startRecordCapture(G10CaptureService.java:622)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.geoblade.service.GeoBladeCaptureService.startRecordCapture(GeoBladeCaptureService.java:67)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.processGatewaySrQueryResponseSuccess(G10PluginCaptureProcessor.java:2156)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.doHandleGatewaySrQueryResponse(G10MinaClient.java:283)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.handleGatewaySrQueryResponse(G10MinaClient.java:268)
> >         at jdk.internal.reflect.GeneratedMethodAccessor201.invoke(Unknown
> > Source)
> >         at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(
> > java.base@11.0.14.1/DelegatingMethodAccessorImpl.java:43)
> >         at java.lang.reflect.Method.invoke(
> > java.base@11.0.14.1/Method.java:566)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.MethodTransition.invokeMethod(MethodTransition.java:281)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.MethodTransition.doExecute(MethodTransition.java:232)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.AbstractTransition.execute(AbstractTransition.java:100)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:183)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:273)
> >         at
> >
> >
> org.apache.mina.statemachine.StateMachine.processEvents(StateMachine.java:170)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:158)
> >         - locked <0x00007ed92a951cd8> (a
> > com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
> >         at
> >
> >
> org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
> >         at com.sun.proxy.$Proxy85.messageReceived(Unknown Source)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:1015)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> >
> org.apache.mina.filter.keepalive.KeepAliveFilter.messageReceived(KeepAliveFilter.java:414)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10GPBMessageIoFilter.messageReceived(G10GPBMessageIoFilter.java:100)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:106)
> >         at org.apache.mina.core.session.IoEvent.run(IoEvent.java:89)
> >         at
> >
> >
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:763)
> >         at
> >
> >
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:755)
> > at
> >
> >
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:695)
> >         at java.lang.Thread.run(java.base@11.0.14.1/Thread.java:829)
> >
> >
> > "pool-116-thread-8" #458 prio=5 os_prio=0 cpu=172.16ms elapsed=529.47s
> > tid=0x00007ed6c800e000 nid=0x124b in Object.wait()  [0x00007ed6d9cda000]
> >    java.lang.Thread.State: TIMED_WAITING (on object monitor)
> >         at java.lang.Object.wait(java.base@11.0.14.1/Native Method)
> >         - waiting on <no object reference available>
> >         at
> >
> >
> org.apache.mina.core.future.DefaultIoFuture.await0(DefaultIoFuture.java:218)
> >         - waiting to re-lock in wait() <0x00007ee3a971c170> (a
> >
> org.apache.mina.core.polling.AbstractPollingIoConnector$ConnectionRequest)
> >         at
> >
> >
> org.apache.mina.core.future.DefaultIoFuture.awaitUninterruptibly(DefaultIoFuture.java:148)
> >         at
> >
> >
> org.apache.mina.core.future.DefaultConnectFuture.awaitUninterruptibly(DefaultConnectFuture.java:149)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.g10.service.G10CaptureService.startRecordCapture(G10CaptureService.java:622)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.geoblade.service.GeoBladeCaptureService.startRecordCapture(GeoBladeCaptureService.java:67)
> >         at
> >
> >
> com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.processGatewaySrQueryResponseSuccess(G10PluginCaptureProcessor.java:2156)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.doHandleGatewaySrQueryResponse(G10MinaClient.java:283)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.handleGatewaySrQueryResponse(G10MinaClient.java:268)
> >         at jdk.internal.reflect.GeneratedMethodAccessor281.invoke(Unknown
> > Source)
> >         at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(
> > java.base@11.0.14.1/DelegatingMethodAccessorImpl.java:43)
> >         at java.lang.reflect.Method.invoke(
> > java.base@11.0.14.1/Method.java:566)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.MethodTransition.invokeMethod(MethodTransition.java:281)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.MethodTransition.doExecute(MethodTransition.java:232)
> >         at
> >
> >
> org.apache.mina.statemachine.transition.AbstractTransition.execute(AbstractTransition.java:100)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:183)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:273)
> >         at
> >
> >
> org.apache.mina.statemachine.StateMachine.processEvents(StateMachine.java:170)
> >         at
> > org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:158)
> >         - locked <0x00007ee3aaed5d58> (a
> > com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
> >         at
> >
> >
> org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
> >         at com.sun.proxy.$Proxy85.messageReceived(Unknown Source)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:1015)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> >
> org.apache.mina.filter.keepalive.KeepAliveFilter.messageReceived(KeepAliveFilter.java:414)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> >
> com.netscout.nsaapp.geo.minaG10Proto.server.G10GPBMessageIoFilter.messageReceived(G10GPBMessageIoFilter.java:100)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49)
> >         at
> >
> >
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128)
> >         at
> >
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:106)
> >         at org.apache.mina.core.session.IoEvent.run(IoEvent.java:89)
> >         at
> >
> >
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:763)
> >
> > *This code is working fine with 2.0.21.*
> >
> > *Here is the code snippet.*
> >
> >  private static final ExecutorFilter executorFilter = *new
> > ExecutorFilter(16,32);*
> >
> >     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());
> >                         return stateContext;
> >                     }
> >                 })).create(IoHandler.class, stateMachine);
> >
> > 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);
> >         connector.setHandler(ioHandler);
> >  connectionLock.lock(); // connectionLock is private variable.
> > try{
> > ConnectFuture primaryConnectFuture = connector.connect(primaryAddress,
> > initializer);
> > primaryConnectFuture.awaitUninterruptibly(); // no timeout specified.
> >
> > if (!primaryConnectFuture.isConnected())
> > {
> >
> >                     if (handleIOException(searchExpression,
> > captureHandler)) {
> >                         return;
> >                     }
> >                     LOG.info("{} Apache mina connection setup time out
> > happend.",
> >                     handleConnectionFailed(primaryAddress,
> captureHandler,
> > "Primary IP connection timeout");
> >                     return;
> > }
> > }
> > finally
> > {
> > connectionLock.unLock();
> > }
> >
> > ------------------------------------------
> > M.V.S.Kishore
> > 91-9886412814
> >
>

Reply via email to