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

Michael Neifeld (JIRA) issues at jboss.org
Thu Mar 9 07:54:00 EST 2017


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

Michael Neifeld commented on DROOLS-1472:
-----------------------------------------

I just walk through the stack trace and have found: 

{code:java}
// Some comments here
    private static TupleSets<LeftTuple> getTargetStagedLeftTuples(NetworkNode node, InternalWorkingMemory wm, SegmentMemory smem) {
        if (node == smem.getTipNode()) {
            // we are about to process the segment tip, allow it to merge insert/update/delete clashes
            if ( smem.isEmpty() ) {
                SegmentUtilities.createChildSegments(wm, smem, ((LeftTupleSource) node).getSinkPropagator() );
            }
            return smem.getFirst().getStagedLeftTuples().takeAll();
        } else {
            return null;
        }
    }
{code}

in class org.drools.core.phreak.RuleNetworkEvaluator.
the method was invoked on line 298

{code:java}
            stagedLeftTuples = getTargetStagedLeftTuples(node, wm, smem);
            LeftTupleSinkNode sink = ((LeftTupleSource) node).getSinkPropagator().getFirstLeftTupleSink();

            trgTuples = evalNode( pmem, node, bit, nodeMem, smems, smemIndex, wm, stack, processRian, executor, srcTuples, smem, stagedLeftTuples, sink );
            if ( trgTuples == null ) {
                break; // Queries exists and has been placed StackEntry, and there are no current trgTuples to process
            }
{code}

and if the method will return null we will fail with NPE.



> 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