[infinispan-issues] [JBoss JIRA] Commented: (ISPN-809) CassandraCacheStore needs special handling of array type keys

Manik Surtani (JIRA) jira-events at lists.jboss.org
Tue Nov 30 10:08:09 EST 2010


    [ https://jira.jboss.org/browse/ISPN-809?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12566234#comment-12566234 ] 

Manik Surtani commented on ISPN-809:
------------------------------------

You could use Key2StringMapper - which is in the JDBCCacheStore.  Perhaps we'd need to move this interface and the impls in the JDBCCacheStore to the core module so it can be shared across all cache stores.

https://github.com/infinispan/infinispan/blob/master/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/Key2StringMapper.java


> 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: http://www.atlassian.com/software/jira

        


More information about the infinispan-issues mailing list