Hi all!

 

I encountered that null pointer exceptions occur when retracting an object from the working memory. Sometimes the problem occurs sooner sometimes later but it certainly happens. I think it also depends on the workload on the machine. Sometimes the NPE is thrown in 'LeftTupleIndexHashTable' but mainly in 'RightTupleIndexHashTable'. After the exception is thrown, the object to retract is still in the working memory. When I remove the line 'retract($obj)' in my rule, I don't get an exception.

 

The problem occurs mainly in this rule, but also in other rules:

rule "remove a cross talk"

  agenda-group "evaluation"

  activation-group "ag-crossTalk"

  lock-on-active true

  salience 40

     

  when

    $ctf  : CrossTalkFact($persID : uniquePersonID, $ctfTimestamp : timestamp)

    $pers : AnalysisCue(cueType == AnalysisCue.ACTION_STOP_TALKING, uniquePersonID == $persID, timestamp > $ctfTimestamp) from entry-point "LowLevelCueStream"

  then

    retract($ctf); //the suspicious line

    //... do some other things

end

 

My configuration:

drools.dialect.java.compiler = JANINO

 EventProcessingOption = STREAM

 

I was able to reproduce the problem with following versions:

5.1.1

 5.2.0.M1

 5.2.0.CR1

 

 

Stack trace from the version: 5.2.0.CR1

org.drools.runtime.rule.ConsequenceException: rule: remove a cross talk

                at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)

                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:915)

                at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:844)

                at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1055)

                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)

                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)

                at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)

                ...

Caused by: java.lang.NullPointerException

                at org.drools.core.util.RightTupleIndexHashTable.remove(RightTupleIndexHashTable.java:351)

                at org.drools.reteoo.NotNode.retractRightTuple(NotNode.java:178)

                at org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:235)

                at org.drools.reteoo.EntryPointNode.retractObject(EntryPointNode.java:229)

                at org.drools.common.NamedEntryPoint.retract(NamedEntryPoint.java:529)

                at org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:226)

                at eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0.defaultConsequence(Unknown Source)

                at eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0DefaultConsequenceInvoker.evaluate(Unknown Source)

                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:905)

                ... 31 more

 

 

Sometimes the exception occurs in the LeftTupleIndexHashTable:

org.drools.runtime.rule.ConsequenceException: rule: remove a cross talk

                at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)

                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:915)

                at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:844)

                at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1055)

                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)

                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)

                at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)

                ...

Caused by: java.lang.NullPointerException

                at org.drools.core.util.LeftTupleIndexHashTable.remove(LeftTupleIndexHashTable.java:275)

                at org.drools.reteoo.NotNode.retractLeftTuple(NotNode.java:231)

                at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:212)

                at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:86)

                at org.drools.reteoo.JoinNode.retractLeftTuple(JoinNode.java:210)

                at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:212)

                at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateRetractRightTuple(SingleLeftTupleSinkAdapter.java:119)

                at org.drools.reteoo.JoinNode.retractRightTuple(JoinNode.java:192)

                at org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:235)

                at org.drools.reteoo.EntryPointNode.retractObject(EntryPointNode.java:229)

                at org.drools.common.NamedEntryPoint.retract(NamedEntryPoint.java:529)

                at org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:226)

                at eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0.defaultConsequence(Unknown Source)

                at eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0DefaultConsequenceInvoker.evaluate(Unknown Source)

                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:905)

                ... 31 more

 

 

Any help is appreciated.

 

Best regards,

Wolfgang