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 e504462b80..e194f865ed 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 5a27cda510..be0404da36 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 void start() { @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 CompletableFuture stopAsync() { } 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 8c2b66f969..48b410147c 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 void checkLogState() { state.assertOpen(); } - /** Is this log already opened? */ + @Override public boolean isOpened() { return state.isOpened(); }