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