Repository: cassandra Updated Branches: refs/heads/trunk 15e0814c5 -> 33939cae6
Followup to 6916, don't try to snapshot readers that are opened early. Patch by benedict; reviewed by marcuse for CASSANDRA-6916. Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/33bc1e8f Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/33bc1e8f Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/33bc1e8f Branch: refs/heads/trunk Commit: 33bc1e8f8e44fa61f87d47add52f5bda3456f62c Parents: 2a77695 Author: Marcus Eriksson <[email protected]> Authored: Thu May 15 08:13:19 2014 +0200 Committer: Marcus Eriksson <[email protected]> Committed: Thu May 15 08:13:19 2014 +0200 ---------------------------------------------------------------------- .../apache/cassandra/db/ColumnFamilyStore.java | 2 +- .../cassandra/io/sstable/SSTableReader.java | 26 +++++++++++++------- .../cassandra/io/sstable/SSTableWriter.java | 5 ++-- 3 files changed, 21 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/33bc1e8f/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 417a5b4..3786ef5 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -2144,7 +2144,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean { for (SSTableReader ssTable : currentView.sstables) { - if (predicate != null && !predicate.apply(ssTable)) + if (ssTable.isOpenEarly || (predicate != null && !predicate.apply(ssTable))) { continue; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/33bc1e8f/src/java/org/apache/cassandra/io/sstable/SSTableReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java index 98fe5b6..53f7e53 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java @@ -159,6 +159,7 @@ public class SSTableReader extends SSTable * The age is in milliseconds since epoc and is local to this host. */ public final long maxDataAge; + public final boolean isOpenEarly; // indexfile and datafile: might be null before a call to load() private SegmentedFile ifile; @@ -336,7 +337,8 @@ public class SSTableReader extends SSTable metadata, partitioner, System.currentTimeMillis(), - statsMetadata); + statsMetadata, + false); // special implementation of load to use non-pooled SegmentedFile builders SegmentedFile.Builder ibuilder = new BufferedSegmentedFile.Builder(); @@ -384,7 +386,8 @@ public class SSTableReader extends SSTable metadata, partitioner, System.currentTimeMillis(), - statsMetadata); + statsMetadata, + false); // load index and filter long start = System.nanoTime(); @@ -463,7 +466,8 @@ public class SSTableReader extends SSTable IndexSummary isummary, IFilter bf, long maxDataAge, - StatsMetadata sstableMetadata) + StatsMetadata sstableMetadata, + boolean isOpenEarly) { assert desc != null && partitioner != null && ifile != null && dfile != null && isummary != null && bf != null && sstableMetadata != null; return new SSTableReader(desc, @@ -474,7 +478,8 @@ public class SSTableReader extends SSTable isummary, bf, maxDataAge, - sstableMetadata); + sstableMetadata, + isOpenEarly); } @@ -483,11 +488,13 @@ public class SSTableReader extends SSTable CFMetaData metadata, IPartitioner partitioner, long maxDataAge, - StatsMetadata sstableMetadata) + StatsMetadata sstableMetadata, + boolean isOpenEarly) { super(desc, components, metadata, partitioner); this.sstableMetadata = sstableMetadata; this.maxDataAge = maxDataAge; + this.isOpenEarly = isOpenEarly; deletingTask = new SSTableDeletingTask(this); @@ -524,9 +531,10 @@ public class SSTableReader extends SSTable IndexSummary indexSummary, IFilter bloomFilter, long maxDataAge, - StatsMetadata sstableMetadata) + StatsMetadata sstableMetadata, + boolean isOpenEarly) { - this(desc, components, metadata, partitioner, maxDataAge, sstableMetadata); + this(desc, components, metadata, partitioner, maxDataAge, sstableMetadata, isOpenEarly); this.ifile = ifile; this.dfile = dfile; @@ -947,7 +955,7 @@ public class SSTableReader extends SSTable if (readMeterSyncFuture != null) readMeterSyncFuture.cancel(false); - SSTableReader replacement = new SSTableReader(descriptor, components, metadata, partitioner, ifile, dfile, indexSummary.readOnlyClone(), bf, maxDataAge, sstableMetadata); + SSTableReader replacement = new SSTableReader(descriptor, components, metadata, partitioner, ifile, dfile, indexSummary.readOnlyClone(), bf, maxDataAge, sstableMetadata, isOpenEarly); replacement.readMeter = this.readMeter; replacement.first = this.last.compareTo(newStart) > 0 ? newStart : this.last; replacement.last = this.last; @@ -1010,7 +1018,7 @@ public class SSTableReader extends SSTable if (readMeterSyncFuture != null) readMeterSyncFuture.cancel(false); - SSTableReader replacement = new SSTableReader(descriptor, components, metadata, partitioner, ifile, dfile, newSummary, bf, maxDataAge, sstableMetadata); + SSTableReader replacement = new SSTableReader(descriptor, components, metadata, partitioner, ifile, dfile, newSummary, bf, maxDataAge, sstableMetadata, isOpenEarly); replacement.readMeter = this.readMeter; replacement.first = this.first; replacement.last = this.last; http://git-wip-us.apache.org/repos/asf/cassandra/blob/33bc1e8f/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java index 9e667f6..f32bb96 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java @@ -390,7 +390,7 @@ public class SSTableWriter extends SSTable components, metadata, partitioner, ifile, dfile, iwriter.summary.build(partitioner, exclusiveUpperBoundOfReadableIndex), - iwriter.bf, maxDataAge, sstableMetadata); + iwriter.bf, maxDataAge, sstableMetadata, true); // now it's open, find the ACTUAL last readable key (i.e. for which the data file has also been flushed) sstable.first = getMinimalKey(first); @@ -440,7 +440,8 @@ public class SSTableWriter extends SSTable iwriter.summary.build(partitioner), iwriter.bf, maxDataAge, - sstableMetadata); + sstableMetadata, + false); sstable.first = getMinimalKey(first); sstable.last = getMinimalKey(last); // try to save the summaries to disk
