It returned all columns within the range of start and end without regard to the count. the CF is super column family and I send the range of super column names of type Long. (and sub column name was UTF8)
I put 2000 super columns in a row, and tried to read the first 50 columns in some range of columns. I inspected StorageProxy.readProtocol() after read your reply, and got the command object, of class SliceFromReadCommand, has the 'count' member variable having int value 50. I test get_slice request to super column family of UTF8Type/UTF8Type for super column name/column name, and this test was successfully return the columns with requested count. 2010-11-18 (목), 00:35 +1300, aaron morton: > The CassandraServer is not doing the read, step through the code from the > call to readColumnFamily() in getSlice(). > > The read is passed to the StorageProxy.readProtocol() which looks at the CL > and determines if its a weak or strong read, sends it out to all the replicas > and manages everything. Eventually the request ends up as the > ReadVerbHandler() where it will deserialise an instance of the > SliceFromReadCommand and call it's getRow(). From there you can trace through > how the count is used. > > Do you have a case where a call to the API returned more or less data than > expected? > > Hope that helps. > Aaron > > On 17 Nov 2010, at 21:03, Hayarobi Park wrote: > > > 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. > > > > >