You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2012/02/08 15:39:45 UTC
[2/6] git commit: Merge branch 'cassandra-1.0' into cassandra-1.1
Merge branch 'cassandra-1.0' into cassandra-1.1
Conflicts:
src/java/org/apache/cassandra/db/filter/QueryFilter.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1616f3fa
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1616f3fa
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1616f3fa
Branch: refs/heads/trunk
Commit: 1616f3fa467fc8014fb586e1c938ae65dee606a7
Parents: 7108f3e 2187530
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Feb 8 15:32:19 2012 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Feb 8 15:32:19 2012 +0100
----------------------------------------------------------------------
CHANGES.txt | 14 +------
src/java/org/apache/cassandra/db/Column.java | 5 ++
.../org/apache/cassandra/db/ColumnFamilyStore.java | 2 +-
src/java/org/apache/cassandra/db/IColumn.java | 1 +
src/java/org/apache/cassandra/db/SuperColumn.java | 15 ++++++-
.../apache/cassandra/db/filter/QueryFilter.java | 2 +-
.../apache/cassandra/db/RemoveSubColumnTest.java | 34 +++++++++++++++
7 files changed, 57 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/src/java/org/apache/cassandra/db/Column.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/src/java/org/apache/cassandra/db/IColumn.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/IColumn.java
index 903fa12,fe6e949..864a9df
--- a/src/java/org/apache/cassandra/db/IColumn.java
+++ b/src/java/org/apache/cassandra/db/IColumn.java
@@@ -33,14 -33,10 +33,15 @@@ public interface IColum
{
public static final int MAX_NAME_LENGTH = FBUtilities.MAX_UNSIGNED_SHORT;
+ /**
+ * @return true if the column has been deleted (is a tombstone). This depends on comparing the server clock
+ * with getLocalDeletionTime, so it can change during a single request if you're not careful.
+ */
public boolean isMarkedForDelete();
+
public long getMarkedForDeleteAt();
public long mostRecentLiveChangeAt();
+ public long mostRecentNonGCableChangeAt(int gcbefore);
public ByteBuffer name();
public int size();
public int serializedSize();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/src/java/org/apache/cassandra/db/SuperColumn.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/SuperColumn.java
index bb482b2,75f166c..6efc93e
--- a/src/java/org/apache/cassandra/db/SuperColumn.java
+++ b/src/java/org/apache/cassandra/db/SuperColumn.java
@@@ -138,10 -140,15 +138,23 @@@ public class SuperColumn extends Abstra
public long mostRecentLiveChangeAt()
{
- return mostRecentNonGCableChangeAt(Integer.MAX_VALUE);
+ long max = Long.MIN_VALUE;
+ for (IColumn column : getSubColumns())
+ {
- if (!column.isMarkedForDelete() && column.timestamp() > max)
++ if (column.isMarkedForDelete() && column.timestamp() > max)
++ {
++ max = column.timestamp();
++ }
++ }
++ return max;
+ }
+
+ public long mostRecentNonGCableChangeAt(int gcbefore)
+ {
+ long max = Long.MIN_VALUE;
+ for (IColumn column : getSubColumns())
+ {
- if ((!column.isMarkedForDelete() || column.getLocalDeletionTime() >= gcbefore) && column.timestamp() > max)
++ if (column.getLocalDeletionTime() >= gcbefore && column.timestamp() > max)
{
max = column.timestamp();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1616f3fa/src/java/org/apache/cassandra/db/filter/QueryFilter.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/filter/QueryFilter.java
index e647957,a2e9a95..b50e5d1
--- a/src/java/org/apache/cassandra/db/filter/QueryFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/QueryFilter.java
@@@ -149,8 -154,8 +149,8 @@@ public class QueryFilte
// the column itself must be not gc-able (it is live, or a still relevant tombstone, or has live subcolumns), (1)
// and if its container is deleted, the column must be changed more recently than the container tombstone (2)
// (since otherwise, the only thing repair cares about is the container tombstone)
- long maxChange = column.mostRecentLiveChangeAt();
+ long maxChange = column.mostRecentNonGCableChangeAt(gcBefore);
- return (!column.isMarkedForDelete() || column.getLocalDeletionTime() >= gcBefore || maxChange > column.getMarkedForDeleteAt()) // (1)
+ return (column.getLocalDeletionTime() >= gcBefore || maxChange > column.getMarkedForDeleteAt()) // (1)
&& (!container.isMarkedForDelete() || maxChange > container.getMarkedForDeleteAt()); // (2)
}