ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Denis Magda <dma...@gridgain.com>
Subject Re: All BinaryObjects created by BinaryObjectBuilder stored at the same partition by default
Date Thu, 24 Mar 2016 10:20:34 GMT
+1 for the improvement of JavaDoc because the problem arises only when 
BinaryObjects are used as keys.
Readme.io already has a warning regarding this
https://apacheignite.readme.io/docs/binary-marshaller#modifying-binary-objects-using-binaryobjectbuilder

--
Denis

On 3/24/2016 12:38 PM, Vladimir Ozerov wrote:
> When object has been built, there is no way to know, whether hash code was
> set or not. Zero could be real hash code, as well as not set hash code.
>
> Random is not an option. Any kind of automatic generation is not an option
> as well, because we do not know, how hash code of real class instance is
> calculated.
>
> I honestly do not see a big problem here. We can simply improve JavaDocs.
>
> It could be a problem in some specific cases, like JDBC store. This
> situation require the same solution as already mentioned problems with
> equals and comparators.
>
> Vladimir.
> 24 марта 2016 г. 11:52 пользователь "Yakov Zhdanov" <yzhdanov@apache.org>
> написал:
>
>> Random hash code is not an option.
>>
>> I would suggest cache throws exception on update if binary object created
>> with builder does not have hash code initialized.
>>
>> Vladimir, can we somehow make it possible to know whether hash code was or
>> was not inited on a binary object?
>>
>> --Yakov
>>
>> 2016-03-24 11:43 GMT+03:00 Anton Vinogradov <avinogradov@gridgain.com>:
>>
>>> Hello,
>>>
>>> I found that every BinaryObject created by BinaryObjectBuilder has
>> hashcode
>>> == 0 by default.
>>> This can cause situation that all objects created by code similar to:
>>>
>>> *BinaryObject key = builder.setField("id", i).build();*
>>> *streamer.addData(key, key);*
>>>
>>> will be stored at one partition and this cause grid performance drop.
>>>
>>> Of course user can set hashcode:
>>>
>>> *BinaryObject key = builder.setField("id",
>> i).hashCode(random()).build();*
>>> but there is no guarantee that he will.
>>>
>>> I propose to generate random hashcode or hashcode based on field's
>>> hashcodes in case no hashcode set or to warn user somehow that he have to
>>> specify it.
>>>
>>> Thoughts?
>>>


Mime
View raw message