]
Jonas Lasson commented on ISPN-809:
-----------------------------------
Awesomes :) If you'd need inspirational advice, I'm on larry2kk skype.
I do need this issue to be fixed as I'm running on my own patch right now.
CassandraCacheStore needs special handling of array type keys
-------------------------------------------------------------
Key: ISPN-809
URL:
https://jira.jboss.org/browse/ISPN-809
Project: Infinispan
Issue Type: Bug
Components: Loaders and Stores
Affects Versions: 4.2.0.CR2
Reporter: Jonas Lasson
Assignee: Tristan Tarrant
Priority: Critical
Fix For: 4.2.0.CR3
Currently the Cassandra store is creating CassandraKeys based on the keys .toString
method, see below:
private String hashKey(Object key) {
return entryKeyPrefix + key.toString();
}
When HotRod server is used the key will be a ByteArrayKey, which has a toString that is
non deterministic and outputs (3 examples with the same byte array):
ByteArrayKey{data=ByteArray{size=8, hashCode=33d626a4, array=[2, 62, 5, 74, 79, 78, 65,
83, ..]}}
ByteArrayKey{data=ByteArray{size=8, hashCode=2ada52a1, array=[2, 62, 5, 74, 79, 78, 65,
83, ..]}}
ByteArrayKey{data=ByteArray{size=8, hashCode=5576b9ea, array=[2, 62, 5, 74, 79, 78, 65,
83, ..]}}
As you can see the hashCode is differing even though the byte array is the same.
This is because ByteArrayKey.toString is using Util.printArray(byte[],true) where true
means that a hashCode should be printed as well.
Unfortenaly, the hashcode is calculated with byte[].hashCode() which is not considering
the data in the byte array.
There are several solutions to the problem:
* Have another mechanism to export unique ids from the key instead of toString (with a
possible toString fallback)
* Fix so that ByteArrayKey.toString returns deterministic data. (Still bad solution as
the keys will be very long and not make sense).
* Special handling for ByteArrayKey to calculate the key based on the bytes in the byte
array.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: