This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch release-3.1.1 in repository https://gitbox.apache.org/repos/asf/ratis.git
commit 5578be7fb07e52cfa90e2979fd251ae78badfc62 Author: 133tosakarin <[email protected]> AuthorDate: Thu Sep 12 23:42:06 2024 +0800 RATIS-2154. The old leader may send appendEntries after term changed. (#1148) --- .../src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 a66c8ec5f..0473564b3 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 @@ -571,11 +571,10 @@ class RaftServerImpl implements RaftServer.Division, 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) { @@ -596,8 +595,11 @@ class RaftServerImpl implements RaftServer.Division, } else if (old == RaftPeerRole.FOLLOWER) { role.shutdownFollowerState(); } + metadataUpdated = state.updateCurrentTerm(newTerm); role.startFollowerState(this, reason); setFirstElection(reason); + } else { + metadataUpdated = state.updateCurrentTerm(newTerm); } return metadataUpdated; }
