diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java index 620a71d5bd..13f40ecb8f 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java @@ -572,11 +572,10 @@ private synchronized boolean changeToFollower( boolean allowListener, Object reason) { final RaftPeerRole old = role.getCurrentRole(); - final boolean metadataUpdated = state.updateCurrentTerm(newTerm); if (old == RaftPeerRole.LISTENER && !allowListener) { throw new IllegalStateException("Unexpected role " + old); } - + boolean metadataUpdated; if ((old != RaftPeerRole.FOLLOWER || force) && old != RaftPeerRole.LISTENER) { setRole(RaftPeerRole.FOLLOWER, reason); if (old == RaftPeerRole.LEADER) { @@ -597,8 +596,11 @@ private synchronized boolean changeToFollower( } else if (old == RaftPeerRole.FOLLOWER) { role.shutdownFollowerState(); } + metadataUpdated = state.updateCurrentTerm(newTerm); role.startFollowerState(this, reason); setFirstElection(reason); + } else { + metadataUpdated = state.updateCurrentTerm(newTerm); } return metadataUpdated; }