You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bd...@apache.org on 2018/09/21 18:03:28 UTC
cassandra git commit: Avoid creating empty compaction tasks after
truncate
Repository: cassandra
Updated Branches:
refs/heads/trunk 167ebbcf4 -> 44cffc0b1
Avoid creating empty compaction tasks after truncate
Patch by Marcus Eriksson; Reviewed by Blake Eggleston for CASSANDRA-14780
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/44cffc0b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/44cffc0b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/44cffc0b
Branch: refs/heads/trunk
Commit: 44cffc0b16a1b55f26996d9aee2d3ffa63bb0512
Parents: 167ebbc
Author: Marcus Eriksson <ma...@apache.org>
Authored: Fri Sep 21 18:38:56 2018 +0200
Committer: Blake Eggleston <bd...@gmail.com>
Committed: Fri Sep 21 10:52:09 2018 -0700
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/compaction/PendingRepairManager.java | 13 +++++++++----
.../db/compaction/PendingRepairManagerTest.java | 15 +++++++++++++++
3 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/44cffc0b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a053130..b39fe03 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
4.0
+ * Avoid creating empty compaction tasks after truncate (CASSANDRA-14780)
* Fail incremental repair prepare phase if it encounters sstables from un-finalized sessions (CASSANDRA-14763)
* Add a check for receiving digest response from transient node (CASSANDRA-14750)
* Fail query on transient replica if coordinator only expects full data (CASSANDRA-14704)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/44cffc0b/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java b/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
index 6763abf..1aa156f 100644
--- a/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
@@ -136,7 +136,7 @@ class PendingRepairManager
return getOrCreate(sstable.getSSTableMetadata().pendingRepair);
}
- private synchronized void removeSession(UUID sessionID)
+ private synchronized void removeSessionIfEmpty(UUID sessionID)
{
if (!strategies.containsKey(sessionID) || !strategies.get(sessionID).getSSTables().isEmpty())
return;
@@ -147,8 +147,11 @@ class PendingRepairManager
synchronized void removeSSTable(SSTableReader sstable)
{
- for (AbstractCompactionStrategy strategy : strategies.values())
- strategy.removeSSTable(sstable);
+ for (Map.Entry<UUID, AbstractCompactionStrategy> entry : strategies.entrySet())
+ {
+ entry.getValue().removeSSTable(sstable);
+ removeSessionIfEmpty(entry.getKey());
+ }
}
@@ -207,6 +210,8 @@ class PendingRepairManager
strategy.replaceSSTables(groupRemoved, groupAdded);
else
strategy.addSSTables(groupAdded);
+
+ removeSessionIfEmpty(entry.getKey());
}
}
@@ -464,7 +469,7 @@ class PendingRepairManager
}
if (completed)
{
- removeSession(sessionID);
+ removeSessionIfEmpty(sessionID);
}
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/44cffc0b/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java b/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
index d83e063..4e645fd 100644
--- a/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
@@ -27,6 +27,7 @@ import com.google.common.collect.Lists;
import org.junit.Assert;
import org.junit.Test;
+import org.apache.cassandra.db.lifecycle.SSTableSet;
import org.apache.cassandra.io.sstable.format.SSTableReader;
import org.apache.cassandra.repair.consistent.LocalSessionAccessor;
import org.apache.cassandra.utils.FBUtilities;
@@ -300,4 +301,18 @@ public class PendingRepairManagerTest extends AbstractPendingRepairTest
prm.addSSTable(sstable);
Assert.assertTrue(prm.hasDataForSession(repairID));
}
+
+ @Test
+ public void noEmptyCompactionTask()
+ {
+ PendingRepairManager prm = csm.getPendingRepairManagers().get(0);
+ SSTableReader sstable = makeSSTable(false);
+ UUID id = UUID.randomUUID();
+ mutateRepaired(sstable, id, false);
+ prm.getOrCreate(sstable);
+ cfs.truncateBlocking();
+ Assert.assertFalse(cfs.getSSTables(SSTableSet.LIVE).iterator().hasNext());
+ Assert.assertNull(cfs.getCompactionStrategyManager().getNextBackgroundTask(0));
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org