Updated Branches: refs/heads/trunk ad191c55d -> 9bb3441fe
Slightly simplify/optimize columns collation Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9bb3441f Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9bb3441f Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9bb3441f Branch: refs/heads/trunk Commit: 9bb3441fe23ddff2ccf12469860e37492e1092d6 Parents: ad191c5 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Thu May 16 11:03:22 2013 +0200 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Thu May 16 11:03:22 2013 +0200 ---------------------------------------------------------------------- .../apache/cassandra/db/filter/QueryFilter.java | 17 ++++++++------ 1 files changed, 10 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9bb3441f/src/java/org/apache/cassandra/db/filter/QueryFilter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/filter/QueryFilter.java b/src/java/org/apache/cassandra/db/filter/QueryFilter.java index e65e85a..8187294 100644 --- a/src/java/org/apache/cassandra/db/filter/QueryFilter.java +++ b/src/java/org/apache/cassandra/db/filter/QueryFilter.java @@ -25,6 +25,7 @@ import org.apache.cassandra.db.columniterator.OnDiskAtomIterator; import org.apache.cassandra.db.columniterator.IdentityQueryFilter; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.io.util.FileDataInput; +import org.apache.cassandra.utils.HeapAllocator; import org.apache.cassandra.utils.MergeIterator; public class QueryFilter @@ -83,23 +84,25 @@ public class QueryFilter public void collateColumns(final ColumnFamily returnCF, List<? extends Iterator<Column>> toCollate, final int gcBefore) { - Comparator<Column> fcomp = filter.getColumnComparator(returnCF.getComparator()); + final Comparator<Column> fcomp = filter.getColumnComparator(returnCF.getComparator()); // define a 'reduced' iterator that merges columns w/ the same name, which // greatly simplifies computing liveColumns in the presence of tombstones. MergeIterator.Reducer<Column, Column> reducer = new MergeIterator.Reducer<Column, Column>() { - ColumnFamily curCF = returnCF.cloneMeShallow(); + Column current; - public void reduce(Column current) + public void reduce(Column next) { - curCF.addColumn(current); + assert current == null || fcomp.compare(current, next) == 0; + current = current == null ? next : current.reconcile(next, HeapAllocator.instance); } protected Column getReduced() { - Column c = curCF.iterator().next(); - curCF.clear(); - return c; + assert current != null; + Column toReturn = current; + current = null; + return toReturn; } }; Iterator<Column> reduced = MergeIterator.get(toCollate, fcomp, reducer);