You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2014/10/02 11:34:41 UTC
git commit: Release references to compacted overlapping sstables
during compaction
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.1 474381193 -> 0793e569b
Release references to compacted overlapping sstables during compaction
Patch by benedict; reviewed by marcuse for CASSANDRA-7819
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0793e569
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0793e569
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0793e569
Branch: refs/heads/cassandra-2.1
Commit: 0793e569b4ae5f3a74fbff272fed8ef8332f0557
Parents: 4743811
Author: Marcus Eriksson <ma...@apache.org>
Authored: Thu Oct 2 11:08:38 2014 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Oct 2 11:32:34 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/compaction/CompactionController.java | 24 ++++++++++++++++++--
.../cassandra/db/compaction/CompactionTask.java | 7 ++++++
3 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0793e569/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6b42b6a..95218cb 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.1
+ * Release references to overlapping sstables during compaction (CASSANDRA-7819)
* Send notification when opening compaction results early (CASSANDRA-8034)
* Make native server start block until properly bound (CASSANDRA-7885)
* (cqlsh) Fix IPv6 support (CASSANDRA-7988)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0793e569/src/java/org/apache/cassandra/db/compaction/CompactionController.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionController.java b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index 2bd9c86..ef27805 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -41,8 +41,8 @@ public class CompactionController implements AutoCloseable
private static final Logger logger = LoggerFactory.getLogger(CompactionController.class);
public final ColumnFamilyStore cfs;
- private final DataTracker.SSTableIntervalTree overlappingTree;
- private final Set<SSTableReader> overlappingSSTables;
+ private DataTracker.SSTableIntervalTree overlappingTree;
+ private Set<SSTableReader> overlappingSSTables;
private final Set<SSTableReader> compacting;
public final int gcBefore;
@@ -58,6 +58,26 @@ public class CompactionController implements AutoCloseable
this.cfs = cfs;
this.gcBefore = gcBefore;
this.compacting = compacting;
+ refreshOverlaps();
+ }
+
+ void maybeRefreshOverlaps()
+ {
+ for (SSTableReader reader : overlappingSSTables)
+ {
+ if (reader.isMarkedCompacted())
+ {
+ refreshOverlaps();
+ return;
+ }
+ }
+ }
+
+ private void refreshOverlaps()
+ {
+ if (this.overlappingSSTables != null)
+ SSTableReader.releaseReferences(overlappingSSTables);
+
Set<SSTableReader> overlapping = compacting == null ? null : cfs.getAndReferenceOverlappingSSTables(compacting);
this.overlappingSSTables = overlapping == null ? Collections.<SSTableReader>emptySet() : overlapping;
this.overlappingTree = overlapping == null ? null : DataTracker.buildIntervalTree(overlapping);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0793e569/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
index 6217348..d2ae04a 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
@@ -160,6 +160,7 @@ public class CompactionTask extends AbstractCompactionTask
long maxAge = getMaxDataAge(actuallyCompact);
if (collector != null)
collector.beginCompaction(ci);
+ long lastCheckObsoletion = start;
SSTableRewriter writer = new SSTableRewriter(cfs, sstables, maxAge, compactionType, offline);
try
{
@@ -187,6 +188,12 @@ public class CompactionTask extends AbstractCompactionTask
writer.switchWriter(createCompactionWriter(sstableDirectory, keysPerSSTable, minRepairedAt));
}
}
+
+ if (System.nanoTime() - lastCheckObsoletion > TimeUnit.MINUTES.toNanos(1L))
+ {
+ controller.maybeRefreshOverlaps();
+ lastCheckObsoletion = System.nanoTime();
+ }
}
// don't replace old sstables yet, as we need to mark the compaction finished in the system table