You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2014/02/19 17:01:25 UTC

[01/12] git commit: Support negative timestamps in DateType.fromString

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 55d8da44b -> 84103bbe2
  refs/heads/cassandra-2.1 5afd2bd48 -> 8e101bef0
  refs/heads/trunk 89b8b1a75 -> 97a529f06


Support negative timestamps in DateType.fromString

patch by slebresne; reviewed by iamaleksey for CASSANDRA-6718


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e787b7a4
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e787b7a4
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e787b7a4

Branch: refs/heads/cassandra-2.1
Commit: e787b7a4c7f69cf486c7d5b6c53bfb88086b5261
Parents: 6dfca3d
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Feb 19 11:41:21 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Feb 19 11:41:21 2014 +0100

----------------------------------------------------------------------
 CHANGES.txt                                            | 1 +
 src/java/org/apache/cassandra/db/marshal/DateType.java | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/e787b7a4/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f146166..47fc3a3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -10,6 +10,7 @@
  * IN on the last clustering columns + ORDER BY DESC yield no results (CASSANDRA-6701)
  * Fix SecondaryIndexManager#deleteFromIndexes() (CASSANDRA-6711)
  * Fix snapshot repair not snapshotting coordinator itself (CASSANDRA-6713)
+ * Support negative timestamps for CQL3 dates in query string (CASSANDRA-6718)
 
 
 1.2.15

http://git-wip-us.apache.org/repos/asf/cassandra/blob/e787b7a4/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/DateType.java b/src/java/org/apache/cassandra/db/marshal/DateType.java
index 875169d..ad165ee 100644
--- a/src/java/org/apache/cassandra/db/marshal/DateType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DateType.java
@@ -92,7 +92,7 @@ public class DateType extends AbstractType<Date>
           millis = System.currentTimeMillis();
       }
       // Milliseconds since epoch?
-      else if (source.matches("^\\d+$"))
+      else if (source.matches("^-?\\d+$"))
       {
           try
           {


[03/12] git commit: Don't attempt cross-dc forwarding interface/mixed-version cluster with 1.1 patch by Jeremiah Jordan; reviewed by jbellis for CASSANDRA-6732

Posted by jb...@apache.org.
Don't attempt cross-dc forwarding interface/mixed-version cluster with 1.1
patch by Jeremiah Jordan; reviewed by jbellis for CASSANDRA-6732


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c92b20b3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c92b20b3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c92b20b3

Branch: refs/heads/cassandra-2.1
Commit: c92b20b3073f1c5cca3666225db33ea102ba77b5
Parents: e787b7a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 08:32:40 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 08:32:40 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                             | 8 ++++++--
 src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c92b20b3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 47fc3a3..ffda82c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,6 @@
 1.2.16
+ * Don't attempt cross-dc forwarding in mixed-version cluster with 1.1 
+   (CASSANDRA-6732)
  * Fix broken streams when replacing with same IP (CASSANDRA-6622)
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
  * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
@@ -6,8 +8,10 @@
  * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
  * Log USING TTL/TIMESTAMP in a counter update warning (CASSANDRA-6649)
  * Don't exchange schema between nodes with different versions (CASSANDRA-6695)
- * Use real node messaging versions for schema exchange decisions (CASSANDRA-6700)
- * IN on the last clustering columns + ORDER BY DESC yield no results (CASSANDRA-6701)
+ * Use real node messaging versions for schema exchange decisions 
+   (CASSANDRA-6700)
+ * IN on the last clustering columns + ORDER BY DESC yield no results 
+   (CASSANDRA-6701)
  * Fix SecondaryIndexManager#deleteFromIndexes() (CASSANDRA-6711)
  * Fix snapshot repair not snapshotting coordinator itself (CASSANDRA-6713)
  * Support negative timestamps for CQL3 dates in query string (CASSANDRA-6718)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c92b20b3/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index dbe029b..ca82a1f 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -614,7 +614,7 @@ public class StorageProxy implements StorageProxyMBean
         InetAddress target = iter.next();
 
         // direct writes to local DC or old Cassandra versions
-        if (localDC || MessagingService.instance().getVersion(target) < MessagingService.VERSION_11)
+        if (localDC || MessagingService.instance().getVersion(target) < MessagingService.VERSION_12)
         {
             // yes, the loop and non-loop code here are the same; this is clunky but we want to avoid
             // creating a second iterator since we already have a perfectly good one


[05/12] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/55d8da44
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/55d8da44
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/55d8da44

Branch: refs/heads/cassandra-2.1
Commit: 55d8da44bc270c1dcaef013dec287e9cb9b6865f
Parents: 0520aeb c92b20b
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 08:33:25 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 08:33:25 2014 -0600

----------------------------------------------------------------------

----------------------------------------------------------------------



[12/12] git commit: Merge branch 'cassandra-2.1' into trunk

Posted by jb...@apache.org.
Merge branch 'cassandra-2.1' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/97a529f0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/97a529f0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/97a529f0

Branch: refs/heads/trunk
Commit: 97a529f0662f92b6539dbff426ca252ad1713954
Parents: 89b8b1a 8e101be
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 10:01:19 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 10:01:19 2014 -0600

----------------------------------------------------------------------
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    | 21 ++++++++------
 2 files changed, 23 insertions(+), 28 deletions(-)
----------------------------------------------------------------------



[04/12] git commit: Don't attempt cross-dc forwarding interface/mixed-version cluster with 1.1 patch by Jeremiah Jordan; reviewed by jbellis for CASSANDRA-6732

Posted by jb...@apache.org.
Don't attempt cross-dc forwarding interface/mixed-version cluster with 1.1
patch by Jeremiah Jordan; reviewed by jbellis for CASSANDRA-6732


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c92b20b3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c92b20b3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c92b20b3

Branch: refs/heads/trunk
Commit: c92b20b3073f1c5cca3666225db33ea102ba77b5
Parents: e787b7a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 08:32:40 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 08:32:40 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                             | 8 ++++++--
 src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c92b20b3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 47fc3a3..ffda82c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,6 @@
 1.2.16
+ * Don't attempt cross-dc forwarding in mixed-version cluster with 1.1 
+   (CASSANDRA-6732)
  * Fix broken streams when replacing with same IP (CASSANDRA-6622)
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
  * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
@@ -6,8 +8,10 @@
  * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
  * Log USING TTL/TIMESTAMP in a counter update warning (CASSANDRA-6649)
  * Don't exchange schema between nodes with different versions (CASSANDRA-6695)
- * Use real node messaging versions for schema exchange decisions (CASSANDRA-6700)
- * IN on the last clustering columns + ORDER BY DESC yield no results (CASSANDRA-6701)
+ * Use real node messaging versions for schema exchange decisions 
+   (CASSANDRA-6700)
+ * IN on the last clustering columns + ORDER BY DESC yield no results 
+   (CASSANDRA-6701)
  * Fix SecondaryIndexManager#deleteFromIndexes() (CASSANDRA-6711)
  * Fix snapshot repair not snapshotting coordinator itself (CASSANDRA-6713)
  * Support negative timestamps for CQL3 dates in query string (CASSANDRA-6718)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c92b20b3/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index dbe029b..ca82a1f 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -614,7 +614,7 @@ public class StorageProxy implements StorageProxyMBean
         InetAddress target = iter.next();
 
         // direct writes to local DC or old Cassandra versions
-        if (localDC || MessagingService.instance().getVersion(target) < MessagingService.VERSION_11)
+        if (localDC || MessagingService.instance().getVersion(target) < MessagingService.VERSION_12)
         {
             // yes, the loop and non-loop code here are the same; this is clunky but we want to avoid
             // creating a second iterator since we already have a perfectly good one


[08/12] git commit: Use correct partitioner in AbstractViewSSTableFinder patch by jbellis; reviewed by yukim for CASSANDRA-6734

Posted by jb...@apache.org.
Use correct partitioner in AbstractViewSSTableFinder
patch by jbellis; reviewed by yukim for CASSANDRA-6734


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/84103bbe
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/84103bbe
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/84103bbe

Branch: refs/heads/cassandra-2.0
Commit: 84103bbe2894706d224dc5975ca6bdaaa6f7f6c4
Parents: 55d8da4
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 09:58:28 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 09:58:28 2014 -0600

----------------------------------------------------------------------
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    |  7 +++++
 2 files changed, 17 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index 38d87db..f25f934 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1448,17 +1448,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
         return markCurrentViewReferenced().sstables;
     }
 
-    abstract class AbstractViewSSTableFinder
-    {
-        abstract List<SSTableReader> findSSTables(DataTracker.View view);
-        protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
-        {
-            RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
-            return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
-        }
-    }
-
-    private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+    private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
     {
         List<SSTableReader> sstables;
         DataTracker.View view;
@@ -1473,7 +1463,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
                 break;
             }
 
-            sstables = finder.findSSTables(view);
+            sstables = filter.apply(view);
             if (SSTableReader.acquireReferences(sstables))
                 break;
             // retry w/ new view
@@ -1489,9 +1479,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
     public ViewFragment markReferenced(final DecoratedKey key)
     {
         assert !key.isMinimum();
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 return compactionStrategy.filterSSTablesForReads(view.intervalTree.search(key));
             }
@@ -1504,11 +1494,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final AbstractBounds<RowPosition> rowBounds)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
-                return compactionStrategy.filterSSTablesForReads(sstablesForRowBounds(rowBounds, view));
+                return compactionStrategy.filterSSTablesForReads(view.sstablesInBounds(rowBounds));
             }
         });
     }
@@ -1519,13 +1509,13 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final Collection<AbstractBounds<RowPosition>> rowBoundsCollection)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 Set<SSTableReader> sstables = Sets.newHashSet();
                 for (AbstractBounds<RowPosition> rowBounds : rowBoundsCollection)
-                    sstables.addAll(sstablesForRowBounds(rowBounds, view));
+                    sstables.addAll(view.sstablesInBounds(rowBounds));
 
                 return ImmutableList.copyOf(sstables);
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index 8886c39..c1ae00f 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.compaction.OperationType;
+import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.util.FileUtils;
@@ -594,5 +595,11 @@ public class DataTracker
         {
             return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
         }
+
+        public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+        {
+            RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+            return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+        }
     }
 }


[10/12] git commit: merge from 2.0

Posted by jb...@apache.org.
merge from 2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8e101bef
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8e101bef
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8e101bef

Branch: refs/heads/trunk
Commit: 8e101bef056eb00173f51ec7fb6e3b6b251d105d
Parents: 5afd2bd 84103bb
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 10:01:10 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 10:01:10 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    | 21 ++++++++------
 .../apache/cassandra/db/marshal/DateType.java   |  2 +-
 4 files changed, 25 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index ca4ff0a,f25f934..76160ea
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@@ -1708,43 -1448,7 +1708,33 @@@ public class ColumnFamilyStore implemen
          return markCurrentViewReferenced().sstables;
      }
  
 +    public Set<SSTableReader> getUnrepairedSSTables()
 +    {
 +        Set<SSTableReader> unRepairedSSTables = new HashSet<>(getSSTables());
 +        Iterator<SSTableReader> sstableIterator = unRepairedSSTables.iterator();
 +        while(sstableIterator.hasNext())
 +        {
 +            SSTableReader sstable = sstableIterator.next();
 +            if (sstable.isRepaired())
 +                sstableIterator.remove();
 +        }
 +        return unRepairedSSTables;
 +    }
 +
 +    public Set<SSTableReader> getRepairedSSTables()
 +    {
 +        Set<SSTableReader> repairedSSTables = new HashSet<>(getSSTables());
 +        Iterator<SSTableReader> sstableIterator = repairedSSTables.iterator();
 +        while(sstableIterator.hasNext())
 +        {
 +            SSTableReader sstable = sstableIterator.next();
 +            if (!sstable.isRepaired())
 +                sstableIterator.remove();
 +        }
 +        return repairedSSTables;
 +    }
 +
-     abstract class AbstractViewSSTableFinder
-     {
-         abstract List<SSTableReader> findSSTables(DataTracker.View view);
-         protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
-         {
-             RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
-             return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
-         }
-     }
- 
-     private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+     private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
      {
          List<SSTableReader> sstables;
          DataTracker.View view;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DataTracker.java
index e51f380,c1ae00f..30bd360
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@@ -32,12 -29,14 +29,14 @@@ import org.slf4j.LoggerFactory
  
  import org.apache.cassandra.config.DatabaseDescriptor;
  import org.apache.cassandra.db.compaction.OperationType;
+ import org.apache.cassandra.dht.AbstractBounds;
 -import org.apache.cassandra.io.sstable.Descriptor;
  import org.apache.cassandra.io.sstable.SSTableReader;
  import org.apache.cassandra.io.util.FileUtils;
  import org.apache.cassandra.metrics.StorageMetrics;
  import org.apache.cassandra.notifications.*;
  import org.apache.cassandra.utils.Interval;
  import org.apache.cassandra.utils.IntervalTree;
++import org.apache.cassandra.utils.concurrent.OpOrder;
  
  public class DataTracker
  {
@@@ -317,47 -322,11 +316,47 @@@
      /** (Re)initializes the tracker, purging all references. */
      void init()
      {
 -        view.set(new View(new Memtable(cfstore),
 -                          Collections.<Memtable>emptySet(),
 -                          Collections.<SSTableReader>emptySet(),
 -                          Collections.<SSTableReader>emptySet(),
 -                          SSTableIntervalTree.empty()));
 +        view.set(new View(
-                 ImmutableList.of(new Memtable(cfstore)),
-                 ImmutableList.<Memtable>of(),
-                 Collections.<SSTableReader>emptySet(),
-                 Collections.<SSTableReader>emptySet(),
-                 SSTableIntervalTree.empty()));
++                         ImmutableList.of(new Memtable(cfstore)),
++                         ImmutableList.<Memtable>of(),
++                         Collections.<SSTableReader>emptySet(),
++                         Collections.<SSTableReader>emptySet(),
++                         SSTableIntervalTree.empty()));
 +    }
 +
 +    /**
 +     * A special kind of replacement for SSTableReaders that were cloned with a new index summary sampling level (see
 +     * SSTableReader.cloneWithNewSummarySamplingLevel and CASSANDRA-5519).  This does not mark the old reader
 +     * as compacted.
 +     * @param oldSSTables replaced readers
 +     * @param newSSTables replacement readers
 +     */
 +    public void replaceReaders(Collection<SSTableReader> oldSSTables, Collection<SSTableReader> newSSTables)
 +    {
 +        // data component will be unchanged but the index summary will be a different size
 +        // (since we save that to make restart fast)
 +        long sizeIncrease = 0;
 +        for (SSTableReader sstable : oldSSTables)
 +            sizeIncrease -= sstable.bytesOnDisk();
 +        for (SSTableReader sstable : newSSTables)
 +            sizeIncrease += sstable.bytesOnDisk();
 +
 +        View currentView, newView;
 +        do
 +        {
 +            currentView = view.get();
 +            newView = currentView.replace(oldSSTables, newSSTables);
 +        }
 +        while (!view.compareAndSet(currentView, newView));
 +
 +        StorageMetrics.load.inc(sizeIncrease);
 +        cfstore.metric.liveDiskSpaceUsed.inc(sizeIncrease);
 +
 +        for (SSTableReader sstable : newSSTables)
 +            sstable.setTrackedBy(this);
 +
 +        for (SSTableReader sstable : oldSSTables)
 +            sstable.releaseReference();
      }
  
      private void replace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
@@@ -690,7 -593,13 +689,13 @@@
          @Override
          public String toString()
          {
 -            return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
 +            return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", liveMemtables.size() + flushingMemtables.size() - 1, sstables, compacting);
          }
+ 
+         public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+         {
 -            RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
++            RowPosition stopInTree = rowBounds.right.isMinimum(liveMemtables.get(0).cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+             return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+         }
      }
  }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------


[07/12] git commit: Use correct partitioner in AbstractViewSSTableFinder patch by jbellis; reviewed by yukim for CASSANDRA-6734

Posted by jb...@apache.org.
Use correct partitioner in AbstractViewSSTableFinder
patch by jbellis; reviewed by yukim for CASSANDRA-6734


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/84103bbe
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/84103bbe
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/84103bbe

Branch: refs/heads/cassandra-2.1
Commit: 84103bbe2894706d224dc5975ca6bdaaa6f7f6c4
Parents: 55d8da4
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 09:58:28 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 09:58:28 2014 -0600

----------------------------------------------------------------------
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    |  7 +++++
 2 files changed, 17 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index 38d87db..f25f934 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1448,17 +1448,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
         return markCurrentViewReferenced().sstables;
     }
 
-    abstract class AbstractViewSSTableFinder
-    {
-        abstract List<SSTableReader> findSSTables(DataTracker.View view);
-        protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
-        {
-            RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
-            return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
-        }
-    }
-
-    private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+    private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
     {
         List<SSTableReader> sstables;
         DataTracker.View view;
@@ -1473,7 +1463,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
                 break;
             }
 
-            sstables = finder.findSSTables(view);
+            sstables = filter.apply(view);
             if (SSTableReader.acquireReferences(sstables))
                 break;
             // retry w/ new view
@@ -1489,9 +1479,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
     public ViewFragment markReferenced(final DecoratedKey key)
     {
         assert !key.isMinimum();
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 return compactionStrategy.filterSSTablesForReads(view.intervalTree.search(key));
             }
@@ -1504,11 +1494,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final AbstractBounds<RowPosition> rowBounds)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
-                return compactionStrategy.filterSSTablesForReads(sstablesForRowBounds(rowBounds, view));
+                return compactionStrategy.filterSSTablesForReads(view.sstablesInBounds(rowBounds));
             }
         });
     }
@@ -1519,13 +1509,13 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final Collection<AbstractBounds<RowPosition>> rowBoundsCollection)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 Set<SSTableReader> sstables = Sets.newHashSet();
                 for (AbstractBounds<RowPosition> rowBounds : rowBoundsCollection)
-                    sstables.addAll(sstablesForRowBounds(rowBounds, view));
+                    sstables.addAll(view.sstablesInBounds(rowBounds));
 
                 return ImmutableList.copyOf(sstables);
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index 8886c39..c1ae00f 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.compaction.OperationType;
+import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.util.FileUtils;
@@ -594,5 +595,11 @@ public class DataTracker
         {
             return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
         }
+
+        public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+        {
+            RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+            return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+        }
     }
 }


[02/12] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0520aeb7
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0520aeb7
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0520aeb7

Branch: refs/heads/cassandra-2.1
Commit: 0520aeb7e751626b62268c1495c941d33b01cdfb
Parents: e67a0a9 e787b7a
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Feb 19 11:42:25 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Feb 19 11:42:25 2014 +0100

----------------------------------------------------------------------
 CHANGES.txt                                            | 1 +
 src/java/org/apache/cassandra/db/marshal/DateType.java | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0520aeb7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 95faf18,47fc3a3..2cacbaa
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -30,34 -10,24 +30,35 @@@ Merged from 1.2
   * IN on the last clustering columns + ORDER BY DESC yield no results (CASSANDRA-6701)
   * Fix SecondaryIndexManager#deleteFromIndexes() (CASSANDRA-6711)
   * Fix snapshot repair not snapshotting coordinator itself (CASSANDRA-6713)
+  * Support negative timestamps for CQL3 dates in query string (CASSANDRA-6718)
  
  
 -1.2.15
 - * Move handling of migration event source to solve bootstrap race (CASSANDRA-6648)
 - * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647)
 -
 -
 -1.2.14
 - * Reverted code to limit CQL prepared statement cache by size (CASSANDRA-6592)
 - * add cassandra.default_messaging_version property to allow easier
 -   upgrading from 1.1 (CASSANDRA-6619)
 - * Allow executing CREATE statements multiple times (CASSANDRA-6471)
 - * Don't send confusing info with timeouts (CASSANDRA-6491)
 - * Don't resubmit counter mutation runnables internally (CASSANDRA-6427)
 - * Don't drop local mutations without a hint (CASSANDRA-6510)
 - * Don't allow null max_hint_window_in_ms (CASSANDRA-6419)
 - * Validate SliceRange start and finish lengths (CASSANDRA-6521)
 +2.0.5
 + * Reduce garbage generated by bloom filter lookups (CASSANDRA-6609)
 + * Add ks.cf names to tombstone logging (CASSANDRA-6597)
 + * Use LOCAL_QUORUM for LWT operations at LOCAL_SERIAL (CASSANDRA-6495)
 + * Wait for gossip to settle before accepting client connections (CASSANDRA-4288)
 + * Delete unfinished compaction incrementally (CASSANDRA-6086)
 + * Allow specifying custom secondary index options in CQL3 (CASSANDRA-6480)
 + * Improve replica pinning for cache efficiency in DES (CASSANDRA-6485)
 + * Fix LOCAL_SERIAL from thrift (CASSANDRA-6584)
 + * Don't special case received counts in CAS timeout exceptions (CASSANDRA-6595)
 + * Add support for 2.1 global counter shards (CASSANDRA-6505)
 + * Fix NPE when streaming connection is not yet established (CASSANDRA-6210)
 + * Avoid rare duplicate read repair triggering (CASSANDRA-6606)
 + * Fix paging discardFirst (CASSANDRA-6555)
 + * Fix ArrayIndexOutOfBoundsException in 2ndary index query (CASSANDRA-6470)
 + * Release sstables upon rebuilding 2i (CASSANDRA-6635)
 + * Add AbstractCompactionStrategy.startup() method (CASSANDRA-6637)
 + * SSTableScanner may skip rows during cleanup (CASSANDRA-6638)
 + * sstables from stalled repair sessions can resurrect deleted data (CASSANDRA-6503)
 + * Switch stress to use ITransportFactory (CASSANDRA-6641)
 + * Fix IllegalArgumentException during prepare (CASSANDRA-6592)
 + * Fix possible loss of 2ndary index entries during compaction (CASSANDRA-6517)
 + * Fix direct Memory on architectures that do not support unaligned long access
 +   (CASSANDRA-6628)
 + * Let scrub optionally skip broken counter partitions (CASSANDRA-5930)
 +Merged from 1.2:
   * fsync compression metadata (CASSANDRA-6531)
   * Validate CF existence on execution for prepared statement (CASSANDRA-6535)
   * Add ability to throttle batchlog replay (CASSANDRA-6550)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0520aeb7/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------


[09/12] git commit: Use correct partitioner in AbstractViewSSTableFinder patch by jbellis; reviewed by yukim for CASSANDRA-6734

Posted by jb...@apache.org.
Use correct partitioner in AbstractViewSSTableFinder
patch by jbellis; reviewed by yukim for CASSANDRA-6734


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/84103bbe
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/84103bbe
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/84103bbe

Branch: refs/heads/trunk
Commit: 84103bbe2894706d224dc5975ca6bdaaa6f7f6c4
Parents: 55d8da4
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 09:58:28 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 09:58:28 2014 -0600

----------------------------------------------------------------------
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    |  7 +++++
 2 files changed, 17 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index 38d87db..f25f934 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1448,17 +1448,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
         return markCurrentViewReferenced().sstables;
     }
 
-    abstract class AbstractViewSSTableFinder
-    {
-        abstract List<SSTableReader> findSSTables(DataTracker.View view);
-        protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
-        {
-            RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
-            return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
-        }
-    }
-
-    private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+    private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
     {
         List<SSTableReader> sstables;
         DataTracker.View view;
@@ -1473,7 +1463,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
                 break;
             }
 
-            sstables = finder.findSSTables(view);
+            sstables = filter.apply(view);
             if (SSTableReader.acquireReferences(sstables))
                 break;
             // retry w/ new view
@@ -1489,9 +1479,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
     public ViewFragment markReferenced(final DecoratedKey key)
     {
         assert !key.isMinimum();
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 return compactionStrategy.filterSSTablesForReads(view.intervalTree.search(key));
             }
@@ -1504,11 +1494,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final AbstractBounds<RowPosition> rowBounds)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
-                return compactionStrategy.filterSSTablesForReads(sstablesForRowBounds(rowBounds, view));
+                return compactionStrategy.filterSSTablesForReads(view.sstablesInBounds(rowBounds));
             }
         });
     }
@@ -1519,13 +1509,13 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public ViewFragment markReferenced(final Collection<AbstractBounds<RowPosition>> rowBoundsCollection)
     {
-        return markReferenced(new AbstractViewSSTableFinder()
+        return markReferenced(new Function<DataTracker.View, List<SSTableReader>>()
         {
-            List<SSTableReader> findSSTables(DataTracker.View view)
+            public List<SSTableReader> apply(DataTracker.View view)
             {
                 Set<SSTableReader> sstables = Sets.newHashSet();
                 for (AbstractBounds<RowPosition> rowBounds : rowBoundsCollection)
-                    sstables.addAll(sstablesForRowBounds(rowBounds, view));
+                    sstables.addAll(view.sstablesInBounds(rowBounds));
 
                 return ImmutableList.copyOf(sstables);
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index 8886c39..c1ae00f 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.compaction.OperationType;
+import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.util.FileUtils;
@@ -594,5 +595,11 @@ public class DataTracker
         {
             return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
         }
+
+        public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+        {
+            RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+            return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+        }
     }
 }


[06/12] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/55d8da44
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/55d8da44
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/55d8da44

Branch: refs/heads/trunk
Commit: 55d8da44bc270c1dcaef013dec287e9cb9b6865f
Parents: 0520aeb c92b20b
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 08:33:25 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 08:33:25 2014 -0600

----------------------------------------------------------------------

----------------------------------------------------------------------



[11/12] git commit: merge from 2.0

Posted by jb...@apache.org.
merge from 2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8e101bef
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8e101bef
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8e101bef

Branch: refs/heads/cassandra-2.1
Commit: 8e101bef056eb00173f51ec7fb6e3b6b251d105d
Parents: 5afd2bd 84103bb
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 10:01:10 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 10:01:10 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/db/ColumnFamilyStore.java  | 30 +++++++-------------
 .../org/apache/cassandra/db/DataTracker.java    | 21 ++++++++------
 .../apache/cassandra/db/marshal/DateType.java   |  2 +-
 4 files changed, 25 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index ca4ff0a,f25f934..76160ea
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@@ -1708,43 -1448,7 +1708,33 @@@ public class ColumnFamilyStore implemen
          return markCurrentViewReferenced().sstables;
      }
  
 +    public Set<SSTableReader> getUnrepairedSSTables()
 +    {
 +        Set<SSTableReader> unRepairedSSTables = new HashSet<>(getSSTables());
 +        Iterator<SSTableReader> sstableIterator = unRepairedSSTables.iterator();
 +        while(sstableIterator.hasNext())
 +        {
 +            SSTableReader sstable = sstableIterator.next();
 +            if (sstable.isRepaired())
 +                sstableIterator.remove();
 +        }
 +        return unRepairedSSTables;
 +    }
 +
 +    public Set<SSTableReader> getRepairedSSTables()
 +    {
 +        Set<SSTableReader> repairedSSTables = new HashSet<>(getSSTables());
 +        Iterator<SSTableReader> sstableIterator = repairedSSTables.iterator();
 +        while(sstableIterator.hasNext())
 +        {
 +            SSTableReader sstable = sstableIterator.next();
 +            if (!sstable.isRepaired())
 +                sstableIterator.remove();
 +        }
 +        return repairedSSTables;
 +    }
 +
-     abstract class AbstractViewSSTableFinder
-     {
-         abstract List<SSTableReader> findSSTables(DataTracker.View view);
-         protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
-         {
-             RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
-             return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
-         }
-     }
- 
-     private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+     private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
      {
          List<SSTableReader> sstables;
          DataTracker.View view;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DataTracker.java
index e51f380,c1ae00f..30bd360
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@@ -32,12 -29,14 +29,14 @@@ import org.slf4j.LoggerFactory
  
  import org.apache.cassandra.config.DatabaseDescriptor;
  import org.apache.cassandra.db.compaction.OperationType;
+ import org.apache.cassandra.dht.AbstractBounds;
 -import org.apache.cassandra.io.sstable.Descriptor;
  import org.apache.cassandra.io.sstable.SSTableReader;
  import org.apache.cassandra.io.util.FileUtils;
  import org.apache.cassandra.metrics.StorageMetrics;
  import org.apache.cassandra.notifications.*;
  import org.apache.cassandra.utils.Interval;
  import org.apache.cassandra.utils.IntervalTree;
++import org.apache.cassandra.utils.concurrent.OpOrder;
  
  public class DataTracker
  {
@@@ -317,47 -322,11 +316,47 @@@
      /** (Re)initializes the tracker, purging all references. */
      void init()
      {
 -        view.set(new View(new Memtable(cfstore),
 -                          Collections.<Memtable>emptySet(),
 -                          Collections.<SSTableReader>emptySet(),
 -                          Collections.<SSTableReader>emptySet(),
 -                          SSTableIntervalTree.empty()));
 +        view.set(new View(
-                 ImmutableList.of(new Memtable(cfstore)),
-                 ImmutableList.<Memtable>of(),
-                 Collections.<SSTableReader>emptySet(),
-                 Collections.<SSTableReader>emptySet(),
-                 SSTableIntervalTree.empty()));
++                         ImmutableList.of(new Memtable(cfstore)),
++                         ImmutableList.<Memtable>of(),
++                         Collections.<SSTableReader>emptySet(),
++                         Collections.<SSTableReader>emptySet(),
++                         SSTableIntervalTree.empty()));
 +    }
 +
 +    /**
 +     * A special kind of replacement for SSTableReaders that were cloned with a new index summary sampling level (see
 +     * SSTableReader.cloneWithNewSummarySamplingLevel and CASSANDRA-5519).  This does not mark the old reader
 +     * as compacted.
 +     * @param oldSSTables replaced readers
 +     * @param newSSTables replacement readers
 +     */
 +    public void replaceReaders(Collection<SSTableReader> oldSSTables, Collection<SSTableReader> newSSTables)
 +    {
 +        // data component will be unchanged but the index summary will be a different size
 +        // (since we save that to make restart fast)
 +        long sizeIncrease = 0;
 +        for (SSTableReader sstable : oldSSTables)
 +            sizeIncrease -= sstable.bytesOnDisk();
 +        for (SSTableReader sstable : newSSTables)
 +            sizeIncrease += sstable.bytesOnDisk();
 +
 +        View currentView, newView;
 +        do
 +        {
 +            currentView = view.get();
 +            newView = currentView.replace(oldSSTables, newSSTables);
 +        }
 +        while (!view.compareAndSet(currentView, newView));
 +
 +        StorageMetrics.load.inc(sizeIncrease);
 +        cfstore.metric.liveDiskSpaceUsed.inc(sizeIncrease);
 +
 +        for (SSTableReader sstable : newSSTables)
 +            sstable.setTrackedBy(this);
 +
 +        for (SSTableReader sstable : oldSSTables)
 +            sstable.releaseReference();
      }
  
      private void replace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
@@@ -690,7 -593,13 +689,13 @@@
          @Override
          public String toString()
          {
 -            return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
 +            return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", liveMemtables.size() + flushingMemtables.size() - 1, sstables, compacting);
          }
+ 
+         public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+         {
 -            RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
++            RowPosition stopInTree = rowBounds.right.isMinimum(liveMemtables.get(0).cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+             return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+         }
      }
  }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------