Vova,

> Public API is the face of our product.
> We cannot and do not want to change it in a rush.
> It is not a big problem if we spend additional week or month for API
design

Fully agreed.

I'm not trying to speed up changes, all I try is separate two discussions:

* ticket implementation based on existing API
* design of new API

> It is much better *than* extend*ing* confusing behavior *of *already confusing
and overengineered API

Ignite already have a ContinuousQuery
It's a matter of fact.
Ticket goal is provide some useful feature to the user.
I think it a good thing.

Can you list confusions that added by ticket implementation?


2017-09-12 19:47 GMT+03:00 Vladimir Ozerov <voze...@gridgain.com>:

> I meant "It is much better *than* extend*ing* confusing behavior *of
> *already
> confusing and overengineered API."
>
> On Tue, Sep 12, 2017 at 7:35 PM, Vladimir Ozerov <voze...@gridgain.com>
> wrote:
>
> > Nikolay,
> >
> > Public API is the face of our product. We cannot and do not want to
> change
> > it in a rush. This ticket was in a backlog for more than 2 years. It is
> not
> > a big problem if we spend additional week or month for API design. It is
> > much better to extend confusing behavior on already confusing and
> > overengineered API.
> >
> > On Tue, Sep 12, 2017 at 6:47 PM, Николай Ижиков <nizhikov....@gmail.com>
> > wrote:
> >
> >> Vova
> >>
> >> > I propose to deprecate current continuous queries and develop new API.
> >> > This should not break anything.
> >>
> >> If the community agrees that *whole* continuous query API is bad - it
> OK.
> >> Let's develop new API.
> >>
> >> But developing new public API and implementing it is a very long
> process.
> >> One can see it based on this thread :)
> >>
> >> I think my implementation [1] of transformers for ContinuousQuery make
> >> things better for a user because remote transformers can lead to
> >> significant performance win.
> >>
> >> > Adding transformers on top of current API will make it total mess.
> >>
> >> I propose two things:
> >>
> >> 1. Continue discussion of current task [2] with scope limited by current
> >> API.
> >> 2. Start a discussion and work on new API. I think we can start with
> >> listing things that make current API bad. I can drive such a discussion.
> >>
> >> [1] https://github.com/apache/ignite/pull/2372
> >> [2] https://issues.apache.org/jira/browse/IGNITE-425
> >>
> >>
> >> 2017-09-12 17:55 GMT+03:00 Dmitriy Setrakyan <dsetrak...@apache.org>:
> >>
> >> > Vladimir, are their factories for the proposed listeners?
> >> >
> >> > On Tue, Sep 12, 2017 at 7:52 AM, Alexey Goncharuk <
> >> > alexey.goncha...@gmail.com> wrote:
> >> >
> >> > > Vladimir,
> >> > >
> >> > > Can you please clarify how the proposed API will work?
> >> > >
> >> > > My opinion is that our query API is big piece of ... you know,
> >> especially
> >> > > > ContinuousQuery. A lot of concepts and features are mixed in a
> >> single
> >> > > > entity, what makes it hard to understand and use. Let's finally
> >> > deprecate
> >> > > > ContinuousQuery and design nice and consistent API. E.g.:
> >> > > >
> >> > > > interface IgniteCache {
> >> > > >     UUID addListener(CacheEntryListener listener)
> >> > > >     void removeListener(UUID listenerId);
> >> > > > }
> >> > > >
> >> > > > This method set's a listener on all nodes which will process event
> >> > > locally,
> >> > > > no network communication.
> >> > >
> >> > >
> >> > > Do I understand correctly that CacheEntryListener will have a method
> >> like
> >> > > onEvent() which will accept the cache event?
> >> > >
> >> > >
> >> > > > Now if you want semantics similar to existing
> >> > > > continuous queries, you use special entry listener type:
> >> > > >
> >> > > > class ContinuousQueryCacheEntryListener implements
> >> CacheEntryListener
> >> > {
> >> > > >     ContinuousQueryRemoteFilter rmtFilter;
> >> > > >     ContinuousQueryRemoteTransformer rmtTransformer;
> >> > > >     ContinuousQueryLocalCallback locCb;
> >> > > > }
> >> > > >
> >> > > >
> >> > > This becomes confusing: while the ContinuousQueryCacheEntryListener
> >> > itself
> >> > > has the onEvent() method, which is supposed to be called on event
> >> nodes,
> >> > it
> >> > > also has a rmtFilter, which will also be called on event nodes. Will
> >> the
> >> > > onEvent() then invoked on the listener anyway, regardless of the
> >> filter
> >> > > result? Finally, the listener will have a local callback field,
> which
> >> > will
> >> > > be called on the originating node. This sounds way more tricky to me
> >> than
> >> > > the current API.
> >> > >
> >> > >
> >> > > > Last, "initial query" concept should be dropped from "continuous
> >> query"
> >> > > > feature completely. It doesn't guarantee any kind of atomicity or
> >> > > > visibility wrt to cache events, so it adds no value. The same
> >> behavior
> >> > > > could be achieved as follows:
> >> > > >
> >> > > > cache.addListener(...)
> >> > > > QueryCursor cursor = cache.query(initialQuery);
> >> > > >
> >> > > >
> >> > > Agree with this.
> >> > >
> >> >
> >>
> >>
> >>
> >> --
> >> Nikolay Izhikov
> >> nizhikov....@gmail.com
> >>
> >
> >
>



-- 
Nikolay Izhikov
nizhikov....@gmail.com

Reply via email to