[jboss-jira] [JBoss JIRA] (JBRULES-3320) Stateful memory corruption for repetitive updates on the same facts
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Mon Apr 30 12:27:18 EDT 2012
[ https://issues.jboss.org/browse/JBRULES-3320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12688891#comment-12688891 ]
Edson Tirelli edited comment on JBRULES-3320 at 4/30/12 12:26 PM:
------------------------------------------------------------------
My understanding is that this test is wrong. The behavior of the engine is correct. I will comment inline on the results you are seeing using >>>:
{panel}
Update #1: ShiftAssignment set from 100 to 101
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
COMMENTS: correct
Update #2:ShiftAssignment set from 100 to 103
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENTS: intervalRequirementNotCovered rule should have fired for interval 103
*>>> The engine is not firing the rule for interval 103 because if was already fired in the previous scenario and the IntervalRequirement fact did not change.*
Update #3:ShiftAssignment set from 100 to 102
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENT: intervalRequirementNotCovered rule should have fired for interval 103
*>>> The engine is not firing the rule for interval 103 because if was already fired in the first scenario and the IntervalRequirement fact did not change.*
Update #4:ShiftAssignment set from 100 to 104
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 103, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENT: correct
{panel}
The log on the last scenario for me correctly shows:
{panel}
Update #5:ShiftAssignment set from 100 to 101
ShiftAssignment set from 100 to 101
intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
{panel}
I am testing this against 5.4 and 5.5 HEAD as of today.
I am closing this ticket as not a bug. Feel free to reopen the ticket if you still see a problem.
was (Author: tirelli):
My understanding is that this test is wrong. The behavior of the engine is correct. I will comment inline on the results you are seeing using >>>:
Update #1: ShiftAssignment set from 100 to 101
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
COMMENTS: correct
Update #2:ShiftAssignment set from 100 to 103
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENTS: intervalRequirementNotCovered rule should have fired for interval 103
>>> The engine is not firing the rule for interval 103 because if was already fired in the previous scenario and the IntervalRequirement fact did not change.
Update #3:ShiftAssignment set from 100 to 102
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENT: intervalRequirementNotCovered rule should have fired for interval 103
>>> The engine is not firing the rule for interval 103 because if was already fired in the first scenario and the IntervalRequirement fact did not change.
Update #4:ShiftAssignment set from 100 to 104
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 103, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
COMMENT: correct
The log on the last scenario for me correctly shows:
Update #5:ShiftAssignment set from 100 to 101
ShiftAssignment set from 100 to 101
intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
I am testing this against 5.4 and 5.5 HEAD as of today.
I am closing this ticket as not a bug. Feel free to reopen the ticket if you still see a problem.
> Stateful memory corruption for repetitive updates on the same facts
> -------------------------------------------------------------------
>
> Key: JBRULES-3320
> URL: https://issues.jboss.org/browse/JBRULES-3320
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-core (expert)
> Affects Versions: 5.3.0.Final, 5.4.0.Beta1
> Environment: Windows 7 64, Java HotSpot(TM) 64-Bit Server 1.6.0_25
> Reporter: guy ramirez
> Assignee: Edson Tirelli
> Fix For: 5.4.0.Final, 5.5.0.Beta1
>
>
> Multiple updates to the same fact does not yield the expected results (similar to JBRULES-2809 issue)
> The provided UT (see 'steps to reproduce' section) makes use of 2 fact instances: one IntervalRequirement (never updated) and one ShiftAssignment.
> The same ShiftAssignment will be updated multiple times to cover one or more IntervalRequirement(s).
> Here is the output of the test without executing the assertions. For each update I have added comments explaining what the expected results should be:
> Update #1: ShiftAssignment set from 100 to 101
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
> intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
> intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
> COMMENTS: correct
> Update #2:ShiftAssignment set from 100 to 103
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> COMMENTS: intervalRequirementNotCovered rule should have fired for interval 103
> Update #3:ShiftAssignment set from 100 to 102
> intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> COMMENT: intervalRequirementNotCovered rule should have fired for interval 103
> Update #4:ShiftAssignment set from 100 to 104
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 102, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 103, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 101, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> intervalRequirementPartiallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 1 ShiftAssignment(s)
> COMMENT: correct
> Update #5:ShiftAssignment set from 100 to 101
> intervalRequirementTotallyCovered -> IntervalRequirement: interval: 100, staffingRequired: 2 covered by 2 ShiftAssignment(s)
> intervalRequirementNotCovered -> IntervalRequirement: interval: 103, staffingRequired: 2
> intervalRequirementNotCovered -> IntervalRequirement: interval: 102, staffingRequired: 2
> intervalRequirementNotCovered -> IntervalRequirement: interval: 101, staffingRequired: 2
> COMMENT: results should have been identical of that of update #1: intervalRequirementPartiallyCovered should have fired for interval 100, instead intervalRequirementTotallyCovered rule fired.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list