From 3674ad9dab8f29173d7d4ee82488a8e9ea586240 Mon Sep 17 00:00:00 2001 From: Paulo Motta Date: Thu, 22 Oct 2015 11:38:31 -0700 Subject: [PATCH] Reject counter writes in CQLSSTableWriter patch by Paulo Motta; reviewed by Aleksey Yeschenko for CASSANDRA-10258 --- CHANGES.txt | 1 + .../io/sstable/CQLSSTableWriter.java | 2 ++ .../io/sstable/CQLSSTableWriterTest.java | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 123c1f38b0..fa2017a152 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.12 + * Reject counter writes in CQLSSTableWriter (CASSANDRA-10258) * Remove superfluous COUNTER_MUTATION stage mapping (CASSANDRA-10605) * Improve json2sstable error reporting on nonexistent columns (CASSANDRA-10401) * (cqlsh) fix COPY using wrong variable name for time_format (CASSANDRA-10633) diff --git a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java index c364171126..ae8a3920bf 100644 --- a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java @@ -453,6 +453,8 @@ public class CQLSSTableWriter implements Closeable this.boundNames = p.right; if (this.insert.hasConditions()) throw new IllegalArgumentException("Conditional statements are not supported"); + if (this.insert.isCounter()) + throw new IllegalArgumentException("Counter update statements are not supported"); if (this.boundNames.isEmpty()) throw new IllegalArgumentException("Provided insert statement has no bind variables"); return this; diff --git a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java index fa5cbb4b73..9c8a2c2de0 100644 --- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java @@ -135,6 +135,28 @@ public class CQLSSTableWriterTest assertEquals(12, row.getInt("v2")); } + @Test(expected = IllegalArgumentException.class) + public void testForbidCounterUpdates() throws Exception + { + String KS = "cql_keyspace"; + String TABLE = "counter1"; + + File tempdir = Files.createTempDir(); + File dataDir = new File(tempdir.getAbsolutePath() + File.separator + KS + File.separator + TABLE); + assert dataDir.mkdirs(); + + String schema = "CREATE TABLE cql_keyspace.counter1 (" + + " my_id int, " + + " my_counter counter, " + + " PRIMARY KEY (my_id)" + + ")"; + String insert = String.format("UPDATE cql_keyspace.counter1 SET my_counter = my_counter - ? WHERE my_id = ?"); + CQLSSTableWriter.builder().inDirectory(dataDir) + .forTable(schema) + .withPartitioner(StorageService.instance.getPartitioner()) + .using(insert).build(); + } + @Test public void testSyncWithinPartition() throws Exception {