Arun Selva
Arun Selva

Reputation: 117

Drools engine hangs during multiple statefulsession Execution

For every request, I create a fresh knowledge session, execute the rules and eventually dispose it. This works fine with few requests in Development environment. But in production environment, with multiple requests the Drools engine hangs with below thread dump.

`java.lang.Thread.State: RUNNABLE
at org.drools.reteoo.JoinNodeLeftTuple.getLastHandle(JoinNodeLeftTuple.java:536)
at org.drools.reteoo.AccumulateNode.addMatch(AccumulateNode.java:862)
at org.drools.reteoo.AccumulateNode.modifyRightTuple(AccumulateNode.java:558)
at org.drools.reteoo.RightInputAdapterNode.modifyLeftTuple(RightInputAdapterNode.java:222)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:260)
at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:355)
at org.drools.reteoo.FromNode.modifyLeftTuple(FromNode.java:299)
at org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyChildLeftTuple(CompositeLeftTupleSinkAdapter.java:316)
at org.drools.reteoo.JoinNode.modifyRightTuple(JoinNode.java:286)
at org.drools.reteoo.BetaNode.modifyObject(BetaNode.java:429)
at org.drools.reteoo.JoinNode.modifyObject(JoinNode.java:459)
at org.drools.reteoo.SingleObjectSinkAdapter.propagateModifyObject(SingleObjectSinkAdapter.java:68)
at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:150)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:468)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:436)
at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:150)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:468)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:425)
at org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:287)
at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:271)
at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:467)
at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:370)
at org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:311) 
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1191)
 - locked <0x00000007297a2008> (a org.drools.common.DefaultAgenda)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1126)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1349)
at org.drools.common.AbstractWorkingMemory.fireAllRules     (AbstractWorkingMemory.java:709)
- locked <0x00000007297a1e58> (a org.drools.reteoo.ReteooStatefulSession)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:673)
at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:228)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.runRules(AuthRulesBusinessServiceImpl.java:387)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.runAdjudicationRules(AuthRulesBusinessServiceImpl.java:229)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.processAuth(AuthRulesBusinessServiceImpl.java:208)
at sun.reflect.GeneratedMethodAccessor4101.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)`

The thread dump shows that there is a Deadlock at JoinNodeLeftTuple.getLastHandle(JoinNodeLeftTuple.java:536). But as im creating seperate sessions for each request, this thread lock should not happen.

  1. What could be the reason for the Deadlock
  2. How can i resolve this issue

Upvotes: 0

Views: 948

Answers (0)

Related Questions