[jboss-jira] [JBoss JIRA] (DROOLS-694) accumulate with sliding window and other LHS condition

Matteo Mortari (JIRA) issues at jboss.org
Mon Feb 2 08:32:49 EST 2015


    [ https://issues.jboss.org/browse/DROOLS-694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13036785#comment-13036785 ] 

Matteo Mortari commented on DROOLS-694:
---------------------------------------

Ciao Mario, thank you very much for the feedback; I'm glad to see this reproducer, although not fully "reduced", was helpful to locate a bug.
ps: thanks also for the hint but in this case within the application I discovered this issue, it's very common to need (or prefer) no-loop, so I guess I just "generalized" the case where I spotted this rule failing when using phreak.

> accumulate with sliding window and other LHS condition
> ------------------------------------------------------
>
>                 Key: DROOLS-694
>                 URL: https://issues.jboss.org/browse/DROOLS-694
>             Project: Drools
>          Issue Type: Bug
>    Affects Versions: 6.1.0.Final, 6.2.0.CR4
>         Environment: fail with PHREAK, work correctly as expected with RETEOO
>            Reporter: Matteo Mortari
>            Assignee: Mario Fusco
>             Fix For: 6.2.0.Final
>
>         Attachments: 20150121.accumulate-window-counter.zip
>
>
> With reference to attached reproducer.
> Assuming the following KB, where to goal is to keep a {{Counter}} fact for the amount of {{Measurement}} events received in the last hour.
> {code:java}
> declare Measurement
> 	@role(event)
> end
> rule "Init Counter last 1h"
> agenda-group "USERSPACE"
> salience 1
> no-loop
> when
> 	not Counter( name == "Counter last 1h" )
> then
> 	Counter c = new Counter("Counter last 1h", 0);
> 	insert(c);
> 	System.out.println("RHS Init Counter last 1h " + c);
> end
> rule "Update Counter last 1h"
> agenda-group "USERSPACE"
> no-loop
> when
> 	accumulate( $token : Measurement() over window:time( 1h ) ;
>  				$val : count($token)
>  			   )
>  	$cv1 : Counter( name == "Counter last 1h", value != $val.doubleValue() )
> then
> 	int count = $val.intValue();
> 	$cv1.setValue(count);
> 	update($cv1);
> 	System.out.println("RHS Update Counter last 1h : "+$cv1);
> end
> {code}
> The following Unit test shall have the effect in the end to obtain value 2.0 in the {{Counter}} object, as I've inserted 2 {{MEasurement}} within the last hour and within two minutes
> {code:java}
> advance(clock, 1, TimeUnit.MINUTES);
> insert(session, new Measurement("voltage", "220"));
> fire(session);
> advance(clock, 1, TimeUnit.MINUTES);
> insert(session, new Measurement("voltage", "221"));
> fire(session);
> LOG.info("Final checks");
> Counter counter = (Counter) session.getObjects(counterFilter).iterator().next();         // I'm taking a shortcut as for this reproducer I know there is only 1 Counter in WM
> assertEquals("I've inserted 2 Measurement within the hour ", 2, counter.getValue(), 0);
> {code}
> However this works only with ReteOO and the test FAILS with Phreak.
> Can you kindly advise, please?
> Thank you
> MM



--
This message was sent by Atlassian JIRA
(v6.3.11#6341)


More information about the jboss-jira mailing list