def rename_test(self): session = self.prepare(start_rpc=True) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'test' cfdef.column_type = 'Standard' cfdef.comparator_type = 'CompositeType(Int32Type, Int32Type, Int32Type)' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' client.set_keyspace('ks') client.system_add_column_family(cfdef) session.execute( "INSERT INTO ks.test (key, column1, column2, column3, value) VALUES ('foo', 4, 3, 2, 'bar')" ) time.sleep(1) session.execute( "ALTER TABLE test RENAME column1 TO foo1 AND column2 TO foo2 AND column3 TO foo3" ) assert_one(session, "SELECT foo1, foo2, foo3 FROM test", [4, 3, 2])
def rename_test(self): """ Check that a thrift-created table can be renamed via CQL: - create a table via the thrift interface - INSERT a row via CQL - ALTER the name of the table via CQL - SELECT from the table and assert the values inserted are there """ session = self.prepare(start_rpc=True) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'test' cfdef.column_type = 'Standard' cfdef.comparator_type = 'CompositeType(Int32Type, Int32Type, Int32Type)' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' client.set_keyspace('ks') client.system_add_column_family(cfdef) session.execute("INSERT INTO ks.test (key, column1, column2, column3, value) VALUES ('foo', 4, 3, 2, 'bar')") session.execute("ALTER TABLE test RENAME column1 TO foo1 AND column2 TO foo2 AND column3 TO foo3") assert_one(session, "SELECT foo1, foo2, foo3 FROM test", [4, 3, 2])
def rename_test(self): session = self.prepare(start_rpc=True) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'test' cfdef.column_type = 'Standard' cfdef.comparator_type = 'CompositeType(Int32Type, Int32Type, Int32Type)' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' client.set_keyspace('ks') client.system_add_column_family(cfdef) session.execute("INSERT INTO ks.test (key, column1, column2, column3, value) VALUES ('foo', 4, 3, 2, 'bar')") time.sleep(1) session.execute("ALTER TABLE test RENAME column1 TO foo1 AND column2 TO foo2 AND column3 TO foo3") assert_one(session, "SELECT foo1, foo2, foo3 FROM test", [4, 3, 2])
def rename_test(self): """ Check that a thrift-created table can be renamed via CQL: - create a table via the thrift interface - INSERT a row via CQL - ALTER the name of the table via CQL - SELECT from the table and assert the values inserted are there """ session = self.prepare(start_rpc=True) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'test' cfdef.column_type = 'Standard' cfdef.comparator_type = 'CompositeType(Int32Type, Int32Type, Int32Type)' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' client.set_keyspace('ks') client.system_add_column_family(cfdef) session.execute( "INSERT INTO ks.test (key, column1, column2, column3, value) VALUES ('foo', 4, 3, 2, 'bar')" ) session.execute( "ALTER TABLE test RENAME column1 TO foo1 AND column2 TO foo2 AND column3 TO foo3" ) assert_one(session, "SELECT foo1, foo2, foo3 FROM test", [4, 3, 2])
def sc_with_row_cache_test(self): """ Test for bug reported in #4190 """ cluster = self.cluster cluster.populate(1).start() node1 = cluster.nodelist()[0] self.patient_cql_connection(node1) node = self.cluster.nodelist()[0] host, port = node.network_interfaces["thrift"] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = "ks" ksdef.strategy_class = "SimpleStrategy" ksdef.strategy_options = {"replication_factor": "1"} ksdef.cf_defs = [] client.system_add_keyspace(ksdef) client.set_keyspace("ks") # create a super column family with UTF8 for all types cfdef = CfDef() cfdef.keyspace = "ks" cfdef.name = "Users" cfdef.column_type = "Super" cfdef.comparator_type = "UTF8Type" cfdef.subcomparator_type = "UTF8Type" cfdef.key_validation_class = "UTF8Type" cfdef.default_validation_class = "UTF8Type" cfdef.caching = "rows_only" client.system_add_column_family(cfdef) column = Column(name="name", value="Mina", timestamp=100) client.batch_mutate( {"mina": {"Users": [Mutation(ColumnOrSuperColumn(super_column=SuperColumn("attrs", [column])))]}}, ThriftConsistencyLevel.ONE, ) column_parent = ColumnParent(column_family="Users") predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice("mina", column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual("attrs", super_column.name) self.assertEqual(1, len(super_column.columns)) self.assertEqual("name", super_column.columns[0].name) self.assertEqual("Mina", super_column.columns[0].value) # add a 'country' subcolumn column = Column(name="country", value="Canada", timestamp=100) client.batch_mutate( {"mina": {"Users": [Mutation(ColumnOrSuperColumn(super_column=SuperColumn("attrs", [column])))]}}, ThriftConsistencyLevel.ONE, ) super_columns = client.get_slice("mina", column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual("attrs", super_column.name) self.assertEqual(2, len(super_column.columns)) self.assertEqual("country", super_column.columns[0].name) self.assertEqual("Canada", super_column.columns[0].value) self.assertEqual("name", super_column.columns[1].name) self.assertEqual("Mina", super_column.columns[1].value) # add a 'region' subcolumn column = Column(name="region", value="Quebec", timestamp=100) client.batch_mutate( {"mina": {"Users": [Mutation(ColumnOrSuperColumn(super_column=SuperColumn("attrs", [column])))]}}, ThriftConsistencyLevel.ONE, ) super_columns = client.get_slice("mina", column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual("attrs", super_column.name) self.assertEqual(3, len(super_column.columns)) self.assertEqual("country", super_column.columns[0].name) self.assertEqual("Canada", super_column.columns[0].value) self.assertEqual("name", super_column.columns[1].name) self.assertEqual("Mina", super_column.columns[1].value) self.assertEqual("region", super_column.columns[2].name) self.assertEqual("Quebec", super_column.columns[2].value)
def sc_with_row_cache_test(self): """ Test for bug reported in #4190 """ cluster = self.cluster cluster.populate(1).start() node1 = cluster.nodelist()[0] self.patient_cql_connection(node1) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = 'ks' ksdef.strategy_class = 'SimpleStrategy' ksdef.strategy_options = {'replication_factor': '1'} ksdef.cf_defs = [] client.system_add_keyspace(ksdef) client.set_keyspace('ks') # create a super column family with UTF8 for all types cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'Users' cfdef.column_type = 'Super' cfdef.comparator_type = 'UTF8Type' cfdef.subcomparator_type = 'UTF8Type' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' cfdef.caching = 'rows_only' client.system_add_column_family(cfdef) column = Column(name='name', value='Mina', timestamp=100) client.batch_mutate( {'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}}, ThriftConsistencyLevel.ONE) column_parent = ColumnParent(column_family='Users') predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(1, len(super_column.columns)) self.assertEqual('name', super_column.columns[0].name) self.assertEqual('Mina', super_column.columns[0].value) # add a 'country' subcolumn column = Column(name='country', value='Canada', timestamp=100) client.batch_mutate( {'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}}, ThriftConsistencyLevel.ONE) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(2, len(super_column.columns)) self.assertEqual('country', super_column.columns[0].name) self.assertEqual('Canada', super_column.columns[0].value) self.assertEqual('name', super_column.columns[1].name) self.assertEqual('Mina', super_column.columns[1].value) # add a 'region' subcolumn column = Column(name='region', value='Quebec', timestamp=100) client.batch_mutate( {'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}}, ThriftConsistencyLevel.ONE) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(3, len(super_column.columns)) self.assertEqual('country', super_column.columns[0].name) self.assertEqual('Canada', super_column.columns[0].value) self.assertEqual('name', super_column.columns[1].name) self.assertEqual('Mina', super_column.columns[1].value) self.assertEqual('region', super_column.columns[2].name) self.assertEqual('Quebec', super_column.columns[2].value)
def upgrade_with_index_creation_test(self): cluster = self.cluster # Forcing cluster version on purpose cluster.set_install_dir(version="1.2.16") if "memtable_allocation_type" in cluster._config_options: cluster._config_options.__delitem__("memtable_allocation_type") cluster.populate(2).start() node1, node2 = cluster.nodelist() # wait for the rpc server to start session = self.patient_exclusive_cql_connection(node1) host, port = node1.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = 'test' ksdef.strategy_class = 'SimpleStrategy' ksdef.strategy_options = {'replication_factor': '2'} ksdef.durable_writes = True ksdef.cf_defs = [] client.system_add_keyspace(ksdef) session.cluster.control_connection.wait_for_schema_agreement() client.set_keyspace('test') # create a super column family with UTF8 for all types cfdef = CfDef() cfdef.keyspace = 'test' cfdef.name = 'sc_test' cfdef.column_type = 'Super' cfdef.comparator_type = 'UTF8Type' cfdef.subcomparator_type = 'UTF8Type' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' cfdef.caching = 'rows_only' client.system_add_column_family(cfdef) session.cluster.control_connection.wait_for_schema_agreement() for i in range(2): supercol_name = 'sc%d' % i for j in range(2): col_name = 'c%d' % j column = Column(name=col_name, value='v', timestamp=100) client.batch_mutate( { 'k0': { 'sc_test': [ Mutation( ColumnOrSuperColumn( super_column=SuperColumn( supercol_name, [column]))) ] } }, ThriftConsistencyLevel.ONE) session.cluster.shutdown() client.transport.close() # Upgrade nodes to 2.0 for intermediate sstable conversion # See CASSANDRA-7008 self.upgrade_to_version("binary:2.0.17") time.sleep(.5) # Upgrade node 1 node1.flush() time.sleep(.5) node1.stop(wait_other_notice=True) self.set_node_to_current_version(node1) node1.start(wait_other_notice=True, wait_for_binary_proto=True) time.sleep(.5) # wait for the RPC server to start session = self.patient_exclusive_cql_connection(node1) client = get_thrift_client(host, port) client.transport.open() client.set_keyspace('test') # fetch all supercolumns column_parent = ColumnParent(column_family='sc_test') predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(super_columns)) for i in range(2): super_column = super_columns[i].super_column self.assertEqual('sc%d' % i, super_column.name) self.assertEqual(2, len(super_column.columns)) for j in range(2): column = super_column.columns[j] self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value) # fetch a single supercolumn column_parent = ColumnParent(column_family='sc_test', super_column='sc1') columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(columns)) for j in range(2): column = columns[j].column self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value) # fetch a single subcolumn predicate = SlicePredicate(column_names=['c1']) columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(1, len(columns)) column = columns[0].column self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value)
def upgrade_with_counters_test(self): cluster = self.cluster # Forcing cluster version on purpose cluster.set_install_dir(version="1.2.19") if "memtable_allocation_type" in cluster._config_options: cluster._config_options.__delitem__("memtable_allocation_type") cluster.populate(3).start() node1, node2, node3 = cluster.nodelist() # wait for the rpc server to start session = self.patient_exclusive_cql_connection(node1) host, port = node1.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = 'test' ksdef.strategy_class = 'SimpleStrategy' ksdef.strategy_options = {'replication_factor': '2'} ksdef.durable_writes = True ksdef.cf_defs = [] client.system_add_keyspace(ksdef) client.set_keyspace('test') # create a super column family with UTF8 for all types except for the # values, which are counters cfdef = CfDef() cfdef.keyspace = 'test' cfdef.name = 'sc_test' cfdef.column_type = 'Super' cfdef.comparator_type = 'UTF8Type' cfdef.subcomparator_type = 'UTF8Type' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'CounterColumnType' client.system_add_column_family(cfdef) session.cluster.control_connection.wait_for_schema_agreement() for i in range(2): supercol_name = 'sc%d' % i column_parent = ColumnParent(column_family='sc_test', super_column=supercol_name) for j in range(2): col_name = 'c%d' % j column = CounterColumn(name=col_name, value=1) for k in range(20): try: client.add('Counter1', column_parent, column, ThriftConsistencyLevel.ONE) except TimedOutException: raise RerunTestException("re-run test to verify") # If we are on 2.1 or any higher version upgrade to 2.0.latest. # Otherwise, we must be on a 2.0.x, so we should be upgrading to that version. # This will let us test upgrading from 1.2.19 to each of the 2.0 minor releases. # Upgrade nodes to 2.0. # See CASSANDRA-7008 self.upgrade_to_version("binary:2.0.17", [node1]) time.sleep(.5) # wait for the RPC server to start session = self.patient_exclusive_cql_connection(node1) for node in (node1, node2, node3): host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() client.set_keyspace('test') for i in range(2): supercol_name = 'sc%d' % i column_parent = ColumnParent(column_family='sc_test', super_column=supercol_name) for j in range(2): col_name = 'c%d' % j column = CounterColumn(name=col_name, value=1) for k in range(50): try: client.add('Counter1', column_parent, column, ThriftConsistencyLevel.ONE) except TimedOutException: raise RerunTestException("re-run test to verify") client.transport.close() # Upgrade nodes to 2.0. # See CASSANDRA-7008 self.upgrade_to_version("binary:2.0.17", [node2, node3]) time.sleep(.5) host, port = node1.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() client.set_keyspace('test') column_parent = ColumnParent(column_family='sc_test') predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice('Counter1', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(super_columns)) for i in range(2): super_column = super_columns[i].counter_super_column self.assertEqual('sc%d' % i, super_column.name) self.assertEqual(2, len(super_column.columns)) for j in range(2): column = super_column.columns[j] self.assertEqual('c%d' % j, column.name) self.assertEqual(170, column.value) # fetch a single supercolumn column_parent = ColumnParent(column_family='sc_test', super_column='sc1') columns = client.get_slice('Counter1', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(columns)) for j in range(2): column = columns[j].counter_column self.assertEqual('c%d' % j, column.name) self.assertEqual(170, column.value) # fetch a single subcolumn predicate = SlicePredicate(column_names=['c1']) columns = client.get_slice('Counter1', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(1, len(columns)) column = columns[0].counter_column self.assertEqual('c%d' % j, column.name) self.assertEqual(170, column.value)
def sc_with_row_cache_test(self): """ Test for bug reported in #4190 """ cluster = self.cluster cluster.populate(1).start() node1 = cluster.nodelist()[0] self.patient_cql_connection(node1) node = self.cluster.nodelist()[0] host, port = node.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = 'ks' ksdef.strategy_class = 'SimpleStrategy' ksdef.strategy_options = {'replication_factor': '1'} ksdef.cf_defs = [] client.system_add_keyspace(ksdef) client.set_keyspace('ks') # create a super column family with UTF8 for all types cfdef = CfDef() cfdef.keyspace = 'ks' cfdef.name = 'Users' cfdef.column_type = 'Super' cfdef.comparator_type = 'UTF8Type' cfdef.subcomparator_type = 'UTF8Type' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' cfdef.caching = 'rows_only' client.system_add_column_family(cfdef) column = Column(name='name', value='Mina', timestamp=100) client.batch_mutate( { 'mina': { 'Users': [ Mutation( ColumnOrSuperColumn( super_column=SuperColumn('attrs', [column]))) ] } }, ThriftConsistencyLevel.ONE) column_parent = ColumnParent(column_family='Users') predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(1, len(super_column.columns)) self.assertEqual('name', super_column.columns[0].name) self.assertEqual('Mina', super_column.columns[0].value) # add a 'country' subcolumn column = Column(name='country', value='Canada', timestamp=100) client.batch_mutate( { 'mina': { 'Users': [ Mutation( ColumnOrSuperColumn( super_column=SuperColumn('attrs', [column]))) ] } }, ThriftConsistencyLevel.ONE) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(2, len(super_column.columns)) self.assertEqual('country', super_column.columns[0].name) self.assertEqual('Canada', super_column.columns[0].value) self.assertEqual('name', super_column.columns[1].name) self.assertEqual('Mina', super_column.columns[1].value) # add a 'region' subcolumn column = Column(name='region', value='Quebec', timestamp=100) client.batch_mutate( { 'mina': { 'Users': [ Mutation( ColumnOrSuperColumn( super_column=SuperColumn('attrs', [column]))) ] } }, ThriftConsistencyLevel.ONE) super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE) self.assertEqual(1, len(super_columns)) super_column = super_columns[0].super_column self.assertEqual('attrs', super_column.name) self.assertEqual(3, len(super_column.columns)) self.assertEqual('country', super_column.columns[0].name) self.assertEqual('Canada', super_column.columns[0].value) self.assertEqual('name', super_column.columns[1].name) self.assertEqual('Mina', super_column.columns[1].value) self.assertEqual('region', super_column.columns[2].name) self.assertEqual('Quebec', super_column.columns[2].value)
def upgrade_with_index_creation_test(self): cluster = self.cluster # Forcing cluster version on purpose cluster.set_install_dir(version="1.2.16") if "memtable_allocation_type" in cluster._config_options: cluster._config_options.__delitem__("memtable_allocation_type") cluster.populate(2).start() node1, node2 = cluster.nodelist() # wait for the rpc server to start session = self.patient_exclusive_cql_connection(node1) host, port = node1.network_interfaces['thrift'] client = get_thrift_client(host, port) client.transport.open() ksdef = KsDef() ksdef.name = 'test' ksdef.strategy_class = 'SimpleStrategy' ksdef.strategy_options = {'replication_factor': '2'} ksdef.durable_writes = True ksdef.cf_defs = [] client.system_add_keyspace(ksdef) session.cluster.control_connection.wait_for_schema_agreement() client.set_keyspace('test') # create a super column family with UTF8 for all types cfdef = CfDef() cfdef.keyspace = 'test' cfdef.name = 'sc_test' cfdef.column_type = 'Super' cfdef.comparator_type = 'UTF8Type' cfdef.subcomparator_type = 'UTF8Type' cfdef.key_validation_class = 'UTF8Type' cfdef.default_validation_class = 'UTF8Type' cfdef.caching = 'rows_only' client.system_add_column_family(cfdef) session.cluster.control_connection.wait_for_schema_agreement() for i in range(2): supercol_name = 'sc%d' % i for j in range(2): col_name = 'c%d' % j column = Column(name=col_name, value='v', timestamp=100) client.batch_mutate( {'k0': {'sc_test': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn(supercol_name, [column])))]}}, ThriftConsistencyLevel.ONE) session.cluster.shutdown() client.transport.close() # Upgrade nodes to 2.0 for intermediate sstable conversion # See CASSANDRA-7008 self.upgrade_to_version("binary:2.0.17") time.sleep(.5) # Upgrade node 1 node1.flush() time.sleep(.5) node1.stop(wait_other_notice=True) self.set_node_to_current_version(node1) node1.start(wait_other_notice=True, wait_for_binary_proto=True) time.sleep(.5) # wait for the RPC server to start session = self.patient_exclusive_cql_connection(node1) client = get_thrift_client(host, port) client.transport.open() client.set_keyspace('test') # fetch all supercolumns column_parent = ColumnParent(column_family='sc_test') predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100)) super_columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(super_columns)) for i in range(2): super_column = super_columns[i].super_column self.assertEqual('sc%d' % i, super_column.name) self.assertEqual(2, len(super_column.columns)) for j in range(2): column = super_column.columns[j] self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value) # fetch a single supercolumn column_parent = ColumnParent(column_family='sc_test', super_column='sc1') columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(2, len(columns)) for j in range(2): column = columns[j].column self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value) # fetch a single subcolumn predicate = SlicePredicate(column_names=['c1']) columns = client.get_slice('k0', column_parent, predicate, ThriftConsistencyLevel.QUORUM) self.assertEqual(1, len(columns)) column = columns[0].column self.assertEqual('c%d' % j, column.name) self.assertEqual('v', column.value)