This is an automated email from the ASF dual-hosted git repository.
szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git
The following commit(s) were added to refs/heads/master by this push:
new e6fe8fca4 RATIS-2154. The old leader may send appendEntries after term
changed. (#1148)
e6fe8fca4 is described below
commit e6fe8fca4e6aa9d58c8bdcdba2b5fb1b7825ffb2
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 620a71d5b..13f40ecb8 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 @@ 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) {
@@ -597,8 +596,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;
}