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;
   }

Reply via email to