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 2c5412c7f RATIS-2427. Close LogAppender for illegalStateException
(#1369)
2c5412c7f is described below
commit 2c5412c7f9508a5663bb097de5d4af1ad994df9b
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();
}