skip tombstones during hint replay patch by Vijay; reviewed by jbellis for CASSANDRA-4320
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2820f050 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2820f050 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2820f050 Branch: refs/heads/cassandra-1.1 Commit: 2820f050db002d653e3e6474ea5351db198ac71b Parents: 5de91d0 Author: Jonathan Ellis <[email protected]> Authored: Wed Jun 13 13:57:08 2012 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Wed Jun 13 13:57:08 2012 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/db/HintedHandOffManager.java | 8 ++++++++ 2 files changed, 9 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2820f050/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 270a7ee..fcfff37 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.1.2 + * skip tombstones during hint replay (CASSANDRA-4320) * fix NPE in compactionstats (CASSANDRA-4318) * enforce 1m min keycache for auto (CASSANDRA-4306) * Have DeletedColumn.isMFD always return true (CASSANDRA-4307) http://git-wip-us.apache.org/repos/asf/cassandra/blob/2820f050/src/java/org/apache/cassandra/db/HintedHandOffManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManager.java b/src/java/org/apache/cassandra/db/HintedHandOffManager.java index 2a3e6b1..c7b160d 100644 --- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java +++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java @@ -330,6 +330,14 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean } } + // Skip tombstones: + // if we iterate quickly enough, it's possible that we could request a new page in the same millisecond + // in which the local deletion timestamp was generated on the last column in the old page, in which + // case the hint will have no columns (since it's deleted) but will still be included in the resultset + // since (even with gcgs=0) it's still a "relevant" tombstone. + if (!hint.isLive()) + continue; + IColumn versionColumn = hint.getSubColumn(ByteBufferUtil.bytes("version")); IColumn tableColumn = hint.getSubColumn(ByteBufferUtil.bytes("table")); IColumn keyColumn = hint.getSubColumn(ByteBufferUtil.bytes("key"));
