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

git commit: Optimize CollationController.collectTimeOrderedData post CASSANDRA-6662

Updated Branches:
  refs/heads/trunk 520457502 -> 6de2fd9bf


Optimize CollationController.collectTimeOrderedData post CASSANDRA-6662


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

Branch: refs/heads/trunk
Commit: 6de2fd9bfd4c20e47495d171da7175c1a9e92c68
Parents: 5204575
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Feb 11 21:04:13 2014 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Feb 11 21:04:13 2014 +0300

----------------------------------------------------------------------
 .../cassandra/db/ArrayBackedSortedColumns.java  |  7 ++++--
 .../cassandra/db/CollationController.java       | 26 ++++++--------------
 2 files changed, 12 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6de2fd9b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
index a6153e4..8049d87 100644
--- a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
+++ b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
@@ -186,8 +186,11 @@ public class ArrayBackedSortedColumns extends AbstractThreadUnsafeSortedColumns
         }
         else
         {
-            // Append to the end, making cells unsorted from now on
-            internalAdd(cell);
+            int pos = binarySearch(cell.name());
+            if (pos >= 0) // Reconcile with an existing cell
+                reconcileWith(pos, cell);
+            else
+                internalAdd(cell); // Append to the end, making cells unsorted from now on
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6de2fd9b/src/java/org/apache/cassandra/db/CollationController.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/CollationController.java b/src/java/org/apache/cassandra/db/CollationController.java
index 3fd3e8b..e5d3495 100644
--- a/src/java/org/apache/cassandra/db/CollationController.java
+++ b/src/java/org/apache/cassandra/db/CollationController.java
@@ -62,16 +62,10 @@ public class CollationController
     private ColumnFamily collectTimeOrderedData()
     {
         final ColumnFamily container = ArrayBackedSortedColumns.factory.create(cfs.metadata, filter.filter.isReversed());
-        List<OnDiskAtomIterator> iterators = new ArrayList<OnDiskAtomIterator>();
+        List<OnDiskAtomIterator> iterators = new ArrayList<>();
         Tracing.trace("Acquiring sstable references");
         ColumnFamilyStore.ViewFragment view = cfs.markReferenced(filter.key);
 
-        // We use a temporary CF object per memtable or sstable source so we can accomodate this.factory being ABSC,
-        // which requires addAtom to happen in sorted order.  Then we use addAll to merge into the final collection,
-        // which allows a (sorted) set of columns to be merged even if they are not uniformly sorted after the existing
-        // ones.
-        ColumnFamily temp = ArrayBackedSortedColumns.factory.create(cfs.metadata, filter.filter.isReversed());
-
         try
         {
             Tracing.trace("Merging memtable contents");
@@ -81,13 +75,10 @@ public class CollationController
                 if (iter != null)
                 {
                     iterators.add(iter);
-                    temp.delete(iter.getColumnFamily());
+                    container.delete(iter.getColumnFamily());
                     while (iter.hasNext())
-                        temp.addAtom(iter.next());
+                        container.addAtom(iter.next());
                 }
-
-                container.addAll(temp);
-                temp.clear();
             }
 
             // avoid changing the filter columns of the original filter
@@ -122,14 +113,11 @@ public class CollationController
                     ColumnFamily cf = iter.getColumnFamily();
                     if (cf.isMarkedForDelete())
                         mostRecentRowTombstone = cf.deletionInfo().getTopLevelDeletion().markedForDeleteAt;
-                    temp.delete(cf);
+                    container.delete(cf);
                     sstablesIterated++;
                     while (iter.hasNext())
-                        temp.addAtom(iter.next());
+                        container.addAtom(iter.next());
                 }
-
-                container.addAll(temp);
-                temp.clear();
             }
 
             // we need to distinguish between "there is no data at all for this row" (BF will let us rebuild that efficiently)
@@ -189,7 +177,7 @@ public class CollationController
     {
         Tracing.trace("Acquiring sstable references");
         ColumnFamilyStore.ViewFragment view = cfs.markReferenced(filter.key);
-        List<OnDiskAtomIterator> iterators = new ArrayList<OnDiskAtomIterator>(Iterables.size(view.memtables) + view.sstables.size());
+        List<OnDiskAtomIterator> iterators = new ArrayList<>(Iterables.size(view.memtables) + view.sstables.size());
         ColumnFamily returnCF = ArrayBackedSortedColumns.factory.create(cfs.metadata, filter.filter.isReversed());
 
         try
@@ -238,7 +226,7 @@ public class CollationController
                     if (sstable.getSSTableMetadata().maxLocalDeletionTime != Integer.MAX_VALUE)
                     {
                         if (skippedSSTables == null)
-                            skippedSSTables = new ArrayList<SSTableReader>();
+                            skippedSSTables = new ArrayList<>();
                         skippedSSTables.add(sstable);
                     }
                     continue;