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