[rules-users] Statefull working memory corruption in Drools 5.3.Final - Was [Planner] "presumedScore is corrupted"
Geoffrey De Smet
ge0ffrey.spam at gmail.com
Wed Dec 7 10:56:53 EST 2011
Op 07-12-11 16:44, guyramirez schreef:
> Yes I am getting the same results with your recommended rule.
>
> Also I wrote a Drools program that does not use Planner but instead performs
> the initial insert of the ShiftAdjustment, then the 3 updates with the
> firing of the rules at each insert/update, all in sequence, with the display
> of the score after each firing (so no use of the Solution class). And I get
> exactly the same erroneous results.
Then it's a bug in Drools Expert,
please create a jira at
issues.jboss.org/browse/JBRULES
and attach code to reproduce (or even better, create a pull request at
github.com/droolsjbpm with a regression test).
Also try running with the drools-core/compiler 5.4.0-SNAPSHOT's to see
if they have it too and report it in the issue.
> I agree with you, it could be in the hashCode and/or equals methods. I will
> check them again against the examples. I have done it so many times already.
> :)
>
>> It's odd indeed that the tmp working memory is incorrect, instead of the
> real one.
> The real working memory is created everytime from scratch to check against
> the presumed score, right?
in environment mode TRACE: yes
in environment mode DEBUG: yes, but not every move, but every step (it's
too slow otherwise)
> Somehow the update of a fact (planning entity in
> this case) does not yield the same result as a retract and then insert (or
> plain insert in the case of the real working memory).
yes, there is statefull working memory corruption.
> We looked at the planning entity code earlier. Here is some code for the
> IntervalRequirement class that is being used to match against the
> ShiftAssignment:
>
> public class IntervalRequirement implements Comparable<IntervalRequirement>
> {
> private int dayAppliesTo;
> private int interval;
> private int intervalMinutes;
> private Position position;
> private int staffingRequired;
>
> @Override
> public int compareTo(IntervalRequirement other) {
> return this.interval - other.interval;
> }
>
> @Override
> public boolean equals(Object o) {
> if (this == o) {
> return true;
> } else if (o instanceof IntervalRequirement) {
> IntervalRequirement other = (IntervalRequirement) o;
> return new EqualsBuilder()
> .append(this.interval, other.interval)
> .append(this.position, other.position)
> .append(this.staffingRequired, other.staffingRequired)
> .isEquals();
> } else {
> return false;
> }
>
> @Override
> public int hashCode() {
> return new HashCodeBuilder()
> .append(getClass())
> .append(this.interval)
> .append(this.position)
>
> .append(this.staffingRequired)
> .toHashCode();
> }
> ...
> }
Looks good, but I am talking about the cloneSolution() of the class that
implements Solution, not the planning entity.
> --
> View this message in context: http://drools.46999.n3.nabble.com/Planner-5-3-Final-presumedScore-is-corrupted-when-using-update-on-the-rules-working-memory-tp3546932p3567779.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
--
With kind regards,
Geoffrey De Smet
More information about the rules-users
mailing list