Hi, the elements are currently not being removed from the buffers. That's a bug that we could fix while adding the new Evictor interface.
Cheers, Aljoscha On Mon, 25 Jul 2016 at 13:00 Radu Tudoran <radu.tudo...@huawei.com> wrote: > Hi Aljoscha, > > Can you point us to the way it is handled now. Is there anything else for > the removing of elements other than the skip in EvictingWindowOperator. Is > there something as it was before version 1.x where you had an explicit > remove from window buffers? > > Dr. Radu Tudoran > Research Engineer - Big Data Expert > IT R&D Division > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > European Research Center > Riesstrasse 25, 80992 München > > E-mail: radu.tudo...@huawei.com > Mobile: +49 15209084330 > Telephone: +49 891588344173 > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > Hansaallee 205, 40549 Düsseldorf, Germany, www.huawei.com > Registered Office: Düsseldorf, Register Court Düsseldorf, HRB 56063, > Managing Director: Bo PENG, Wanzhou MENG, Lifang CHEN > Sitz der Gesellschaft: Düsseldorf, Amtsgericht Düsseldorf, HRB 56063, > Geschäftsführer: Bo PENG, Wanzhou MENG, Lifang CHEN > This e-mail and its attachments contain confidential information from > HUAWEI, which is intended only for the person or entity whose address is > listed above. Any use of the information contained herein in any way > (including, but not limited to, total or partial disclosure, reproduction, > or dissemination) by persons other than the intended recipient(s) is > prohibited. If you receive this e-mail in error, please notify the sender > by phone or email immediately and delete it! > > > -----Original Message----- > From: Aljoscha Krettek [mailto:aljos...@apache.org] > Sent: Monday, July 25, 2016 11:45 AM > To: dev@flink.apache.org > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink > > Hi, > I think there is not yet a clear specification for how the actual removal > of elements from the buffer will work. I think naively one can do: > > Iterable<E> currentElements = state.get() > evictor.evict(currentElements); // this will remove some stuff from there, > or mark for removal > > state.clear() > // the Iterable does not loop over the removed/marked elements > for (E element : currentElements) { > state.add(element) > } > > This is very costly but the only way I see of doing this right now with > every state backend. > > Cheers, > Aljoscha > > On Mon, 25 Jul 2016 at 09:46 Radu Tudoran <radu.tudo...@huawei.com> wrote: > > > Hi, > > > > Thanks for the clarification. Can someone point to where the events are > > removed from buffers - I am trying to understand the new logic of > handling > > the eviction in this new API. Thanks > > > > > > > > -----Original Message----- > > From: Vishnu Viswanath [mailto:vishnu.viswanat...@gmail.com] > > Sent: Saturday, July 23, 2016 3:04 AM > > To: Dev > > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink > > > > Hi Radu, > > > > - Yes we can remove elements from the iterator. > > - Right now the EvictingWindowOperator just skips the elements from the > > Iterable before passing to the window function(Yes this has to be changed > > in the new API) > > - Regarding how the last question on how elements are being removed from > > the window buffer. I am not sure how it is working right now, but when > > trying out the new API that I am working on, I did find a bug where the > > evicted elements are not actually removed from the State. I have added a > > fix for that. (You can see a mail regarding that in this mail chain) > > > > Thanks, > > Vishnu > > > > On Fri, Jul 22, 2016 at 1:03 PM, Radu Tudoran <radu.tudo...@huawei.com> > > wrote: > > > > > Hi, > > > > > > Overall I believe that the interfaces and the proposal is good. I have > > the > > > following question though: can you delete via the iterator > > > (Iterable<StreamRecord<T>> elements) the elements? > > > > > > I tried to look over the code where the eviction happens (I did not do > > > these since version 0.10...looks very different now :) )...the only > > > reference I found was the EvictingWindowOperator which at the > > > fireOrContinue has a "skip" based on the number of elements returned > from > > > the evictor...and these are not put in the collection to be given to > the > > > user function to be applied. I think these will also need to be changed > > to > > > adjust to the "any operator from anywhere in the window buffer". > > > Also - as we are on this topic - can someone explain how these elements > > > that are not consider anymore for the user function are actually > deleted > > > from the window buffer?..i did not manage to find this.. some reference > > to > > > classes/code where this happens would be useful > > > > > > > > > Dr. Radu Tudoran > > > Research Engineer - Big Data Expert > > > IT R&D Division > > > > > > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > European Research Center > > > Riesstrasse 25, 80992 München > > > > > > E-mail: radu.tudo...@huawei.com > > > Mobile: +49 15209084330 > > > Telephone: +49 891588344173 > > > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > Hansaallee 205, 40549 Düsseldorf, Germany, www.huawei.com > > > Registered Office: Düsseldorf, Register Court Düsseldorf, HRB 56063, > > > Managing Director: Bo PENG, Wanzhou MENG, Lifang CHEN > > > Sitz der Gesellschaft: Düsseldorf, Amtsgericht Düsseldorf, HRB 56063, > > > Geschäftsführer: Bo PENG, Wanzhou MENG, Lifang CHEN > > > This e-mail and its attachments contain confidential information from > > > HUAWEI, which is intended only for the person or entity whose address > is > > > listed above. Any use of the information contained herein in any way > > > (including, but not limited to, total or partial disclosure, > > reproduction, > > > or dissemination) by persons other than the intended recipient(s) is > > > prohibited. If you receive this e-mail in error, please notify the > sender > > > by phone or email immediately and delete it! > > > > > > > > > -----Original Message----- > > > From: Vishnu Viswanath [mailto:vishnu.viswanat...@gmail.com] > > > Sent: Friday, July 22, 2016 12:43 PM > > > To: Dev > > > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink > > > > > > Hi, > > > > > > I have created a FLIP page for this enhancement > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-4+%3A+Enhance+Window+Evictor > > > > > > Thanks, > > > Vishnu > > > > > > On Thu, Jul 21, 2016 at 6:53 AM, Vishnu Viswanath < > > > vishnu.viswanat...@gmail.com> wrote: > > > > > > > Thanks Aljoscha. > > > > > > > > On Thu, Jul 21, 2016 at 4:46 AM, Aljoscha Krettek < > aljos...@apache.org > > > > > > > wrote: > > > > > > > >> Hi, > > > >> this, in fact, seems to be a bug. There should be something like > > > >> windowState.clear(); > > > >> for (IN element: projectedContents) { > > > >> windowState.add(element); > > > >> } > > > >> > > > >> after passing the elements to the window function. > > > >> > > > >> This is very inefficient but the only way I see of doing it right > now. > > > >> > > > >> Cheers, > > > >> Aljoscha > > > >> > > > >> > > > >> On Thu, 21 Jul 2016 at 01:32 Vishnu Viswanath < > > > >> vishnu.viswanat...@gmail.com> > > > >> wrote: > > > >> > > > >> > Hi, > > > >> > > > > >> > When we use RocksDB as state backend, how does the backend state > get > > > >> > updated after some elements are evicted from the window? > > > >> > I don't see any update call being made to remove the element from > > the > > > >> state > > > >> > stored in RocksDB. > > > >> > > > > >> > It looks like the RocksDBListState is only having get() and add() > > > >> methods > > > >> > since it is an AppendingState, but that causes the evicted > elements > > to > > > >> come > > > >> > back when the trigger is fired next time. (It works fine when I > use > > > >> > MemoryStateBackend) > > > >> > > > > >> > Is this expected behavior or am I missing something. > > > >> > > > > >> > Thanks, > > > >> > Vishnu > > > >> > > > > >> > On Mon, Jul 18, 2016 at 7:15 AM, Vishnu Viswanath < > > > >> > vishnu.viswanat...@gmail.com> wrote: > > > >> > > > > >> > > Hi Aljoscha, > > > >> > > > > > >> > > Thanks! Yes, I have the create page option now in wiki. > > > >> > > > > > >> > > Regards, > > > >> > > Vishnu Viswanath, > > > >> > > > > > >> > > On Mon, Jul 18, 2016 at 6:34 AM, Aljoscha Krettek < > > > >> aljos...@apache.org> > > > >> > > wrote: > > > >> > > > > > >> > >> @Radu, addition of more window types and sorting should be part > > of > > > >> > another > > > >> > >> design proposal. This is interesting stuff but I think we > should > > > keep > > > >> > >> issues separated because things can get complicated very > quickly. > > > >> > >> > > > >> > >> On Mon, 18 Jul 2016 at 12:32 Aljoscha Krettek < > > aljos...@apache.org > > > > > > > >> > >> wrote: > > > >> > >> > > > >> > >> > Hi, > > > >> > >> > about TimeEvictor, yes, I think there should be specific > > evictors > > > >> for > > > >> > >> > processing time and event time. Also, the current time should > > be > > > >> > >> > retrievable from the EvictorContext. > > > >> > >> > > > > >> > >> > For the wiki you will need permissions. This was recently > > changed > > > >> > >> because > > > >> > >> > there was too much spam. I gave you permission to add pages. > > Can > > > >> you > > > >> > >> please > > > >> > >> > try and check if it works? > > > >> > >> > > > > >> > >> > Cheers, > > > >> > >> > Aljoscha > > > >> > >> > > > > >> > >> > On Fri, 15 Jul 2016 at 13:28 Vishnu Viswanath < > > > >> > >> > vishnu.viswanat...@gmail.com> wrote: > > > >> > >> > > > > >> > >> >> Hi all, > > > >> > >> >> > > > >> > >> >> How do we create a FLIP page, is there any permission setup > > > >> > required? I > > > >> > >> >> don't see any "Create" page(after logging in) option in the > > > >> header as > > > >> > >> >> mentioned in > > > >> > >> >> > > > >> > >> >> > > > >> > >> > > > >> > > > > >> > > > > > > https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals > > > >> > >> >> > > > >> > >> >> > > > >> > >> >> Thanks, > > > >> > >> >> Vishnu > > > >> > >> >> > > > >> > >> >> On Wed, Jul 13, 2016 at 10:22 PM, Vishnu Viswanath < > > > >> > >> >> vishnu.viswanat...@gmail.com> wrote: > > > >> > >> >> > > > >> > >> >> > Hi Aljoscha, > > > >> > >> >> > > > > >> > >> >> > I agree, the user will know exactly that they are creating > > an > > > >> > >> EventTime > > > >> > >> >> > based evictor or ProcessingTime based evictor looking at > the > > > >> code. > > > >> > >> >> > So do you think it will be ok to have multiple versions of > > > >> > >> TimeEvictor > > > >> > >> >> > (one for event time and one for processing time) and also > a > > > >> > >> DeltaEvcitor > > > >> > >> >> > (again 2 versions- for event time and processing time) ? > > > >> > >> >> > > > > >> > >> >> > Please note that the existing behavior of > > > >> TimeEvictor/DeltaEvictor > > > >> > >> does > > > >> > >> >> > not consider if it is EventTime or ProcessingTime > > > >> > >> >> > e.g., in TimeEvictor the current time is considered as the > > > >> > timestamp > > > >> > >> of > > > >> > >> >> > the last element in the window > > > >> > >> >> > > > > >> > >> >> > *long currentTime = > > > Iterables.getLast(elements).getTimestamp();* > > > >> > >> >> > > > > >> > >> >> > not the highest timestamp of all elements > > > >> > >> >> > what I am trying to achieve is something like: > > > >> > >> >> > > > > >> > >> >> > *long currentTime;* > > > >> > >> >> > * if (ctx.isEventTime()) {* > > > >> > >> >> > * currentTime = getMaxTimestamp(elements);* > > > >> > >> >> > * } else {* > > > >> > >> >> > * currentTime = > Iterables.getLast(elements).getTimestamp();* > > > >> > >> >> > * }* > > > >> > >> >> > > > > >> > >> >> > Similarly, in DeltaEvictor the *`lastElement`* is > > > >> > >> >> > *`Iterables.getLast(elements);`* and I am thinking we > should > > > >> > consider > > > >> > >> >> the > > > >> > >> >> > element with max timestamp as the last element instead of > > just > > > >> > >> getting > > > >> > >> >> the > > > >> > >> >> > last inserted element as *`lastElement`* > > > >> > >> >> > > > > >> > >> >> > Do you think it is the right thing to do or leave the > > behavior > > > >> > >> Evictors > > > >> > >> >> as > > > >> > >> >> > is, w.r.t to choosing the last element? > > > >> > >> >> > > > > >> > >> >> > Thanks, > > > >> > >> >> > Vishnu > > > >> > >> >> > > > > >> > >> >> > On Wed, Jul 13, 2016 at 11:07 AM, Aljoscha Krettek < > > > >> > >> aljos...@apache.org > > > >> > >> >> > > > > >> > >> >> > wrote: > > > >> > >> >> > > > > >> > >> >> >> I still think it should be explicit in the class. For > > > example, > > > >> if > > > >> > >> you > > > >> > >> >> have > > > >> > >> >> >> this code: > > > >> > >> >> >> > > > >> > >> >> >> input > > > >> > >> >> >> .keyBy() > > > >> > >> >> >> .window() > > > >> > >> >> >> .trigger(EventTimeTrigger.create()) > > > >> > >> >> >> .evictor(TimeTrigger.create()) > > > >> > >> >> >> > > > >> > >> >> >> the time behavior of the trigger is explicitly specified > > > while > > > >> the > > > >> > >> >> evictor > > > >> > >> >> >> would dynamically adapt based on internal workings that > the > > > >> user > > > >> > >> might > > > >> > >> >> not > > > >> > >> >> >> be aware of. Having the behavior explicit at the call > site > > is > > > >> very > > > >> > >> >> >> important, in my opinion. > > > >> > >> >> >> > > > >> > >> >> >> On Wed, 13 Jul 2016 at 16:28 Vishnu Viswanath < > > > >> > >> >> >> vishnu.viswanat...@gmail.com> > > > >> > >> >> >> wrote: > > > >> > >> >> >> > > > >> > >> >> >> > Hi, > > > >> > >> >> >> > > > > >> > >> >> >> > I was hoping to use the isEventTime method in the > > > >> WindowAssigner > > > >> > >> to > > > >> > >> >> set > > > >> > >> >> >> > that information in the EvictorContext. > > > >> > >> >> >> > What do you think?. > > > >> > >> >> >> > > > > >> > >> >> >> > Thanks and Regards, > > > >> > >> >> >> > Vishnu Viswanath, > > > >> > >> >> >> > > > > >> > >> >> >> > On Wed, Jul 13, 2016 at 10:09 AM, Aljoscha Krettek < > > > >> > >> >> aljos...@apache.org > > > >> > >> >> >> > > > > >> > >> >> >> > wrote: > > > >> > >> >> >> > > > > >> > >> >> >> > > Hi, > > > >> > >> >> >> > > I think the way to go here is to add both an > > > >> EventTimeEvictor > > > >> > >> and a > > > >> > >> >> >> > > ProcessingTimeEvictor. The problem is that > > "isEventTime" > > > >> > cannot > > > >> > >> >> >> really be > > > >> > >> >> >> > > determined. That's also the reason why there is an > > > >> > >> EventTimeTrigger > > > >> > >> >> >> and a > > > >> > >> >> >> > > ProcessingTimeTrigger. It was just an oversight that > > the > > > >> > >> >> TimeEvictor > > > >> > >> >> >> does > > > >> > >> >> >> > > not also have these two versions. > > > >> > >> >> >> > > > > > >> > >> >> >> > > About EvictingWindowOperator, I think you can make > the > > > two > > > >> > >> methods > > > >> > >> >> >> > > non-final in WindowOperator, yes. > > > >> > >> >> >> > > > > > >> > >> >> >> > > Cheers, > > > >> > >> >> >> > > Aljoscha > > > >> > >> >> >> > > > > > >> > >> >> >> > > On Wed, 13 Jul 2016 at 14:32 Vishnu Viswanath < > > > >> > >> >> >> > > vishnu.viswanat...@gmail.com> > > > >> > >> >> >> > > wrote: > > > >> > >> >> >> > > > > > >> > >> >> >> > > > Hi Aljoscha, > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > I am thinking of adding a method boolean > > isEventTime(); > > > >> in > > > >> > the > > > >> > >> >> >> > > > EvictorContext apart from > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > long getCurrentProcessingTime(); > > > >> > >> >> >> > > > MetricGroup getMetricGroup(); > > > >> > >> >> >> > > > long getCurrentWatermark(); > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > This method can be used to make the Evictor not > > iterate > > > >> > >> through > > > >> > >> >> all > > > >> > >> >> >> the > > > >> > >> >> >> > > > elements in TimeEvictor. There will be a few > changes > > in > > > >> the > > > >> > >> >> existing > > > >> > >> >> >> > > > behavior of TimeEvictor and DeltaEvictor (I have > > > >> mentioned > > > >> > >> this > > > >> > >> >> in > > > >> > >> >> >> the > > > >> > >> >> >> > > > design doc) > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > Also, is there any specific reason why the open and > > > close > > > >> > >> method > > > >> > >> >> in > > > >> > >> >> >> > > > WindowEvictor is made final? Since the > EvictorContext > > > >> will > > > >> > be > > > >> > >> in > > > >> > >> >> the > > > >> > >> >> >> > > > EvictingWindowOperator, I need to override the open > > and > > > >> > close > > > >> > >> in > > > >> > >> >> >> > > > EvitingWindowOperator to make the reference of > > > >> > EvictorContext > > > >> > >> >> null. > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > Thanks and Regards, > > > >> > >> >> >> > > > Vishnu Viswanath, > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > On Fri, Jul 8, 2016 at 7:40 PM, Vishnu Viswanath < > > > >> > >> >> >> > > > vishnu.viswanat...@gmail.com> wrote: > > > >> > >> >> >> > > > > > > >> > >> >> >> > > > My thought process when asking if we can use state > > > >> backend > > > >> > in > > > >> > >> >> window > > > >> > >> >> >> > > > > function was : can we add the elements to be > > evicted > > > >> into > > > >> > >> some > > > >> > >> >> >> state > > > >> > >> >> >> > > and > > > >> > >> >> >> > > > > allow the evictAfter to read it from some context > > and > > > >> > >> remove it > > > >> > >> >> >> from > > > >> > >> >> >> > > the > > > >> > >> >> >> > > > > window? > > > >> > >> >> >> > > > > > > > >> > >> >> >> > > > > > > > >> > >> >> >> > > > > On Fri, Jul 8, 2016 at 7:30 PM, Vishnu Viswanath > < > > > >> > >> >> >> > > > > vishnu.viswanat...@gmail.com> wrote: > > > >> > >> >> >> > > > > > > > >> > >> >> >> > > > >> Hi Aljoscha, > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> Thanks for the explanation, and sorry for late > > reply > > > >> was > > > >> > >> busy > > > >> > >> >> >> with > > > >> > >> >> >> > > work. > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> I did think about this scenario, in fact in my > > > >> previous > > > >> > >> mail I > > > >> > >> >> >> > thought > > > >> > >> >> >> > > > of > > > >> > >> >> >> > > > >> posting this question, then I understood that > this > > > >> > problem > > > >> > >> >> will > > > >> > >> >> >> be > > > >> > >> >> >> > > > >> there which ever method we choose(Trigger > looking > > > for > > > >> > >> pattern > > > >> > >> >> or > > > >> > >> >> >> > > Window > > > >> > >> >> >> > > > >> looking for pattern). > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> I do have a pretty good watermark but my concern > > is > > > >> that > > > >> > it > > > >> > >> >> >> changes > > > >> > >> >> >> > > > based > > > >> > >> >> >> > > > >> on the key of these messages(I don't know if it > is > > > >> > >> possible, > > > >> > >> >> >> haven't > > > >> > >> >> >> > > > >> started coding that yet. May be you could tell > > me). > > > >> Even > > > >> > if > > > >> > >> >> it is > > > >> > >> >> >> > yes > > > >> > >> >> >> > > > some > > > >> > >> >> >> > > > >> of these watermarks will be long(in days), > which I > > > >> don't > > > >> > >> want > > > >> > >> >> the > > > >> > >> >> >> > > > trigger > > > >> > >> >> >> > > > >> to wait that long. > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> It looks like it is not easy to have an > evictAfter > > > >> based > > > >> > on > > > >> > >> >> >> window > > > >> > >> >> >> > > > >> function(without introducing coupling), but can > > the > > > >> > current > > > >> > >> >> >> window > > > >> > >> >> >> > > apply > > > >> > >> >> >> > > > >> function be modified to allow it to change the > > > >> elements > > > >> > in > > > >> > >> it > > > >> > >> >> - > > > >> > >> >> >> may > > > >> > >> >> >> > be > > > >> > >> >> >> > > > >> using some state backend(I don't know how > excatly > > > the > > > >> > >> >> internals > > > >> > >> >> >> of > > > >> > >> >> >> > > these > > > >> > >> >> >> > > > >> work, so this might be a wrong question) > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> Thanks and Regards, > > > >> > >> >> >> > > > >> Vishnu Viswanath, > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >> On Fri, Jul 8, 2016 at 10:20 AM, Aljoscha > Krettek > > < > > > >> > >> >> >> > > aljos...@apache.org> > > > >> > >> >> >> > > > >> wrote: > > > >> > >> >> >> > > > >> > > > >> > >> >> >> > > > >>> Hi Vishnu, > > > >> > >> >> >> > > > >>> how long would these patterns be? The Trigger > > would > > > >> not > > > >> > >> have > > > >> > >> >> to > > > >> > >> >> >> > sort > > > >> > >> >> >> > > > the > > > >> > >> >> >> > > > >>> elements for every new element but just insert > > the > > > >> new > > > >> > >> >> element > > > >> > >> >> >> into > > > >> > >> >> >> > > an > > > >> > >> >> >> > > > >>> internal data structure. Only when it sees that > > the > > > >> > >> >> watermark is > > > >> > >> >> >> > > past a > > > >> > >> >> >> > > > >>> certain point would it check whether the > pattern > > > >> matches > > > >> > >> and > > > >> > >> >> >> > actually > > > >> > >> >> >> > > > >>> Trigger. > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> A general note regarding order and event time: > I > > > >> think > > > >> > >> >> relying > > > >> > >> >> >> on > > > >> > >> >> >> > > this > > > >> > >> >> >> > > > >>> for > > > >> > >> >> >> > > > >>> computation is very tricky unless the watermark > > is > > > >> 100 % > > > >> > >> >> >> correct or > > > >> > >> >> >> > > you > > > >> > >> >> >> > > > >>> completely discard elements that arrive after > the > > > >> > >> watermark, > > > >> > >> >> >> i.e. > > > >> > >> >> >> > > > >>> elements > > > >> > >> >> >> > > > >>> that would break the promise of the watermark > > that > > > no > > > >> > >> >> elements > > > >> > >> >> >> with > > > >> > >> >> >> > > an > > > >> > >> >> >> > > > >>> earlier timestamp will ever arrive. The reason > > for > > > >> this > > > >> > is > > > >> > >> >> that > > > >> > >> >> >> > there > > > >> > >> >> >> > > > >>> could > > > >> > >> >> >> > > > >>> always enter new elements that end up between > > > already > > > >> > seen > > > >> > >> >> >> > elements. > > > >> > >> >> >> > > > For > > > >> > >> >> >> > > > >>> example, let's say we have this sequence of > > > elements > > > >> > when > > > >> > >> the > > > >> > >> >> >> > trigger > > > >> > >> >> >> > > > >>> fires: > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> a-b-a > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> This is the sequence that you are looking for > and > > > you > > > >> > emit > > > >> > >> >> some > > > >> > >> >> >> > > result > > > >> > >> >> >> > > > >>> from > > > >> > >> >> >> > > > >>> the WindowFunction. Now, new elements arrive > that > > > >> fall > > > >> > in > > > >> > >> >> >> between > > > >> > >> >> >> > the > > > >> > >> >> >> > > > >>> elements we already have: > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> a-d-e-b-f-g-a > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> This is an updated, sorted view of the actual > > > >> event-time > > > >> > >> >> stream > > > >> > >> >> >> and > > > >> > >> >> >> > > we > > > >> > >> >> >> > > > >>> didn't realize that the stream actually looks > > like > > > >> this > > > >> > >> >> before. > > > >> > >> >> >> > Does > > > >> > >> >> >> > > > this > > > >> > >> >> >> > > > >>> still match the original pattern or should we > now > > > >> > consider > > > >> > >> >> this > > > >> > >> >> >> as > > > >> > >> >> >> > > > >>> non-matching? If no, then the earlier > successful > > > >> match > > > >> > for > > > >> > >> >> a-b-a > > > >> > >> >> >> > was > > > >> > >> >> >> > > > >>> wrong > > > >> > >> >> >> > > > >>> and we should never have processed it but we > > didn't > > > >> know > > > >> > >> at > > > >> > >> >> the > > > >> > >> >> >> > time. > > > >> > >> >> >> > > > If > > > >> > >> >> >> > > > >>> yes, then pattern matching like this can be > done > > in > > > >> the > > > >> > >> >> Trigger > > > >> > >> >> >> by > > > >> > >> >> >> > > > having > > > >> > >> >> >> > > > >>> something like pattern slots: You don't have to > > > store > > > >> > all > > > >> > >> >> >> elements > > > >> > >> >> >> > in > > > >> > >> >> >> > > > the > > > >> > >> >> >> > > > >>> Trigger, you just need to store possible > > candidates > > > >> that > > > >> > >> >> could > > > >> > >> >> >> > match > > > >> > >> >> >> > > > the > > > >> > >> >> >> > > > >>> pattern and ignore the other (in-between) > > elements. > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> Cheers, > > > >> > >> >> >> > > > >>> Aljoscha > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> On Fri, 8 Jul 2016 at 14:10 Vishnu Viswanath < > > > >> > >> >> >> > > > >>> vishnu.viswanat...@gmail.com> > > > >> > >> >> >> > > > >>> wrote: > > > >> > >> >> >> > > > >>> > > > >> > >> >> >> > > > >>> > Hi Aljoscha, > > > >> > >> >> >> > > > >>> > > > > >> > >> >> >> > > > >>> > That is a good idea, trying to tie it back to > > the > > > >> use > > > >> > >> case, > > > >> > >> >> >> > > > >>> > e.g., suppose trigger is looking for a > pattern, > > > >> a-b-a > > > >> > >> and > > > >> > >> >> >> when it > > > >> > >> >> >> > > > sees > > > >> > >> >> >> > > > >>> such > > > >> > >> >> >> > > > >>> > a pattern, it will trigger the window and it > > > knows > > > >> > that > > > >> > >> now > > > >> > >> >> >> the > > > >> > >> >> >> > > > >>> Evictor is > > > >> > >> >> >> > > > >>> > going to evict the element b, and trigger > > updates > > > >> its > > > >> > >> >> state as > > > >> > >> >> >> > a-a > > > >> > >> >> >> > > > >>> (even > > > >> > >> >> >> > > > >>> > before the window & evictor completes) and > will > > > be > > > >> > >> looking > > > >> > >> >> for > > > >> > >> >> >> > the > > > >> > >> >> >> > > > >>> rest of > > > >> > >> >> >> > > > >>> > the pattern i.e., b-a. But I can think of 1 > > > problem > > > >> > >> here, > > > >> > >> >> >> > > > >>> > > > > >> > >> >> >> > > > >>> > - the events can arrive out of order, > i.e., > > > the > > > >> > >> trigger > > > >> > >> >> >> might > > > >> > >> >> >> > be > > > >> > >> >> >> > > > >>> seeing > > > >> > >> >> >> > > > >>> > a pattern a-a-b but actual event time is > > a-b-a > > > >> then > > > >> > >> >> trigger > > > >> > >> >> >> > will > > > >> > >> >> >> > > > >>> have to > > > >> > >> >> >> > > > >>> > sort the elements in the window everytime > it > > > >> sees > > > >> > an > > > >> > >> >> >> element. > > > >> > >> >> >> > (I > > > >> > >> >> >> > > > was > > > >> > >> >> >> > > > >>> > planning to do this sorting in the window, > > > which > > > >> > >> will be > > > >> > >> >> >> less > > > >> > >> >> >> > > > often > > > >> > >> >> >> > > > >>> - > > > >> > >> >> >> > > > >>> > only > > > >> > >> >> >> > > > >>> > when the trigger fires) > > > >> > >> >> >> > > > >>> > > > > >> > >> >> >> > > > >>> > Thanks and Regards, > > > >> > >> >> >> > > > >>> > Vishnu Viswanath, > > > >> > >> >> >> > > > >>> > > > > >> > >> >> >> > > > >>> > On Fri, Jul 8, 2016 at 6:04 AM, Aljoscha > > Krettek > > > < > > > >> > >> >> >> > > > aljos...@apache.org> > > > >> > >> >> >> > > > >>> > wrote: > > > >> > >> >> >> > > > >>> > > > > >> > >> >> >> > > > >>> > Hi, > > > >> > >> >> >> > > > >>> > > come to think of it, the right place to put > > > such > > > >> > >> checks > > > >> > >> >> is > > > >> > >> >> >> > > actually > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > Trigger. It would have to be a custom > trigger > > > >> that > > > >> > >> >> observes > > > >> > >> >> >> > time > > > >> > >> >> >> > > > but > > > >> > >> >> >> > > > >>> also > > > >> > >> >> >> > > > >>> > > keeps some internal state machine to decide > > > when > > > >> it > > > >> > >> has > > > >> > >> >> >> > observed > > > >> > >> >> >> > > > the > > > >> > >> >> >> > > > >>> > right > > > >> > >> >> >> > > > >>> > > pattern in the window. Then the window > > function > > > >> > would > > > >> > >> >> just > > > >> > >> >> >> have > > > >> > >> >> >> > > to > > > >> > >> >> >> > > > >>> do the > > > >> > >> >> >> > > > >>> > > processing and you have good separation of > > > >> concerns. > > > >> > >> Does > > > >> > >> >> >> that > > > >> > >> >> >> > > make > > > >> > >> >> >> > > > >>> > sense? > > > >> > >> >> >> > > > >>> > > > > > >> > >> >> >> > > > >>> > > I'm ignoring time and sorting by time for > now > > > >> > because > > > >> > >> we > > > >> > >> >> >> > probably > > > >> > >> >> >> > > > >>> need > > > >> > >> >> >> > > > >>> > > another design document for that. To me it > > > seems > > > >> > like > > > >> > >> a > > > >> > >> >> >> bigger > > > >> > >> >> >> > > > thing. > > > >> > >> >> >> > > > >>> > > > > > >> > >> >> >> > > > >>> > > Cheers, > > > >> > >> >> >> > > > >>> > > Aljoscha > > > >> > >> >> >> > > > >>> > > > > > >> > >> >> >> > > > >>> > > On Thu, 7 Jul 2016 at 23:56 Vishnu > Viswanath > > < > > > >> > >> >> >> > > > >>> > vishnu.viswanat...@gmail.com > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > wrote: > > > >> > >> >> >> > > > >>> > > > > > >> > >> >> >> > > > >>> > > > Hi, > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > Regarding the evictAfter function, that > > > evicts > > > >> > >> based on > > > >> > >> >> >> some > > > >> > >> >> >> > > > >>> decision > > > >> > >> >> >> > > > >>> > > made > > > >> > >> >> >> > > > >>> > > > by the window function: I think it will > be > > > >> nice > > > >> > if > > > >> > >> we > > > >> > >> >> can > > > >> > >> >> >> > come > > > >> > >> >> >> > > > up > > > >> > >> >> >> > > > >>> with > > > >> > >> >> >> > > > >>> > > > something that is LESS coupled, because I > > can > > > >> > think > > > >> > >> of > > > >> > >> >> >> > several > > > >> > >> >> >> > > > use > > > >> > >> >> >> > > > >>> > cases > > > >> > >> >> >> > > > >>> > > > that depend on it. > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > Especially in the case where there are > late > > > >> > arriving > > > >> > >> >> >> > messages. > > > >> > >> >> >> > > > Only > > > >> > >> >> >> > > > >>> > after > > > >> > >> >> >> > > > >>> > > > the window function is applied we could > > tell > > > >> what > > > >> > >> to do > > > >> > >> >> >> with > > > >> > >> >> >> > > the > > > >> > >> >> >> > > > >>> > elements > > > >> > >> >> >> > > > >>> > > > in the window. You could apply your > > business > > > >> logic > > > >> > >> >> there > > > >> > >> >> >> to > > > >> > >> >> >> > > > >>> determine > > > >> > >> >> >> > > > >>> > if > > > >> > >> >> >> > > > >>> > > > the window funciton was able to do what > it > > is > > > >> > >> supposed > > > >> > >> >> to > > > >> > >> >> >> do, > > > >> > >> >> >> > > if > > > >> > >> >> >> > > > >>> yes > > > >> > >> >> >> > > > >>> > > evict > > > >> > >> >> >> > > > >>> > > > those elements, else(since the elements > you > > > are > > > >> > >> looking > > > >> > >> >> >> for > > > >> > >> >> >> > > > haven't > > > >> > >> >> >> > > > >>> > > arrived > > > >> > >> >> >> > > > >>> > > > yet) wait and try again when the trigger > > gets > > > >> > fired > > > >> > >> >> next > > > >> > >> >> >> > time. > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > Thanks and Regards, > > > >> > >> >> >> > > > >>> > > > Vishnu Viswanath, > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > On Thu, Jul 7, 2016 at 9:19 AM, Radu > > Tudoran > > > < > > > >> > >> >> >> > > > >>> radu.tudo...@huawei.com> > > > >> > >> >> >> > > > >>> > > > wrote: > > > >> > >> >> >> > > > >>> > > > > > > >> > >> >> >> > > > >>> > > > > Hi, > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > @Aljoscha - I can understand the reason > > why > > > >> you > > > >> > >> are > > > >> > >> >> >> > hesitant > > > >> > >> >> >> > > to > > > >> > >> >> >> > > > >>> > > introduce > > > >> > >> >> >> > > > >>> > > > > "slower" windows such as the ones that > > > would > > > >> > >> maintain > > > >> > >> >> >> > sorted > > > >> > >> >> >> > > > >>> items or > > > >> > >> >> >> > > > >>> > > > > windows with bindings between the > > different > > > >> > >> entities > > > >> > >> >> >> > > (evictor, > > > >> > >> >> >> > > > >>> > trigger, > > > >> > >> >> >> > > > >>> > > > > window, apply function). However, I > think > > > >> it's > > > >> > >> >> possible > > > >> > >> >> >> > just > > > >> > >> >> >> > > to > > > >> > >> >> >> > > > >>> > create > > > >> > >> >> >> > > > >>> > > > more > > > >> > >> >> >> > > > >>> > > > > types of windows. The existing ones > > > >> > (timewindows, > > > >> > >> >> global > > > >> > >> >> >> > > > windows > > > >> > >> >> >> > > > >>> ...) > > > >> > >> >> >> > > > >>> > > can > > > >> > >> >> >> > > > >>> > > > > remain, and just add some more flavors > of > > > >> > windows > > > >> > >> >> were > > > >> > >> >> >> more > > > >> > >> >> >> > > > >>> features > > > >> > >> >> >> > > > >>> > > are > > > >> > >> >> >> > > > >>> > > > > enabled or more functionality (e.g., > > access > > > >> to > > > >> > the > > > >> > >> >> each > > > >> > >> >> >> > > element > > > >> > >> >> >> > > > >>> in > > > >> > >> >> >> > > > >>> > the > > > >> > >> >> >> > > > >>> > > > > evictor ; possibility to delete or mark > > for > > > >> > >> eviction > > > >> > >> >> >> > elements > > > >> > >> >> >> > > > in > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > > > function...) > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > Regarding the specific case of sorted > > > >> windows, I > > > >> > >> >> think > > > >> > >> >> >> the > > > >> > >> >> >> > N > > > >> > >> >> >> > > > lon > > > >> > >> >> >> > > > >>> N > > > >> > >> >> >> > > > >>> > > > > complexity to sort (the worst case) is > > very > > > >> > >> >> unlikely. In > > > >> > >> >> >> > fact > > > >> > >> >> >> > > > you > > > >> > >> >> >> > > > >>> > have > > > >> > >> >> >> > > > >>> > > > > almost sorted items/arrays. Moreover, > if > > > you > > > >> > >> consider > > > >> > >> >> >> that > > > >> > >> >> >> > in > > > >> > >> >> >> > > > >>> > > iteration X > > > >> > >> >> >> > > > >>> > > > > all elements were sorted, then in > > iteration > > > >> X+1 > > > >> > >> you > > > >> > >> >> will > > > >> > >> >> >> > need > > > >> > >> >> >> > > > to > > > >> > >> >> >> > > > >>> sort > > > >> > >> >> >> > > > >>> > > > just > > > >> > >> >> >> > > > >>> > > > > the newly arrived elements (M). I would > > > >> expect > > > >> > >> that > > > >> > >> >> this > > > >> > >> >> >> > > > number M > > > >> > >> >> >> > > > >>> > might > > > >> > >> >> >> > > > >>> > > > be > > > >> > >> >> >> > > > >>> > > > > significant smaller then N (elements > that > > > >> > exists). > > > >> > >> >> Then > > > >> > >> >> >> > using > > > >> > >> >> >> > > > an > > > >> > >> >> >> > > > >>> > > > insertion > > > >> > >> >> >> > > > >>> > > > > sort for these new elements you would > > have > > > >> M * > > > >> > N > > > >> > >> >> >> > complexity > > > >> > >> >> >> > > > and > > > >> > >> >> >> > > > >>> if > > > >> > >> >> >> > > > >>> > > M<< N > > > >> > >> >> >> > > > >>> > > > > then the complexity is O(N). > > Alternatively > > > >> you > > > >> > can > > > >> > >> >> use a > > > >> > >> >> >> > > binary > > > >> > >> >> >> > > > >>> > search > > > >> > >> >> >> > > > >>> > > > for > > > >> > >> >> >> > > > >>> > > > > insertion and then you further reduce > the > > > >> > >> complexity > > > >> > >> >> to > > > >> > >> >> >> > > > O(logN). > > > >> > >> >> >> > > > >>> > > > > If M is proportional to N then you can > > > sort M > > > >> > and > > > >> > >> use > > > >> > >> >> >> merge > > > >> > >> >> >> > > > sort > > > >> > >> >> >> > > > >>> for > > > >> > >> >> >> > > > >>> > > > > combining. > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > Dr. Radu Tudoran > > > >> > >> >> >> > > > >>> > > > > Research Engineer - Big Data Expert > > > >> > >> >> >> > > > >>> > > > > IT R&D Division > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > >> > >> >> >> > > > >>> > > > > European Research Center > > > >> > >> >> >> > > > >>> > > > > Riesstrasse 25, 80992 München > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > E-mail: radu.tudo...@huawei.com > > > >> > >> >> >> > > > >>> > > > > Mobile: +49 15209084330 > > > >> > >> >> >> > > > >>> > > > > Telephone: +49 891588344173 > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > >> > >> >> >> > > > >>> > > > > Hansaallee 205, 40549 Düsseldorf, > > Germany, > > > >> > >> >> >> www.huawei.com > > > >> > >> >> >> > > > >>> > > > > Registered Office: Düsseldorf, Register > > > Court > > > >> > >> >> >> Düsseldorf, > > > >> > >> >> >> > HRB > > > >> > >> >> >> > > > >>> 56063, > > > >> > >> >> >> > > > >>> > > > > Managing Director: Bo PENG, Wanzhou > MENG, > > > >> Lifang > > > >> > >> CHEN > > > >> > >> >> >> > > > >>> > > > > Sitz der Gesellschaft: Düsseldorf, > > > >> Amtsgericht > > > >> > >> >> >> Düsseldorf, > > > >> > >> >> >> > > HRB > > > >> > >> >> >> > > > >>> 56063, > > > >> > >> >> >> > > > >>> > > > > Geschäftsführer: Bo PENG, Wanzhou MENG, > > > >> Lifang > > > >> > >> CHEN > > > >> > >> >> >> > > > >>> > > > > This e-mail and its attachments contain > > > >> > >> confidential > > > >> > >> >> >> > > > information > > > >> > >> >> >> > > > >>> from > > > >> > >> >> >> > > > >>> > > > > HUAWEI, which is intended only for the > > > >> person or > > > >> > >> >> entity > > > >> > >> >> >> > whose > > > >> > >> >> >> > > > >>> address > > > >> > >> >> >> > > > >>> > > is > > > >> > >> >> >> > > > >>> > > > > listed above. Any use of the > information > > > >> > contained > > > >> > >> >> >> herein > > > >> > >> >> >> > in > > > >> > >> >> >> > > > any > > > >> > >> >> >> > > > >>> way > > > >> > >> >> >> > > > >>> > > > > (including, but not limited to, total > or > > > >> partial > > > >> > >> >> >> > disclosure, > > > >> > >> >> >> > > > >>> > > > reproduction, > > > >> > >> >> >> > > > >>> > > > > or dissemination) by persons other than > > the > > > >> > >> intended > > > >> > >> >> >> > > > >>> recipient(s) is > > > >> > >> >> >> > > > >>> > > > > prohibited. If you receive this e-mail > in > > > >> error, > > > >> > >> >> please > > > >> > >> >> >> > > notify > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > sender > > > >> > >> >> >> > > > >>> > > > > by phone or email immediately and > delete > > > it! > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > -----Original Message----- > > > >> > >> >> >> > > > >>> > > > > From: 吕文龙(吕文龙) [mailto: > > > >> > >> wenlong....@alibaba-inc.com] > > > >> > >> >> >> > > > >>> > > > > Sent: Thursday, July 07, 2016 11:59 AM > > > >> > >> >> >> > > > >>> > > > > To: dev@flink.apache.org > > > >> > >> >> >> > > > >>> > > > > Subject: 答复: [DISCUSS] Enhance Window > > > >> Evictor in > > > >> > >> >> Flink > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > HI, > > > >> > >> >> >> > > > >>> > > > > I think it is necessary to support > sorted > > > >> > window, > > > >> > >> >> which > > > >> > >> >> >> can > > > >> > >> >> >> > > > avoid > > > >> > >> >> >> > > > >>> > > > scanning > > > >> > >> >> >> > > > >>> > > > > all the elements of window while trying > > to > > > >> > >> evicting > > > >> > >> >> >> > element, > > > >> > >> >> >> > > > >>> which > > > >> > >> >> >> > > > >>> > may > > > >> > >> >> >> > > > >>> > > > cost > > > >> > >> >> >> > > > >>> > > > > many IO operations, such as querying > DBs > > to > > > >> get > > > >> > >> >> elements > > > >> > >> >> >> > from > > > >> > >> >> >> > > > >>> state. > > > >> > >> >> >> > > > >>> > > > > What's more, when an window aggregation > > > >> function > > > >> > >> is > > > >> > >> >> >> > > invertible, > > > >> > >> >> >> > > > >>> such > > > >> > >> >> >> > > > >>> > as > > > >> > >> >> >> > > > >>> > > > > sum, which can be updated by adding or > > > >> removing > > > >> > a > > > >> > >> >> single > > > >> > >> >> >> > > > record, > > > >> > >> >> >> > > > >>> > window > > > >> > >> >> >> > > > >>> > > > > results can be incrementally > calculated. > > In > > > >> this > > > >> > >> >> kind of > > > >> > >> >> >> > > case, > > > >> > >> >> >> > > > >>> we can > > > >> > >> >> >> > > > >>> > > > > dramatically improve the performance of > > > >> window > > > >> > >> >> >> aggregation, > > > >> > >> >> >> > > if > > > >> > >> >> >> > > > >>> > evictor > > > >> > >> >> >> > > > >>> > > > can > > > >> > >> >> >> > > > >>> > > > > trigger update of window aggregation > > state > > > by > > > >> > some > > > >> > >> >> >> > mechanism. > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > Best Wishes! > > > >> > >> >> >> > > > >>> > > > > --- > > > >> > >> >> >> > > > >>> > > > > wenlong.lwl > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > -----邮件原件----- > > > >> > >> >> >> > > > >>> > > > > 发件人: Aljoscha Krettek [mailto: > > > >> > aljos...@apache.org > > > >> > >> ] > > > >> > >> >> >> > > > >>> > > > > 发送时间: 2016年7月7日 17:32 > > > >> > >> >> >> > > > >>> > > > > 收件人: dev@flink.apache.org > > > >> > >> >> >> > > > >>> > > > > 主题: Re: [DISCUSS] Enhance Window > Evictor > > in > > > >> > Flink > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > Hi, > > > >> > >> >> >> > > > >>> > > > > regarding "sorting the window by event > > > >> time": I > > > >> > >> also > > > >> > >> >> >> > > considered > > > >> > >> >> >> > > > >>> this > > > >> > >> >> >> > > > >>> > > but > > > >> > >> >> >> > > > >>> > > > > in the end I don't think it's > necessary. > > > >> Sorting > > > >> > >> is > > > >> > >> >> >> rather > > > >> > >> >> >> > > > >>> expensive > > > >> > >> >> >> > > > >>> > > and > > > >> > >> >> >> > > > >>> > > > > making decisions based on the order of > > > >> elements > > > >> > >> can > > > >> > >> >> be > > > >> > >> >> >> > > tricky. > > > >> > >> >> >> > > > An > > > >> > >> >> >> > > > >>> > > extreme > > > >> > >> >> >> > > > >>> > > > > example of why this can be problematic > is > > > the > > > >> > case > > > >> > >> >> where > > > >> > >> >> >> > all > > > >> > >> >> >> > > > >>> elements > > > >> > >> >> >> > > > >>> > > in > > > >> > >> >> >> > > > >>> > > > > the window have the same timestamp. > Now, > > if > > > >> you > > > >> > >> >> decide > > > >> > >> >> >> to > > > >> > >> >> >> > > evict > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > > first 5 > > > >> > >> >> >> > > > >>> > > > > elements based on timestamp order you > > > >> basically > > > >> > >> >> >> arbitrarily > > > >> > >> >> >> > > > >>> evict 5 > > > >> > >> >> >> > > > >>> > > > > elements. I think the better solution > for > > > >> doing > > > >> > >> >> >> time-based > > > >> > >> >> >> > > > >>> eviction > > > >> > >> >> >> > > > >>> > is > > > >> > >> >> >> > > > >>> > > to > > > >> > >> >> >> > > > >>> > > > > do one pass over the elements to get an > > > >> overview > > > >> > >> of > > > >> > >> >> the > > > >> > >> >> >> > > > timestamp > > > >> > >> >> >> > > > >>> > > > > distribution, then do a second pass and > > > evict > > > >> > >> >> elements > > > >> > >> >> >> > based > > > >> > >> >> >> > > on > > > >> > >> >> >> > > > >>> what > > > >> > >> >> >> > > > >>> > > was > > > >> > >> >> >> > > > >>> > > > > learned in the first pass. This has > > > >> complexity > > > >> > 2*n > > > >> > >> >> >> compared > > > >> > >> >> >> > > to > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > n*log > > > >> > >> >> >> > > > >>> > > > n > > > >> > >> >> >> > > > >>> > > > > (plus the work of actually deciding > what > > to > > > >> > >> evict) of > > > >> > >> >> >> the > > > >> > >> >> >> > > sort > > > >> > >> >> >> > > > >>> based > > > >> > >> >> >> > > > >>> > > > > strategy. > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > I might be wrong, though, and there > could > > > be > > > >> a > > > >> > >> valid > > > >> > >> >> >> > use-case > > > >> > >> >> >> > > > not > > > >> > >> >> >> > > > >>> > > covered > > > >> > >> >> >> > > > >>> > > > > by the above idea. > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > regarding Vishnu's other use case of > > > evicting > > > >> > >> based > > > >> > >> >> on > > > >> > >> >> >> some > > > >> > >> >> >> > > > >>> decision > > > >> > >> >> >> > > > >>> > in > > > >> > >> >> >> > > > >>> > > > the > > > >> > >> >> >> > > > >>> > > > > WindowFunction: could this be solved by > > > doing > > > >> > the > > > >> > >> >> check > > > >> > >> >> >> for > > > >> > >> >> >> > > the > > > >> > >> >> >> > > > >>> > pattern > > > >> > >> >> >> > > > >>> > > > in > > > >> > >> >> >> > > > >>> > > > > the evictor itself instead of in the > > window > > > >> > >> function? > > > >> > >> >> >> I'm > > > >> > >> >> >> > > very > > > >> > >> >> >> > > > >>> > hesitant > > > >> > >> >> >> > > > >>> > > > to > > > >> > >> >> >> > > > >>> > > > > introduce a coupling between the > > different > > > >> > >> >> components of > > > >> > >> >> >> > the > > > >> > >> >> >> > > > >>> > windowing > > > >> > >> >> >> > > > >>> > > > > system, i.e. assigner, trigger, evictor > > and > > > >> > window > > > >> > >> >> >> > function. > > > >> > >> >> >> > > > The > > > >> > >> >> >> > > > >>> > reason > > > >> > >> >> >> > > > >>> > > > is > > > >> > >> >> >> > > > >>> > > > > that using an evictor has a huge > > > performance > > > >> > >> impact > > > >> > >> >> >> since > > > >> > >> >> >> > the > > > >> > >> >> >> > > > >>> system > > > >> > >> >> >> > > > >>> > > > always > > > >> > >> >> >> > > > >>> > > > > has to keep all elements and cannot to > > > >> > incremental > > > >> > >> >> >> > > aggregation > > > >> > >> >> >> > > > of > > > >> > >> >> >> > > > >>> > > window > > > >> > >> >> >> > > > >>> > > > > results and I therefore don't want to > put > > > >> > specific > > > >> > >> >> >> features > > > >> > >> >> >> > > > >>> regarding > > > >> > >> >> >> > > > >>> > > > > eviction into the other components. > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > Cheers, > > > >> > >> >> >> > > > >>> > > > > Aljoscha > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > On Thu, 7 Jul 2016 at 10:00 Radu > Tudoran > > < > > > >> > >> >> >> > > > >>> radu.tudo...@huawei.com> > > > >> > >> >> >> > > > >>> > > > wrote: > > > >> > >> >> >> > > > >>> > > > > > > > >> > >> >> >> > > > >>> > > > > > Hi, > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > I think the situation Vishnu raised > is > > > >> > something > > > >> > >> >> that > > > >> > >> >> >> > > should > > > >> > >> >> >> > > > be > > > >> > >> >> >> > > > >>> > > > > accounted. > > > >> > >> >> >> > > > >>> > > > > > It can happen indeed that you want to > > > >> > condition > > > >> > >> >> what > > > >> > >> >> >> you > > > >> > >> >> >> > > > evict > > > >> > >> >> >> > > > >>> from > > > >> > >> >> >> > > > >>> > > > > > the window based on the result of the > > > >> function > > > >> > >> to > > > >> > >> >> be > > > >> > >> >> >> > > applied. > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > My 2 cents... > > > >> > >> >> >> > > > >>> > > > > > I would suggest adding a list for the > > > >> elements > > > >> > >> of > > > >> > >> >> the > > > >> > >> >> >> > > stream > > > >> > >> >> >> > > > >>> where > > > >> > >> >> >> > > > >>> > > you > > > >> > >> >> >> > > > >>> > > > > > can MARK them to be delete. > > Alternatively > > > >> the > > > >> > >> >> iterator > > > >> > >> >> >> > can > > > >> > >> >> >> > > be > > > >> > >> >> >> > > > >>> > > extended > > > >> > >> >> >> > > > >>> > > > > > to have a function > > > >> > >> Iterator.markForEviction(int); > > > >> > >> >> >> These > > > >> > >> >> >> > can > > > >> > >> >> >> > > > be > > > >> > >> >> >> > > > >>> made > > > >> > >> >> >> > > > >>> > > > > > available also in the apply function. > > > >> > Moreover, > > > >> > >> we > > > >> > >> >> can > > > >> > >> >> >> > use > > > >> > >> >> >> > > > >>> this to > > > >> > >> >> >> > > > >>> > > > > > extend the functionality such that > you > > > add > > > >> > MARKs > > > >> > >> >> >> either > > > >> > >> >> >> > for > > > >> > >> >> >> > > > >>> > eviction > > > >> > >> >> >> > > > >>> > > > > > after the function has finished > > > triggering > > > >> or > > > >> > >> to be > > > >> > >> >> >> > evicted > > > >> > >> >> >> > > > in > > > >> > >> >> >> > > > >>> the > > > >> > >> >> >> > > > >>> > > next > > > >> > >> >> >> > > > >>> > > > > iteration. > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > Dr. Radu Tudoran > > > >> > >> >> >> > > > >>> > > > > > Research Engineer - Big Data Expert > > > >> > >> >> >> > > > >>> > > > > > IT R&D Division > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > >> > >> >> >> > > > >>> > > > > > European Research Center > > > >> > >> >> >> > > > >>> > > > > > Riesstrasse 25, 80992 München > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > E-mail: radu.tudo...@huawei.com > > > >> > >> >> >> > > > >>> > > > > > Mobile: +49 15209084330 > > > >> > >> >> >> > > > >>> > > > > > Telephone: +49 891588344173 > > > >> > >> >> >> > > > >>> > > > > > > > > >> > >> >> >> > > > >>> > > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH > > > >> > >> >> >> > > > >>> > > > > > Hansaallee 205, 40549 Düsseldorf, > > > Germany, > > > >> > >> >> >> > www.huawei.com > > > >> > >> >> >> > > > >>> > Registered > > > >> > >> >> >> > > > >>> > > > > > Office: Düsseldorf, Register Court > > > >> Düsseldorf, > > > >> > >> HRB > > > >> > >> >> >> 56063, > > > >> > >> >> >> > > > >>> Managing > > > >> > >> >> >> > > > >>> > > > > > Director: Bo PENG, Wanzhou MENG, > Lifang > > > >> CHEN > > > >> > >> Sitz > > > >> > >> >> der > > > >> > >> >> >> > > > >>> Gesellschaft: > > > >> > >> >> >> > > > >>> > > > > > Düsseldorf, Amtsgericht Düsseldorf, > HRB > > > >> 56063, > > > >> > >> >> >> > > > >>> > > > > > Geschäftsführer: Bo PENG, Wanzhou > MENG, > > > >> Lifang > > > >> > >> CHEN > > > >> > >> >> >> This > > > >> > >> >> >> > > > >>> e-mail and