Counters fail to increment in 2.1/2.2 to 3.X mixed version clusters
authorAleksey Yeshchenko <aleksey@apple.com>
Fri, 11 Jan 2019 17:58:35 +0000 (17:58 +0000)
committerAleksey Yeshchenko <aleksey@apple.com>
Mon, 14 Jan 2019 18:02:42 +0000 (18:02 +0000)
patch by Aleksey Yeschenko; reviewed by Benedict Elliott Smith for
CASSANDRA-14958

CHANGES.txt
src/java/org/apache/cassandra/db/LegacyLayout.java
src/java/org/apache/cassandra/db/context/CounterContext.java

index 025d4b0..063e8fb 100644 (file)
@@ -1,4 +1,5 @@
 3.0.18
+ * Counters fail to increment in 2.1/2.2 to 3.X mixed version clusters (CASSANDRA-14958)
  * Streaming needs to synchronise access to LifecycleTransaction (CASSANDRA-14554)
  * Fix cassandra-stress write hang with default options (CASSANDRA-14616)
  * Differentiate between slices and RTs when decoding legacy bounds (CASSANDRA-14919)
index 9600355..0044959 100644 (file)
@@ -514,7 +514,7 @@ public abstract class LegacyLayout
             else if (cell.isCounterUpdate())
             {
                 out.writeLong(cell.timestamp);
-                long count = CounterContext.instance().getLocalCount(cell.value);
+                long count = CounterContext.instance().getUpdateCount(cell.value);
                 ByteBufferUtil.writeWithLength(ByteBufferUtil.bytes(count), out);
                 continue;
             }
@@ -585,7 +585,7 @@ public abstract class LegacyLayout
             else if (cell.isCounterUpdate())
             {
                 size += TypeSizes.sizeof(cell.timestamp);
-                long count = CounterContext.instance().getLocalCount(cell.value);
+                long count = CounterContext.instance().getUpdateCount(cell.value);
                 size += ByteBufferUtil.serializedSizeWithLength(ByteBufferUtil.bytes(count));
                 continue;
             }
index b402464..d0952d0 100644 (file)
@@ -137,6 +137,14 @@ public class CounterContext
     }
 
     /**
+     * Returns the count associated with the update counter id, or 0 if no such shard is present.
+     */
+    public long getUpdateCount(ByteBuffer context)
+    {
+        return getClockAndCountOf(context, UPDATE_CLOCK_ID).count;
+    }
+
+    /**
      * Creates a counter context with a single global, 2.1+ shard (a result of increment).
      */
     public ByteBuffer createGlobal(CounterId id, long clock, long count)
@@ -709,14 +717,6 @@ public class CounterContext
     }
 
     /**
-     * Returns the count associated with the local counter id, or 0 if no such shard is present.
-     */
-    public long getLocalCount(ByteBuffer context)
-    {
-        return getLocalClockAndCount(context).count;
-    }
-
-    /**
      * Returns the clock and the count associated with the given counter id, or (0, 0) if no such shard is present.
      */
     @VisibleForTesting