[jboss-jira] [JBoss JIRA] (DROOLS-1472) NPE in stateful session

Mario Fusco (JIRA) issues at jboss.org
Fri Mar 10 10:34:00 EST 2017


    [ https://issues.jboss.org/browse/DROOLS-1472?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13376107#comment-13376107 ] 

Mario Fusco commented on DROOLS-1472:
-------------------------------------

Those {code}stagedLeftTuples{code} are supposed to be used only at the border of 2 segments of the phreak network and then only if the node is the tip of the segment. In all other case that object shouldn't be dereferenced and when this happens we want to fail fast with a NPE instead of "hiding the dust under the carpet" with a null check and propagate later an error that will be then much harder to track. Now the question is: why in your case drools is trying to use that object even when it shouldn't? This is clearly a bug, but as I said it's quite impossible for me to investigate it without a chance to reproduce it. 

> NPE in stateful session 
> ------------------------
>
>                 Key: DROOLS-1472
>                 URL: https://issues.jboss.org/browse/DROOLS-1472
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.5.0.Final
>         Environment: RedHat 6.2, Java 8.102
>            Reporter: Michael Neifeld
>            Assignee: Mario Fusco
>            Priority: Critical
>
> Found NPE in a log that probably leads to session destroying.
> CEP works in multithreaded environment and there are almost always 16 drools-workers thread.
> 2017-03-05 16:30:58 com.mot.ssol.cep.workflow.CEPSession [ERROR] Session execution error occurred 
> java.lang.NullPointerException: null
> 	at org.drools.core.phreak.RuleNetworkEvaluator.deleteChildLeftTuple(RuleNetworkEvaluator.java:729) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.unlinkAndDeleteChildLeftTuple(RuleNetworkEvaluator.java:721) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.PhreakNotNode.doRightUpdates(PhreakNotNode.java:343) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.PhreakNotNode.doNode(PhreakNotNode.java:74) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:524) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:505) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:341) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:301) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:136) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.AddRemoveRule.forceFlushLeftTuple(AddRemoveRule.java:686) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.AddRemoveRule.flushLeftTupleIfNecessary(AddRemoveRule.java:629) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.LeftInputAdapterNode.doInsertSegmentMemory(LeftInputAdapterNode.java:225) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.LeftInputAdapterNode.doInsertObject(LeftInputAdapterNode.java:210) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:169) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:63) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:494) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:384) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:494) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:384) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:494) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:384) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:304) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:134) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:86) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:81) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2105) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1296) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:1232) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1398) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1377) ~[drools-core-6.5.0.Final.jar:6.5.0.Final]
> 	at com.mot.ssol.cep.workflow.CEPSession.run(CEPSession.java:121) ~[mimonitor-cepm-3.0.jar:3.0]
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_102]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]
> 	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102] 



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list