Repository: cassandra
Updated Branches:
  refs/heads/trunk b8c56c474 -> 5ccbebaf8


Allow noop incremental repair state transitions

Patch by Blake Eggleston; reviewed by Marcus Eriksson for CASSANDRA-13658


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

Branch: refs/heads/trunk
Commit: 5ccbebaf85b61673bb8c34b1f435d730183587ee
Parents: b8c56c4
Author: Blake Eggleston <bdeggles...@gmail.com>
Authored: Mon Jul 3 14:51:07 2017 -0700
Committer: Blake Eggleston <bdeggles...@gmail.com>
Committed: Wed Jul 5 17:03:20 2017 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../repair/consistent/ConsistentSession.java    |  6 +++--
 .../repair/consistent/LocalSessionTest.java     | 26 ++++++++++++++++++++
 3 files changed, 31 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/5ccbebaf/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6444994..6840bdd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Allow noop incremental repair state transitions (CASSANDRA-13658)
  * Run repair with down replicas (CASSANDRA-10446)
  * Added started & completed repair metrics (CASSANDRA-13598)
  * Added started & completed repair metrics (CASSANDRA-13598)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5ccbebaf/src/java/org/apache/cassandra/repair/consistent/ConsistentSession.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/repair/consistent/ConsistentSession.java 
b/src/java/org/apache/cassandra/repair/consistent/ConsistentSession.java
index 9b1fec9..af0a0dd 100644
--- a/src/java/org/apache/cassandra/repair/consistent/ConsistentSession.java
+++ b/src/java/org/apache/cassandra/repair/consistent/ConsistentSession.java
@@ -170,12 +170,14 @@ public abstract class ConsistentSession
             put(REPAIRING, ImmutableSet.of(FINALIZE_PROMISED, FAILED));
             put(FINALIZE_PROMISED, ImmutableSet.of(FINALIZED, FAILED));
             put(FINALIZED, ImmutableSet.of());
-            put(FAILED, ImmutableSet.of(FAILED));
+            put(FAILED, ImmutableSet.of());
         }};
 
         public boolean canTransitionTo(State state)
         {
-            return transitions.get(this).contains(state);
+            // redundant transitions are allowed because the failure recovery  
mechanism can
+            // send redundant status changes out, and they shouldn't throw 
exceptions
+            return state == this || transitions.get(this).contains(state);
         }
 
         public static State valueOf(int ordinal)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5ccbebaf/test/unit/org/apache/cassandra/repair/consistent/LocalSessionTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/repair/consistent/LocalSessionTest.java 
b/test/unit/org/apache/cassandra/repair/consistent/LocalSessionTest.java
index a5197ec..3b48051 100644
--- a/test/unit/org/apache/cassandra/repair/consistent/LocalSessionTest.java
+++ b/test/unit/org/apache/cassandra/repair/consistent/LocalSessionTest.java
@@ -580,6 +580,19 @@ public class LocalSessionTest extends AbstractRepairTest
     }
 
     @Test
+    public void handleStatusResponseFinalizedRedundant() throws Exception
+    {
+        UUID sessionID = registerSession();
+        InstrumentedLocalSessions sessions = new InstrumentedLocalSessions();
+        sessions.start();
+        LocalSession session = sessions.prepareForTest(sessionID);
+        session.setState(FINALIZED);
+
+        sessions.handleStatusResponse(PARTICIPANT1, new 
StatusResponse(sessionID, FINALIZED));
+        Assert.assertEquals(FINALIZED, session.getState());
+    }
+
+    @Test
     public void handleStatusResponseFailed() throws Exception
     {
         UUID sessionID = registerSession();
@@ -593,6 +606,19 @@ public class LocalSessionTest extends AbstractRepairTest
     }
 
     @Test
+    public void handleStatusResponseFailedRedundant() throws Exception
+    {
+        UUID sessionID = registerSession();
+        InstrumentedLocalSessions sessions = new InstrumentedLocalSessions();
+        sessions.start();
+        LocalSession session = sessions.prepareForTest(sessionID);
+        session.setState(FAILED);
+
+        sessions.handleStatusResponse(PARTICIPANT1, new 
StatusResponse(sessionID, FAILED));
+        Assert.assertEquals(FAILED, session.getState());
+    }
+
+    @Test
     public void handleStatusResponseNoop() throws Exception
     {
         UUID sessionID = registerSession();


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

Reply via email to