Use correct partitioner in AbstractViewSSTableFinder patch by jbellis; reviewed by yukim for CASSANDRA-6734
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/84103bbe Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/84103bbe Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/84103bbe Branch: refs/heads/cassandra-2.1 Commit: 84103bbe2894706d224dc5975ca6bdaaa6f7f6c4 Parents: 55d8da4 Author: Jonathan Ellis <jbel...@apache.org> Authored: Wed Feb 19 09:58:28 2014 -0600 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Wed Feb 19 09:58:28 2014 -0600 ---------------------------------------------------------------------- .../apache/cassandra/db/ColumnFamilyStore.java | 30 +++++++------------- .../org/apache/cassandra/db/DataTracker.java | 7 +++++ 2 files changed, 17 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/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 38d87db..f25f934 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1448,17 +1448,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean return markCurrentViewReferenced().sstables; } - abstract class AbstractViewSSTableFinder - { - abstract List<SSTableReader> findSSTables(DataTracker.View view); - protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view) - { - RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right; - return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree)); - } - } - - private ViewFragment markReferenced(AbstractViewSSTableFinder finder) + private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter) { List<SSTableReader> sstables; DataTracker.View view; @@ -1473,7 +1463,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean break; } - sstables = finder.findSSTables(view); + sstables = filter.apply(view); if (SSTableReader.acquireReferences(sstables)) break; // retry w/ new view @@ -1489,9 +1479,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public ViewFragment markReferenced(final DecoratedKey key) { assert !key.isMinimum(); - return markReferenced(new AbstractViewSSTableFinder() + return markReferenced(new Function<DataTracker.View, List<SSTableReader>>() { - List<SSTableReader> findSSTables(DataTracker.View view) + public List<SSTableReader> apply(DataTracker.View view) { return compactionStrategy.filterSSTablesForReads(view.intervalTree.search(key)); } @@ -1504,11 +1494,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean */ public ViewFragment markReferenced(final AbstractBounds<RowPosition> rowBounds) { - return markReferenced(new AbstractViewSSTableFinder() + return markReferenced(new Function<DataTracker.View, List<SSTableReader>>() { - List<SSTableReader> findSSTables(DataTracker.View view) + public List<SSTableReader> apply(DataTracker.View view) { - return compactionStrategy.filterSSTablesForReads(sstablesForRowBounds(rowBounds, view)); + return compactionStrategy.filterSSTablesForReads(view.sstablesInBounds(rowBounds)); } }); } @@ -1519,13 +1509,13 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean */ public ViewFragment markReferenced(final Collection<AbstractBounds<RowPosition>> rowBoundsCollection) { - return markReferenced(new AbstractViewSSTableFinder() + return markReferenced(new Function<DataTracker.View, List<SSTableReader>>() { - List<SSTableReader> findSSTables(DataTracker.View view) + public List<SSTableReader> apply(DataTracker.View view) { Set<SSTableReader> sstables = Sets.newHashSet(); for (AbstractBounds<RowPosition> rowBounds : rowBoundsCollection) - sstables.addAll(sstablesForRowBounds(rowBounds, view)); + sstables.addAll(view.sstablesInBounds(rowBounds)); return ImmutableList.copyOf(sstables); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/84103bbe/src/java/org/apache/cassandra/db/DataTracker.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java index 8886c39..c1ae00f 100644 --- a/src/java/org/apache/cassandra/db/DataTracker.java +++ b/src/java/org/apache/cassandra/db/DataTracker.java @@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.compaction.OperationType; +import org.apache.cassandra.dht.AbstractBounds; import org.apache.cassandra.io.sstable.Descriptor; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.io.util.FileUtils; @@ -594,5 +595,11 @@ public class DataTracker { return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting); } + + public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds) + { + RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right; + return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree)); + } } }