I have a rule that accumulate fact into sliding window. When the count get to a certain threshold the rule should be activated. After the window time is over, I expect that the rule will not fired anymore. The counter of the fact is report as 0, but still the rule is being executed. drl : package com.sample; import com.sample.WindowLength.FactTest; declare FactTest @role( event ) end rule "A500 : test" when // count devices per tag id $counter : Number( intValue >= 2 ) from accumulate ( $d : FactTest() over window:time(1m), count($d)) then System.out.println("A500: Rule is fired, count = " + $counter + " *********"); end scenario: ksession.insert(new FactTest()); ksession.fireAllRules(); ksession.insert(new FactTest()); ksession.fireAllRules(); ksession.insert(new FactTest()); ksession.fireAllRules(); SessionPseudoClock clock = ksession.getSessionClock(); clock.advanceTime(1, TimeUnit.MINUTES ); ksession.fireAllRules(); Result: A500: Rule is fired, count = 2 ********* A500: Rule is fired, count = 3 ********* A500: Rule is fired, count = 0 *********
Fixed by https://github.com/droolsjbpm/drools/commit/b7ab47bc71be07bdf3e3115695ad7cd2de116c41
Verified in 5.3.1.BRMS-P04