Hi,
regarding a), b) and c): The WindowOperator can be extended to have this
signature:
public class WindowOperator<K, IN, ACC, OUT, W extends Window, S extends
AppendingState<IN, ACC>>

that way the shape of state is generic and EvictingWindowOperator can use
ListState<IN> there.

regarding 2.: Yes, we can either take the current processing time/event
time or the max timestamp of elements in the window as the benchmark
against which we compare.

About ProcessingTimeEvictor: the proposal was to make the timestamp
explicit in the type of elements. Otherwise, how would you access the
processing time of each element? (As I said, the timestamp field in
StreamRecord does not usually contain a processing-time timestamp and I
would like to remove the StreamRecord from the type of the Iterable that is
passed to the evictor to avoid code duplication in EvictingWindowOperator)
I'm open for suggestions there since I didn't come up with a better
solution yet. :-)

Cheers,
Aljoscha



On Sat, 30 Jul 2016 at 05:56 Vishnu Viswanath <vishnu.viswanat...@gmail.com>
wrote:

> Hi Aljoscha,
>
> 1. Regarding the Evictor interface taking Iterable<IN> instead of
> StreamRecord -
>
>  a) I am not quite sure I understood what you meant by *"It could be a very
> thin subclass of WindowOperator"* - Currently, most of the code duplication
> in EvictingWindowOperator is due to  the windowStateDescriptor (ListState
> instead of AppendingState compared to WindowOperator). Is this correct?.
>
>  b) Do you hope to keep using AppendingState instead of ListState to avoid
> the duplicate code (e.g., processWatermark(), trigger() etc). If we use
> AppendingState, the get() method returns an state of the OUT type ACC,
> which cannot be passed to Evictor. So I am assuming we will have to keep
> using ListState here.
>
>  c) My not so good idea was to use the FluentIterable to convert the
> Iterable<StreamRecord<IN>> to Iterable<IN> and pass it on to Evictor and
> Window function. Evictor can remove the elements from the Iterable. (Even
> Window function can remove elements). Then clear the state and add
> elements(after removal) back to the state. But in that case, I need to
> reconstruct StreamRecord<IN> from IN. Doing so, we will lose the timestamp
> information that might have been previously set on the original
> StreamRecord<IN> - is there any other way to recreate StreamRecord?
>
>
>
> 2. Regarding ProcessingTimeEvictor -
>
> A TimeEvictor has to evict elements from the window which are older than a
> given Period from the element with maximum timestamp in the window. When
> considering ProcessingTimestamp(even if it was explicitly set), shouldn't
> the timestamp associated with records be strictly increasing. i.e., newer
> elements should have higher timestamp than earlier elements. So to get the
> max timestamp we could just get the last element. When using
> EventTimeEvictor, the elements might have arrived out of order hence we
> can't just take the timestamp of the last element as maximum timestamp, but
> check each and every element in the window.
>
> We should have two versions of TimeEvictors - EventTime and ProcessingTime,
> but does ProcessingTimeEvictor need to take a Tupel2<Long,T> since anyways
> we are going to get the max timestamp by looking at the last element in the
> window?.
>
> Thanks,
> Vishnu
>
> On Fri, Jul 29, 2016 at 6:22 AM, Aljoscha Krettek <aljos...@apache.org>
> wrote:
>
> > About processing time and timestamps:
> >
> > The timestamp is either set in the source of in an
> > in-between TimestampAssigner that can be used with
> > DataStream.assignTimestampsAndWatermarks(). However, the timestamp in the
> > element is normally not a "processing-time timestamp". I think it might
> > make sense to split the functionality for the evictors into two parts:
> one
> > that implicitly sets a timestamp and one that uses these timestamps. It
> > could look like this:
> >
> > DataStream<T> input = ...
> > // this makes the current processing time explicit in the tuples:
> > DataStream<Tuple2<Long, T>> withTimestamps = input.map(new
> > ReifyProcessingTIme<T>());
> > withTimestamps
> >   .keyBy(...)
> >   .window(..)
> >   .evictor(new ProcessingTimeEvictor<T>())
> >   .apply(...)
> >
> > where ProcessingTimeEvictor looks like this:
> >
> > class ProcessingTimeEvictor<T> extends Evictor<Tuple2<Long, T>> {
> >   void evictBefore(Iterable<Tuple2<Long, T>>, ...);
> >   void evictAfter ...
> > }
> >
> > This would make everything that is happening explicit in the type
> > signatures and explicit for the user.
> >
> > Cheers,
> > Aljoscha
> >
> > On Thu, 28 Jul 2016 at 18:32 Aljoscha Krettek <aljos...@apache.org>
> wrote:
> >
> > > Hi,
> > > in fact, changing it to Iterable<IN> would simplify things because then
> > we
> > > would not have to duplicate code for the EvictingWindowOperator any
> more.
> > > It could be a very thin subclass of WindowOperator.
> > >
> > > Cheers,
> > > Aljoscha
> > >
> > > On Wed, 27 Jul 2016 at 03:56 Vishnu Viswanath <
> > > vishnu.viswanat...@gmail.com> wrote:
> > >
> > >> Hi Aljoscha,
> > >>
> > >> Regarding your concern - to not  expose the StreamRecord in the
> Evictor,
> > >> were you able to find any alternative?
> > >>
> > >> I tried to make the methods take Iterable<IN> input similar to the
> > >> WindowFunction, but that didn't work since we have to clear the state
> > and
> > >> add the elements back to the state (to fix the bug mentioned in the
> > >> previous mail)
> > >>
> > >> If you think the interface that accepts Iterable<StreamRecord<T>>
> > >> elements is
> > >> good enough, I have the changes ready.
> > >>
> > >> Thanks,
> > >> Vishnu
> > >>
> > >> On Mon, Jul 25, 2016 at 7:48 AM, Aljoscha Krettek <
> aljos...@apache.org>
> > >> wrote:
> > >>
> > >> > 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
>

Reply via email to