incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From eggli <aeg...@gmail.com>
Subject The key list of multiget_slice's parameter has been changed unexpectedly.
Date Mon, 29 Nov 2010 11:07:21 GMT

Hi everyone, we are working on a Java product based on Cassandra since 0.5, and Cassandra
made a very huge change in 0.7 beta 2, which changes all byte array into ByteBuffers, and
we found this problem which confuses us a lot, here's the detail about what happened:

The multiget_slice method in Cassandra.Iface indicated that it requires a list of keys for
multi get slice query, which we believed we have to give every individual keys to get the
data we need, and according to the Java doc, we will get a Map result, which uses a  ByteBuffer
as key and ColunmOrSuperColumn as value, we made a guess that the ByteBuffer is the key we
send for query, in the case above, the result Map should looks like if we give a key list
<A,B,C> :


Key of A -> Data of A
Key of B -> Data of B
Key of C -> Data of C

In order to get Data of A from the result map, all we need to do is perform a resultMap.get(A),
but we got problem here: The result map's key is something else, it's not the key we gave
before, in the case above, it's no longer a list of <A,B,C> while the value is exactly
the data we need, but it's very troublesome we are unable to find the corresponding data from
the key.

We made a guess that the key ByteBuffers has been changed in the query process due to call
by reference, and we found this in the server's source code which looks like that the key
has been changed unexpectedly in org.apache.cassandra.thrift.CassandraServer's getSlice method:

columnFamilies.get(StorageService.getPartitioner().decorateKey(command.key));

Looks like the key has been "decorated" for some purpose, and it's has been changed in the
process due to the nature of ByteBuffer, and the decorated key has been used as the key in
the result map.

columnFamiliesMap.put(command.key, thriftifiedColumns);

Are we misinterpreted the Java Doc API or is this is a bug?

Mime
View raw message