Hello.
I'm using cassandra (currently 0.7.0-beta3) in JAVA; with library
hector.
It seems that cassandra ignore the count of SliceRange when received
get_slice request.
I traced cassandra source code, and the part of code that retrieving
columns does not get count as parameter. See,
getSlice(List<ReadCommand> commands, ConsistencyLevel consistency_level)
method in org.apache.cassandra.thrift.CassandraServer class. (line
224~238 in 0.7.0-beta3)
private Map<ByteBuffer, List<ColumnOrSuperColumn>>
getSlice(List<ReadCommand> commands, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException,
TimedOutException
{
Map<DecoratedKey, ColumnFamily> columnFamilies =
readColumnFamily(commands, consistency_level);
Map<ByteBuffer, List<ColumnOrSuperColumn>> columnFamiliesMap =
new HashMap<ByteBuffer, List<ColumnOrSuperColumn>>();
for (ReadCommand command: commands)
{
ColumnFamily cf =
columnFamilies.get(StorageService.getPartitioner().decorateKey(command.key));
boolean reverseOrder = command instanceof
SliceFromReadCommand && ((SliceFromReadCommand)command).reversed;
List<ColumnOrSuperColumn> thriftifiedColumns =
thriftifyColumnFamily(cf, command.queryPath.superColumnName != null,
reverseOrder);
columnFamiliesMap.put(command.key, thriftifiedColumns);
}
return columnFamiliesMap;
}
When I inspected in debug mode, the command variable in for loop has the
valid count value. The thriftifyColumnFamily(cf,
command.queryPath.superColumnName != null, reverseOrder) method actually
get columns but it has no way to get count value, and return all value
that were not limit by the count.