simplify de-tombstoning of columns for pre-collated results
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/42a39b5d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/42a39b5d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/42a39b5d Branch: refs/heads/trunk Commit: 42a39b5d642efc6c593b27e26642a9acb5b84a2f Parents: b397187 Author: Jonathan Ellis <[email protected]> Authored: Wed May 15 18:03:13 2013 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Wed May 15 18:03:49 2013 -0500 ---------------------------------------------------------------------- .../apache/cassandra/db/CollationController.java | 2 +- .../org/apache/cassandra/db/ColumnFamilyStore.java | 2 +- .../apache/cassandra/db/filter/QueryFilter.java | 9 +++++++++ test/data/serialization/2.0/db.RowMutation.bin | Bin 3599 -> 3599 bytes .../apache/cassandra/tools/SSTableExportTest.java | 2 +- .../apache/cassandra/tools/SSTableImportTest.java | 2 +- 6 files changed, 13 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/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 f1f560e..1aa2d77 100644 --- a/src/java/org/apache/cassandra/db/CollationController.java +++ b/src/java/org/apache/cassandra/db/CollationController.java @@ -156,7 +156,7 @@ public class CollationController // do a final collate. toCollate is boilerplate required to provide a CloseableIterator ColumnFamily returnCF = container.cloneMeShallow(); Tracing.trace("Collating all results"); - filter.collateOnDiskAtom(returnCF, Collections.singletonList(container.iterator()), gcBefore); + filter.collateOnDiskAtom(returnCF, container.iterator(), gcBefore); // "hoist up" the requested data into a more recent sstable if (sstablesIterated > cfs.getMinimumCompactionThreshold() http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/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 e0329a7..05784ce 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1322,7 +1322,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean { ColumnFamily cf = cached.cloneMeShallow(ArrayBackedSortedColumns.factory, filter.filter.isReversed()); OnDiskAtomIterator ci = filter.getMemtableColumnIterator(cached, null); - filter.collateOnDiskAtom(cf, Collections.singletonList(ci), gcBefore); + filter.collateOnDiskAtom(cf, ci, gcBefore); return removeDeletedCF(cf, gcBefore); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/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 03e9509..6e30c17 100644 --- a/src/java/org/apache/cassandra/db/filter/QueryFilter.java +++ b/src/java/org/apache/cassandra/db/filter/QueryFilter.java @@ -75,6 +75,15 @@ public class QueryFilter collateColumns(returnCF, filteredIterators, gcBefore); } + /** + * When there is only a single source of atoms, we can skip the collate step + */ + public void collateOnDiskAtom(ColumnFamily returnCF, Iterator<? extends OnDiskAtom> toCollate, int gcBefore) + { + Iterator<Column> columns = gatherTombstones(returnCF, toCollate); + filter.collectReducedColumns(returnCF, columns, gcBefore); + } + public void collateColumns(final ColumnFamily returnCF, List<? extends Iterator<Column>> toCollate, final int gcBefore) { Comparator<Column> fcomp = filter.getColumnComparator(returnCF.getComparator()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/test/data/serialization/2.0/db.RowMutation.bin ---------------------------------------------------------------------- diff --git a/test/data/serialization/2.0/db.RowMutation.bin b/test/data/serialization/2.0/db.RowMutation.bin index fcbf794..a659ecd 100644 Binary files a/test/data/serialization/2.0/db.RowMutation.bin and b/test/data/serialization/2.0/db.RowMutation.bin differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/test/unit/org/apache/cassandra/tools/SSTableExportTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/tools/SSTableExportTest.java b/test/unit/org/apache/cassandra/tools/SSTableExportTest.java index 0db0c07..6fd1764 100644 --- a/test/unit/org/apache/cassandra/tools/SSTableExportTest.java +++ b/test/unit/org/apache/cassandra/tools/SSTableExportTest.java @@ -204,7 +204,7 @@ public class SSTableExportTest extends SchemaLoader reader = SSTableReader.open(Descriptor.fromFilename(tempSS2.getPath())); QueryFilter qf = QueryFilter.getNamesFilter(Util.dk("rowA"), "Standard1", ByteBufferUtil.bytes("name")); ColumnFamily cf = qf.getSSTableColumnIterator(reader).getColumnFamily(); - qf.collateOnDiskAtom(cf, Collections.singletonList(qf.getSSTableColumnIterator(reader)), Integer.MIN_VALUE); + qf.collateOnDiskAtom(cf, qf.getSSTableColumnIterator(reader), Integer.MIN_VALUE); assertTrue(cf != null); assertTrue(cf.getColumn(ByteBufferUtil.bytes("name")).value().equals(hexToBytes("76616c"))); http://git-wip-us.apache.org/repos/asf/cassandra/blob/42a39b5d/test/unit/org/apache/cassandra/tools/SSTableImportTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/tools/SSTableImportTest.java b/test/unit/org/apache/cassandra/tools/SSTableImportTest.java index 2954e54..a1a7673 100644 --- a/test/unit/org/apache/cassandra/tools/SSTableImportTest.java +++ b/test/unit/org/apache/cassandra/tools/SSTableImportTest.java @@ -110,7 +110,7 @@ public class SSTableImportTest extends SchemaLoader SSTableReader reader = SSTableReader.open(Descriptor.fromFilename(tempSS.getPath())); QueryFilter qf = QueryFilter.getIdentityFilter(Util.dk("rowA"), "Super4"); ColumnFamily cf = cloneForAdditions(qf.getSSTableColumnIterator(reader)); - qf.collateOnDiskAtom(cf, Collections.singletonList(qf.getSSTableColumnIterator(reader)), Integer.MIN_VALUE); + qf.collateOnDiskAtom(cf, qf.getSSTableColumnIterator(reader), Integer.MIN_VALUE); DeletionTime delTime = cf.deletionInfo().rangeCovering(CompositeType.build(ByteBufferUtil.bytes("superA"))).iterator().next(); assertEquals("supercolumn deletion time did not match the expected time", new DeletionInfo(0, 0), new DeletionInfo(delTime));
