Update deletion timestamps in Commit#updatesWithPaxosTime patch by slebresne; reviewed by jbellis for CASSANDRA-5787
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/37130b59 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/37130b59 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/37130b59 Branch: refs/heads/trunk Commit: 37130b5998e060b52c379fbd726d61e3e7926a3c Parents: c7220e3 Author: Sylvain Lebresne <[email protected]> Authored: Mon Jul 22 15:44:55 2013 +0200 Committer: Sylvain Lebresne <[email protected]> Committed: Mon Jul 22 15:44:55 2013 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/db/DeletionInfo.java | 10 ++++++++++ src/java/org/apache/cassandra/db/RangeTombstoneList.java | 6 ++++++ src/java/org/apache/cassandra/service/paxos/Commit.java | 1 + 4 files changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/37130b59/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 4d56c98..20a6373 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -14,6 +14,7 @@ * Support streaming SSTables of old versions (CASSANDRA-5772) * Always respect protocol version in native protocol (CASSANDRA-5778) * Fix ConcurrentModificationException during streaming (CASSANDRA-5782) + * Update deletion timestamp in Commit#updatesWithPaxosTime (CASSANDRA-5787) 2.0.0-beta1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/37130b59/src/java/org/apache/cassandra/db/DeletionInfo.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/DeletionInfo.java b/src/java/org/apache/cassandra/db/DeletionInfo.java index 49aa427..32cc2a7 100644 --- a/src/java/org/apache/cassandra/db/DeletionInfo.java +++ b/src/java/org/apache/cassandra/db/DeletionInfo.java @@ -265,6 +265,16 @@ public class DeletionInfo return sb.toString(); } + // Updates all the timestamp of the deletion contained in this DeletionInfo to be {@code timestamp}. + public void updateAllTimestamp(long timestamp) + { + if (topLevel.markedForDeleteAt != Long.MIN_VALUE) + topLevel = new DeletionTime(timestamp, topLevel.localDeletionTime); + + if (ranges != null) + ranges.updateAllTimestamp(timestamp); + } + @Override public boolean equals(Object o) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/37130b59/src/java/org/apache/cassandra/db/RangeTombstoneList.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/RangeTombstoneList.java b/src/java/org/apache/cassandra/db/RangeTombstoneList.java index 771b1a8..e99ed9f 100644 --- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java +++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java @@ -288,6 +288,12 @@ public class RangeTombstoneList implements Iterable<RangeTombstone> return max; } + public void updateAllTimestamp(long timestamp) + { + for (int i = 0; i < size; i++) + markedAts[i] = timestamp; + } + /** * Removes all range tombstones whose local deletion time is older than gcBefore. */ http://git-wip-us.apache.org/repos/asf/cassandra/blob/37130b59/src/java/org/apache/cassandra/service/paxos/Commit.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/paxos/Commit.java b/src/java/org/apache/cassandra/service/paxos/Commit.java index fdc707b..04ddca8 100644 --- a/src/java/org/apache/cassandra/service/paxos/Commit.java +++ b/src/java/org/apache/cassandra/service/paxos/Commit.java @@ -114,6 +114,7 @@ public class Commit { ColumnFamily cf = updates.cloneMeShallow(); long t = UUIDGen.microsTimestamp(ballot); + cf.deletionInfo().updateAllTimestamp(t); for (Column column : updates) cf.addAtom(column.withUpdatedTimestamp(t)); return cf;
