[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