Repository: cassandra
Updated Branches:
  refs/heads/trunk b76a48b61 -> c066f126e


Fix pending repair manager index out of bounds check

Patch by Blake Eggleston; Reviewed by Marcus Eriksson for CASSANDRA-13769


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c066f126
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c066f126
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c066f126

Branch: refs/heads/trunk
Commit: c066f126e20180ae0230b7d6a61666152149a79f
Parents: b76a48b
Author: Blake Eggleston <bdeggles...@gmail.com>
Authored: Wed Aug 16 14:42:27 2017 -0700
Committer: Blake Eggleston <bdeggles...@gmail.com>
Committed: Fri Aug 18 10:32:06 2017 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../db/compaction/PendingRepairManager.java     |  3 +++
 .../db/compaction/PendingRepairManagerTest.java | 21 ++++++++++++++++++++
 3 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c066f126/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 38b9b17..e015a0b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Fix pending repair manager index out of bounds check (CASSANDRA-13769)
  * Don't use RangeFetchMapCalculator when RF=1 (CASSANDRA-13576)
  * Don't optimise trivial ranges in RangeFetchMapCalculator (CASSANDRA-13664)
  * Use an ExecutorService for repair commands instead of new 
Thread(..).start() (CASSANDRA-13594)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c066f126/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 2786396..4596381 100644
--- a/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
@@ -300,6 +300,9 @@ class PendingRepairManager
             sessions.add(entry.getKey());
         }
 
+        if (sessions.isEmpty())
+            return null;
+
         // we want the session with the most compactions at the head of the 
list
         sessions.sort((o1, o2) -> numTasks.get(o2) - numTasks.get(o1));
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c066f126/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 93b68b5..33e996b 100644
--- a/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/PendingRepairManagerTest.java
@@ -173,6 +173,27 @@ public class PendingRepairManagerTest extends 
AbstractPendingRepairTest
         
Assert.assertNull(prm.getNextBackgroundTask(FBUtilities.nowInSeconds()));
     }
 
+    /**
+     * If all sessions should be cleaned up, getNextBackgroundTask should 
return null
+     */
+    @Test
+    public void getNextBackgroundTaskAllCleanup() throws Exception
+    {
+        PendingRepairManager prm = csm.getPendingRepairManagers().get(0);
+        UUID repairID = registerSession(cfs, true, true);
+        LocalSessionAccessor.prepareUnsafe(repairID, COORDINATOR, 
PARTICIPANTS);
+
+        SSTableReader sstable = makeSSTable(true);
+        mutateRepaired(sstable, repairID);
+        prm.addSSTable(sstable);
+        Assert.assertNotNull(prm.get(repairID));
+        Assert.assertNotNull(prm.get(repairID));
+        LocalSessionAccessor.finalizeUnsafe(repairID);
+
+        
Assert.assertNull(prm.getNextBackgroundTask(FBUtilities.nowInSeconds()));
+
+    }
+
     @Test
     public void maximalTaskNeedsCleanup()
     {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to