Denis, I think it is important that we know which specific field to use for the affinity resolution, but I don't see any issue in using both, primary and foreign keys, for hashcode and equality. Do you?
D. On Tue, Apr 11, 2017 at 11:46 AM, Igor Sapego <isap...@apache.org> wrote: > Denis, > > The whole binary representation of the object is used now > for hash code generation and equality comparison. So the > answer - all fields are used for this. > > Best Regards, > Igor > > On Mon, Apr 10, 2017 at 9:50 PM, Denis Magda <dma...@apache.org> wrote: > > > Considering this simple example > > > > INSERT (id, orgId, name, age, address) into Person… > > > > where id and orgId define Person’s affinity key - PersonKey(id, orgId) > > > > How do we know which fields to use for hash code generation and equality > > comparison? QueryEntity? > > > > No, it’s unclear how to document it properly. > > > > — > > Denis > > > > > On Apr 10, 2017, at 11:14 AM, Vladimir Ozerov <voze...@gridgain.com> > > wrote: > > > > > > There is no more such resolver. It was removed. > > > > > > On Mon, Apr 10, 2017 at 8:58 PM, Denis Magda <dma...@apache.org> > wrote: > > > > > >> Vovan, > > >> > > >> Before I fix the documentation, what’t the replacement for > > >> BinaryFieldIdentiyResolver we used to define field for hash code > > >> calculation and equality comparison when DML statements are used? > > >> https://apacheignite.readme.io/docs/binary-marshaller# > > >> section-binary-field-identity-resolver <https://apacheignite.readme. > > >> io/docs/binary-marshaller#section-binary-field-identity-resolver> > > >> > > >> — > > >> Denis > > >> > > >>> On Apr 9, 2017, at 7:39 AM, Vladimir Ozerov <voze...@gridgain.com> > > >> wrote: > > >>> > > >>> Resolvers were essential for DML because we had broken comparison > > >> semantics > > >>> of binary objects. This is not the case now. > > >>> > > >>> Resolver as a whole is normal practice. E.g. it is implemented in > .NET > > on > > >>> core language level and widely used in many cases. Hazelcast has it > as > > >> well > > >>> AFAIK. So it is wrong to think that the whole idea is useless. Think > of > > >> it > > >>> as a comparator's brother. > > >>> > > >>> The only reason why we need to remove it is missing hash index in new > > >>> architecture. It makes sense, as it is better to have AI 2.0 without > > >> them, > > >>> than no AI 2.0 :-) > > >>> > > >>> 09 апр. 2017 г. 17:31 пользователь "Sergi Vladykin" < > > >>> sergi.vlady...@gmail.com> написал: > > >>> > > >>>> I guess Resolvers were added to DML just because they already > existed > > >> since > > >>>> 1.9 and we were forced to support them in all the parts of our > > product. > > >>>> > > >>>> We have to stop this practice to add features without clear real > life > > >> use > > >>>> cases for them. > > >>>> > > >>>> Sergi > > >>>> > > >>>> 2017-04-09 17:00 GMT+03:00 Denis Magda <dma...@gridgain.com>: > > >>>> > > >>>>> Sergi, Vovan, > > >>>>> > > >>>>> Sorry for being annoying but I still didn't get an answer on > whether > > >> the > > >>>>> resolvers are the must for DML. The main reason why we made them up > > >> some > > >>>>> time ago is to support specific DML use cases. However I can't > recall > > >> the > > >>>>> use cases. > > >>>>> > > >>>>> -- > > >>>>> Denis > > >>>>> > > >>>>> On Sun, Apr 9, 2017 at 6:54 AM, Sergi Vladykin < > > >> sergi.vlady...@gmail.com > > >>>>> > > >>>>> wrote: > > >>>>> > > >>>>>> Ok, we need to do 2 things here: > > >>>>>> > > >>>>>> 1. Drop the resolvers from the source code. > > >>>>>> 2. Write a good page in docs on "What makes a correct cache key". > > >>>>>> > > >>>>>> Who can do that? > > >>>>>> > > >>>>>> Sergi > > >>>>>> > > >>>>>> 2017-04-07 9:48 GMT+03:00 Sergi Vladykin < > sergi.vlady...@gmail.com > > >: > > >>>>>> > > >>>>>>> It is possible to try adding support of comparison to Resolvers, > > but > > >>>>> the > > >>>>>>> whole approach looks wrong and for now it is better to get rid of > > it > > >>>>>> while > > >>>>>>> we have a chance to break compatibility. > > >>>>>>> > > >>>>>>> Sergi > > >>>>>>> > > >>>>>>> 2017-04-07 9:19 GMT+03:00 Valentin Kulichenko < > > >>>>>>> valentin.kuliche...@gmail.com>: > > >>>>>>> > > >>>>>>>> The discussion should've been started with that :) If supporting > > >>>>>> resolvers > > >>>>>>>> in new architecture is not possible or means too big effort, > then > > >>>> it's > > >>>>>>>> definitely not worth it. > > >>>>>>>> > > >>>>>>>> -Val > > >>>>>>>> > > >>>>>>>> On Thu, Apr 6, 2017 at 8:52 PM, Vladimir Ozerov < > > >>>> voze...@gridgain.com > > >>>>>> > > >>>>>>>> wrote: > > >>>>>>>> > > >>>>>>>>> Dima, > > >>>>>>>>> > > >>>>>>>>> Yes, they may explode some internals of our indexes. > > >>>>>>>>> > > >>>>>>>>> 06 апр. 2017 г. 23:32 пользователь "Dmitriy Setrakyan" < > > >>>>>>>>> dsetrak...@apache.org> написал: > > >>>>>>>>> > > >>>>>>>>>> Guys, > > >>>>>>>>>> > > >>>>>>>>>> Isn't the main issue here that we cannot use the Identity > > >>>>> Resolvers > > >>>>>> in > > >>>>>>>>>> BTrees in the 2.0 version? If yes, then we have to remove them > > >>>> no > > >>>>>>>> matter > > >>>>>>>>>> what. > > >>>>>>>>>> > > >>>>>>>>>> D. > > >>>>>>>>>> > > >>>>>>>>>> On Thu, Apr 6, 2017 at 1:23 PM, Sergi Vladykin < > > >>>>>>>> sergi.vlady...@gmail.com > > >>>>>>>>>> > > >>>>>>>>>> wrote: > > >>>>>>>>>> > > >>>>>>>>>>> Binary key representation is stable when we always have equal > > >>>>>>>>> serialized > > >>>>>>>>>>> bytes when the original keys are equal. > > >>>>>>>>>>> > > >>>>>>>>>>> Resolver allows you to have some extra info in the Key and > > >>>> equal > > >>>>>>>> Keys > > >>>>>>>>>> will > > >>>>>>>>>>> be serialized into different bytes, which is wrong. > > >>>>>>>>>>> > > >>>>>>>>>>> Look at the example what you can do with resolvers: > > >>>>>>>>>>> > > >>>>>>>>>>> We may have some data entry with fields a, b, c. Let's say > the > > >>>>>>>> unique > > >>>>>>>>>> part > > >>>>>>>>>>> here is `a` and it the only fields used in Key equals() and > > >>>>>>>> hashCode(). > > >>>>>>>>>>> Still we may have the following layouts: > > >>>>>>>>>>> > > >>>>>>>>>>> 1. Ka -> Vbc > > >>>>>>>>>>> 2. Kab -> Vc > > >>>>>>>>>>> 3. Kabc -> Boolean.TRUE > > >>>>>>>>>>> > > >>>>>>>>>>> The only 1 is a correct layout, others are plain wrong > > >>>> variants > > >>>>>> (but > > >>>>>>>>> they > > >>>>>>>>>>> are still possible with Resolvers) because everything that > > >>>> does > > >>>>>> not > > >>>>>>>>> make > > >>>>>>>>>>> Key unique must be in Value. > > >>>>>>>>>>> > > >>>>>>>>>>> We want to clearly state that if you have something in Key, > > >>>> that > > >>>>>> is > > >>>>>>>> not > > >>>>>>>>>>> part of equals(), then the Key is invalid and that stuff must > > >>>> be > > >>>>>> in > > >>>>>>>>>> Value. > > >>>>>>>>>>> This allows us to rely on binary representation of a Key to > be > > >>>>>>>> stable > > >>>>>>>>> and > > >>>>>>>>>>> have some more optimizations and code simplifications with > > >>>>> respect > > >>>>>>>> to > > >>>>>>>>>> these > > >>>>>>>>>>> assumptions. > > >>>>>>>>>>> > > >>>>>>>>>>> Sergi > > >>>>>>>>>>> > > >>>>>>>>>>> 2017-04-06 14:24 GMT+03:00 Valentin Kulichenko < > > >>>>>>>>>>> valentin.kuliche...@gmail.com>: > > >>>>>>>>>>> > > >>>>>>>>>>>> Even with my vast expirience I would never claim that I've > > >>>>> seen > > >>>>>>>>>>>> "everything" :) > > >>>>>>>>>>>> > > >>>>>>>>>>>> What do you mean by stable binary key representation and how > > >>>>>>>>> resolvers > > >>>>>>>>>>> make > > >>>>>>>>>>>> it unstable? > > >>>>>>>>>>>> > > >>>>>>>>>>>> -Val > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Thu, Apr 6, 2017 at 2:36 AM, Sergi Vladykin < > > >>>>>>>>>> sergi.vlady...@gmail.com > > >>>>>>>>>>>> > > >>>>>>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> Val, > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> I know that you have really vast experience in Ignite > > >>>>>>>> deployments > > >>>>>>>>> and > > >>>>>>>>>>>>> probably saw everything that can happen. Did you ever see > > >>>>>>>> identity > > >>>>>>>>>>>>> resolvers use in real life? I guess no. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Hibernate example is bad here, because if their key is > > >>>>>> unstable > > >>>>>>>>>> across > > >>>>>>>>>>>>> multiple JVMs, it means that it was not designed for > > >>>>>> distributed > > >>>>>>>>>>> caches a > > >>>>>>>>>>>>> priori. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Also knowing in advance about stable binary key > > >>>>> representation > > >>>>>>>>> allows > > >>>>>>>>>>> us > > >>>>>>>>>>>> to > > >>>>>>>>>>>>> apply additional optimizations, like comparing keys > > >>>> without > > >>>>>>>>> detaching > > >>>>>>>>>>>> them > > >>>>>>>>>>>>> from offheap memory. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> We always will be able to add this stuff back if we see > > >>>>> users > > >>>>>>>>> really > > >>>>>>>>>>> need > > >>>>>>>>>>>>> it. Let's remove it for 2.0. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Sergi > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> 2017-04-06 11:21 GMT+03:00 Valentin Kulichenko < > > >>>>>>>>>>>>> valentin.kuliche...@gmail.com>: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> Alex, > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> To be honest, I don't understand the reasoning behind > > >>>> the > > >>>>>>>>> removal. > > >>>>>>>>>> I > > >>>>>>>>>>>>> think > > >>>>>>>>>>>>>> resolvers provide good flexibility for different corner > > >>>>>> cases > > >>>>>>>> and > > >>>>>>>>>>> it's > > >>>>>>>>>>>> a > > >>>>>>>>>>>>>> good thing to have them. Note that they can be applied > > >>>> not > > >>>>>>>> only > > >>>>>>>>> to > > >>>>>>>>>>>> cache > > >>>>>>>>>>>>>> keys, but to any binary objects. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hibernate issue is actually a good example of such use > > >>>>> case. > > >>>>>>>> The > > >>>>>>>>>> fact > > >>>>>>>>>>>>> that > > >>>>>>>>>>>>>> we found an alternative solution doesn't actually mean > > >>>>>>>> anything, > > >>>>>>>>>>>> because > > >>>>>>>>>>>>>> what if this happened not in our module, but in user's > > >>>>>>>>> application? > > >>>>>>>>>>>>>> Unfortunately, we can't predict everything. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Error proneness is not a very strong argument either, > > >>>>>> because > > >>>>>>>> in > > >>>>>>>>> my > > >>>>>>>>>>>> view > > >>>>>>>>>>>>>> these resolvers are as much error prone as > > >>>> BinaryIdMapper, > > >>>>>> for > > >>>>>>>>>>> example. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> -Val > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> On Wed, Apr 5, 2017 at 11:44 PM, Alexey Goncharuk < > > >>>>>>>>>>>>>> alexey.goncha...@gmail.com> wrote: > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Denis, > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Can you suggest a use-case where identity resolver is > > >>>>>> needed > > >>>>>>>>>> (given > > >>>>>>>>>>>>> that > > >>>>>>>>>>>>>> we > > >>>>>>>>>>>>>>> agree that a key must contain only valuable fields)? > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> 2017-04-05 22:08 GMT+03:00 Denis Magda < > > >>>>> dma...@apache.org > > >>>>>>> : > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Where do you want to remove the identity resolvers > > >>>>> from? > > >>>>>>>> If > > >>>>>>>>>> it’s > > >>>>>>>>>>>>>> related > > >>>>>>>>>>>>>>>> to the internals of Hibernate module then it’s fine > > >>>>> but > > >>>>>> if > > >>>>>>>>> you > > >>>>>>>>>>>>> suggest > > >>>>>>>>>>>>>>>> removing identity resolvers public interfaces then > > >>>> it > > >>>>>>>> might > > >>>>>>>>> be > > >>>>>>>>>> a > > >>>>>>>>>>>>> haste > > >>>>>>>>>>>>>>>> decision. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> — > > >>>>>>>>>>>>>>>> Denis > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> On Apr 5, 2017, at 7:42 AM, Alexey Goncharuk < > > >>>>>>>>>>>>>>> alexey.goncha...@gmail.com> > > >>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> +1, I see no other reasons to keep it. > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> 2017-04-05 13:59 GMT+03:00 Sergi Vladykin < > > >>>>>>>>>>>>> sergi.vlady...@gmail.com > > >>>>>>>>>>>>>>> : > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> +1 > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Lets drop them. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Sergi > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> 2017-04-05 13:50 GMT+03:00 Dmitriy Govorukhin < > > >>>>>>>>>>>>>>>>>> dmitriy.govoruk...@gmail.com> > > >>>>>>>>>>>>>>>>>> : > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Hi guys, i implemented proxy for IgniteCache in > > >>>>>>>> hibernate > > >>>>>>>>>>>>>>> integration, > > >>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>> proxy transformate cacheKey to our key wrapper, > > >>>>>> leaves > > >>>>>>>>> only > > >>>>>>>>>>>>>> required > > >>>>>>>>>>>>>>>>>>> field. I think we can remove identity resolve, > > >>>> it > > >>>>>>>> should > > >>>>>>>>>> not > > >>>>>>>>>>>>> broke > > >>>>>>>>>>>>>>>>>>> integration with hibernate. Any objections? > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 11:07 PM, Valentin > > >>>>>> Kulichenko > > >>>>>>>> < > > >>>>>>>>>>>>>>>>>>> valentin.kuliche...@gmail.com> wrote: > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> I'm not saying there is no alternative > > >>>> solution. > > >>>>>> But > > >>>>>>>>> let's > > >>>>>>>>>>>>>> implement > > >>>>>>>>>>>>>>>> it > > >>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>> prove that it works first, and remove resolvers > > >>>>>> only > > >>>>>>>>> after > > >>>>>>>>>>>> that. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> -Val > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 12:18 PM, Sergi > > >>>> Vladykin > > >>>>> < > > >>>>>>>>>>>>>>>>>>> sergi.vlady...@gmail.com > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Guys, nothing is impossible if you know a bit > > >>>>>> about > > >>>>>>>>>>>> reflection > > >>>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>>> Java > > >>>>>>>>>>>>>>>>>>> :) > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> We had a look at the CacheKey class and it is > > >>>>>> easily > > >>>>>>>>>>>>> replaceable. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Sergi > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> 2017-03-29 21:49 GMT+03:00 Dmitriy Setrakyan < > > >>>>>>>>>>>>>>> dsetrak...@apache.org > > >>>>>>>>>>>>>>>>>>> : > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 11:43 AM, Valentin > > >>>>>>>> Kulichenko > > >>>>>>>>> < > > >>>>>>>>>>>>>>>>>>>>>> valentin.kuliche...@gmail.com> wrote: > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> "Hibernate key" is the CacheKey class I was > > >>>>>>>> referring > > >>>>>>>>>> to. > > >>>>>>>>>>>>> It's > > >>>>>>>>>>>>>>>>>>>> provided > > >>>>>>>>>>>>>>>>>>>>>> by > > >>>>>>>>>>>>>>>>>>>>>>> Hibernate, not by user and not by us. So I'm > > >>>>> not > > >>>>>>>> sure > > >>>>>>>>>>> it's > > >>>>>>>>>>>>>>>>>> possible > > >>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>> replace it. > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> If it is impossible to replace or get rid of > > >>>>> the > > >>>>>>>>>> Hibernate > > >>>>>>>>>>>>> key, > > >>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>>>>> discussion valid at all? > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >> > > >> > > > > >