Merge branch 'cassandra-3.11' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fbcec0cc Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fbcec0cc Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fbcec0cc Branch: refs/heads/trunk Commit: fbcec0cc465dddc81134a15c42b292c35d3316b2 Parents: de60cf0 92d1cfe Author: Aleksey Yeschenko <[email protected]> Authored: Tue Aug 1 15:40:23 2017 +0100 Committer: Aleksey Yeschenko <[email protected]> Committed: Tue Aug 1 15:40:23 2017 +0100 ---------------------------------------------------------------------- CHANGES.txt | 2 + .../apache/cassandra/cql3/UpdateParameters.java | 7 ++- .../cassandra/db/context/CounterContext.java | 52 ++++++++++++++------ .../org/apache/cassandra/utils/CounterId.java | 3 +- .../db/context/CounterContextTest.java | 29 ++++++++++- 5 files changed, 75 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/fbcec0cc/CHANGES.txt ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/fbcec0cc/src/java/org/apache/cassandra/cql3/UpdateParameters.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/cql3/UpdateParameters.java index 7f6ba22,25f04fb..8faf1c6 --- a/src/java/org/apache/cassandra/cql3/UpdateParameters.java +++ b/src/java/org/apache/cassandra/cql3/UpdateParameters.java @@@ -165,10 -167,13 +165,13 @@@ public class UpdateParameter // shard is due to the merging rules: if a user includes multiple updates to the same counter in a batch, those // multiple updates will be merged in the PartitionUpdate *before* they even reach CounterMutation. So we need // such update to be added together, and that's what a local shard gives us. - builder.addCell(BufferCell.live(column, timestamp, CounterContext.instance().createLocal(increment))); + // + // We set counterid to a special value to differentiate between regular pre-2.0 local shards from pre-2.1 era + // and "counter update" temporary state cells. Please see CounterContext.createUpdate() for further details. + builder.addCell(BufferCell.live(column, timestamp, CounterContext.instance().createUpdate(increment))); } - public void setComplexDeletionTime(ColumnDefinition column) + public void setComplexDeletionTime(ColumnMetadata column) { builder.addComplexDeletion(column, deletionTime); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/fbcec0cc/test/unit/org/apache/cassandra/db/context/CounterContextTest.java ---------------------------------------------------------------------- diff --cc test/unit/org/apache/cassandra/db/context/CounterContextTest.java index 72e9548,6994046..4600137 --- a/test/unit/org/apache/cassandra/db/context/CounterContextTest.java +++ b/test/unit/org/apache/cassandra/db/context/CounterContextTest.java @@@ -542,4 -544,34 +543,30 @@@ public class CounterContextTes assertEquals(ClockAndCount.create(0L, 0L), cc.getClockAndCountOf(state.context, CounterId.fromInt(15))); assertEquals(ClockAndCount.create(0L, 0L), cc.getClockAndCountOf(state.context, CounterId.fromInt(20))); } + + @Test // see CASSANDRA-13691 + public void testCounterUpdate() + { + /* + * a context with just one 'update' shard - a local shard with a hardcoded value of CounterContext.UPDATE_CLOCK_ID + */ + + ByteBuffer updateContext = CounterContext.instance().createUpdate(10L); + + assertEquals(ClockAndCount.create(1L, 10L), cc.getClockAndCountOf(updateContext, CounterContext.UPDATE_CLOCK_ID)); + assertTrue(cc.isUpdate(updateContext)); - LegacyCell updateCell = LegacyCell.counter(null, updateContext); - assertTrue(updateCell.isCounterUpdate()); + + + /* + * a context with a regular local shard sorting first and a couple others in it - should *not* be identified as an update + */ + + ContextState notUpdateContextState = ContextState.allocate(1, 1, 1); + notUpdateContextState.writeLocal( CounterId.fromInt(1), 1L, 10L); + notUpdateContextState.writeRemote(CounterId.fromInt(2), 1L, 10L); + notUpdateContextState.writeGlobal(CounterId.fromInt(3), 1L, 10L); + ByteBuffer notUpdateContext = notUpdateContextState.context; + + assertFalse(cc.isUpdate(notUpdateContext)); - LegacyCell notUpdateCell = LegacyCell.counter(null, notUpdateContext); - assertFalse(notUpdateCell.isCounterUpdate()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
