Changes are ready for review:

https://issues.apache.org/jira/browse/IGNITE-14187
https://github.com/apache/ignite/pull/8847

On Tue, May 18, 2021 at 12:03 PM Igor Sapego <isap...@gridgain.com> wrote:

> Pavel,
>
> +1 from me for a stateless approach. We could definitely invent something
> here to make a stateful approach working but that would make this feature
> too complex and error-prone, IMO. It makes sense to file an improvement
> ticket with benchmark results and maybe code draft if we decide to move
> this way in future though.
>
> Best Regards,
> Igor
>
>
> On Tue, May 18, 2021 at 11:47 AM Pavel Tupitsyn <ptupit...@apache.org>
> wrote:
>
> > Igniters,
> >
> > I've implemented a "stateful" approach (see IEP) in .NET Thin Client:
> > client-side flush adds data to server-side streamer, but does not flush
> it
> > immediately.
> > It provides ~35% perf improvement over stateless approach (where every
> > client request opens a new streamer, adds data, closes streamer).
> >
> > However, in this case we lose server-side buffered data if the server
> node
> > fails, which seems to be a serious issue.
> > On the client we don't even know which part of data was lost, so we can't
> > re-send this data.
> >
> > Therefore, a stateless approach seems to be the only proper way:
> > once a client request completes, the data is guaranteed to be in the
> cache,
> > and failed requests (connection loss, node failure) can be retried.
> > This simplifies both client and server implementations.
> >
> > Thoughts?
> >
> > On Tue, Mar 9, 2021 at 6:32 PM Pavel Tupitsyn <ptupit...@apache.org>
> > wrote:
> >
> > > Alex,
> > >
> > > I did not include this for two reasons:
> > >
> > > 1) Existing thick API behavior is very confusing and counter-intuitive:
> > > it returns a Future that won't complete unless you call more APIs.
> > >
> > > I've seen multiple users doing this:
> > > await streamer.Add(1, 1);
> > > await streamer.Add(2, 2);
> > >
> > > This code hangs - the first Add will never complete, because the batch
> is
> > > not sent,
> > > and the batch won't be sent because we are awaiting the first Add.
> > >
> > > 2) I'm not sure what's the use case for this feature - why do we want
> to
> > > know
> > > when the flush happens?
> > >
> > > We can come up with a better API, but should we bother at all?
> > >
> > > On Fri, Mar 5, 2021 at 6:09 PM Alex Plehanov <plehanov.a...@gmail.com>
> > > wrote:
> > >
> > >> Pavel,
> > >>
> > >> IEP looks good to me overall. I have only one concern: currently, for
> > >> thick
> > >> client "add" method we return the future which completes when the
> > current
> > >> batch is actually added to the cache, even if "flush" method is not
> > >> invoked
> > >> explicitly. For thin client with the proposed protocol we can't
> provide
> > >> such functionality without explicit "flush". Perhaps we should notify
> > >> client when batch actually flushed and send this notification when
> some
> > >> "require notification" flag is sent with the request. WDYT?
> > >>
> > >> пт, 5 мар. 2021 г. в 17:03, Ivan Daschinsky <ivanda...@gmail.com>:
> > >>
> > >> > Agree, this is completely offtopic here.
> > >> >
> > >> > пт, 5 мар. 2021 г. в 17:02, Pavel Tupitsyn <ptupit...@apache.org>:
> > >> >
> > >> > > > custom DSL
> > >> > > This is a topic for 3.0 - would you like to start a separate
> thread?
> > >> > >
> > >> > > On Fri, Mar 5, 2021 at 4:54 PM Ivan Daschinsky <
> ivanda...@gmail.com
> > >
> > >> > > wrote:
> > >> > >
> > >> > > > I suppose, that the best variantl -- custom DSL similar to
> MongoDB
> > >> > query
> > >> > > > language.
> > >> > > > I understand that implementing this is much harder, but users
> want
> > >> this
> > >> > > > variant.
> > >> > > >
> > >> > > > пт, 5 мар. 2021 г. в 16:52, Pavel Tupitsyn <
> ptupit...@apache.org
> > >:
> > >> > > >
> > >> > > > > > I suppose this is of questional usability, same for existing
> > >> > > > > > implementation for ScanQuery and ContinousQuery
> > >> > > > >
> > >> > > > > One way or another, we need to be able to run custom logic
> > >> > > > > on the server side from thin clients.
> > >> > > > >
> > >> > > > > Our current direction can be seen as "Java is our DSL":
> > >> > > > > write server-side logic in Java, deploy to servers, call from
> > thin
> > >> > > > clients.
> > >> > > > >
> > >> > > > > This approach is already used for Services, Compute,
> ScanQuery,
> > >> > > > > ContinuousQuery.
> > >> > > > >
> > >> > > > > If you have a better idea in mind, please share.
> > >> > > > >
> > >> > > > > On Fri, Mar 5, 2021 at 4:12 PM Ivan Daschinsky <
> > >> ivanda...@gmail.com>
> > >> > > > > wrote:
> > >> > > > >
> > >> > > > > > >>> - Corresponding types should exist on server nodes
> > >> > > > > > Ok, but I suppose this is of questional usability, same for
> > >> > existing
> > >> > > > > > implementation for ScanQuery and ContinousQuery.
> > >> > > > > > For queries it's probably ok to add some custom filters and
> > put
> > >> > them
> > >> > > in
> > >> > > > > > servers' classpathes, but I can hardly imagine
> > >> > > > > > somebody wants to create custom Receiver this way.
> > >> > > > > >
> > >> > > > > > пт, 5 мар. 2021 г. в 15:54, Pavel Tupitsyn <
> > >> ptupit...@apache.org>:
> > >> > > > > >
> > >> > > > > > > > How do you suggests to serialize this object?
> > >> > > > > > >
> > >> > > > > > > Like a normal binary object. This scenario already exists
> > for
> > >> > > > ScanQuery
> > >> > > > > > and
> > >> > > > > > > ContinuousQuery filters.
> > >> > > > > > > - It works for Java and .NET; potentially for other
> > platforms
> > >> > > > > > > - Corresponding types should exist on server nodes
> > >> > > > > > >
> > >> > > > > > > E.g. if a Java class `MyFilter { String containsText }` is
> > >> loaded
> > >> > > on
> > >> > > > > > server
> > >> > > > > > > nodes,
> > >> > > > > > > a Python thin client can easily write a corresponding
> > >> > BinaryObject
> > >> > > > with
> > >> > > > > > one
> > >> > > > > > > field to achieve server-side filtering.
> > >> > > > > > >
> > >> > > > > > >
> > >> > > > > > > > I also suppose, that closing should be done wia
> > >> > OP_RESOURCE_CLOSE
> > >> > > > > > >
> > >> > > > > > > Thanks, forgot to mention this - updated the IEP.
> > >> > > > > > >
> > >> > > > > > >
> > >> > > > > > > On Fri, Mar 5, 2021 at 3:42 PM Ivan Daschinsky <
> > >> > > ivanda...@gmail.com>
> > >> > > > > > > wrote:
> > >> > > > > > >
> > >> > > > > > > > I also suppose, that closing should be done wia
> > >> > > OP_RESOURCE_CLOSE.
> > >> > > > > > It'is
> > >> > > > > > > > more consistent and resembles with existing cursor api.
> > >> > > > > > > >
> > >> > > > > > > > пт, 5 мар. 2021 г. в 15:37, Ivan Daschinsky <
> > >> > ivanda...@gmail.com
> > >> > > >:
> > >> > > > > > > >
> > >> > > > > > > > > >> Both proposed requests have a Flush flag - please
> see
> > >> > > Details
> > >> > > > > > > sections
> > >> > > > > > > > > in the IEP.
> > >> > > > > > > > > Ok, sorry, I missed this.
> > >> > > > > > > > > >> StreamReceiver is public API [1]
> > >> > > > > > > > > I know it. But this "object" should contains custom
> > logic
> > >> for
> > >> > > > > putting
> > >> > > > > > > > data
> > >> > > > > > > > > in cache. How do you suggests to serialize this
> object?
> > >> > > > > > > > > Implement custom classloader for java? What about
> other
> > >> > > > platforms?
> > >> > > > > > > > >
> > >> > > > > > > > > I suppose that we should not add this field, because
> it
> > is
> > >> > > > > confusing.
> > >> > > > > > > > > Everything will work for local unit tests and only for
> > >> java.
> > >> > > > > > > > > But in real environment this will not work at all.
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > пт, 5 мар. 2021 г. в 15:23, Pavel Tupitsyn <
> > >> > > ptupit...@apache.org
> > >> > > > >:
> > >> > > > > > > > >
> > >> > > > > > > > >> Ivan,
> > >> > > > > > > > >>
> > >> > > > > > > > >> > Receiver is mostly internal stuff
> > >> > > > > > > > >> StreamReceiver is public API [1]
> > >> > > > > > > > >>
> > >> > > > > > > > >> > STREAMER_FLUSH_REQUEST should be added too
> > >> > > > > > > > >> Both proposed requests have a Flush flag - please see
> > >> > Details
> > >> > > > > > sections
> > >> > > > > > > > in
> > >> > > > > > > > >> the IEP.
> > >> > > > > > > > >> When user code calls client-side Flush method, we
> send
> > >> the
> > >> > > > current
> > >> > > > > > > > >> client-side batch with that flag enabled,
> > >> > > > > > > > >> and flush server-side batches too.
> > >> > > > > > > > >>
> > >> > > > > > > > >> A separate request for that does not seem to be
> > >> necessary,
> > >> > or
> > >> > > > am I
> > >> > > > > > > > missing
> > >> > > > > > > > >> some different use case?
> > >> > > > > > > > >>
> > >> > > > > > > > >> [1]
> > >> > > > > > > > >>
> > >> > > > > > > > >>
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/package-summary.html
> > >> > > > > > > > >>
> > >> > > > > > > > >>
> > >> > > > > > > > >> On Fri, Mar 5, 2021 at 2:50 PM Ivan Daschinsky <
> > >> > > > > ivanda...@gmail.com
> > >> > > > > > >
> > >> > > > > > > > >> wrote:
> > >> > > > > > > > >>
> > >> > > > > > > > >> > IMHO, also STREAMER_FLUSH_REQUEST should be added
> > too.
> > >> > > Client
> > >> > > > > can
> > >> > > > > > > > flush
> > >> > > > > > > > >> > large batches instead of closing resource.
> > >> > > > > > > > >> > IMHO this is preferable than creating streamer per
> > >> batch.
> > >> > > > > > > > >> >
> > >> > > > > > > > >> > пт, 5 мар. 2021 г. в 14:48, Ivan Daschinsky <
> > >> > > > > ivanda...@gmail.com
> > >> > > > > > >:
> > >> > > > > > > > >> >
> > >> > > > > > > > >> > > Pavel, thank you for your effort.
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> > > BTW, are you sure that receiver should be a param
> > of
> > >> > > > > > > > >> > > STREAMER_START_REQUEST?
> > >> > > > > > > > >> > > Receiver is mostly internal stuff and I can
> hardly
> > >> > imagine
> > >> > > > why
> > >> > > > > > > > >> > > someone would decide to change defaults.
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> > > пт, 5 мар. 2021 г. в 13:01, Pavel Tupitsyn <
> > >> > > > > > ptupit...@apache.org
> > >> > > > > > > >:
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> > >> Igor,
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> > >> As per our private conversation, I'll try to
> > provide
> > >> > some
> > >> > > > > perf
> > >> > > > > > > > >> > >> measurements
> > >> > > > > > > > >> > >> for those 4 variants, and more detailed
> > descriptions
> > >> > too.
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> > >> Thanks!
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> > >> On Fri, Mar 5, 2021 at 12:55 PM Igor Sapego <
> > >> > > > > > isap...@apache.org>
> > >> > > > > > > > >> wrote:
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> > >> > Pavel,
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >> > I've checked the IEP and I like it. The only
> > thing
> > >> > that
> > >> > > > > > seems a
> > >> > > > > > > > bit
> > >> > > > > > > > >> > >> > confusing to me
> > >> > > > > > > > >> > >> > is that there are 4 different variants for
> > clients
> > >> > but
> > >> > > > > there
> > >> > > > > > > are
> > >> > > > > > > > >> cons
> > >> > > > > > > > >> > >> and
> > >> > > > > > > > >> > >> > pros for
> > >> > > > > > > > >> > >> > different variants. Maybe at least few
> sentences
> > >> > should
> > >> > > > be
> > >> > > > > > > > written
> > >> > > > > > > > >> > here
> > >> > > > > > > > >> > >> to
> > >> > > > > > > > >> > >> > give developers who are not familiar with
> > >> > DataStreamer
> > >> > > > some
> > >> > > > > > > ideas
> > >> > > > > > > > >> and
> > >> > > > > > > > >> > >> make
> > >> > > > > > > > >> > >> > it easier for them to choose.
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >> > Best Regards,
> > >> > > > > > > > >> > >> > Igor
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >> > On Thu, Mar 4, 2021 at 3:14 PM Pavel Tupitsyn
> <
> > >> > > > > > > > >> ptupit...@apache.org>
> > >> > > > > > > > >> > >> > wrote:
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >> > > Igniters,
> > >> > > > > > > > >> > >> > >
> > >> > > > > > > > >> > >> > > Please review the IEP [1] and let me know
> what
> > >> you
> > >> > > > think.
> > >> > > > > > > > >> > >> > >
> > >> > > > > > > > >> > >> > > [1]
> > >> > > > > > > > >> > >> > >
> > >> > > > > > > > >> > >> > >
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> >
> > >> > > > > > > > >>
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-68%3A+Thin+Client+Data+Streamer
> > >> > > > > > > > >> > >> > >
> > >> > > > > > > > >> > >> >
> > >> > > > > > > > >> > >>
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> > > --
> > >> > > > > > > > >> > > Sincerely yours, Ivan Daschinskiy
> > >> > > > > > > > >> > >
> > >> > > > > > > > >> >
> > >> > > > > > > > >> >
> > >> > > > > > > > >> > --
> > >> > > > > > > > >> > Sincerely yours, Ivan Daschinskiy
> > >> > > > > > > > >> >
> > >> > > > > > > > >>
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > --
> > >> > > > > > > > > Sincerely yours, Ivan Daschinskiy
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > > >
> > >> > > > > > > > --
> > >> > > > > > > > Sincerely yours, Ivan Daschinskiy
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > > >
> > >> > > > > > --
> > >> > > > > > Sincerely yours, Ivan Daschinskiy
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > > >
> > >> > > > --
> > >> > > > Sincerely yours, Ivan Daschinskiy
> > >> > > >
> > >> > >
> > >> >
> > >> >
> > >> > --
> > >> > Sincerely yours, Ivan Daschinskiy
> > >> >
> > >>
> > >
> >
>

Reply via email to