You should start by trying 0.7 RC1. Some bugs with the use of ByteBuffers have been corrected since beta2.
If you still have problem, then it's likely a bug, the byteBuffer should not be changed from under you. If it still doesn't work with RC1, it would be very helpful if you can provide a simple script that reproduce the behavior you describe. On Mon, Nov 29, 2010 at 12:07 PM, eggli <aeg...@gmail.com> wrote: > > 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? >