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);
}