diff --git a/CHANGES.txt b/CHANGES.txt index 76d938f987..e24268ca24 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,11 +6,10 @@ 2124, 2302, 2277) * avoid double RowMutation serialization on write path (CASSANDRA-1800) * make NetworkTopologyStrategy the default (CASSANDRA-1960) - * configurable internode encryption (CASSANDRA-1567) + * configurable internode encryption (CASSANDRA-1567, 2152) * human readable column names in sstable2json output (CASSANDRA-1933) * change default JMX port to 7199 (CASSANDRA-2027) * backwards compatible internal messaging (CASSANDRA-1015) - * check for null encryption in MessagingService (CASSANDRA-2152) * atomic switch of memtables and sstables (CASSANDRA-2284) * add pluggable SeedProvider (CASSANDRA-1669) * Fix clustertool to not throw exception when calling get_endpoints (CASSANDRA-2437) @@ -21,6 +20,8 @@ * give snapshots the same name on each node (CASSANDRA-1791) * multithreaded compaction (CASSANDRA-2191) * compaction throttling (CASSANDRA-2156) + * add key type information and alias (CASSANDRA-2311, 2396) + 0.7.5 * Avoid seeking when sstable2json exports the entire file (CASSANDRA-2318) @@ -46,7 +47,9 @@ index (CASSANDRA-2376) * fix race condition that could leave orphaned data files when dropping CF or KS (CASSANDRA-2381) + * convert mmap assertion to if/throw so scrub can catch it (CASSANDRA-2417) * Try harder to close files after compaction (CASSANDRA-2431) + * re-set bootstrapped flag after move finishes (CASSANDRA-2435) 0.7.4 diff --git a/drivers/py/cql/cassandra/constants.py b/drivers/py/cql/cassandra/constants.py index 012d826395..2502504d4f 100644 --- a/drivers/py/cql/cassandra/constants.py +++ b/drivers/py/cql/cassandra/constants.py @@ -7,4 +7,4 @@ from thrift.Thrift import * from ttypes import * -VERSION = "20.0.0" +VERSION = "20.1.0" diff --git a/drivers/py/cql/cassandra/ttypes.py b/drivers/py/cql/cassandra/ttypes.py index 0b94d109f6..bfdc26c39f 100644 --- a/drivers/py/cql/cassandra/ttypes.py +++ b/drivers/py/cql/cassandra/ttypes.py @@ -2324,6 +2324,7 @@ class CfDef: - merge_shards_chance - key_validation_class - row_cache_provider + - key_alias """ thrift_spec = ( @@ -2355,9 +2356,10 @@ class CfDef: (25, TType.DOUBLE, 'merge_shards_chance', None, None, ), # 25 (26, TType.STRING, 'key_validation_class', None, None, ), # 26 (27, TType.STRING, 'row_cache_provider', None, "org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider", ), # 27 + (28, TType.STRING, 'key_alias', None, None, ), # 28 ) - def __init__(self, keyspace=None, name=None, column_type=thrift_spec[3][4], comparator_type=thrift_spec[5][4], subcomparator_type=None, comment=None, row_cache_size=thrift_spec[9][4], key_cache_size=thrift_spec[11][4], read_repair_chance=thrift_spec[12][4], column_metadata=None, gc_grace_seconds=None, default_validation_class=None, id=None, min_compaction_threshold=None, max_compaction_threshold=None, row_cache_save_period_in_seconds=None, key_cache_save_period_in_seconds=None, memtable_flush_after_mins=None, memtable_throughput_in_mb=None, memtable_operations_in_millions=None, replicate_on_write=None, merge_shards_chance=None, key_validation_class=None, row_cache_provider=thrift_spec[27][4],): + def __init__(self, keyspace=None, name=None, column_type=thrift_spec[3][4], comparator_type=thrift_spec[5][4], subcomparator_type=None, comment=None, row_cache_size=thrift_spec[9][4], key_cache_size=thrift_spec[11][4], read_repair_chance=thrift_spec[12][4], column_metadata=None, gc_grace_seconds=None, default_validation_class=None, id=None, min_compaction_threshold=None, max_compaction_threshold=None, row_cache_save_period_in_seconds=None, key_cache_save_period_in_seconds=None, memtable_flush_after_mins=None, memtable_throughput_in_mb=None, memtable_operations_in_millions=None, replicate_on_write=None, merge_shards_chance=None, key_validation_class=None, row_cache_provider=thrift_spec[27][4], key_alias=None,): self.keyspace = keyspace self.name = name self.column_type = column_type @@ -2382,6 +2384,7 @@ class CfDef: self.merge_shards_chance = merge_shards_chance self.key_validation_class = key_validation_class self.row_cache_provider = row_cache_provider + self.key_alias = key_alias def read(self, iprot): if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: @@ -2518,6 +2521,11 @@ class CfDef: self.row_cache_provider = iprot.readString(); else: iprot.skip(ftype) + elif fid == 28: + if ftype == TType.STRING: + self.key_alias = iprot.readString(); + else: + iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() @@ -2627,6 +2635,10 @@ class CfDef: oprot.writeFieldBegin('row_cache_provider', TType.STRING, 27) oprot.writeString(self.row_cache_provider) oprot.writeFieldEnd() + if self.key_alias != None: + oprot.writeFieldBegin('key_alias', TType.STRING, 28) + oprot.writeString(self.key_alias) + oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() def validate(self): diff --git a/drivers/txpy/txcql/cassandra/Cassandra.py b/drivers/txpy/txcql/cassandra/Cassandra.py index 2d18ad7d24..dbe9ff508a 100644 --- a/drivers/txpy/txcql/cassandra/Cassandra.py +++ b/drivers/txpy/txcql/cassandra/Cassandra.py @@ -14,410 +14,21 @@ try: except: fastbinary = None -from zope.interface import Interface, implements -from twisted.internet import defer -from thrift.transport import TTwisted - -class Iface(Interface): - def login(auth_request): - """ - Parameters: - - auth_request - """ - pass - - def set_keyspace(keyspace): - """ - Parameters: - - keyspace - """ - pass - - def get(key, column_path, consistency_level): - """ - Get the Column or SuperColumn at the given column_path. If no value is present, NotFoundException is thrown. (This is - the only method that can throw an exception under non-failure conditions.) - - Parameters: - - key - - column_path - - consistency_level - """ - pass - - def get_slice(key, column_parent, predicate, consistency_level): - """ - Get the group of columns contained by column_parent (either a ColumnFamily name or a ColumnFamily/SuperColumn name - pair) specified by the given SlicePredicate. If no matching values are found, an empty list is returned. - - Parameters: - - key - - column_parent - - predicate - - consistency_level - """ - pass - - def get_count(key, column_parent, predicate, consistency_level): - """ - returns the number of columns matching predicate for a particular key, - ColumnFamily and optionally SuperColumn. - - Parameters: - - key - - column_parent - - predicate - - consistency_level - """ - pass - - def multiget_slice(keys, column_parent, predicate, consistency_level): - """ - Performs a get_slice for column_parent and predicate for the given keys in parallel. - - Parameters: - - keys - - column_parent - - predicate - - consistency_level - """ - pass - - def multiget_count(keys, column_parent, predicate, consistency_level): - """ - Perform a get_count in parallel on the given list keys. The return value maps keys to the count found. - - Parameters: - - keys - - column_parent - - predicate - - consistency_level - """ - pass - - def get_range_slices(column_parent, predicate, range, consistency_level): - """ - returns a subset of columns for a contiguous range of keys. - - Parameters: - - column_parent - - predicate - - range - - consistency_level - """ - pass - - def get_indexed_slices(column_parent, index_clause, column_predicate, consistency_level): - """ - Returns the subset of columns specified in SlicePredicate for the rows matching the IndexClause - - Parameters: - - column_parent - - index_clause - - column_predicate - - consistency_level - """ - pass - - def insert(key, column_parent, column, consistency_level): - """ - Insert a Column at the given column_parent.column_family and optional column_parent.super_column. - - Parameters: - - key - - column_parent - - column - - consistency_level - """ - pass - - def add(key, column_parent, column, consistency_level): - """ - Increment or decrement a counter. - - Parameters: - - key - - column_parent - - column - - consistency_level - """ - pass - - def remove(key, column_path, timestamp, consistency_level): - """ - Remove data from the row specified by key at the granularity specified by column_path, and the given timestamp. Note - that all the values in column_path besides column_path.column_family are truly optional: you can remove the entire - row by just specifying the ColumnFamily, or you can remove a SuperColumn or a single Column by specifying those levels too. - - Parameters: - - key - - column_path - - timestamp - - consistency_level - """ - pass - - def remove_counter(key, path, consistency_level): - """ - Remove a counter at the specified location. - Note that counters have limited support for deletes: if you remove a counter, you must wait to issue any following update - until the delete has reached all the nodes and all of them have been fully compacted. - - Parameters: - - key - - path - - consistency_level - """ - pass - - def batch_mutate(mutation_map, consistency_level): - """ - Mutate many columns or super columns for many row keys. See also: Mutation. - - mutation_map maps key to column family to a list of Mutation objects to take place at that scope. - * - - Parameters: - - mutation_map - - consistency_level - """ - pass - - def truncate(cfname): - """ - Truncate will mark and entire column family as deleted. - From the user's perspective a successful call to truncate will result complete data deletion from cfname. - Internally, however, disk space will not be immediatily released, as with all deletes in cassandra, this one - only marks the data as deleted. - The operation succeeds only if all hosts in the cluster at available and will throw an UnavailableException if - some hosts are down. - - Parameters: - - cfname - """ - pass - - def describe_schema_versions(): - """ - for each schema version present in the cluster, returns a list of nodes at that version. - hosts that do not respond will be under the key DatabaseDescriptor.INITIAL_VERSION. - the cluster is all on the same version if the size of the map is 1. - """ - pass - - def describe_keyspaces(): - """ - list the defined keyspaces in this cluster - """ - pass - - def describe_cluster_name(): - """ - get the cluster name - """ - pass - - def describe_version(): - """ - get the thrift api version - """ - pass - - def describe_ring(keyspace): - """ - get the token ring: a map of ranges to host addresses, - represented as a set of TokenRange instead of a map from range - to list of endpoints, because you can't use Thrift structs as - map keys: - https://issues.apache.org/jira/browse/THRIFT-162 - - for the same reason, we can't return a set here, even though - order is neither important nor predictable. - - Parameters: - - keyspace - """ - pass - - def describe_partitioner(): - """ - returns the partitioner used by this cluster - """ - pass - - def describe_snitch(): - """ - returns the snitch used by this cluster - """ - pass - - def describe_keyspace(keyspace): - """ - describe specified keyspace - - Parameters: - - keyspace - """ - pass - - def describe_splits(cfName, start_token, end_token, keys_per_split): - """ - experimental API for hadoop/parallel query support. - may change violently and without warning. - - returns list of token strings such that first subrange is (list[0], list[1]], - next is (list[1], list[2]], etc. - - Parameters: - - cfName - - start_token - - end_token - - keys_per_split - """ - pass - - def system_add_column_family(cf_def): - """ - adds a column family. returns the new schema id. - - Parameters: - - cf_def - """ - pass - - def system_drop_column_family(column_family): - """ - drops a column family. returns the new schema id. - - Parameters: - - column_family - """ - pass - - def system_add_keyspace(ks_def): - """ - adds a keyspace and any column families that are part of it. returns the new schema id. - - Parameters: - - ks_def - """ - pass - - def system_drop_keyspace(keyspace): - """ - drops a keyspace and any column families that are part of it. returns the new schema id. - - Parameters: - - keyspace - """ - pass - - def system_update_keyspace(ks_def): - """ - updates properties of a keyspace. returns the new schema id. - - Parameters: - - ks_def - """ - pass - - def system_update_column_family(cf_def): - """ - updates properties of a column family. returns the new schema id. - - Parameters: - - cf_def - """ - pass - - def execute_cql_query(query, compression): - """ - Executes a CQL (Cassandra Query Language) statement and returns a - CqlResult containing the results. - - Parameters: - - query - - compression - """ - pass - - -class Client: - implements(Iface) - - def __init__(self, transport, oprot_factory): - self._transport = transport - self._oprot_factory = oprot_factory - self._seqid = 0 - self._reqs = {} +class Iface: def login(self, auth_request): """ Parameters: - auth_request """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_login(auth_request) - return d - - def send_login(self, auth_request): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('login', TMessageType.CALL, self._seqid) - args = login_args() - args.auth_request = auth_request - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_login(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = login_result() - result.read(iprot) - iprot.readMessageEnd() - if result.authnx != None: - return d.errback(result.authnx) - if result.authzx != None: - return d.errback(result.authzx) - return d.callback(None) + pass def set_keyspace(self, keyspace): """ Parameters: - keyspace """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_set_keyspace(keyspace) - return d - - def send_set_keyspace(self, keyspace): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('set_keyspace', TMessageType.CALL, self._seqid) - args = set_keyspace_args() - args.keyspace = keyspace - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_set_keyspace(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = set_keyspace_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - return d.callback(None) + pass def get(self, key, column_path, consistency_level): """ @@ -429,43 +40,7 @@ class Client: - column_path - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_get(key, column_path, consistency_level) - return d - - def send_get(self, key, column_path, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('get', TMessageType.CALL, self._seqid) - args = get_args() - args.key = key - args.column_path = column_path - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_get(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = get_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.nfe != None: - return d.errback(result.nfe) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "get failed: unknown result")) + pass def get_slice(self, key, column_parent, predicate, consistency_level): """ @@ -478,42 +53,7 @@ class Client: - predicate - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_get_slice(key, column_parent, predicate, consistency_level) - return d - - def send_get_slice(self, key, column_parent, predicate, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('get_slice', TMessageType.CALL, self._seqid) - args = get_slice_args() - args.key = key - args.column_parent = column_parent - args.predicate = predicate - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_get_slice(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = get_slice_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "get_slice failed: unknown result")) + pass def get_count(self, key, column_parent, predicate, consistency_level): """ @@ -526,42 +66,7 @@ class Client: - predicate - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_get_count(key, column_parent, predicate, consistency_level) - return d - - def send_get_count(self, key, column_parent, predicate, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('get_count', TMessageType.CALL, self._seqid) - args = get_count_args() - args.key = key - args.column_parent = column_parent - args.predicate = predicate - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_get_count(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = get_count_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "get_count failed: unknown result")) + pass def multiget_slice(self, keys, column_parent, predicate, consistency_level): """ @@ -573,42 +78,7 @@ class Client: - predicate - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_multiget_slice(keys, column_parent, predicate, consistency_level) - return d - - def send_multiget_slice(self, keys, column_parent, predicate, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('multiget_slice', TMessageType.CALL, self._seqid) - args = multiget_slice_args() - args.keys = keys - args.column_parent = column_parent - args.predicate = predicate - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_multiget_slice(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = multiget_slice_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "multiget_slice failed: unknown result")) + pass def multiget_count(self, keys, column_parent, predicate, consistency_level): """ @@ -620,42 +90,7 @@ class Client: - predicate - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_multiget_count(keys, column_parent, predicate, consistency_level) - return d - - def send_multiget_count(self, keys, column_parent, predicate, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('multiget_count', TMessageType.CALL, self._seqid) - args = multiget_count_args() - args.keys = keys - args.column_parent = column_parent - args.predicate = predicate - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_multiget_count(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = multiget_count_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "multiget_count failed: unknown result")) + pass def get_range_slices(self, column_parent, predicate, range, consistency_level): """ @@ -667,42 +102,7 @@ class Client: - range - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_get_range_slices(column_parent, predicate, range, consistency_level) - return d - - def send_get_range_slices(self, column_parent, predicate, range, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('get_range_slices', TMessageType.CALL, self._seqid) - args = get_range_slices_args() - args.column_parent = column_parent - args.predicate = predicate - args.range = range - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_get_range_slices(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = get_range_slices_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "get_range_slices failed: unknown result")) + pass def get_indexed_slices(self, column_parent, index_clause, column_predicate, consistency_level): """ @@ -714,42 +114,7 @@ class Client: - column_predicate - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_get_indexed_slices(column_parent, index_clause, column_predicate, consistency_level) - return d - - def send_get_indexed_slices(self, column_parent, index_clause, column_predicate, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('get_indexed_slices', TMessageType.CALL, self._seqid) - args = get_indexed_slices_args() - args.column_parent = column_parent - args.index_clause = index_clause - args.column_predicate = column_predicate - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_get_indexed_slices(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = get_indexed_slices_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "get_indexed_slices failed: unknown result")) + pass def insert(self, key, column_parent, column, consistency_level): """ @@ -761,40 +126,7 @@ class Client: - column - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_insert(key, column_parent, column, consistency_level) - return d - - def send_insert(self, key, column_parent, column, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('insert', TMessageType.CALL, self._seqid) - args = insert_args() - args.key = key - args.column_parent = column_parent - args.column = column - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_insert(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = insert_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.callback(None) + pass def add(self, key, column_parent, column, consistency_level): """ @@ -806,40 +138,7 @@ class Client: - column - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_add(key, column_parent, column, consistency_level) - return d - - def send_add(self, key, column_parent, column, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('add', TMessageType.CALL, self._seqid) - args = add_args() - args.key = key - args.column_parent = column_parent - args.column = column - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_add(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = add_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.callback(None) + pass def remove(self, key, column_path, timestamp, consistency_level): """ @@ -853,40 +152,7 @@ class Client: - timestamp - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_remove(key, column_path, timestamp, consistency_level) - return d - - def send_remove(self, key, column_path, timestamp, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('remove', TMessageType.CALL, self._seqid) - args = remove_args() - args.key = key - args.column_path = column_path - args.timestamp = timestamp - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_remove(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = remove_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.callback(None) + pass def remove_counter(self, key, path, consistency_level): """ @@ -899,39 +165,7 @@ class Client: - path - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_remove_counter(key, path, consistency_level) - return d - - def send_remove_counter(self, key, path, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('remove_counter', TMessageType.CALL, self._seqid) - args = remove_counter_args() - args.key = key - args.path = path - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_remove_counter(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = remove_counter_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.callback(None) + pass def batch_mutate(self, mutation_map, consistency_level): """ @@ -944,38 +178,7 @@ class Client: - mutation_map - consistency_level """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_batch_mutate(mutation_map, consistency_level) - return d - - def send_batch_mutate(self, mutation_map, consistency_level): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('batch_mutate', TMessageType.CALL, self._seqid) - args = batch_mutate_args() - args.mutation_map = mutation_map - args.consistency_level = consistency_level - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_batch_mutate(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = batch_mutate_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - if result.te != None: - return d.errback(result.te) - return d.callback(None) + pass def truncate(self, cfname): """ @@ -989,35 +192,7 @@ class Client: Parameters: - cfname """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_truncate(cfname) - return d - - def send_truncate(self, cfname): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('truncate', TMessageType.CALL, self._seqid) - args = truncate_args() - args.cfname = cfname - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_truncate(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = truncate_result() - result.read(iprot) - iprot.readMessageEnd() - if result.ire != None: - return d.errback(result.ire) - if result.ue != None: - return d.errback(result.ue) - return d.callback(None) + pass def describe_schema_versions(self, ): """ @@ -1025,129 +200,25 @@ class Client: hosts that do not respond will be under the key DatabaseDescriptor.INITIAL_VERSION. the cluster is all on the same version if the size of the map is 1. """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_schema_versions() - return d - - def send_describe_schema_versions(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_schema_versions', TMessageType.CALL, self._seqid) - args = describe_schema_versions_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_schema_versions(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_schema_versions_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_schema_versions failed: unknown result")) + pass def describe_keyspaces(self, ): """ list the defined keyspaces in this cluster """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_keyspaces() - return d - - def send_describe_keyspaces(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_keyspaces', TMessageType.CALL, self._seqid) - args = describe_keyspaces_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_keyspaces(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_keyspaces_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_keyspaces failed: unknown result")) + pass def describe_cluster_name(self, ): """ get the cluster name """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_cluster_name() - return d - - def send_describe_cluster_name(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_cluster_name', TMessageType.CALL, self._seqid) - args = describe_cluster_name_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_cluster_name(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_cluster_name_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_cluster_name failed: unknown result")) + pass def describe_version(self, ): """ get the thrift api version """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_version() - return d - - def send_describe_version(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_version', TMessageType.CALL, self._seqid) - args = describe_version_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_version(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_version_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_version failed: unknown result")) + pass def describe_ring(self, keyspace): """ @@ -1163,97 +234,19 @@ class Client: Parameters: - keyspace """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_ring(keyspace) - return d - - def send_describe_ring(self, keyspace): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_ring', TMessageType.CALL, self._seqid) - args = describe_ring_args() - args.keyspace = keyspace - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_ring(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_ring_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_ring failed: unknown result")) + pass def describe_partitioner(self, ): """ returns the partitioner used by this cluster """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_partitioner() - return d - - def send_describe_partitioner(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_partitioner', TMessageType.CALL, self._seqid) - args = describe_partitioner_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_partitioner(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_partitioner_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_partitioner failed: unknown result")) + pass def describe_snitch(self, ): """ returns the snitch used by this cluster """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_snitch() - return d - - def send_describe_snitch(self, ): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_snitch', TMessageType.CALL, self._seqid) - args = describe_snitch_args() - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_snitch(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_snitch_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_snitch failed: unknown result")) + pass def describe_keyspace(self, keyspace): """ @@ -1262,37 +255,7 @@ class Client: Parameters: - keyspace """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_keyspace(keyspace) - return d - - def send_describe_keyspace(self, keyspace): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_keyspace', TMessageType.CALL, self._seqid) - args = describe_keyspace_args() - args.keyspace = keyspace - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_keyspace(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_keyspace_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.nfe != None: - return d.errback(result.nfe) - if result.ire != None: - return d.errback(result.ire) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_keyspace failed: unknown result")) + pass def describe_splits(self, cfName, start_token, end_token, keys_per_split): """ @@ -1308,38 +271,7 @@ class Client: - end_token - keys_per_split """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_describe_splits(cfName, start_token, end_token, keys_per_split) - return d - - def send_describe_splits(self, cfName, start_token, end_token, keys_per_split): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('describe_splits', TMessageType.CALL, self._seqid) - args = describe_splits_args() - args.cfName = cfName - args.start_token = start_token - args.end_token = end_token - args.keys_per_split = keys_per_split - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_describe_splits(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = describe_splits_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "describe_splits failed: unknown result")) + pass def system_add_column_family(self, cf_def): """ @@ -1348,37 +280,7 @@ class Client: Parameters: - cf_def """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_add_column_family(cf_def) - return d - - def send_system_add_column_family(self, cf_def): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_add_column_family', TMessageType.CALL, self._seqid) - args = system_add_column_family_args() - args.cf_def = cf_def - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_add_column_family(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_add_column_family_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_add_column_family failed: unknown result")) + pass def system_drop_column_family(self, column_family): """ @@ -1387,37 +289,7 @@ class Client: Parameters: - column_family """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_drop_column_family(column_family) - return d - - def send_system_drop_column_family(self, column_family): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_drop_column_family', TMessageType.CALL, self._seqid) - args = system_drop_column_family_args() - args.column_family = column_family - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_drop_column_family(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_drop_column_family_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_drop_column_family failed: unknown result")) + pass def system_add_keyspace(self, ks_def): """ @@ -1426,37 +298,7 @@ class Client: Parameters: - ks_def """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_add_keyspace(ks_def) - return d - - def send_system_add_keyspace(self, ks_def): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_add_keyspace', TMessageType.CALL, self._seqid) - args = system_add_keyspace_args() - args.ks_def = ks_def - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_add_keyspace(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_add_keyspace_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_add_keyspace failed: unknown result")) + pass def system_drop_keyspace(self, keyspace): """ @@ -1465,37 +307,7 @@ class Client: Parameters: - keyspace """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_drop_keyspace(keyspace) - return d - - def send_system_drop_keyspace(self, keyspace): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_drop_keyspace', TMessageType.CALL, self._seqid) - args = system_drop_keyspace_args() - args.keyspace = keyspace - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_drop_keyspace(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_drop_keyspace_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_drop_keyspace failed: unknown result")) + pass def system_update_keyspace(self, ks_def): """ @@ -1504,37 +316,7 @@ class Client: Parameters: - ks_def """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_update_keyspace(ks_def) - return d - - def send_system_update_keyspace(self, ks_def): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_update_keyspace', TMessageType.CALL, self._seqid) - args = system_update_keyspace_args() - args.ks_def = ks_def - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_update_keyspace(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_update_keyspace_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_update_keyspace failed: unknown result")) + pass def system_update_column_family(self, cf_def): """ @@ -1543,37 +325,1160 @@ class Client: Parameters: - cf_def """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() - self.send_system_update_column_family(cf_def) - return d - - def send_system_update_column_family(self, cf_def): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('system_update_column_family', TMessageType.CALL, self._seqid) - args = system_update_column_family_args() - args.cf_def = cf_def - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def recv_system_update_column_family(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) - result = system_update_column_family_result() - result.read(iprot) - iprot.readMessageEnd() - if result.success != None: - return d.callback(result.success) - if result.ire != None: - return d.errback(result.ire) - if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "system_update_column_family failed: unknown result")) + pass + + def execute_cql_query(self, query, compression): + """ + Executes a CQL (Cassandra Query Language) statement and returns a + CqlResult containing the results. + + Parameters: + - query + - compression + """ + pass + + +class Client(Iface): + def __init__(self, iprot, oprot=None): + self._iprot = self._oprot = iprot + if oprot != None: + self._oprot = oprot + self._seqid = 0 + + def login(self, auth_request): + """ + Parameters: + - auth_request + """ + self.send_login(auth_request) + self.recv_login() + + def send_login(self, auth_request): + self._oprot.writeMessageBegin('login', TMessageType.CALL, self._seqid) + args = login_args() + args.auth_request = auth_request + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_login(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = login_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.authnx != None: + raise result.authnx + if result.authzx != None: + raise result.authzx + return + + def set_keyspace(self, keyspace): + """ + Parameters: + - keyspace + """ + self.send_set_keyspace(keyspace) + self.recv_set_keyspace() + + def send_set_keyspace(self, keyspace): + self._oprot.writeMessageBegin('set_keyspace', TMessageType.CALL, self._seqid) + args = set_keyspace_args() + args.keyspace = keyspace + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_set_keyspace(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = set_keyspace_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + return + + def get(self, key, column_path, consistency_level): + """ + Get the Column or SuperColumn at the given column_path. If no value is present, NotFoundException is thrown. (This is + the only method that can throw an exception under non-failure conditions.) + + Parameters: + - key + - column_path + - consistency_level + """ + self.send_get(key, column_path, consistency_level) + return self.recv_get() + + def send_get(self, key, column_path, consistency_level): + self._oprot.writeMessageBegin('get', TMessageType.CALL, self._seqid) + args = get_args() + args.key = key + args.column_path = column_path + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_get(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = get_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.nfe != None: + raise result.nfe + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "get failed: unknown result"); + + def get_slice(self, key, column_parent, predicate, consistency_level): + """ + Get the group of columns contained by column_parent (either a ColumnFamily name or a ColumnFamily/SuperColumn name + pair) specified by the given SlicePredicate. If no matching values are found, an empty list is returned. + + Parameters: + - key + - column_parent + - predicate + - consistency_level + """ + self.send_get_slice(key, column_parent, predicate, consistency_level) + return self.recv_get_slice() + + def send_get_slice(self, key, column_parent, predicate, consistency_level): + self._oprot.writeMessageBegin('get_slice', TMessageType.CALL, self._seqid) + args = get_slice_args() + args.key = key + args.column_parent = column_parent + args.predicate = predicate + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_get_slice(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = get_slice_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "get_slice failed: unknown result"); + + def get_count(self, key, column_parent, predicate, consistency_level): + """ + returns the number of columns matching predicate for a particular key, + ColumnFamily and optionally SuperColumn. + + Parameters: + - key + - column_parent + - predicate + - consistency_level + """ + self.send_get_count(key, column_parent, predicate, consistency_level) + return self.recv_get_count() + + def send_get_count(self, key, column_parent, predicate, consistency_level): + self._oprot.writeMessageBegin('get_count', TMessageType.CALL, self._seqid) + args = get_count_args() + args.key = key + args.column_parent = column_parent + args.predicate = predicate + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_get_count(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = get_count_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "get_count failed: unknown result"); + + def multiget_slice(self, keys, column_parent, predicate, consistency_level): + """ + Performs a get_slice for column_parent and predicate for the given keys in parallel. + + Parameters: + - keys + - column_parent + - predicate + - consistency_level + """ + self.send_multiget_slice(keys, column_parent, predicate, consistency_level) + return self.recv_multiget_slice() + + def send_multiget_slice(self, keys, column_parent, predicate, consistency_level): + self._oprot.writeMessageBegin('multiget_slice', TMessageType.CALL, self._seqid) + args = multiget_slice_args() + args.keys = keys + args.column_parent = column_parent + args.predicate = predicate + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_multiget_slice(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = multiget_slice_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "multiget_slice failed: unknown result"); + + def multiget_count(self, keys, column_parent, predicate, consistency_level): + """ + Perform a get_count in parallel on the given list keys. The return value maps keys to the count found. + + Parameters: + - keys + - column_parent + - predicate + - consistency_level + """ + self.send_multiget_count(keys, column_parent, predicate, consistency_level) + return self.recv_multiget_count() + + def send_multiget_count(self, keys, column_parent, predicate, consistency_level): + self._oprot.writeMessageBegin('multiget_count', TMessageType.CALL, self._seqid) + args = multiget_count_args() + args.keys = keys + args.column_parent = column_parent + args.predicate = predicate + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_multiget_count(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = multiget_count_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "multiget_count failed: unknown result"); + + def get_range_slices(self, column_parent, predicate, range, consistency_level): + """ + returns a subset of columns for a contiguous range of keys. + + Parameters: + - column_parent + - predicate + - range + - consistency_level + """ + self.send_get_range_slices(column_parent, predicate, range, consistency_level) + return self.recv_get_range_slices() + + def send_get_range_slices(self, column_parent, predicate, range, consistency_level): + self._oprot.writeMessageBegin('get_range_slices', TMessageType.CALL, self._seqid) + args = get_range_slices_args() + args.column_parent = column_parent + args.predicate = predicate + args.range = range + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_get_range_slices(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = get_range_slices_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "get_range_slices failed: unknown result"); + + def get_indexed_slices(self, column_parent, index_clause, column_predicate, consistency_level): + """ + Returns the subset of columns specified in SlicePredicate for the rows matching the IndexClause + + Parameters: + - column_parent + - index_clause + - column_predicate + - consistency_level + """ + self.send_get_indexed_slices(column_parent, index_clause, column_predicate, consistency_level) + return self.recv_get_indexed_slices() + + def send_get_indexed_slices(self, column_parent, index_clause, column_predicate, consistency_level): + self._oprot.writeMessageBegin('get_indexed_slices', TMessageType.CALL, self._seqid) + args = get_indexed_slices_args() + args.column_parent = column_parent + args.index_clause = index_clause + args.column_predicate = column_predicate + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_get_indexed_slices(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = get_indexed_slices_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + raise TApplicationException(TApplicationException.MISSING_RESULT, "get_indexed_slices failed: unknown result"); + + def insert(self, key, column_parent, column, consistency_level): + """ + Insert a Column at the given column_parent.column_family and optional column_parent.super_column. + + Parameters: + - key + - column_parent + - column + - consistency_level + """ + self.send_insert(key, column_parent, column, consistency_level) + self.recv_insert() + + def send_insert(self, key, column_parent, column, consistency_level): + self._oprot.writeMessageBegin('insert', TMessageType.CALL, self._seqid) + args = insert_args() + args.key = key + args.column_parent = column_parent + args.column = column + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_insert(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = insert_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + return + + def add(self, key, column_parent, column, consistency_level): + """ + Increment or decrement a counter. + + Parameters: + - key + - column_parent + - column + - consistency_level + """ + self.send_add(key, column_parent, column, consistency_level) + self.recv_add() + + def send_add(self, key, column_parent, column, consistency_level): + self._oprot.writeMessageBegin('add', TMessageType.CALL, self._seqid) + args = add_args() + args.key = key + args.column_parent = column_parent + args.column = column + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_add(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = add_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + return + + def remove(self, key, column_path, timestamp, consistency_level): + """ + Remove data from the row specified by key at the granularity specified by column_path, and the given timestamp. Note + that all the values in column_path besides column_path.column_family are truly optional: you can remove the entire + row by just specifying the ColumnFamily, or you can remove a SuperColumn or a single Column by specifying those levels too. + + Parameters: + - key + - column_path + - timestamp + - consistency_level + """ + self.send_remove(key, column_path, timestamp, consistency_level) + self.recv_remove() + + def send_remove(self, key, column_path, timestamp, consistency_level): + self._oprot.writeMessageBegin('remove', TMessageType.CALL, self._seqid) + args = remove_args() + args.key = key + args.column_path = column_path + args.timestamp = timestamp + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_remove(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = remove_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + return + + def remove_counter(self, key, path, consistency_level): + """ + Remove a counter at the specified location. + Note that counters have limited support for deletes: if you remove a counter, you must wait to issue any following update + until the delete has reached all the nodes and all of them have been fully compacted. + + Parameters: + - key + - path + - consistency_level + """ + self.send_remove_counter(key, path, consistency_level) + self.recv_remove_counter() + + def send_remove_counter(self, key, path, consistency_level): + self._oprot.writeMessageBegin('remove_counter', TMessageType.CALL, self._seqid) + args = remove_counter_args() + args.key = key + args.path = path + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_remove_counter(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = remove_counter_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + return + + def batch_mutate(self, mutation_map, consistency_level): + """ + Mutate many columns or super columns for many row keys. See also: Mutation. + + mutation_map maps key to column family to a list of Mutation objects to take place at that scope. + * + + Parameters: + - mutation_map + - consistency_level + """ + self.send_batch_mutate(mutation_map, consistency_level) + self.recv_batch_mutate() + + def send_batch_mutate(self, mutation_map, consistency_level): + self._oprot.writeMessageBegin('batch_mutate', TMessageType.CALL, self._seqid) + args = batch_mutate_args() + args.mutation_map = mutation_map + args.consistency_level = consistency_level + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_batch_mutate(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = batch_mutate_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + if result.te != None: + raise result.te + return + + def truncate(self, cfname): + """ + Truncate will mark and entire column family as deleted. + From the user's perspective a successful call to truncate will result complete data deletion from cfname. + Internally, however, disk space will not be immediatily released, as with all deletes in cassandra, this one + only marks the data as deleted. + The operation succeeds only if all hosts in the cluster at available and will throw an UnavailableException if + some hosts are down. + + Parameters: + - cfname + """ + self.send_truncate(cfname) + self.recv_truncate() + + def send_truncate(self, cfname): + self._oprot.writeMessageBegin('truncate', TMessageType.CALL, self._seqid) + args = truncate_args() + args.cfname = cfname + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_truncate(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = truncate_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.ire != None: + raise result.ire + if result.ue != None: + raise result.ue + return + + def describe_schema_versions(self, ): + """ + for each schema version present in the cluster, returns a list of nodes at that version. + hosts that do not respond will be under the key DatabaseDescriptor.INITIAL_VERSION. + the cluster is all on the same version if the size of the map is 1. + """ + self.send_describe_schema_versions() + return self.recv_describe_schema_versions() + + def send_describe_schema_versions(self, ): + self._oprot.writeMessageBegin('describe_schema_versions', TMessageType.CALL, self._seqid) + args = describe_schema_versions_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_schema_versions(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_schema_versions_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_schema_versions failed: unknown result"); + + def describe_keyspaces(self, ): + """ + list the defined keyspaces in this cluster + """ + self.send_describe_keyspaces() + return self.recv_describe_keyspaces() + + def send_describe_keyspaces(self, ): + self._oprot.writeMessageBegin('describe_keyspaces', TMessageType.CALL, self._seqid) + args = describe_keyspaces_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_keyspaces(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_keyspaces_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_keyspaces failed: unknown result"); + + def describe_cluster_name(self, ): + """ + get the cluster name + """ + self.send_describe_cluster_name() + return self.recv_describe_cluster_name() + + def send_describe_cluster_name(self, ): + self._oprot.writeMessageBegin('describe_cluster_name', TMessageType.CALL, self._seqid) + args = describe_cluster_name_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_cluster_name(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_cluster_name_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_cluster_name failed: unknown result"); + + def describe_version(self, ): + """ + get the thrift api version + """ + self.send_describe_version() + return self.recv_describe_version() + + def send_describe_version(self, ): + self._oprot.writeMessageBegin('describe_version', TMessageType.CALL, self._seqid) + args = describe_version_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_version(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_version_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_version failed: unknown result"); + + def describe_ring(self, keyspace): + """ + get the token ring: a map of ranges to host addresses, + represented as a set of TokenRange instead of a map from range + to list of endpoints, because you can't use Thrift structs as + map keys: + https://issues.apache.org/jira/browse/THRIFT-162 + + for the same reason, we can't return a set here, even though + order is neither important nor predictable. + + Parameters: + - keyspace + """ + self.send_describe_ring(keyspace) + return self.recv_describe_ring() + + def send_describe_ring(self, keyspace): + self._oprot.writeMessageBegin('describe_ring', TMessageType.CALL, self._seqid) + args = describe_ring_args() + args.keyspace = keyspace + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_ring(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_ring_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_ring failed: unknown result"); + + def describe_partitioner(self, ): + """ + returns the partitioner used by this cluster + """ + self.send_describe_partitioner() + return self.recv_describe_partitioner() + + def send_describe_partitioner(self, ): + self._oprot.writeMessageBegin('describe_partitioner', TMessageType.CALL, self._seqid) + args = describe_partitioner_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_partitioner(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_partitioner_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_partitioner failed: unknown result"); + + def describe_snitch(self, ): + """ + returns the snitch used by this cluster + """ + self.send_describe_snitch() + return self.recv_describe_snitch() + + def send_describe_snitch(self, ): + self._oprot.writeMessageBegin('describe_snitch', TMessageType.CALL, self._seqid) + args = describe_snitch_args() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_snitch(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_snitch_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_snitch failed: unknown result"); + + def describe_keyspace(self, keyspace): + """ + describe specified keyspace + + Parameters: + - keyspace + """ + self.send_describe_keyspace(keyspace) + return self.recv_describe_keyspace() + + def send_describe_keyspace(self, keyspace): + self._oprot.writeMessageBegin('describe_keyspace', TMessageType.CALL, self._seqid) + args = describe_keyspace_args() + args.keyspace = keyspace + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_keyspace(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_keyspace_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.nfe != None: + raise result.nfe + if result.ire != None: + raise result.ire + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_keyspace failed: unknown result"); + + def describe_splits(self, cfName, start_token, end_token, keys_per_split): + """ + experimental API for hadoop/parallel query support. + may change violently and without warning. + + returns list of token strings such that first subrange is (list[0], list[1]], + next is (list[1], list[2]], etc. + + Parameters: + - cfName + - start_token + - end_token + - keys_per_split + """ + self.send_describe_splits(cfName, start_token, end_token, keys_per_split) + return self.recv_describe_splits() + + def send_describe_splits(self, cfName, start_token, end_token, keys_per_split): + self._oprot.writeMessageBegin('describe_splits', TMessageType.CALL, self._seqid) + args = describe_splits_args() + args.cfName = cfName + args.start_token = start_token + args.end_token = end_token + args.keys_per_split = keys_per_split + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_describe_splits(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = describe_splits_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + raise TApplicationException(TApplicationException.MISSING_RESULT, "describe_splits failed: unknown result"); + + def system_add_column_family(self, cf_def): + """ + adds a column family. returns the new schema id. + + Parameters: + - cf_def + """ + self.send_system_add_column_family(cf_def) + return self.recv_system_add_column_family() + + def send_system_add_column_family(self, cf_def): + self._oprot.writeMessageBegin('system_add_column_family', TMessageType.CALL, self._seqid) + args = system_add_column_family_args() + args.cf_def = cf_def + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_add_column_family(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_add_column_family_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_add_column_family failed: unknown result"); + + def system_drop_column_family(self, column_family): + """ + drops a column family. returns the new schema id. + + Parameters: + - column_family + """ + self.send_system_drop_column_family(column_family) + return self.recv_system_drop_column_family() + + def send_system_drop_column_family(self, column_family): + self._oprot.writeMessageBegin('system_drop_column_family', TMessageType.CALL, self._seqid) + args = system_drop_column_family_args() + args.column_family = column_family + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_drop_column_family(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_drop_column_family_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_drop_column_family failed: unknown result"); + + def system_add_keyspace(self, ks_def): + """ + adds a keyspace and any column families that are part of it. returns the new schema id. + + Parameters: + - ks_def + """ + self.send_system_add_keyspace(ks_def) + return self.recv_system_add_keyspace() + + def send_system_add_keyspace(self, ks_def): + self._oprot.writeMessageBegin('system_add_keyspace', TMessageType.CALL, self._seqid) + args = system_add_keyspace_args() + args.ks_def = ks_def + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_add_keyspace(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_add_keyspace_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_add_keyspace failed: unknown result"); + + def system_drop_keyspace(self, keyspace): + """ + drops a keyspace and any column families that are part of it. returns the new schema id. + + Parameters: + - keyspace + """ + self.send_system_drop_keyspace(keyspace) + return self.recv_system_drop_keyspace() + + def send_system_drop_keyspace(self, keyspace): + self._oprot.writeMessageBegin('system_drop_keyspace', TMessageType.CALL, self._seqid) + args = system_drop_keyspace_args() + args.keyspace = keyspace + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_drop_keyspace(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_drop_keyspace_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_drop_keyspace failed: unknown result"); + + def system_update_keyspace(self, ks_def): + """ + updates properties of a keyspace. returns the new schema id. + + Parameters: + - ks_def + """ + self.send_system_update_keyspace(ks_def) + return self.recv_system_update_keyspace() + + def send_system_update_keyspace(self, ks_def): + self._oprot.writeMessageBegin('system_update_keyspace', TMessageType.CALL, self._seqid) + args = system_update_keyspace_args() + args.ks_def = ks_def + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_update_keyspace(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_update_keyspace_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_update_keyspace failed: unknown result"); + + def system_update_column_family(self, cf_def): + """ + updates properties of a column family. returns the new schema id. + + Parameters: + - cf_def + """ + self.send_system_update_column_family(cf_def) + return self.recv_system_update_column_family() + + def send_system_update_column_family(self, cf_def): + self._oprot.writeMessageBegin('system_update_column_family', TMessageType.CALL, self._seqid) + args = system_update_column_family_args() + args.cf_def = cf_def + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() + + def recv_system_update_column_family(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() + if mtype == TMessageType.EXCEPTION: + x = TApplicationException() + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x + result = system_update_column_family_result() + result.read(self._iprot) + self._iprot.readMessageEnd() + if result.success != None: + return result.success + if result.ire != None: + raise result.ire + if result.sde != None: + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "system_update_column_family failed: unknown result"); def execute_cql_query(self, query, compression): """ @@ -1584,49 +1489,44 @@ class Client: - query - compression """ - self._seqid += 1 - d = self._reqs[self._seqid] = defer.Deferred() self.send_execute_cql_query(query, compression) - return d + return self.recv_execute_cql_query() def send_execute_cql_query(self, query, compression): - oprot = self._oprot_factory.getProtocol(self._transport) - oprot.writeMessageBegin('execute_cql_query', TMessageType.CALL, self._seqid) + self._oprot.writeMessageBegin('execute_cql_query', TMessageType.CALL, self._seqid) args = execute_cql_query_args() args.query = query args.compression = compression - args.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() + args.write(self._oprot) + self._oprot.writeMessageEnd() + self._oprot.trans.flush() - def recv_execute_cql_query(self, iprot, mtype, rseqid): - d = self._reqs.pop(rseqid) + def recv_execute_cql_query(self, ): + (fname, mtype, rseqid) = self._iprot.readMessageBegin() if mtype == TMessageType.EXCEPTION: x = TApplicationException() - x.read(iprot) - iprot.readMessageEnd() - return d.errback(x) + x.read(self._iprot) + self._iprot.readMessageEnd() + raise x result = execute_cql_query_result() - result.read(iprot) - iprot.readMessageEnd() + result.read(self._iprot) + self._iprot.readMessageEnd() if result.success != None: - return d.callback(result.success) + return result.success if result.ire != None: - return d.errback(result.ire) + raise result.ire if result.ue != None: - return d.errback(result.ue) + raise result.ue if result.te != None: - return d.errback(result.te) + raise result.te if result.sde != None: - return d.errback(result.sde) - return d.errback(TApplicationException(TApplicationException.MISSING_RESULT, "execute_cql_query failed: unknown result")) + raise result.sde + raise TApplicationException(TApplicationException.MISSING_RESULT, "execute_cql_query failed: unknown result"); -class Processor(TProcessor): - implements(Iface) - +class Processor(Iface, TProcessor): def __init__(self, handler): - self._handler = Iface(handler) + self._handler = handler self._processMap = {} self._processMap["login"] = Processor.process_login self._processMap["set_keyspace"] = Processor.process_set_keyspace @@ -1670,30 +1570,18 @@ class Processor(TProcessor): x.write(oprot) oprot.writeMessageEnd() oprot.trans.flush() - return defer.succeed(None) + return else: - return self._processMap[name](self, seqid, iprot, oprot) + self._processMap[name](self, seqid, iprot, oprot) + return True def process_login(self, seqid, iprot, oprot): args = login_args() args.read(iprot) iprot.readMessageEnd() result = login_result() - d = defer.maybeDeferred(self._handler.login, args.auth_request) - d.addCallback(self.write_results_success_login, result, seqid, oprot) - d.addErrback(self.write_results_exception_login, result, seqid, oprot) - return d - - def write_results_success_login(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("login", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_login(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.login(args.auth_request) except AuthenticationException, authnx: result.authnx = authnx except AuthorizationException, authzx: @@ -1708,21 +1596,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = set_keyspace_result() - d = defer.maybeDeferred(self._handler.set_keyspace, args.keyspace) - d.addCallback(self.write_results_success_set_keyspace, result, seqid, oprot) - d.addErrback(self.write_results_exception_set_keyspace, result, seqid, oprot) - return d - - def write_results_success_set_keyspace(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("set_keyspace", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_set_keyspace(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.set_keyspace(args.keyspace) except InvalidRequestException, ire: result.ire = ire oprot.writeMessageBegin("set_keyspace", TMessageType.REPLY, seqid) @@ -1735,21 +1610,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = get_result() - d = defer.maybeDeferred(self._handler.get, args.key, args.column_path, args.consistency_level) - d.addCallback(self.write_results_success_get, result, seqid, oprot) - d.addErrback(self.write_results_exception_get, result, seqid, oprot) - return d - - def write_results_success_get(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("get", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_get(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.get(args.key, args.column_path, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except NotFoundException, nfe: @@ -1768,21 +1630,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = get_slice_result() - d = defer.maybeDeferred(self._handler.get_slice, args.key, args.column_parent, args.predicate, args.consistency_level) - d.addCallback(self.write_results_success_get_slice, result, seqid, oprot) - d.addErrback(self.write_results_exception_get_slice, result, seqid, oprot) - return d - - def write_results_success_get_slice(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("get_slice", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_get_slice(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.get_slice(args.key, args.column_parent, args.predicate, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1799,21 +1648,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = get_count_result() - d = defer.maybeDeferred(self._handler.get_count, args.key, args.column_parent, args.predicate, args.consistency_level) - d.addCallback(self.write_results_success_get_count, result, seqid, oprot) - d.addErrback(self.write_results_exception_get_count, result, seqid, oprot) - return d - - def write_results_success_get_count(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("get_count", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_get_count(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.get_count(args.key, args.column_parent, args.predicate, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1830,21 +1666,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = multiget_slice_result() - d = defer.maybeDeferred(self._handler.multiget_slice, args.keys, args.column_parent, args.predicate, args.consistency_level) - d.addCallback(self.write_results_success_multiget_slice, result, seqid, oprot) - d.addErrback(self.write_results_exception_multiget_slice, result, seqid, oprot) - return d - - def write_results_success_multiget_slice(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("multiget_slice", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_multiget_slice(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.multiget_slice(args.keys, args.column_parent, args.predicate, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1861,21 +1684,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = multiget_count_result() - d = defer.maybeDeferred(self._handler.multiget_count, args.keys, args.column_parent, args.predicate, args.consistency_level) - d.addCallback(self.write_results_success_multiget_count, result, seqid, oprot) - d.addErrback(self.write_results_exception_multiget_count, result, seqid, oprot) - return d - - def write_results_success_multiget_count(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("multiget_count", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_multiget_count(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.multiget_count(args.keys, args.column_parent, args.predicate, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1892,21 +1702,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = get_range_slices_result() - d = defer.maybeDeferred(self._handler.get_range_slices, args.column_parent, args.predicate, args.range, args.consistency_level) - d.addCallback(self.write_results_success_get_range_slices, result, seqid, oprot) - d.addErrback(self.write_results_exception_get_range_slices, result, seqid, oprot) - return d - - def write_results_success_get_range_slices(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("get_range_slices", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_get_range_slices(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.get_range_slices(args.column_parent, args.predicate, args.range, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1923,21 +1720,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = get_indexed_slices_result() - d = defer.maybeDeferred(self._handler.get_indexed_slices, args.column_parent, args.index_clause, args.column_predicate, args.consistency_level) - d.addCallback(self.write_results_success_get_indexed_slices, result, seqid, oprot) - d.addErrback(self.write_results_exception_get_indexed_slices, result, seqid, oprot) - return d - - def write_results_success_get_indexed_slices(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("get_indexed_slices", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_get_indexed_slices(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.get_indexed_slices(args.column_parent, args.index_clause, args.column_predicate, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1954,21 +1738,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = insert_result() - d = defer.maybeDeferred(self._handler.insert, args.key, args.column_parent, args.column, args.consistency_level) - d.addCallback(self.write_results_success_insert, result, seqid, oprot) - d.addErrback(self.write_results_exception_insert, result, seqid, oprot) - return d - - def write_results_success_insert(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("insert", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_insert(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.insert(args.key, args.column_parent, args.column, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -1985,21 +1756,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = add_result() - d = defer.maybeDeferred(self._handler.add, args.key, args.column_parent, args.column, args.consistency_level) - d.addCallback(self.write_results_success_add, result, seqid, oprot) - d.addErrback(self.write_results_exception_add, result, seqid, oprot) - return d - - def write_results_success_add(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("add", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_add(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.add(args.key, args.column_parent, args.column, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -2016,21 +1774,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = remove_result() - d = defer.maybeDeferred(self._handler.remove, args.key, args.column_path, args.timestamp, args.consistency_level) - d.addCallback(self.write_results_success_remove, result, seqid, oprot) - d.addErrback(self.write_results_exception_remove, result, seqid, oprot) - return d - - def write_results_success_remove(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("remove", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_remove(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.remove(args.key, args.column_path, args.timestamp, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -2047,21 +1792,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = remove_counter_result() - d = defer.maybeDeferred(self._handler.remove_counter, args.key, args.path, args.consistency_level) - d.addCallback(self.write_results_success_remove_counter, result, seqid, oprot) - d.addErrback(self.write_results_exception_remove_counter, result, seqid, oprot) - return d - - def write_results_success_remove_counter(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("remove_counter", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_remove_counter(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.remove_counter(args.key, args.path, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -2078,21 +1810,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = batch_mutate_result() - d = defer.maybeDeferred(self._handler.batch_mutate, args.mutation_map, args.consistency_level) - d.addCallback(self.write_results_success_batch_mutate, result, seqid, oprot) - d.addErrback(self.write_results_exception_batch_mutate, result, seqid, oprot) - return d - - def write_results_success_batch_mutate(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("batch_mutate", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_batch_mutate(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.batch_mutate(args.mutation_map, args.consistency_level) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -2109,21 +1828,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = truncate_result() - d = defer.maybeDeferred(self._handler.truncate, args.cfname) - d.addCallback(self.write_results_success_truncate, result, seqid, oprot) - d.addErrback(self.write_results_exception_truncate, result, seqid, oprot) - return d - - def write_results_success_truncate(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("truncate", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_truncate(self, error, result, seqid, oprot): try: - error.raiseException() + self._handler.truncate(args.cfname) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: @@ -2138,21 +1844,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_schema_versions_result() - d = defer.maybeDeferred(self._handler.describe_schema_versions, ) - d.addCallback(self.write_results_success_describe_schema_versions, result, seqid, oprot) - d.addErrback(self.write_results_exception_describe_schema_versions, result, seqid, oprot) - return d - - def write_results_success_describe_schema_versions(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("describe_schema_versions", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_describe_schema_versions(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.describe_schema_versions() except InvalidRequestException, ire: result.ire = ire oprot.writeMessageBegin("describe_schema_versions", TMessageType.REPLY, seqid) @@ -2165,21 +1858,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_keyspaces_result() - d = defer.maybeDeferred(self._handler.describe_keyspaces, ) - d.addCallback(self.write_results_success_describe_keyspaces, result, seqid, oprot) - d.addErrback(self.write_results_exception_describe_keyspaces, result, seqid, oprot) - return d - - def write_results_success_describe_keyspaces(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("describe_keyspaces", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_describe_keyspaces(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.describe_keyspaces() except InvalidRequestException, ire: result.ire = ire oprot.writeMessageBegin("describe_keyspaces", TMessageType.REPLY, seqid) @@ -2192,12 +1872,7 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_cluster_name_result() - d = defer.maybeDeferred(self._handler.describe_cluster_name, ) - d.addCallback(self.write_results_success_describe_cluster_name, result, seqid, oprot) - return d - - def write_results_success_describe_cluster_name(self, success, result, seqid, oprot): - result.success = success + result.success = self._handler.describe_cluster_name() oprot.writeMessageBegin("describe_cluster_name", TMessageType.REPLY, seqid) result.write(oprot) oprot.writeMessageEnd() @@ -2208,12 +1883,7 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_version_result() - d = defer.maybeDeferred(self._handler.describe_version, ) - d.addCallback(self.write_results_success_describe_version, result, seqid, oprot) - return d - - def write_results_success_describe_version(self, success, result, seqid, oprot): - result.success = success + result.success = self._handler.describe_version() oprot.writeMessageBegin("describe_version", TMessageType.REPLY, seqid) result.write(oprot) oprot.writeMessageEnd() @@ -2224,21 +1894,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_ring_result() - d = defer.maybeDeferred(self._handler.describe_ring, args.keyspace) - d.addCallback(self.write_results_success_describe_ring, result, seqid, oprot) - d.addErrback(self.write_results_exception_describe_ring, result, seqid, oprot) - return d - - def write_results_success_describe_ring(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("describe_ring", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_describe_ring(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.describe_ring(args.keyspace) except InvalidRequestException, ire: result.ire = ire oprot.writeMessageBegin("describe_ring", TMessageType.REPLY, seqid) @@ -2251,12 +1908,7 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_partitioner_result() - d = defer.maybeDeferred(self._handler.describe_partitioner, ) - d.addCallback(self.write_results_success_describe_partitioner, result, seqid, oprot) - return d - - def write_results_success_describe_partitioner(self, success, result, seqid, oprot): - result.success = success + result.success = self._handler.describe_partitioner() oprot.writeMessageBegin("describe_partitioner", TMessageType.REPLY, seqid) result.write(oprot) oprot.writeMessageEnd() @@ -2267,12 +1919,7 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_snitch_result() - d = defer.maybeDeferred(self._handler.describe_snitch, ) - d.addCallback(self.write_results_success_describe_snitch, result, seqid, oprot) - return d - - def write_results_success_describe_snitch(self, success, result, seqid, oprot): - result.success = success + result.success = self._handler.describe_snitch() oprot.writeMessageBegin("describe_snitch", TMessageType.REPLY, seqid) result.write(oprot) oprot.writeMessageEnd() @@ -2283,21 +1930,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_keyspace_result() - d = defer.maybeDeferred(self._handler.describe_keyspace, args.keyspace) - d.addCallback(self.write_results_success_describe_keyspace, result, seqid, oprot) - d.addErrback(self.write_results_exception_describe_keyspace, result, seqid, oprot) - return d - - def write_results_success_describe_keyspace(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("describe_keyspace", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_describe_keyspace(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.describe_keyspace(args.keyspace) except NotFoundException, nfe: result.nfe = nfe except InvalidRequestException, ire: @@ -2312,21 +1946,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = describe_splits_result() - d = defer.maybeDeferred(self._handler.describe_splits, args.cfName, args.start_token, args.end_token, args.keys_per_split) - d.addCallback(self.write_results_success_describe_splits, result, seqid, oprot) - d.addErrback(self.write_results_exception_describe_splits, result, seqid, oprot) - return d - - def write_results_success_describe_splits(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("describe_splits", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_describe_splits(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.describe_splits(args.cfName, args.start_token, args.end_token, args.keys_per_split) except InvalidRequestException, ire: result.ire = ire oprot.writeMessageBegin("describe_splits", TMessageType.REPLY, seqid) @@ -2339,21 +1960,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_add_column_family_result() - d = defer.maybeDeferred(self._handler.system_add_column_family, args.cf_def) - d.addCallback(self.write_results_success_system_add_column_family, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_add_column_family, result, seqid, oprot) - return d - - def write_results_success_system_add_column_family(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_add_column_family", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_add_column_family(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_add_column_family(args.cf_def) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2368,21 +1976,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_drop_column_family_result() - d = defer.maybeDeferred(self._handler.system_drop_column_family, args.column_family) - d.addCallback(self.write_results_success_system_drop_column_family, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_drop_column_family, result, seqid, oprot) - return d - - def write_results_success_system_drop_column_family(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_drop_column_family", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_drop_column_family(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_drop_column_family(args.column_family) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2397,21 +1992,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_add_keyspace_result() - d = defer.maybeDeferred(self._handler.system_add_keyspace, args.ks_def) - d.addCallback(self.write_results_success_system_add_keyspace, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_add_keyspace, result, seqid, oprot) - return d - - def write_results_success_system_add_keyspace(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_add_keyspace", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_add_keyspace(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_add_keyspace(args.ks_def) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2426,21 +2008,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_drop_keyspace_result() - d = defer.maybeDeferred(self._handler.system_drop_keyspace, args.keyspace) - d.addCallback(self.write_results_success_system_drop_keyspace, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_drop_keyspace, result, seqid, oprot) - return d - - def write_results_success_system_drop_keyspace(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_drop_keyspace", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_drop_keyspace(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_drop_keyspace(args.keyspace) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2455,21 +2024,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_update_keyspace_result() - d = defer.maybeDeferred(self._handler.system_update_keyspace, args.ks_def) - d.addCallback(self.write_results_success_system_update_keyspace, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_update_keyspace, result, seqid, oprot) - return d - - def write_results_success_system_update_keyspace(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_update_keyspace", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_update_keyspace(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_update_keyspace(args.ks_def) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2484,21 +2040,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = system_update_column_family_result() - d = defer.maybeDeferred(self._handler.system_update_column_family, args.cf_def) - d.addCallback(self.write_results_success_system_update_column_family, result, seqid, oprot) - d.addErrback(self.write_results_exception_system_update_column_family, result, seqid, oprot) - return d - - def write_results_success_system_update_column_family(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("system_update_column_family", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_system_update_column_family(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.system_update_column_family(args.cf_def) except InvalidRequestException, ire: result.ire = ire except SchemaDisagreementException, sde: @@ -2513,21 +2056,8 @@ class Processor(TProcessor): args.read(iprot) iprot.readMessageEnd() result = execute_cql_query_result() - d = defer.maybeDeferred(self._handler.execute_cql_query, args.query, args.compression) - d.addCallback(self.write_results_success_execute_cql_query, result, seqid, oprot) - d.addErrback(self.write_results_exception_execute_cql_query, result, seqid, oprot) - return d - - def write_results_success_execute_cql_query(self, success, result, seqid, oprot): - result.success = success - oprot.writeMessageBegin("execute_cql_query", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - def write_results_exception_execute_cql_query(self, error, result, seqid, oprot): try: - error.raiseException() + result.success = self._handler.execute_cql_query(args.query, args.compression) except InvalidRequestException, ire: result.ire = ire except UnavailableException, ue: diff --git a/drivers/txpy/txcql/cassandra/constants.py b/drivers/txpy/txcql/cassandra/constants.py index 012d826395..2502504d4f 100644 --- a/drivers/txpy/txcql/cassandra/constants.py +++ b/drivers/txpy/txcql/cassandra/constants.py @@ -7,4 +7,4 @@ from thrift.Thrift import * from ttypes import * -VERSION = "20.0.0" +VERSION = "20.1.0" diff --git a/drivers/txpy/txcql/cassandra/ttypes.py b/drivers/txpy/txcql/cassandra/ttypes.py index 0b94d109f6..bfdc26c39f 100644 --- a/drivers/txpy/txcql/cassandra/ttypes.py +++ b/drivers/txpy/txcql/cassandra/ttypes.py @@ -2324,6 +2324,7 @@ class CfDef: - merge_shards_chance - key_validation_class - row_cache_provider + - key_alias """ thrift_spec = ( @@ -2355,9 +2356,10 @@ class CfDef: (25, TType.DOUBLE, 'merge_shards_chance', None, None, ), # 25 (26, TType.STRING, 'key_validation_class', None, None, ), # 26 (27, TType.STRING, 'row_cache_provider', None, "org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider", ), # 27 + (28, TType.STRING, 'key_alias', None, None, ), # 28 ) - def __init__(self, keyspace=None, name=None, column_type=thrift_spec[3][4], comparator_type=thrift_spec[5][4], subcomparator_type=None, comment=None, row_cache_size=thrift_spec[9][4], key_cache_size=thrift_spec[11][4], read_repair_chance=thrift_spec[12][4], column_metadata=None, gc_grace_seconds=None, default_validation_class=None, id=None, min_compaction_threshold=None, max_compaction_threshold=None, row_cache_save_period_in_seconds=None, key_cache_save_period_in_seconds=None, memtable_flush_after_mins=None, memtable_throughput_in_mb=None, memtable_operations_in_millions=None, replicate_on_write=None, merge_shards_chance=None, key_validation_class=None, row_cache_provider=thrift_spec[27][4],): + def __init__(self, keyspace=None, name=None, column_type=thrift_spec[3][4], comparator_type=thrift_spec[5][4], subcomparator_type=None, comment=None, row_cache_size=thrift_spec[9][4], key_cache_size=thrift_spec[11][4], read_repair_chance=thrift_spec[12][4], column_metadata=None, gc_grace_seconds=None, default_validation_class=None, id=None, min_compaction_threshold=None, max_compaction_threshold=None, row_cache_save_period_in_seconds=None, key_cache_save_period_in_seconds=None, memtable_flush_after_mins=None, memtable_throughput_in_mb=None, memtable_operations_in_millions=None, replicate_on_write=None, merge_shards_chance=None, key_validation_class=None, row_cache_provider=thrift_spec[27][4], key_alias=None,): self.keyspace = keyspace self.name = name self.column_type = column_type @@ -2382,6 +2384,7 @@ class CfDef: self.merge_shards_chance = merge_shards_chance self.key_validation_class = key_validation_class self.row_cache_provider = row_cache_provider + self.key_alias = key_alias def read(self, iprot): if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: @@ -2518,6 +2521,11 @@ class CfDef: self.row_cache_provider = iprot.readString(); else: iprot.skip(ftype) + elif fid == 28: + if ftype == TType.STRING: + self.key_alias = iprot.readString(); + else: + iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() @@ -2627,6 +2635,10 @@ class CfDef: oprot.writeFieldBegin('row_cache_provider', TType.STRING, 27) oprot.writeString(self.row_cache_provider) oprot.writeFieldEnd() + if self.key_alias != None: + oprot.writeFieldBegin('key_alias', TType.STRING, 28) + oprot.writeString(self.key_alias) + oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() def validate(self): diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift index 79b9f6c7b0..03cd18730d 100644 --- a/interface/cassandra.thrift +++ b/interface/cassandra.thrift @@ -46,7 +46,7 @@ namespace rb CassandraThrift # for every edit that doesn't result in a change to major/minor. # # See the Semantic Versioning Specification (SemVer) http://semver.org. -const string VERSION = "20.0.0" +const string VERSION = "20.1.0" # @@ -394,6 +394,7 @@ struct CfDef { 25: optional double merge_shards_chance, 26: optional string key_validation_class, 27: optional string row_cache_provider="org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider", + 28: optional binary key_alias, } /* describes a keyspace. */ diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java index 9a901ab65f..375bdba3db 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java @@ -69,6 +69,7 @@ public class CfDef implements org.apache.thrift.TBase, jav private static final org.apache.thrift.protocol.TField MERGE_SHARDS_CHANCE_FIELD_DESC = new org.apache.thrift.protocol.TField("merge_shards_chance", org.apache.thrift.protocol.TType.DOUBLE, (short)25); private static final org.apache.thrift.protocol.TField KEY_VALIDATION_CLASS_FIELD_DESC = new org.apache.thrift.protocol.TField("key_validation_class", org.apache.thrift.protocol.TType.STRING, (short)26); private static final org.apache.thrift.protocol.TField ROW_CACHE_PROVIDER_FIELD_DESC = new org.apache.thrift.protocol.TField("row_cache_provider", org.apache.thrift.protocol.TType.STRING, (short)27); + private static final org.apache.thrift.protocol.TField KEY_ALIAS_FIELD_DESC = new org.apache.thrift.protocol.TField("key_alias", org.apache.thrift.protocol.TType.STRING, (short)28); public String keyspace; public String name; @@ -94,6 +95,7 @@ public class CfDef implements org.apache.thrift.TBase, jav public double merge_shards_chance; public String key_validation_class; public String row_cache_provider; + public ByteBuffer key_alias; /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ public enum _Fields implements org.apache.thrift.TFieldIdEnum { @@ -120,7 +122,8 @@ public class CfDef implements org.apache.thrift.TBase, jav REPLICATE_ON_WRITE((short)24, "replicate_on_write"), MERGE_SHARDS_CHANCE((short)25, "merge_shards_chance"), KEY_VALIDATION_CLASS((short)26, "key_validation_class"), - ROW_CACHE_PROVIDER((short)27, "row_cache_provider"); + ROW_CACHE_PROVIDER((short)27, "row_cache_provider"), + KEY_ALIAS((short)28, "key_alias"); private static final Map byName = new HashMap(); @@ -183,6 +186,8 @@ public class CfDef implements org.apache.thrift.TBase, jav return KEY_VALIDATION_CLASS; case 27: // ROW_CACHE_PROVIDER return ROW_CACHE_PROVIDER; + case 28: // KEY_ALIAS + return KEY_ALIAS; default: return null; } @@ -291,6 +296,8 @@ public class CfDef implements org.apache.thrift.TBase, jav new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); tmpMap.put(_Fields.ROW_CACHE_PROVIDER, new org.apache.thrift.meta_data.FieldMetaData("row_cache_provider", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + tmpMap.put(_Fields.KEY_ALIAS, new org.apache.thrift.meta_data.FieldMetaData("key_alias", org.apache.thrift.TFieldRequirementType.OPTIONAL, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING , true))); metaDataMap = Collections.unmodifiableMap(tmpMap); org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(CfDef.class, metaDataMap); } @@ -373,6 +380,10 @@ public class CfDef implements org.apache.thrift.TBase, jav if (other.isSetRow_cache_provider()) { this.row_cache_provider = other.row_cache_provider; } + if (other.isSetKey_alias()) { + this.key_alias = org.apache.thrift.TBaseHelper.copyBinary(other.key_alias); +; + } } public CfDef deepCopy() { @@ -422,6 +433,7 @@ public class CfDef implements org.apache.thrift.TBase, jav this.key_validation_class = null; this.row_cache_provider = "org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider"; + this.key_alias = null; } public String getKeyspace() { @@ -1001,6 +1013,40 @@ public class CfDef implements org.apache.thrift.TBase, jav } } + public byte[] getKey_alias() { + setKey_alias(org.apache.thrift.TBaseHelper.rightSize(key_alias)); + return key_alias == null ? null : key_alias.array(); + } + + public ByteBuffer bufferForKey_alias() { + return key_alias; + } + + public CfDef setKey_alias(byte[] key_alias) { + setKey_alias(key_alias == null ? (ByteBuffer)null : ByteBuffer.wrap(key_alias)); + return this; + } + + public CfDef setKey_alias(ByteBuffer key_alias) { + this.key_alias = key_alias; + return this; + } + + public void unsetKey_alias() { + this.key_alias = null; + } + + /** Returns true if field key_alias is set (has been assigned a value) and false otherwise */ + public boolean isSetKey_alias() { + return this.key_alias != null; + } + + public void setKey_aliasIsSet(boolean value) { + if (!value) { + this.key_alias = null; + } + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case KEYSPACE: @@ -1195,6 +1241,14 @@ public class CfDef implements org.apache.thrift.TBase, jav } break; + case KEY_ALIAS: + if (value == null) { + unsetKey_alias(); + } else { + setKey_alias((ByteBuffer)value); + } + break; + } } @@ -1272,6 +1326,9 @@ public class CfDef implements org.apache.thrift.TBase, jav case ROW_CACHE_PROVIDER: return getRow_cache_provider(); + case KEY_ALIAS: + return getKey_alias(); + } throw new IllegalStateException(); } @@ -1331,6 +1388,8 @@ public class CfDef implements org.apache.thrift.TBase, jav return isSetKey_validation_class(); case ROW_CACHE_PROVIDER: return isSetRow_cache_provider(); + case KEY_ALIAS: + return isSetKey_alias(); } throw new IllegalStateException(); } @@ -1564,6 +1623,15 @@ public class CfDef implements org.apache.thrift.TBase, jav return false; } + boolean this_present_key_alias = true && this.isSetKey_alias(); + boolean that_present_key_alias = true && that.isSetKey_alias(); + if (this_present_key_alias || that_present_key_alias) { + if (!(this_present_key_alias && that_present_key_alias)) + return false; + if (!this.key_alias.equals(that.key_alias)) + return false; + } + return true; } @@ -1691,6 +1759,11 @@ public class CfDef implements org.apache.thrift.TBase, jav if (present_row_cache_provider) builder.append(row_cache_provider); + boolean present_key_alias = true && (isSetKey_alias()); + builder.append(present_key_alias); + if (present_key_alias) + builder.append(key_alias); + return builder.toHashCode(); } @@ -1942,6 +2015,16 @@ public class CfDef implements org.apache.thrift.TBase, jav return lastComparison; } } + lastComparison = Boolean.valueOf(isSetKey_alias()).compareTo(typedOther.isSetKey_alias()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetKey_alias()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.key_alias, typedOther.key_alias); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -2152,6 +2235,13 @@ public class CfDef implements org.apache.thrift.TBase, jav org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); } break; + case 28: // KEY_ALIAS + if (field.type == org.apache.thrift.protocol.TType.STRING) { + this.key_alias = iprot.readBinary(); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); } @@ -2310,6 +2400,13 @@ public class CfDef implements org.apache.thrift.TBase, jav oprot.writeFieldEnd(); } } + if (this.key_alias != null) { + if (isSetKey_alias()) { + oprot.writeFieldBegin(KEY_ALIAS_FIELD_DESC); + oprot.writeBinary(this.key_alias); + oprot.writeFieldEnd(); + } + } oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -2498,6 +2595,16 @@ public class CfDef implements org.apache.thrift.TBase, jav } first = false; } + if (isSetKey_alias()) { + if (!first) sb.append(", "); + sb.append("key_alias:"); + if (this.key_alias == null) { + sb.append("null"); + } else { + org.apache.thrift.TBaseHelper.toString(this.key_alias, sb); + } + first = false; + } sb.append(")"); return sb.toString(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java index bb3036a01f..32602fba50 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java @@ -44,6 +44,6 @@ import org.slf4j.LoggerFactory; public class Constants { - public static final String VERSION = "20.0.0"; + public static final String VERSION = "20.1.0"; } diff --git a/src/avro/internode.genavro b/src/avro/internode.genavro index 23fe90b46f..2e0a40ac50 100644 --- a/src/avro/internode.genavro +++ b/src/avro/internode.genavro @@ -64,6 +64,7 @@ protocol InterNode { union { int, null } id; union { array, null } column_metadata; union { string, null } row_cache_provider = "org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider"; + union { null, bytes } key_alias = null; } @aliases(["org.apache.cassandra.config.avro.KsDef"]) diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java index 34587e3088..c6b1e18ca8 100644 --- a/src/java/org/apache/cassandra/config/CFMetaData.java +++ b/src/java/org/apache/cassandra/config/CFMetaData.java @@ -43,6 +43,7 @@ import org.apache.cassandra.db.marshal.TimeUUIDType; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.db.migration.Migration; import org.apache.cassandra.io.SerDeUtils; +import org.apache.cassandra.thrift.InvalidRequestException; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; @@ -131,7 +132,7 @@ public final class CFMetaData //REQUIRED public final Integer cfId; // internal id, never exposed to user - public final String ksName; // name of keyspace + public final String ksName; // name of keyspace public final String cfName; // name of this column family public final ColumnFamilyType cfType; // standard, super public final AbstractType comparator; // bytes, long, timeuuid, utf8, etc. @@ -155,6 +156,7 @@ public final class CFMetaData private double memtableOperationsInMillions; // default based on throughput private double mergeShardsChance; // default 0.1, chance [0.0, 1.0] of merging old shards during replication private IRowCacheProvider rowCacheProvider; + private ByteBuffer keyAlias; // default NULL // NOTE: if you find yourself adding members to this class, make sure you keep the convert methods in lockstep. private Map column_metadata; @@ -175,6 +177,7 @@ public final class CFMetaData public CFMetaData memSize(int prop) {memtableThroughputInMb = prop; return this;} public CFMetaData memOps(double prop) {memtableOperationsInMillions = prop; return this;} public CFMetaData mergeShardsChance(double prop) {mergeShardsChance = prop; return this;} + public CFMetaData keyAlias(ByteBuffer prop) {keyAlias = prop; return this;} public CFMetaData columnMetadata(Map prop) {column_metadata = prop; return this;} public CFMetaData rowCacheProvider(IRowCacheProvider prop) { rowCacheProvider = prop; return this;}; @@ -236,6 +239,7 @@ public final class CFMetaData defaultValidator = BytesType.instance; keyValidator = BytesType.instance; comment = ""; + keyAlias = null; // This qualifies as a 'strange default'. column_metadata = new HashMap(); } @@ -335,6 +339,7 @@ public final class CFMetaData cf.memtable_throughput_in_mb = memtableThroughputInMb; cf.memtable_operations_in_millions = memtableOperationsInMillions; cf.merge_shards_chance = mergeShardsChance; + cf.key_alias = keyAlias; cf.column_metadata = SerDeUtils.createArray(column_metadata.size(), org.apache.cassandra.db.migration.avro.ColumnDef.SCHEMA$); for (ColumnDefinition cd : column_metadata.values()) @@ -399,6 +404,7 @@ public final class CFMetaData throw new RuntimeException(e); } } + if (cf.key_alias != null) { newCFMD.keyAlias(cf.key_alias); } return newCFMD.comment(cf.comment.toString()) .rowCacheSize(cf.row_cache_size) @@ -496,6 +502,11 @@ public final class CFMetaData return rowCacheProvider; } + public ByteBuffer getKeyAlias() + { + return keyAlias; + } + public Map getColumn_metadata() { return Collections.unmodifiableMap(column_metadata); @@ -506,7 +517,7 @@ public final class CFMetaData return superColumnName == null ? comparator : subcolumnComparator; } - public boolean equals(Object obj) + public boolean equals(Object obj) { if (obj == this) { @@ -542,6 +553,7 @@ public final class CFMetaData .append(memtableThroughputInMb, rhs.memtableThroughputInMb) .append(memtableOperationsInMillions, rhs.memtableOperationsInMillions) .append(mergeShardsChance, rhs.mergeShardsChance) + .append(keyAlias, rhs.keyAlias) .isEquals(); } @@ -571,6 +583,7 @@ public final class CFMetaData .append(memtableThroughputInMb) .append(memtableOperationsInMillions) .append(mergeShardsChance) + .append(keyAlias) .toHashCode(); } @@ -612,7 +625,49 @@ public final class CFMetaData if (!cf_def.isSetRow_cache_provider()) cf_def.setRow_cache_provider(CFMetaData.DEFAULT_ROW_CACHE_PROVIDER); } - + + public static CFMetaData convertToCFMetaData(org.apache.cassandra.thrift.CfDef cf_def) throws InvalidRequestException, ConfigurationException + { + ColumnFamilyType cfType = ColumnFamilyType.create(cf_def.column_type); + if (cfType == null) + { + throw new InvalidRequestException("Invalid column type " + cf_def.column_type); + } + + applyImplicitDefaults(cf_def); + + validateMinMaxCompactionThresholds(cf_def); + validateMemtableSettings(cf_def); + validateAliasCompares(cf_def); + + CFMetaData newCFMD = new CFMetaData(cf_def.keyspace, + cf_def.name, + cfType, + DatabaseDescriptor.getComparator(cf_def.comparator_type), + cf_def.subcomparator_type == null ? null : DatabaseDescriptor.getComparator(cf_def.subcomparator_type)); + + if (cf_def.isSetGc_grace_seconds()) { newCFMD.gcGraceSeconds(cf_def.gc_grace_seconds); } + if (cf_def.isSetMin_compaction_threshold()) { newCFMD.minCompactionThreshold(cf_def.min_compaction_threshold); } + if (cf_def.isSetMax_compaction_threshold()) { newCFMD.maxCompactionThreshold(cf_def.max_compaction_threshold); } + if (cf_def.isSetRow_cache_save_period_in_seconds()) { newCFMD.rowCacheSavePeriod(cf_def.row_cache_save_period_in_seconds); } + if (cf_def.isSetKey_cache_save_period_in_seconds()) { newCFMD.keyCacheSavePeriod(cf_def.key_cache_save_period_in_seconds); } + if (cf_def.isSetMemtable_flush_after_mins()) { newCFMD.memTime(cf_def.memtable_flush_after_mins); } + if (cf_def.isSetMemtable_throughput_in_mb()) { newCFMD.memSize(cf_def.memtable_throughput_in_mb); } + if (cf_def.isSetMemtable_operations_in_millions()) { newCFMD.memOps(cf_def.memtable_operations_in_millions); } + if (cf_def.isSetMerge_shards_chance()) { newCFMD.mergeShardsChance(cf_def.merge_shards_chance); } + if (cf_def.isSetRow_cache_provider()) { newCFMD.rowCacheProvider(FBUtilities.newCacheProvider(cf_def.row_cache_provider)); } + if (cf_def.isSetKey_alias()) { newCFMD.keyAlias(cf_def.key_alias); } + + return newCFMD.comment(cf_def.comment) + .rowCacheSize(cf_def.row_cache_size) + .keyCacheSize(cf_def.key_cache_size) + .readRepairChance(cf_def.read_repair_chance) + .replicateOnWrite(cf_def.replicate_on_write) + .defaultValidator(DatabaseDescriptor.getComparator(cf_def.default_validation_class)) + .keyValidator(DatabaseDescriptor.getComparator(cf_def.key_validation_class)) + .columnMetadata(ColumnDefinition.fromColumnDef(cf_def.column_metadata)); + } + // merges some final fields from this CFM with modifiable fields from CfDef into a new CFMetaData. public void apply(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException { @@ -638,6 +693,7 @@ public final class CFMetaData validateMinMaxCompactionThresholds(cf_def); validateMemtableSettings(cf_def); + validateAliasCompares(cf_def); comment = enforceCommentNotNull(cf_def.comment); rowCacheSize = cf_def.row_cache_size; @@ -657,7 +713,8 @@ public final class CFMetaData mergeShardsChance = cf_def.merge_shards_chance; if (cf_def.row_cache_provider != null) rowCacheProvider = FBUtilities.newCacheProvider(cf_def.row_cache_provider.toString()); - + keyAlias = cf_def.key_alias; + // adjust secondary indexes. figure out who is coming and going. Set toRemove = new HashSet(); Set newIndexNames = new HashSet(); @@ -723,6 +780,7 @@ public final class CFMetaData def.setMemtable_throughput_in_mb(cfm.memtableThroughputInMb); def.setMemtable_operations_in_millions(cfm.memtableOperationsInMillions); def.setMerge_shards_chance(cfm.mergeShardsChance); + def.setKey_alias(cfm.keyAlias); List column_meta = new ArrayList< org.apache.cassandra.thrift.ColumnDef>(cfm.column_metadata.size()); for (ColumnDefinition cd : cfm.column_metadata.values()) { @@ -767,6 +825,7 @@ public final class CFMetaData def.memtable_operations_in_millions = cfm.memtableOperationsInMillions; def.merge_shards_chance = cfm.mergeShardsChance; def.key_validation_class = cfm.keyValidator.getClass().getName(); + def.key_alias = cfm.keyAlias; List column_meta = new ArrayList(cfm.column_metadata.size()); for (ColumnDefinition cd : cfm.column_metadata.values()) { @@ -807,6 +866,7 @@ public final class CFMetaData newDef.row_cache_size = def.getRow_cache_size(); newDef.subcomparator_type = def.getSubcomparator_type(); newDef.merge_shards_chance = def.getMerge_shards_chance(); + newDef.key_alias = def.key_alias; List columnMeta = new ArrayList(); if (def.isSetColumn_metadata()) @@ -905,6 +965,20 @@ public final class CFMetaData DatabaseDescriptor.validateMemtableOperations(cf_def.memtable_operations_in_millions); } + public static void validateAliasCompares(org.apache.cassandra.thrift.CfDef cf_def) throws ConfigurationException + { + AbstractType comparator = DatabaseDescriptor.getComparator(cf_def.comparator_type); + if (cf_def.key_alias != null) + comparator.validate(cf_def.key_alias); + } + + public static void validateAliasCompares(org.apache.cassandra.db.migration.avro.CfDef cf_def) throws ConfigurationException + { + AbstractType comparator = DatabaseDescriptor.getComparator(cf_def.comparator_type); + if (cf_def.key_alias != null) + comparator.validate(cf_def.key_alias); + } + @Override public String toString() { @@ -931,6 +1005,7 @@ public final class CFMetaData .append("memtableThroughputInMb", memtableThroughputInMb) .append("memtableOperationsInMillions", memtableOperationsInMillions) .append("mergeShardsChance", mergeShardsChance) + .append("keyAlias", keyAlias) .append("column_metadata", column_metadata) .toString(); } diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 115cb40cd6..e6bed6aba2 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -207,6 +207,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe public void finishBootstrapping() { isBootstrapMode = false; + SystemTable.setBootstrapped(true); setToken(getLocalToken()); logger_.info("Bootstrap/move completed! Now serving reads."); } @@ -439,14 +440,13 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe logger_.info("This node will not auto bootstrap because it is configured to be a seed node."); Token token; - boolean bootstrapped = false; if (DatabaseDescriptor.isAutoBootstrap() && !(DatabaseDescriptor.getSeeds().contains(FBUtilities.getLocalAddress()) || SystemTable.isBootstrapped())) { - setMode("Joining: getting load information", true); + setMode("Joining: getting load and schema information", true); StorageLoadBalancer.instance.waitForLoadInfo(); if (logger_.isDebugEnabled()) - logger_.debug("... got load info"); + logger_.debug("... got load + schema info"); if (tokenMetadata_.isMember(FBUtilities.getLocalAddress())) { String s = "This node is already a member of the token ring; bootstrap aborted. (If replacing a dead node, remove the old one from the ring first.)"; @@ -459,8 +459,6 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe { bootstrap(token); assert !isBootstrapMode; // bootstrap will block until finished - bootstrapped = true; - SystemTable.setBootstrapped(true); // first startup is only chance to bootstrap } // else nothing to do, go directly to participating in ring } @@ -485,7 +483,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe { logger_.info("Using saved token " + token); } - } + } SystemTable.setBootstrapped(true); // first startup is only chance to bootstrap setToken(token); diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java index 1013a36f04..dd1e77e4df 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -790,7 +790,7 @@ public class CassandraServer implements Cassandra.Iface try { - applyMigrationOnStage(new AddColumnFamily(convertToCFMetaData(cf_def))); + applyMigrationOnStage(new AddColumnFamily(CFMetaData.convertToCFMetaData(cf_def))); return DatabaseDescriptor.getDefsVersion().toString(); } catch (ConfigurationException e) @@ -855,7 +855,7 @@ public class CassandraServer implements Cassandra.Iface for (CfDef cfDef : ks_def.cf_defs) { ThriftValidation.validateCfDef(cfDef); - cfDefs.add(convertToCFMetaData(cfDef)); + cfDefs.add(CFMetaData.convertToCFMetaData(cfDef)); } // Attempt to instantiate the ARS, which will throw a ConfigException if @@ -996,45 +996,6 @@ public class CassandraServer implements Cassandra.Iface throw new SchemaDisagreementException(); } - // @see CFMetaData.applyImplicitDefaults(). - private CFMetaData convertToCFMetaData(CfDef cf_def) throws InvalidRequestException, ConfigurationException - { - ColumnFamilyType cfType = ColumnFamilyType.create(cf_def.column_type); - if (cfType == null) - { - throw new InvalidRequestException("Invalid column type " + cf_def.column_type); - } - - CFMetaData.applyImplicitDefaults(cf_def); - CFMetaData.validateMinMaxCompactionThresholds(cf_def); - CFMetaData.validateMemtableSettings(cf_def); - - CFMetaData newCFMD = new CFMetaData(cf_def.keyspace, - cf_def.name, - cfType, - DatabaseDescriptor.getComparator(cf_def.comparator_type), - cf_def.subcomparator_type == null ? null : DatabaseDescriptor.getComparator(cf_def.subcomparator_type)); - - if (cf_def.isSetGc_grace_seconds()) { newCFMD.gcGraceSeconds(cf_def.gc_grace_seconds); } - if (cf_def.isSetMin_compaction_threshold()) { newCFMD.minCompactionThreshold(cf_def.min_compaction_threshold); } - if (cf_def.isSetMax_compaction_threshold()) { newCFMD.maxCompactionThreshold(cf_def.max_compaction_threshold); } - if (cf_def.isSetRow_cache_save_period_in_seconds()) { newCFMD.rowCacheSavePeriod(cf_def.row_cache_save_period_in_seconds); } - if (cf_def.isSetKey_cache_save_period_in_seconds()) { newCFMD.keyCacheSavePeriod(cf_def.key_cache_save_period_in_seconds); } - if (cf_def.isSetMemtable_flush_after_mins()) { newCFMD.memTime(cf_def.memtable_flush_after_mins); } - if (cf_def.isSetMemtable_throughput_in_mb()) { newCFMD.memSize(cf_def.memtable_throughput_in_mb); } - if (cf_def.isSetMemtable_operations_in_millions()) { newCFMD.memOps(cf_def.memtable_operations_in_millions); } - if (cf_def.isSetMerge_shards_chance()) { newCFMD.mergeShardsChance(cf_def.merge_shards_chance); } - if (cf_def.isSetRow_cache_provider()) { newCFMD.rowCacheProvider(FBUtilities.newCacheProvider(cf_def.row_cache_provider)); } - - return newCFMD.comment(cf_def.comment) - .rowCacheSize(cf_def.row_cache_size) - .keyCacheSize(cf_def.key_cache_size) - .readRepairChance(cf_def.read_repair_chance) - .replicateOnWrite(cf_def.replicate_on_write) - .defaultValidator(DatabaseDescriptor.getComparator(cf_def.default_validation_class)) - .columnMetadata(ColumnDefinition.fromColumnDef(cf_def.column_metadata)); - } - public void truncate(String cfname) throws InvalidRequestException, UnavailableException, TException { logger.debug("truncating {} in {}", cfname, state().getKeyspace());