Here is the ticket:
https://issues.apache.org/jira/browse/IGNITE-2224

On Mon, Dec 21, 2015 at 3:57 PM, Andrey Kornev <andrewkor...@hotmail.com>
wrote:

> Ok, deal! And while we're at it could we add getAllEntries(Set<K>) as per
> Denis suggestion?
>
> Thanks
> Andrey
>
> > From: dsetrak...@apache.org
> > Date: Mon, 21 Dec 2015 15:24:44 -0800
> > Subject: Re: Missing ways to get access to Ignite CacheEntry
> > To: dev@ignite.apache.org
> >
> > Andrey,
> >
> > I think getEntry(…) can be done quickly. Adding another serialization
> > mechanism for cache entries together with a configuration flag may take
> > additional time. I would suggest, again, starting with getEntry method
> and
> > then moving down to queries.
> >
> > D.
> >
> > On Mon, Dec 21, 2015 at 1:04 PM, Andrey Kornev <andrewkor...@hotmail.com
> >
> > wrote:
> >
> > > Personally, I'm firmly in the old-farts camp -- I like things
> consistent.
> > > :))) My motto is: get things right first, and then make them fast.
> > >
> > > As for the queries, I don't understand why do you think that supporting
> > > the version would mean adding lots of branching code? One would only
> have 2
> > > implementations of Ignite's CacheEntry - one with the version field and
> > > another -- without. The latter would just throw an
> > > UnsupportedOperationException or something like that when user calls
> > > CacheEntry.version(). Then, I imagine there would be only one place in
> the
> > > code where the decision as to which implementation to use would have
> to be
> > > made.  Based on the value of Query's includeEntryVersion flag the code
> > > would instantiate either one implementation class or another. That's
> it.
> > > Am I oversimplifying?
> > >
> > > For my use case, I'm actually very interested in adding the entry
> version
> > > support to the queries. The getEntry() came out of the realization that
> > > Ignite doesn't currently provide any way to atomically obtain a cache
> value
> > > along with its version. Truth be told, the EntryProcessor could also be
> > > used as a last resort workaround, but given its current rather
> unfortunate
> > > implementation, we decided against it.
> > >
> > > Regards
> > > Andrey
> > >
> > > > From: dsetrak...@apache.org
> > > > Date: Mon, 21 Dec 2015 12:15:50 -0800
> > > > Subject: Re: Missing ways to get access to Ignite CacheEntry
> > > > To: dev@ignite.apache.org
> > > >
> > > > Andrey,
> > > >
> > > > You got me thinking on whether I belong to the playful performance
> kids
> > > > category, or to the old-fart consistency crowd :)
> > > >
> > > > I agree on the getEntry(…) suggestion, and I think it would be fairly
> > > easy
> > > > to implement, even for the new community members. As far as including
> > > > version into query results, it seems like a larger undertaking, and
> seems
> > > > like it may pollute the existing implementation with additional hacky
> > > code
> > > > branches.
> > > >
> > > > I suggest adding a ticket for the getEntry(…) method only for now.
> What
> > > do
> > > > you think?
> > > >
> > > > D.
> > > >
> > > > On Mon, Dec 21, 2015 at 10:19 AM, Andrey Kornev <
> > > andrewkor...@hotmail.com>
> > > > wrote:
> > > >
> > > > > Couple of points.
> > > > >
> > > > > First,  if it were up to me, I'd keep the API simple & consistent
> by
> > > > > always providing the version as defined by Ignite's CacheEntry
> > > interface,
> > > > > regardless whether it's the query who produces the entry or a
> > > specialized
> > > > > method like getEntry(). Which node is going to consume the data --
> a
> > > > > "client" or "server" -- should not matter either. In this case,
> > > however a
> > > > > concern about perceived performance losses due to  the version
> > > overhead has
> > > > > apparently trumped any API integrity and consistency concerns.
> > > > >
> > > > > Second, given the first point, here's what I think we could do to
> keep
> > > > > everybody (the performance kids and the consistency/integrity
> > > old-farts)
> > > > > happy. )))
> > > > >
> > > > > 1) getEntry(K) unconditionally always returns a valid version
> > > regardless
> > > > > whether it's called from a client or server. In fact, the only
> reason
> > > to
> > > > > ever use this method is to get the entry version. I'd even suggest
> > > going
> > > > > one step further and have the getEntry() method return Ignite's
> > > CacheEntry
> > > > > interface rather than JCache's Cache.Entry (only to be immediately
> > > > > unwrapped to Ignite's CacheEntry).
> > > > >
> > > > > 2) for queries, provide an option on the Ignite's Query class (say,
> > > > > setIncludeEntryVersion(boolean)) that would control whether the
> query
> > > > > should send the version back. By default, it'd be "false" as to
> have no
> > > > > impact on performance. More advanced users ;) would still be able
> to
> > > enjoy
> > > > > API consistency by setting that option to "true".
> > > > >
> > > > > Deal?
> > > > > Andrey
> > > > >
> > > > > > From: dsetrak...@apache.org
> > > > > > Date: Mon, 21 Dec 2015 08:30:02 -0800
> > > > > > Subject: Re: Missing ways to get access to Ignite CacheEntry
> > > > > > To: dev@ignite.apache.org
> > > > > >
> > > > > > On Mon, Dec 21, 2015 at 12:36 AM, Denis Magda <
> dma...@gridgain.com>
> > > > > wrote:
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On 12/21/2015 11:15 AM, Dmitriy Setrakyan wrote:
> > > > > > >
> > > > > > >> On Mon, Dec 21, 2015 at 12:11 AM, Denis Magda <
> > > dma...@gridgain.com>
> > > > > > >> wrote:
> > > > > > >>
> > > > > > >> Why it shouldn't work?
> > > > > > >>> If client receives an entry that has a reference to the entry
> > > with
> > > > > > >>> version, transferred from a server as well as a part of the
> > > response,
> > > > > > >>> then
> > > > > > >>> unwrap(...) should work.
> > > > > > >>> Isn't this feasible to implement?
> > > > > > >>>
> > > > > > >>> The reason is consistency. If getEntry(…) can be unwrapped
> on the
> > > > > client
> > > > > > >> side, then all the query results should be un-wrappable as
> well,
> > > which
> > > > > > >> means that we have to always carry the cache version, even if
> user
> > > > > does
> > > > > > >> not
> > > > > > >> need it.
> > > > > > >>
> > > > > > > The proposal is to add getEntry(...) method exactly for the
> cases
> > > when
> > > > > > > someone needs an entry with a version on a client.
> > > > > > > In all other cases (queries, etc.) the version won't be a part
> of a
> > > > > > > response.
> > > > > > >
> > > > > > > Right, this is inconsistent but if to document everything well
> > > then the
> > > > > > > user will only benefit from the new getEntry(...) method.
> > > > > > > CacheEntry with version is already can be unwrapped from
> specific
> > > > > places
> > > > > > > that are listed in its documentation. We will just broaden the
> > > list.
> > > > > > >
> > > > > >
> > > > > > Romain, Andrey, can you please comment?
> > > > >
> > > > >
> > >
> > >
>
>

Reply via email to