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