blob: 405d883759192834b6dedd3da0004a31282f34a9 [file] [log] [blame]
from dtest import Tester
from thrift_bindings.v22.ttypes import \
ConsistencyLevel as ThriftConsistencyLevel
from thrift_bindings.v22.ttypes import (CfDef, Column, ColumnOrSuperColumn,
ColumnParent, KsDef, Mutation,
SlicePredicate, SliceRange,
SuperColumn)
from thrift_tests import get_thrift_client
from tools.misc import ImmutableMapping
from tools.decorators import since
@since('2.0', max_version='4')
class TestSCCache(Tester):
cluster_options = ImmutableMapping({'start_rpc': 'true'})
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)