Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-809

CassandraCacheStore needs special handling of array type keys

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Critical Critical
    • 4.2.0.CR3
    • 4.2.0.CR2
    • Loaders and Stores
    • None

      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.

              ttarrant@redhat.com Tristan Tarrant
              larry2kk_jira Jonas Lasson (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: