This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch release-3.2.2 in repository https://gitbox.apache.org/repos/asf/ratis.git
commit 1095d9901db1fe06ca60d7632a1d9932e9fa210d Author: Symious <[email protected]> AuthorDate: Thu Mar 12 15:15:24 2026 +0800 RATIS-2427. Close LogAppender for illegalStateException (#1369) --- .../src/main/java/org/apache/ratis/server/raftlog/RaftLog.java | 3 +++ .../java/org/apache/ratis/server/leader/LogAppenderBase.java | 9 ++++++--- .../main/java/org/apache/ratis/server/raftlog/RaftLogBase.java | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ratis-server-api/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java b/ratis-server-api/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java index e504462b8..e194f865e 100644 --- a/ratis-server-api/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java +++ b/ratis-server-api/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java @@ -43,6 +43,9 @@ public interface RaftLog extends RaftLogSequentialOps, Closeable { /** Invalid log index is used to indicate that the log index is missing. */ long INVALID_LOG_INDEX = LEAST_VALID_LOG_INDEX - 1; + /** Is this log already opened but not yet closed? */ + boolean isOpened(); + /** Does this log contains the given {@link TermIndex}? */ default boolean contains(TermIndex ti) { Objects.requireNonNull(ti, "ti == null"); diff --git a/ratis-server/src/main/java/org/apache/ratis/server/leader/LogAppenderBase.java b/ratis-server/src/main/java/org/apache/ratis/server/leader/LogAppenderBase.java index 5a27cda51..be0404da3 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/leader/LogAppenderBase.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/leader/LogAppenderBase.java @@ -124,7 +124,10 @@ public abstract class LogAppenderBase implements LogAppender { @Override public boolean isRunning() { - return daemon.isWorking() && server.getInfo().isLeader(); + return daemon.isWorking() + && server.getInfo().isAlive() + && server.getInfo().isLeader() + && getRaftLog().isOpened(); } @Override @@ -133,8 +136,8 @@ public abstract class LogAppenderBase implements LogAppender { } void restart() { - if (!server.getInfo().isAlive()) { - LOG.warn("Failed to restart {}: server {} is not alive", this, server.getMemberId()); + if (!isRunning()) { + LOG.warn("{} is not running: skipping restart", this); return; } getLeaderState().restart(this); diff --git a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java index 8c2b66f96..48b410147 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLogBase.java @@ -113,7 +113,7 @@ public abstract class RaftLogBase implements RaftLog { state.assertOpen(); } - /** Is this log already opened? */ + @Override public boolean isOpened() { return state.isOpened(); }
