diff --git a/src/server/src/main/java/io/cassandrareaper/storage/memory/ReplicaLockManagerWithTtl.java b/src/server/src/main/java/io/cassandrareaper/storage/memory/ReplicaLockManagerWithTtl.java index e684a3ad0..c614a1621 100644 --- a/src/server/src/main/java/io/cassandrareaper/storage/memory/ReplicaLockManagerWithTtl.java +++ b/src/server/src/main/java/io/cassandrareaper/storage/memory/ReplicaLockManagerWithTtl.java @@ -32,7 +32,7 @@ public class ReplicaLockManagerWithTtl { private final ConcurrentHashMap replicaLocks = new ConcurrentHashMap<>(); private final ConcurrentHashMap> repairRunToSegmentLocks = new ConcurrentHashMap<>(); - private final ConcurrentHashMap runIdLocks = new ConcurrentHashMap<>(); + private final Lock lock = new ReentrantLock(); private final long ttlMilliSeconds; @@ -47,12 +47,7 @@ private String getReplicaLockKey(String replica, UUID runId) { return replica + runId; } - private Lock getLockForRunId(UUID runId) { - return runIdLocks.computeIfAbsent(runId, k -> new ReentrantLock()); - } - public boolean lockRunningRepairsForNodes(UUID runId, UUID segmentId, Set replicas) { - Lock lock = getLockForRunId(runId); lock.lock(); try { long currentTime = System.currentTimeMillis(); @@ -81,7 +76,6 @@ public boolean lockRunningRepairsForNodes(UUID runId, UUID segmentId, Set replicas) { - Lock lock = getLockForRunId(runId); lock.lock(); try { long currentTime = System.currentTimeMillis(); @@ -111,7 +105,6 @@ public boolean renewRunningRepairsForNodes(UUID runId, UUID segmentId, Set replicas) { - Lock lock = getLockForRunId(runId); lock.lock(); try { // Remove the lock for replicas @@ -141,7 +134,7 @@ public Set getLockedSegmentsForRun(UUID runId) { @VisibleForTesting public void cleanupExpiredLocks() { - runIdLocks.values().forEach(Lock::lock); + lock.lock(); try { long currentTime = System.currentTimeMillis(); @@ -162,7 +155,7 @@ public void cleanupExpiredLocks() { return segments.isEmpty(); }); } finally { - runIdLocks.values().forEach(Lock::unlock); + lock.unlock(); } } diff --git a/src/server/src/test/java/io/cassandrareaper/acceptance/ReaperMetricsIT.java b/src/server/src/test/java/io/cassandrareaper/acceptance/ReaperMetricsIT.java index d4f03d892..dd4db2995 100644 --- a/src/server/src/test/java/io/cassandrareaper/acceptance/ReaperMetricsIT.java +++ b/src/server/src/test/java/io/cassandrareaper/acceptance/ReaperMetricsIT.java @@ -67,7 +67,11 @@ public static void tearDown() { } public static void deleteFolderContents(String folderPath) throws IOException { + // Check if the path exists Path path = Paths.get(folderPath); + if (!Files.exists(path)) { + return; + } try (Stream walk = Files.walk(path)) { walk.sorted(Comparator.reverseOrder()) .forEach(p -> {