OK, I suspected as much.

But how do you explain that the List that's collected at T=4 by
   List() from collect( Event() over window(2) )
contains just one element? This means that the same pattern "Event over
window(2)" produces two different sets of facts, at the same time!

(I don't think that "expiry" is a good term for an event "drifting out" of
a window, but that's not the point.)

-W

2012/2/28 Edson Tirelli <ed.tire...@gmail.com>

>
>    Yes, the misunderstanding is that an expiration is not a retract.
> Expiration does not cancel an activation. Retract does. So if you received
> an event dated T1, it match your pattern and the rule will activate. Then
> you receive event dated T3 and your rule activates again for the new event.
> Then when the clock advances to T4, the event at T1 expires and will not
> create any **new** matches for the rule, but it respects the activation
> that was **already created**. Then you fireAllRules() at time T4 and it
> will fire the 2 existing activations.
>
>    This happens because of the 2-phase execution of the engine and the
> need to unify the semantics of event processing and rules processing.
> Imagine that the engine was, because of forward chaining, executing a long
> sequence of high priority activations that prevented the rule in discussion
> of being fired at time T1...T3. Only at T4 the engine had CPU cycles to
> execute the rule for event T1. If event expiration would cancel the
> activation, the engine would completely miss the rule execution because of
> lack of processing power. This is an extreme example, but perfectly
> illustrates what happens with events that expire immediately or within a
> few milliseconds.
>
>    The application can also be designed to run in cycles, waiting as much
> as it wants to fireAllRules(), because it is guaranteed that it will not
> miss any events because of that.
>
>    On the other hand, if you were running the engine with fireUntilHalt(),
> after inserting event T1, the activation would be created and fired asap.
>
> Key point: expiration != retraction
>
>    Hope it helps,
>      Edson
>
>
> On Tue, Feb 28, 2012 at 11:05 AM, Wolfgang Laun 
> <wolfgang.l...@gmail.com>wrote:
>
>> I think there is a misunderstanding - expiry is not an issue.
>>
>> We have two events, dated (say) 1 and 3 and it is now 4 o'clock and
>> the window looks back 2 units:
>>   Event() over window:time(2)
>> This fires twice!
>>
>> -W
>>
>>
>>
>>
>> On 28/02/2012, Edson Tirelli <ed.tire...@gmail.com> wrote:
>> >    This is correct and works as designed. Please note that a direct
>> event
>> > expiration does NOT cause a rule to be cancelled. So using sliding
>> windows
>> > in isolation will be useless:
>> >
>> > X() over window:time(...)
>> >
>> >    Will activate and fire for every single X, and that is correct.
>> >
>> >    Now, if you use sliding windows in combination with other CEs, then
>> the
>> > results will be affected by the sliding window. This is perfectly clear
>> > with accumulate/collect, but also happens when you are using multiple
>> > patterns. For instance:
>> >
>> > X() over window:time( 1m )
>> > Y() over window:time( 1m )
>> >
>> >    This will create pairs of [X,Y] only for the X's and Y's that
>> happened
>> > in the last minute, as intended. An X that just happened will not match
>> an
>> > Y that happened 2 minutes ago.
>> >
>> >    Edson
>> >
>> >
>> >
>> > On Tue, Feb 28, 2012 at 7:18 AM, Wolfgang Laun
>> > <wolfgang.l...@gmail.com>wrote:
>> >
>> >> I can confirm (using 5.3.0) that after
>> >>    advance the clock to 1
>> >>    insert an event with timestamp 1,
>> >>    advance the clock to 3
>> >>    insert another one with timestamp 3
>> >>    advance the clock to 4
>> >>    fire all rules
>> >> a rule with
>> >>   Event() over window:time( 2s )
>> >> will fire twice (2 times). There is no difference between STREAM and
>> CLOUD
>> >> mode.
>> >>
>> >> Indeed, the documentation (Fusion, 2.6.1, Sliding Time Windows)
>> >> appears to tell another story:  "Sliding Time Windows allow the user
>> >> to write rules that will only match events occurring in the last X
>> >> time units." This is quite explicit.
>> >>
>> >> Also, please note that firing all rules after each insertion produces
>> >> the expected results; the rule firings at T=3 and T=4 show only one
>> >> event in the window.
>> >>
>> >> Even more surprisingly, running a rule that collects over a sliding
>> >> window works as intuitively expected:
>> >>   $l: List() from collect( Event() over window:time( 2s ) )
>> >> Here the List will never contain more than one element, even when the
>> >> simple pattern (shown above) fires twice.
>> >>
>> >> -W
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On 28/02/2012, Hassan <azbak...@gmail.com> wrote:
>> >> > Hi guys,
>> >> >
>> >> > While trying to understand how slinding window work, I realize that
>> all
>> >> > exemples are given with "accumulate" or "collect" functions , I din't
>> >> know
>> >> > why ??
>> >> >
>> >> > $a : List() from collect(Event1() over window:time(2s) from
>> entry-point
>> >> > "point")
>> >> >   // work
>> >> >
>> >> >
>> >> > Bur why
>> >> >
>> >> > $a : Event1() over window:time(2s) from entry-point "point")
>> >> >
>> >> >
>> >> > doesn't work ??!
>> >> >
>> >> > Thanks,
>> >> > Youssef AZBAKH
>> >> >
>> >> > --
>> >> > View this message in context:
>> >> >
>> http://drools.46999.n3.nabble.com/Slinding-window-tp3783772p3783772.html
>> >> > Sent from the Drools: User forum mailing list archive at Nabble.com.
>> >> > _______________________________________________
>> >> > rules-users mailing list
>> >> > rules-users@lists.jboss.org
>> >> > https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >
>> >> _______________________________________________
>> >> rules-users mailing list
>> >> rules-users@lists.jboss.org
>> >> https://lists.jboss.org/mailman/listinfo/rules-users
>> >>
>> >
>> >
>> >
>> > --
>> >   Edson Tirelli
>> >   JBoss Drools Core Development
>> >   JBoss by Red Hat @ www.jboss.com
>> >
>> _______________________________________________
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
>
> --
>   Edson Tirelli
>   JBoss Drools Core Development
>   JBoss by Red Hat @ www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to