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 2014/01/14 14:50:47 UTC

git commit: Fixup for 6271

Updated Branches:
  refs/heads/trunk 5edf94842 -> 2fd2d8978


Fixup for 6271


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

Branch: refs/heads/trunk
Commit: 2fd2d89782b7d6fa36c0cb9c710711af39da35ed
Parents: 5edf948
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Tue Jan 14 14:50:36 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Jan 14 14:50:36 2014 +0100

----------------------------------------------------------------------
 .../apache/cassandra/db/AtomicBTreeColumns.java | 27 ++++++++++----------
 .../org/apache/cassandra/utils/btree/BTree.java |  7 ++++-
 .../cassandra/utils/btree/NodeBuilder.java      |  2 +-
 .../cassandra/utils/btree/ReplaceFunction.java  |  7 ++++-
 4 files changed, 26 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fd2d897/src/java/org/apache/cassandra/db/AtomicBTreeColumns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AtomicBTreeColumns.java b/src/java/org/apache/cassandra/db/AtomicBTreeColumns.java
index 6fe8758..c6067fb 100644
--- a/src/java/org/apache/cassandra/db/AtomicBTreeColumns.java
+++ b/src/java/org/apache/cassandra/db/AtomicBTreeColumns.java
@@ -183,24 +183,23 @@ public class AtomicBTreeColumns extends ColumnFamily
             this.indexer = indexer;
         }
 
+        public Cell apply(Cell inserted)
+        {
+            indexer.insert(inserted);
+            delta += inserted.dataSize();
+            return transform.apply(inserted);
+        }
+
         public Cell apply(Cell replaced, Cell update)
         {
-            if (replaced == null)
-            {
-                indexer.insert(update);
-                delta += update.dataSize();
-            }
+            Cell reconciled = update.reconcile(replaced, allocator);
+            if (reconciled == update)
+                indexer.update(replaced, reconciled);
             else
-            {
-                Cell reconciled = update.reconcile(replaced, allocator);
-                if (reconciled == update)
-                    indexer.update(replaced, reconciled);
-                else
-                    indexer.update(update, reconciled);
-                delta += reconciled.dataSize() - replaced.dataSize();
-            }
+                indexer.update(update, reconciled);
+            delta += reconciled.dataSize() - replaced.dataSize();
 
-            return transform.apply(update);
+            return transform.apply(reconciled);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fd2d897/src/java/org/apache/cassandra/utils/btree/BTree.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/btree/BTree.java b/src/java/org/apache/cassandra/utils/btree/BTree.java
index 44f75b1..1721fb0 100644
--- a/src/java/org/apache/cassandra/utils/btree/BTree.java
+++ b/src/java/org/apache/cassandra/utils/btree/BTree.java
@@ -5,6 +5,7 @@ import java.util.Collection;
 import java.util.Comparator;
 
 import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
 
 public class BTree
 {
@@ -128,7 +129,11 @@ public class BTree
                                       Function<?, Boolean> terminateEarly)
     {
         if (btree.length == 0)
+        {
+            if (replaceF != null)
+                updateWith = Collections2.transform(updateWith, replaceF);
             return build(updateWith, comparator, updateWithIsSorted);
+        }
 
         if (!updateWithIsSorted)
             updateWith = sorted(updateWith, comparator, updateWith.size());
@@ -168,7 +173,7 @@ public class BTree
                 else if (replaceF != null)
                 {
                     // new element but still need to apply replaceF to handle indexing and size-tracking
-                    v = replaceF.apply(null, v);
+                    v = replaceF.apply(v);
                 }
 
                 merged[mergedCount++] = v;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fd2d897/src/java/org/apache/cassandra/utils/btree/NodeBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/btree/NodeBuilder.java b/src/java/org/apache/cassandra/utils/btree/NodeBuilder.java
index 5dbe5df..e526394 100644
--- a/src/java/org/apache/cassandra/utils/btree/NodeBuilder.java
+++ b/src/java/org/apache/cassandra/utils/btree/NodeBuilder.java
@@ -231,7 +231,7 @@ final class NodeBuilder
     {
         ensureRoom(buildKeyPosition + 1);
         if (replaceF != null)
-            key = replaceF.apply(null, (V) key);
+            key = replaceF.apply((V) key);
         buildKeys[buildKeyPosition++] = key;
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fd2d897/src/java/org/apache/cassandra/utils/btree/ReplaceFunction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/btree/ReplaceFunction.java b/src/java/org/apache/cassandra/utils/btree/ReplaceFunction.java
index bf783b0..a193c31 100644
--- a/src/java/org/apache/cassandra/utils/btree/ReplaceFunction.java
+++ b/src/java/org/apache/cassandra/utils/btree/ReplaceFunction.java
@@ -1,12 +1,17 @@
 package org.apache.cassandra.utils.btree;
 
+import com.google.common.base.Function;
+
 /**
  * An interface defining a function to be applied to both the object we are replacing in a BTree and
  * the object that is intended to replace it, returning the object to actually replace it.
  *
+ * If this is a new insertion, that is there is no object to replace, the one argument variant of
+ * the function will be called.
+ *
  * @param <V>
  */
-public interface ReplaceFunction<V>
+public interface ReplaceFunction<V> extends Function<V, V>
 {
     V apply(V replaced, V update);
 }