+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" <yzhda...@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 <avinogra...@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?