[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