[jboss-jira] [JBoss JIRA] (DROOLS-487) Accumulation returns n-times more value than actual number of summed values present by PHREAK engine when **split and join** are used in JBPM flow.
RH Bugzilla Integration (JIRA)
issues at jboss.org
Wed Jun 4 11:36:19 EDT 2014
[ https://issues.jboss.org/browse/DROOLS-487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
RH Bugzilla Integration updated DROOLS-487:
-------------------------------------------
Bugzilla Update: Perform
Bugzilla References: https://bugzilla.redhat.com/show_bug.cgi?id=1104767
> Accumulation returns n-times more value than actual number of summed values present by PHREAK engine when **split and join** are used in JBPM flow.
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-487
> URL: https://issues.jboss.org/browse/DROOLS-487
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 6.1.0.Beta3
> Reporter: Anantjot Anand
> Assignee: Mario Fusco
> Fix For: 6.1.0.CR1
>
> Attachments: TestFourLevelDeepAccumulateWithSplit.java, TestTwoLevelDeepAccumulateWithSplit.java
>
>
> Accumulation returns n-times more value than actual number of summed values present. The factor n is dependent upon the number of times the parent object
> updates are called before rule that does the summation is invoked in the flow.
> How to reproduce?
> A simple test project is attached to this report. This project has following DataModel.
> InvokeServiceRequest=>LoanRequest==>TransactionDetail==>PolicySet and WorkingObjectTransactionDetail
>
> <?xml version="1.0" encoding="UTF-8"?>
> <process xmlns="http://drools.org/drools-5.0/process"
> xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
> xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
> type="RuleFlow" name="RF6365_200" id="278865" package-name="com.test.sumofall.GeneratedRules" version="200" >
> <header>
> <imports>
> <import name="com.test.sumofall.InvokeServicesRequest" />
> <import name="com.test.sumofall.TransactionDetail" />
> <import name="com.test.sumofall.LoanRequest" />
> <import name="com.test.sumofall.WorkingObjectsTransactionDetail" />
> </imports>
> </header>
> <nodes>
> <ruleSet id="1" name="1" x="307" y="31" width="80" height="48" ruleFlowGroup="group_1" />
> <start id="70004" name="Start" x="61" y="33" width="48" height="48" />
> <ruleSet id="2" name="2" x="463" y="27" width="80" height="48" ruleFlowGroup="group_2" />
> <ruleSet id="3" name="3" x="315" y="230" width="80" height="48" ruleFlowGroup="group_3" />
> <join id="90004" name="EndJoin90004" x="532" y="80" width="49" height="49" type="2" />
> <split id="11" name="11" x="337" y="101" width="49" height="49" type="2" >
> <constraints>
> <constraint toNodeId="90004" toType="DROOLS_DEFAULT" name="ServiceFlowCode Equal to Post Rules Processing" priority="1" type="rule" dialect="mvel" >$invokeServices :
> InvokeServicesRequest( )
> $lendingTransaction :
> LoanRequest( parentId == $invokeServices.myId )
> $transactionDetail :
> TransactionDetail( parentId == $lendingTransaction.myId )
> $workingTransactionDetail :
> WorkingObjectsTransactionDetail( parentId == $transactionDetail.myId
> , serviceFlowCode == "Post Rules Processing" )</constraint>
> <constraint toNodeId="3" toType="DROOLS_DEFAULT" name="ServiceFlowCode Not Equal to Post Rules Processing" priority="1" type="rule" dialect="mvel" >$invokeServices :
> InvokeServicesRequest( )
> $lendingTransaction :
> LoanRequest( parentId == $invokeServices.myId )
> $transactionDetail :
> TransactionDetail( parentId == $lendingTransaction.myId )
> $workingTransactionDetail :
> WorkingObjectsTransactionDetail( parentId == $transactionDetail.myId
> , serviceFlowCode != "Post Rules Processing" )</constraint>
> </constraints>
> </split>
> <end id="80004" name="End" x="640" y="30" width="48" height="48" />
> </nodes>
> <connections>
> <connection from="70004" to="1" />
> <connection from="1" to="2" />
> <connection from="2" to="11" />
> <!--If WE change order of the following two lines to this it works for this example but similar change doesn't work when multiple split and joins are present in ruleflow
> <connection from="11" to="3" />
> <connection from="11" to="90004" />
> -->
> <connection from="11" to="90004" />
> <connection from="11" to="3" />
> <connection from="3" to="90004" />
> <connection from="90004" to="80004" />
> </connections>
> </process>
> ****ROOT CAUSE****
> I believe the problem is caused by the childLeftTuple.getStagedType() being equal to LeftTuple.INSERT instead of LeftTuple.NONE or LeftTuple.UPDATE.
> Thread [main] (Suspended)
> PhreakJoinNode.updateChildLeftTuple(LeftTuple, LeftTupleSets, LeftTupleSets) line: 443
> PhreakJoinNode.doRightUpdatesProcessChildren(LeftTuple, LeftTuple, RightTuple, LeftTupleSets, ContextEntry[], BetaConstraints, LeftTupleSink, FastIterator, LeftTupleSets) line: 363
> PhreakJoinNode.doRightUpdates(JoinNode, LeftTupleSink, BetaMemory, InternalWorkingMemory, RightTupleSets, LeftTupleSets, LeftTupleSets) line: 307
> PhreakJoinNode.doNode(JoinNode, LeftTupleSink, BetaMemory, InternalWorkingMemory, LeftTupleSets, LeftTupleSets, LeftTupleSets) line: 48
> RuleNetworkEvaluator.switchOnDoBetaNode(NetworkNode, LeftTupleSets, InternalWorkingMemory, LeftTupleSets, LeftTupleSets, LeftTupleSinkNode, BetaMemory, AccumulateNode$AccumulateMemory) line: 547
> RuleNetworkEvaluator.evalBetaNode(LeftInputAdapterNode, PathMemory, NetworkNode, Memory, SegmentMemory[], int, LeftTupleSets, InternalWorkingMemory, LinkedList<StackEntry>, LinkedList<StackEntry>, Set<String>, boolean, RuleExecutor, LeftTupleSets, LeftTupleSets, LeftTupleSinkNode) line: 533
> RuleNetworkEvaluator.innerEval(LeftInputAdapterNode, PathMemory, NetworkNode, long, Memory, SegmentMemory[], int, LeftTupleSets, InternalWorkingMemory, LinkedList<StackEntry>, LinkedList<StackEntry>, Set<String>, boolean, RuleExecutor) line: 334
> RuleNetworkEvaluator.outerEval(LeftInputAdapterNode, PathMemory, NetworkNode, long, Memory, SegmentMemory[], int, LeftTupleSets, InternalWorkingMemory, LinkedList<StackEntry>, LinkedList<StackEntry>, Set<String>, boolean, RuleExecutor) line: 161
> RuleNetworkEvaluator.evaluateNetwork(PathMemory, LinkedList<StackEntry>, RuleExecutor, InternalWorkingMemory) line: 116
> RuleExecutor.evaluateNetwork(InternalWorkingMemory) line: 54
> DefaultAgenda.evaluateEagerList() line: 958
> DefaultAgenda.fireNextItem(AgendaFilter, int, int) line: 913
> DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1198
> StatefulKnowledgeSessionImpl.fireAllRules(AgendaFilter, int) line: 1202
> StatefulKnowledgeSessionImpl.fireAllRules() line: 1175
> SumOfAllTest.main(String[]) line: 133
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
More information about the jboss-jira
mailing list