You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2016/08/09 15:38:48 UTC
[1/3] cassandra git commit: Fix value skipping with counter columns
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.9 02ebf875b -> ee609411a
refs/heads/trunk 2c4b30164 -> 7c60840e9
Fix value skipping with counter columns
patch by Sylvain Lebresne; reviewed by Aleksey Yeschenko for
CASSANDRA-11726
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ee609411
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ee609411
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ee609411
Branch: refs/heads/cassandra-3.9
Commit: ee609411a8e154255812b157788a79bbdf076566
Parents: 02ebf87
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Thu Aug 4 17:54:03 2016 +0200
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Aug 9 16:33:10 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/Conflicts.java | 9 +++++++
.../cql3/validation/entities/CountersTest.java | 27 ++++++++++++++++++++
3 files changed, 37 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2c5c221..b7bbf72 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.9
+ * Fix value skipping with counter columns (CASSANDRA-11726)
* Fix nodetool tablestats miss SSTable count (CASSANDRA-12205)
* Fixed flacky SSTablesIteratedTest (CASSANDRA-12282)
* Fixed flacky SSTableRewriterTest: check file counts before calling validateCFS (CASSANDRA-12348)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/src/java/org/apache/cassandra/db/Conflicts.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Conflicts.java b/src/java/org/apache/cassandra/db/Conflicts.java
index fa0e819..9e8bd9a 100644
--- a/src/java/org/apache/cassandra/db/Conflicts.java
+++ b/src/java/org/apache/cassandra/db/Conflicts.java
@@ -68,6 +68,15 @@ public abstract class Conflicts
if (!rightLive)
return Resolution.RIGHT_WINS;
+ // Handle empty values. Counters can't truly have empty values, but we can have a counter cell that temporarily
+ // has one on read if the column for the cell is not queried by the user due to the optimization of #10657. We
+ // thus need to handle this (see #11726 too).
+ if (!leftValue.hasRemaining())
+ return rightValue.hasRemaining() || leftTimestamp > rightTimestamp ? Resolution.LEFT_WINS : Resolution.RIGHT_WINS;
+
+ if (!rightValue.hasRemaining())
+ return Resolution.RIGHT_WINS;
+
return Resolution.MERGE;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
index 33b4a4f..b1cd0bb 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
@@ -196,4 +196,31 @@ public class CountersTest extends CQLTester
assertInvalidThrowMessage("counter type is not supported for PRIMARY KEY part a",
InvalidRequestException.class, String.format("CREATE TABLE %s.%s (a counter, b int, PRIMARY KEY (b, a)) WITH CLUSTERING ORDER BY (a desc);", KEYSPACE, createTableName()));
}
+
+ /**
+ * Test for the bug of #11726.
+ */
+ @Test
+ public void testCounterAndColumnSelection() throws Throwable
+ {
+ for (String compactStorageClause : new String[]{ "", " WITH COMPACT STORAGE" })
+ {
+ createTable("CREATE TABLE %s (k int PRIMARY KEY, c counter)" + compactStorageClause);
+
+ // Flush 2 updates in different sstable so that the following select does a merge, which is what triggers
+ // the problem from #11726
+
+ execute("UPDATE %s SET c = c + ? WHERE k = ?", 1L, 0);
+
+ flush();
+
+ execute("UPDATE %s SET c = c + ? WHERE k = ?", 1L, 0);
+
+ flush();
+
+ // Querying, but not including the counter. Pre-CASSANDRA-11726, this made us query the counter but include
+ // it's value, which broke at merge (post-CASSANDRA-11726 are special cases to never skip values).
+ assertRows(execute("SELECT k FROM %s"), row(0));
+ }
+ }
}
[2/3] cassandra git commit: Fix value skipping with counter columns
Posted by al...@apache.org.
Fix value skipping with counter columns
patch by Sylvain Lebresne; reviewed by Aleksey Yeschenko for
CASSANDRA-11726
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ee609411
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ee609411
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ee609411
Branch: refs/heads/trunk
Commit: ee609411a8e154255812b157788a79bbdf076566
Parents: 02ebf87
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Thu Aug 4 17:54:03 2016 +0200
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Aug 9 16:33:10 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/Conflicts.java | 9 +++++++
.../cql3/validation/entities/CountersTest.java | 27 ++++++++++++++++++++
3 files changed, 37 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2c5c221..b7bbf72 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.9
+ * Fix value skipping with counter columns (CASSANDRA-11726)
* Fix nodetool tablestats miss SSTable count (CASSANDRA-12205)
* Fixed flacky SSTablesIteratedTest (CASSANDRA-12282)
* Fixed flacky SSTableRewriterTest: check file counts before calling validateCFS (CASSANDRA-12348)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/src/java/org/apache/cassandra/db/Conflicts.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Conflicts.java b/src/java/org/apache/cassandra/db/Conflicts.java
index fa0e819..9e8bd9a 100644
--- a/src/java/org/apache/cassandra/db/Conflicts.java
+++ b/src/java/org/apache/cassandra/db/Conflicts.java
@@ -68,6 +68,15 @@ public abstract class Conflicts
if (!rightLive)
return Resolution.RIGHT_WINS;
+ // Handle empty values. Counters can't truly have empty values, but we can have a counter cell that temporarily
+ // has one on read if the column for the cell is not queried by the user due to the optimization of #10657. We
+ // thus need to handle this (see #11726 too).
+ if (!leftValue.hasRemaining())
+ return rightValue.hasRemaining() || leftTimestamp > rightTimestamp ? Resolution.LEFT_WINS : Resolution.RIGHT_WINS;
+
+ if (!rightValue.hasRemaining())
+ return Resolution.RIGHT_WINS;
+
return Resolution.MERGE;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee609411/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
index 33b4a4f..b1cd0bb 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
@@ -196,4 +196,31 @@ public class CountersTest extends CQLTester
assertInvalidThrowMessage("counter type is not supported for PRIMARY KEY part a",
InvalidRequestException.class, String.format("CREATE TABLE %s.%s (a counter, b int, PRIMARY KEY (b, a)) WITH CLUSTERING ORDER BY (a desc);", KEYSPACE, createTableName()));
}
+
+ /**
+ * Test for the bug of #11726.
+ */
+ @Test
+ public void testCounterAndColumnSelection() throws Throwable
+ {
+ for (String compactStorageClause : new String[]{ "", " WITH COMPACT STORAGE" })
+ {
+ createTable("CREATE TABLE %s (k int PRIMARY KEY, c counter)" + compactStorageClause);
+
+ // Flush 2 updates in different sstable so that the following select does a merge, which is what triggers
+ // the problem from #11726
+
+ execute("UPDATE %s SET c = c + ? WHERE k = ?", 1L, 0);
+
+ flush();
+
+ execute("UPDATE %s SET c = c + ? WHERE k = ?", 1L, 0);
+
+ flush();
+
+ // Querying, but not including the counter. Pre-CASSANDRA-11726, this made us query the counter but include
+ // it's value, which broke at merge (post-CASSANDRA-11726 are special cases to never skip values).
+ assertRows(execute("SELECT k FROM %s"), row(0));
+ }
+ }
}
[3/3] cassandra git commit: Merge branch 'cassandra-3.9' into trunk
Posted by al...@apache.org.
Merge branch 'cassandra-3.9' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7c60840e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7c60840e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7c60840e
Branch: refs/heads/trunk
Commit: 7c60840e945823b8ad9aecfd68b290a32301b7e6
Parents: 2c4b301 ee60941
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Aug 9 16:36:28 2016 +0100
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Aug 9 16:36:28 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/Conflicts.java | 9 +++++++
.../cql3/validation/entities/CountersTest.java | 27 ++++++++++++++++++++
3 files changed, 37 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c60840e/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 097e9c1,b7bbf72..5161045
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,39 -1,5 +1,40 @@@
+3.10
+ * Cassandra stress should dump all setting on startup (CASSANDRA-11914)
+ * Make it possible to compact a given token range (CASSANDRA-10643)
+ * Allow updating DynamicEndpointSnitch properties via JMX (CASSANDRA-12179)
+ * Collect metrics on queries by consistency level (CASSANDRA-7384)
+ * Add support for GROUP BY to SELECT statement (CASSANDRA-10707)
+ * Deprecate memtable_cleanup_threshold and update default for memtable_flush_writers (CASSANDRA-12228)
+ * Upgrade to OHC 0.4.4 (CASSANDRA-12133)
+ * Add version command to cassandra-stress (CASSANDRA-12258)
+ * Create compaction-stress tool (CASSANDRA-11844)
+ * Garbage-collecting compaction operation and schema option (CASSANDRA-7019)
+ * Add schema to snapshot manifest, add USING TIMESTAMP clause to ALTER TABLE statements (CASSANDRA-7190)
+ * Add beta protocol flag for v5 native protocol (CASSANDRA-12142)
+ * Support filtering on non-PRIMARY KEY columns in the CREATE
+ MATERIALIZED VIEW statement's WHERE clause (CASSANDRA-10368)
+ * Unify STDOUT and SYSTEMLOG logback format (CASSANDRA-12004)
+ * COPY FROM should raise error for non-existing input files (CASSANDRA-12174)
+ * Faster write path (CASSANDRA-12269)
+ * Option to leave omitted columns in INSERT JSON unset (CASSANDRA-11424)
+ * Support json/yaml output in nodetool tpstats (CASSANDRA-12035)
+ * Expose metrics for successful/failed authentication attempts (CASSANDRA-10635)
+ * Prepend snapshot name with "truncated" or "dropped" when a snapshot
+ is taken before truncating or dropping a table (CASSANDRA-12178)
+ * Optimize RestrictionSet (CASSANDRA-12153)
+ * cqlsh does not automatically downgrade CQL version (CASSANDRA-12150)
+ * Omit (de)serialization of state variable in UDAs (CASSANDRA-9613)
+ * Create a system table to expose prepared statements (CASSANDRA-8831)
+ * Reuse DataOutputBuffer from ColumnIndex (CASSANDRA-11970)
+ * Remove DatabaseDescriptor dependency from SegmentedFile (CASSANDRA-11580)
+ * Add supplied username to authentication error messages (CASSANDRA-12076)
+ * Remove pre-startup check for open JMX port (CASSANDRA-12074)
+ * Remove compaction Severity from DynamicEndpointSnitch (CASSANDRA-11738)
+
+
3.9
+ * Fix value skipping with counter columns (CASSANDRA-11726)
+ * Restore resumable hints delivery (CASSANDRA-11960)
* Fix nodetool tablestats miss SSTable count (CASSANDRA-12205)
* Fixed flacky SSTablesIteratedTest (CASSANDRA-12282)
* Fixed flacky SSTableRewriterTest: check file counts before calling validateCFS (CASSANDRA-12348)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c60840e/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java
----------------------------------------------------------------------