Bug 1228313

Summary: NPE when there's a shared segment in Sequential Mode
Product: [Retired] JBoss BRMS Platform 6 Reporter: Mario Fusco <mfusco>
Component: BREAssignee: Mario Fusco <mfusco>
Status: CLOSED EOL QA Contact: Marek Winkler <mwinkler>
Severity: high Docs Contact:
Priority: unspecified    
Version: 6.2.0CC: agiertli, mbaluch
Target Milestone: DR1   
Target Release: 6.2.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 1228551 (view as bug list) Environment:
Last Closed: 2020-03-27 20:11:07 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1228551    

Description Mario Fusco 2015-06-04 15:01:04 UTC
When 2 rules share the same segment in sequential mode as in the following example:

rule R1 when
    $s : String()
    $m : Message()
    $i : Integer( this < $s.length )
then
    modify($m) { setMessage($s) };
end

rule R2 when
    $s : String()
    $m : Message()
    $i : Integer( this > $s.length )
then
end

the following NPE can be thrown:

java.lang.NullPointerException
        at org.drools.core.reteoo.BetaNode.getLeftIterator(BetaNode.java:418)
        at org.drools.core.phreak.PhreakJoinNode.doRightUpdates(PhreakJoinNode.java:287)
        at org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:48)
        at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:547)
        at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533)
        at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334)
        at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161)
        at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
        at org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:87)
        at org.drools.core.common.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:999)
        at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:954)
        at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1243)
        at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:950)
        at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:924)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:256)
        at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:364)

Comment 1 Mario Fusco 2015-06-04 15:06:39 UTC
Fixed by https://github.com/droolsjbpm/drools/commit/87ee53c88

Comment 3 Marek Winkler 2015-10-08 14:46:25 UTC
Verified in BRMS 6.2.0 ER3.