Author: slebresne Date: Mon Apr 11 17:52:13 2011 New Revision: 1091148 URL: http://svn.apache.org/viewvc?rev=1091148&view=rev Log: Fix range slice for counters patch by slebresne; reviewed by jbellis for CASSANDRA-2342
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java cassandra/branches/cassandra-0.8/test/system/test_thrift_server.py Modified: cassandra/branches/cassandra-0.8/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1091148&r1=1091147&r2=1091148&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8/CHANGES.txt Mon Apr 11 17:52:13 2011 @@ -1,7 +1,7 @@ 0.8-dev * remove Avro RPC support (CASSANDRA-926) * adds support for columns that act as incr/decr counters - (CASSANDRA-1072, 1937, 1944, 1936, 2101, 2093, 2288, 2105, 2384, 2236) + (CASSANDRA-1072, 1937, 1944, 1936, 2101, 2093, 2288, 2105, 2384, 2236, 2342) * CQL (CASSANDRA-1703, 1704, 1705, 1706, 1707, 1708, 1710, 1711, 1940, 2124, 2302, 2277) * avoid double RowMutation serialization on write path (CASSANDRA-1800) Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java?rev=1091148&r1=1091147&r2=1091148&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java Mon Apr 11 17:52:13 2011 @@ -2206,6 +2206,24 @@ public class CliClient extends CliUserHe sessionState.out.println(")"); } + else if (columnOrSuperColumn.counter_column != null) + { + CounterColumn col = columnOrSuperColumn.counter_column; + + sessionState.out.printf("=> (counter=%s, value=%s)%n", formatColumnName(keySpace, columnFamilyName, col.name), col.value); + } + else if (columnOrSuperColumn.counter_super_column != null) + { + CounterSuperColumn superCol = columnOrSuperColumn.counter_super_column; + sessionState.out.printf("=> (super_column=%s,", formatColumnName(keySpace, columnFamilyName, superCol.name)); + + for (CounterColumn col : superCol.columns) + { + sessionState.out.printf("%n (counter=%s, value=%s)", formatSubcolumnName(keySpace, columnFamilyName, col.name), col.value); + } + + sessionState.out.println(")"); + } } } Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1091148&r1=1091147&r2=1091148&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java Mon Apr 11 17:52:13 2011 @@ -575,7 +575,7 @@ public class CassandraServer implements String keyspace = state().getKeyspace(); state().hasColumnFamilyAccess(column_parent.column_family, Permission.READ); - CFMetaData metadata = ThriftValidation.validateColumnFamily(keyspace, column_parent.column_family, false); + CFMetaData metadata = ThriftValidation.validateColumnFamily(keyspace, column_parent.column_family); ThriftValidation.validateColumnParent(metadata, column_parent); ThriftValidation.validatePredicate(metadata, column_parent, predicate); ThriftValidation.validateKeyRange(range); Modified: cassandra/branches/cassandra-0.8/test/system/test_thrift_server.py URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/system/test_thrift_server.py?rev=1091148&r1=1091147&r2=1091148&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/test/system/test_thrift_server.py (original) +++ cassandra/branches/cassandra-0.8/test/system/test_thrift_server.py Mon Apr 11 17:52:13 2011 @@ -105,6 +105,12 @@ def _insert_range(): client.insert('key1', ColumnParent('Standard1'), Column('c3', 'value3', 0), ConsistencyLevel.ONE) time.sleep(0.1) +def _insert_counter_range(): + client.add('key1', ColumnParent('Counter1'), CounterColumn('c1', 1), ConsistencyLevel.ONE) + client.add('key1', ColumnParent('Counter1'), CounterColumn('c2', 2), ConsistencyLevel.ONE) + client.add('key1', ColumnParent('Counter1'), CounterColumn('c3', 3), ConsistencyLevel.ONE) + time.sleep(0.1) + def _verify_range(): p = SlicePredicate(slice_range=SliceRange('c1', 'c2', False, 1000)) result = client.get_slice('key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE) @@ -126,6 +132,27 @@ def _verify_range(): result = client.get_slice('key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE) assert len(result) == 2, result +def _verify_counter_range(): + p = SlicePredicate(slice_range=SliceRange('c1', 'c2', False, 1000)) + result = client.get_slice('key1', ColumnParent('Counter1'), p, ConsistencyLevel.ONE) + assert len(result) == 2 + assert result[0].counter_column.name == 'c1' + assert result[1].counter_column.name == 'c2' + + p = SlicePredicate(slice_range=SliceRange('c3', 'c2', True, 1000)) + result = client.get_slice('key1', ColumnParent('Counter1'), p, ConsistencyLevel.ONE) + assert len(result) == 2 + assert result[0].counter_column.name == 'c3' + assert result[1].counter_column.name == 'c2' + + p = SlicePredicate(slice_range=SliceRange('a', 'z', False, 1000)) + result = client.get_slice('key1', ColumnParent('Counter1'), p, ConsistencyLevel.ONE) + assert len(result) == 3, result + + p = SlicePredicate(slice_range=SliceRange('a', 'z', False, 2)) + result = client.get_slice('key1', ColumnParent('Counter1'), p, ConsistencyLevel.ONE) + assert len(result) == 2, result + def _set_keyspace(keyspace): client.set_keyspace(keyspace) @@ -136,6 +163,13 @@ def _insert_super_range(): client.insert('key1', ColumnParent('Super1', 'sc3'), Column(_i64(7), 'value7', 0), ConsistencyLevel.ONE) time.sleep(0.1) +def _insert_counter_super_range(): + client.add('key1', ColumnParent('SuperCounter1', 'sc1'), CounterColumn(_i64(4), 4), ConsistencyLevel.ONE) + client.add('key1', ColumnParent('SuperCounter1', 'sc2'), CounterColumn(_i64(5), 5), ConsistencyLevel.ONE) + client.add('key1', ColumnParent('SuperCounter1', 'sc2'), CounterColumn(_i64(6), 6), ConsistencyLevel.ONE) + client.add('key1', ColumnParent('SuperCounter1', 'sc3'), CounterColumn(_i64(7), 7), ConsistencyLevel.ONE) + time.sleep(0.1) + def _verify_super_range(): p = SlicePredicate(slice_range=SliceRange('sc2', 'sc3', False, 2)) result = client.get_slice('key1', ColumnParent('Super1'), p, ConsistencyLevel.ONE) @@ -149,6 +183,19 @@ def _verify_super_range(): assert result[0].super_column.name == 'sc3' assert result[1].super_column.name == 'sc2' +def _verify_counter_super_range(): + p = SlicePredicate(slice_range=SliceRange('sc2', 'sc3', False, 2)) + result = client.get_slice('key1', ColumnParent('SuperCounter1'), p, ConsistencyLevel.ONE) + assert len(result) == 2 + assert result[0].counter_super_column.name == 'sc2' + assert result[1].counter_super_column.name == 'sc3' + + p = SlicePredicate(slice_range=SliceRange('sc3', 'sc2', True, 2)) + result = client.get_slice('key1', ColumnParent('SuperCounter1'), p, ConsistencyLevel.ONE) + assert len(result) == 2 + assert result[0].counter_super_column.name == 'sc3' + assert result[1].counter_super_column.name == 'sc2' + def _verify_super(supercf='Super1', key='key1'): assert client.get(key, ColumnPath(supercf, 'sc1', _i64(4)), ConsistencyLevel.ONE).column == Column(_i64(4), 'value4', 0) slice = [result.super_column @@ -1742,6 +1789,16 @@ class TestMutations(ThriftTester): assert counters['key2'][0].counter_column.value == d1+d2 assert counters['key2'][1].counter_column.value == d1 + def test_counter_get_slice_range(self): + _set_keyspace('Keyspace1') + _insert_counter_range() + _verify_counter_range() + + def test_counter_get_slice_super_range(self): + _set_keyspace('Keyspace1') + _insert_counter_super_range() + _verify_counter_super_range() + def test_index_scan(self): _set_keyspace('Keyspace1') client.insert('key1', ColumnParent('Indexed1'), Column('birthdate', _i64(1), 0), ConsistencyLevel.ONE)