You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by st...@apache.org on 2016/08/25 01:12:14 UTC
[2/6] cassandra git commit: cqlsh copy: fix missing counter values
cqlsh copy: fix missing counter values
patch by Stefania Alborghetti; reviewed by Tyler Hobbs for CASSANDRA-12476
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b9fc6a5e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b9fc6a5e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b9fc6a5e
Branch: refs/heads/cassandra-3.0
Commit: b9fc6a5e45d6f53d447839e7567d5184dede03d0
Parents: 23d4822
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Mon Aug 22 11:29:11 2016 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Thu Aug 25 09:09:07 2016 +0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
pylib/cqlshlib/copyutil.py | 16 +++++++++++++---
2 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9fc6a5e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a3a34c1..001a389 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.2.8
+ * cqlsh copy: fix missing counter values (CASSANDRA-12476)
* Move migration tasks to non-periodic queue, assure flush executor shutdown after non-periodic executor (CASSANDRA-12251)
* cqlsh copy: fixed possible race in initializing feeding thread (CASSANDRA-11701)
* Only set broadcast_rpc_address on Ec2MultiRegionSnitch if it's not set (CASSANDRA-11357)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9fc6a5e/pylib/cqlshlib/copyutil.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/copyutil.py b/pylib/cqlshlib/copyutil.py
index 460ae6a..aee2920 100644
--- a/pylib/cqlshlib/copyutil.py
+++ b/pylib/cqlshlib/copyutil.py
@@ -1746,6 +1746,7 @@ class ImportConversion(object):
else:
self.use_prepared_statements = True
+ self.is_counter = parent.is_counter(table_meta)
self.proto_version = statement.protocol_version
# the cql types and converters for the prepared statement, either the full statement or only the primary keys
@@ -1974,7 +1975,14 @@ class ImportConversion(object):
return converters.get(cql_type.typename, convert_unknown)
def get_null_val(self):
- return None if self.use_prepared_statements else "NULL"
+ """
+ Return the null value that is inserted for fields that are missing from csv files.
+ For counters we should return zero so that the counter value won't be incremented.
+ For everything else we return nulls, this means None if we use prepared statements
+ or "NULL" otherwise. Note that for counters we never use prepared statements, so we
+ only check is_counter when use_prepared_statements is false.
+ """
+ return None if self.use_prepared_statements else ("0" if self.is_counter else "NULL")
def convert_row(self, row):
"""
@@ -2177,13 +2185,15 @@ class ImportProcess(ChildProcess):
self._session.cluster.shutdown()
ChildProcess.close(self)
+ def is_counter(self, table_meta):
+ return "counter" in [table_meta.columns[name].cql_type for name in self.valid_columns]
+
def make_params(self):
metadata = self.session.cluster.metadata
table_meta = metadata.keyspaces[self.ks].tables[self.table]
prepared_statement = None
- is_counter = ("counter" in [table_meta.columns[name].cql_type for name in self.valid_columns])
- if is_counter:
+ if self.is_counter(table_meta):
query = 'UPDATE %s.%s SET %%s WHERE %%s' % (protect_name(self.ks), protect_name(self.table))
make_statement = self.wrap_make_statement(self.make_counter_batch_statement)
elif self.use_prepared_statements: