You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dc...@apache.org on 2022/05/10 22:27:49 UTC

[cassandra] branch cassandra-4.1 updated: Incremental repair leaks SomeRepairFailedException after switch away from flatMap

This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.1 by this push:
     new 89fbb1acf4 Incremental repair leaks SomeRepairFailedException after switch away from flatMap
89fbb1acf4 is described below

commit 89fbb1acf42c97f57ce7301674ab6f9647320c65
Author: David Capwell <dc...@apache.org>
AuthorDate: Tue May 10 12:50:16 2022 -0700

    Incremental repair leaks SomeRepairFailedException after switch away from flatMap
    
    patch by David Capwell; reviewed by Benedict Elliott Smith for CASSANDRA-17620
---
 CHANGES.txt                                                        | 1 +
 .../org/apache/cassandra/repair/consistent/CoordinatorSession.java | 7 ++++---
 .../org/apache/cassandra/distributed/test/RepairErrorsTest.java    | 4 ++++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 5105707d4b..6bb59f8f58 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.1
+ * Incremental repair leaks SomeRepairFailedException after switch away from flatMap (CASSANDRA-17620)
  * StorageService read threshold get methods throw NullPointerException due to not handling null configs (CASSANDRA-17593)
  * Rename truncate_drop guardrail to drop_truncate_table (CASSANDRA-17592)
  * nodetool enablefullquerylog can NPE when directory has no files (CASSANDRA-17595)
diff --git a/src/java/org/apache/cassandra/repair/consistent/CoordinatorSession.java b/src/java/org/apache/cassandra/repair/consistent/CoordinatorSession.java
index 24e24faed1..b66e1e1661 100644
--- a/src/java/org/apache/cassandra/repair/consistent/CoordinatorSession.java
+++ b/src/java/org/apache/cassandra/repair/consistent/CoordinatorSession.java
@@ -47,6 +47,7 @@ import org.apache.cassandra.repair.messages.FinalizePropose;
 import org.apache.cassandra.repair.messages.PrepareConsistentRequest;
 import org.apache.cassandra.repair.messages.RepairMessage;
 import org.apache.cassandra.service.ActiveRepairService;
+import org.apache.cassandra.utils.concurrent.ImmediateFuture;
 
 import static org.apache.cassandra.utils.Clock.Global.currentTimeMillis;
 
@@ -298,15 +299,15 @@ public class CoordinatorSession extends ConsistentSession
         });
 
         // if any session failed, then fail the future
-        Future<CoordinatedRepairResult> onlySuccessSessionResults = repairSessionResults.map(result -> {
+        Future<CoordinatedRepairResult> onlySuccessSessionResults = repairSessionResults.flatMap(result -> {
             finalizeStart = currentTimeMillis();
             if (result.hasFailed())
             {
                 if (logger.isDebugEnabled())
                     logger.debug("Incremental repair {} validation/stream phase completed in {}", sessionID, formatDuration(repairStart, finalizeStart));
-                throw SomeRepairFailedException.INSTANCE;
+                return ImmediateFuture.failure(SomeRepairFailedException.INSTANCE);
             }
-            return result;
+            return ImmediateFuture.success(result);
         });
 
         // mark propose finalization and commit
diff --git a/test/distributed/org/apache/cassandra/distributed/test/RepairErrorsTest.java b/test/distributed/org/apache/cassandra/distributed/test/RepairErrorsTest.java
index e771e2eeac..c3c2b1427d 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/RepairErrorsTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/RepairErrorsTest.java
@@ -129,6 +129,10 @@ public class RepairErrorsTest extends TestBaseImpl
             assertEquals(0, parents.intValue());
             Integer sessions = cluster.get(1).callOnInstance(() -> ActiveRepairService.instance.sessionCount());
             assertEquals(0, sessions.intValue());
+
+            cluster.forEach(i -> Assertions.assertThat(i.logs().grep("SomeRepairFailedException").getResult())
+                                           .describedAs("node%d logged hidden exception org.apache.cassandra.repair.SomeRepairFailedException", i.config().num())
+                                           .isEmpty());
         }
     }
 


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