Updated Branches:
  refs/heads/cassandra-1.1 7108f3ed3 -> 1616f3fa4

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/cassandra-1.1
Commit: 1616f3fa467fc8014fb586e1c938ae65dee606a7
Parents: 7108f3e 2187530
Author: Sylvain Lebresne <sylv...@datastax.com>
Authored: Wed Feb 8 15:32:19 2012 +0100
Committer: Sylvain Lebresne <sylv...@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)
      }
  

Reply via email to