Grab refs during scrub, index summary redistribution and cleanup Patch by marcuse; reviewed by Joel Knighton for CASSANDRA-13873
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3cd2c3c4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3cd2c3c4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3cd2c3c4 Branch: refs/heads/cassandra-3.11 Commit: 3cd2c3c4ea4286562b2cb8443d6173ee251e6212 Parents: 797de4a Author: Marcus Eriksson <marc...@apache.org> Authored: Mon Oct 23 09:43:44 2017 +0200 Committer: Marcus Eriksson <marc...@apache.org> Committed: Mon Dec 11 08:53:44 2017 +0100 ---------------------------------------------------------------------- CHANGES.txt | 2 +- .../cassandra/db/compaction/CompactionManager.java | 3 ++- .../org/apache/cassandra/db/compaction/Scrubber.java | 4 +++- .../io/sstable/IndexSummaryRedistribution.java | 12 ++++++++---- 4 files changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3cd2c3c4/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 752cbdc..c1e81fd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ 2.2.12 - * + * Grab refs during scrub/index redistribution/cleanup (CASSANDRA-13873) 2.2.11 * Safely handle empty buffers when outputting to JSON (CASSANDRA-13868) http://git-wip-us.apache.org/repos/asf/cassandra/blob/3cd2c3c4/src/java/org/apache/cassandra/db/compaction/CompactionManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index cd50646..2e69b6f 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -856,7 +856,8 @@ public class CompactionManager implements CompactionManagerMBean metrics.beginCompaction(ci); List<SSTableReader> finished; try (SSTableRewriter writer = new SSTableRewriter(cfs, txn, sstable.maxDataAge, false); - CompactionController controller = new CompactionController(cfs, txn.originals(), getDefaultGcBefore(cfs))) + CompactionController controller = new CompactionController(cfs, txn.originals(), getDefaultGcBefore(cfs)); + Refs<SSTableReader> refs = Refs.ref(Collections.singleton(sstable))) { writer.switchWriter(createWriter(cfs, compactionFileLocation, expectedBloomFilterSize, sstable.getSSTableMetadata().repairedAt, sstable)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/3cd2c3c4/src/java/org/apache/cassandra/db/compaction/Scrubber.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/Scrubber.java b/src/java/org/apache/cassandra/db/compaction/Scrubber.java index aaed234..b6b20fb 100644 --- a/src/java/org/apache/cassandra/db/compaction/Scrubber.java +++ b/src/java/org/apache/cassandra/db/compaction/Scrubber.java @@ -40,6 +40,7 @@ import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.JVMStabilityInspector; import org.apache.cassandra.utils.OutputHandler; import org.apache.cassandra.utils.UUIDGen; +import org.apache.cassandra.utils.concurrent.Refs; public class Scrubber implements Closeable { @@ -142,7 +143,8 @@ public class Scrubber implements Closeable public void scrub() { outputHandler.output(String.format("Scrubbing %s (%s bytes)", sstable, dataFile.length())); - try (SSTableRewriter writer = new SSTableRewriter(cfs, transaction, sstable.maxDataAge, transaction.isOffline())) + try (SSTableRewriter writer = new SSTableRewriter(cfs, transaction, sstable.maxDataAge, transaction.isOffline()); + Refs<SSTableReader> refs = Refs.ref(Collections.singleton(sstable))) { nextIndexKey = indexAvailable() ? ByteBufferUtil.readWithShortLength(indexFile) : null; if (indexAvailable()) http://git-wip-us.apache.org/repos/asf/cassandra/blob/3cd2c3c4/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java index aad479b..12586e5 100644 --- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java +++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryRedistribution.java @@ -41,6 +41,7 @@ import org.apache.cassandra.db.compaction.OperationType; import org.apache.cassandra.db.lifecycle.LifecycleTransaction; import org.apache.cassandra.io.sstable.format.SSTableReader; import org.apache.cassandra.utils.Pair; +import org.apache.cassandra.utils.concurrent.Refs; import static org.apache.cassandra.io.sstable.Downsampling.BASE_SAMPLING_LEVEL; @@ -123,11 +124,14 @@ public class IndexSummaryRedistribution extends CompactionInfo.Holder logger.trace("Index summaries for compacting SSTables are using {} MB of space", (memoryPoolBytes - remainingBytes) / 1024.0 / 1024.0); - List<SSTableReader> newSSTables = adjustSamplingLevels(sstablesByHotness, transactions, totalReadsPerSec, remainingBytes); - - for (LifecycleTransaction txn : transactions.values()) - txn.finish(); + List<SSTableReader> newSSTables; + try (Refs<SSTableReader> refs = Refs.ref(sstablesByHotness)) + { + newSSTables = adjustSamplingLevels(sstablesByHotness, transactions, totalReadsPerSec, remainingBytes); + for (LifecycleTransaction txn : transactions.values()) + txn.finish(); + } total = 0; for (SSTableReader sstable : Iterables.concat(compacting, oldFormatSSTables, newSSTables)) total += sstable.getIndexSummaryOffHeapSize(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org