From 0313078284781392fe601f53ecfffa710b009bcd Mon Sep 17 00:00:00 2001 From: BurningCN <43363120+BurningCN@users.noreply.github.com> Date: Fri, 1 Jul 2022 10:28:41 +0800 Subject: [PATCH 1/2] Wake up the stateMaintainer thread in time --- .../storage/dledger/DLedgerLeaderElector.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java b/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java index 4dd60976..dfbe2e26 100644 --- a/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java +++ b/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java @@ -142,7 +142,7 @@ public CompletableFuture handleHeartBeat(HeartBeatRequest req //first change to candidate, and notify the state-maintainer thread changeRoleToCandidate(request.getTerm()); needIncreaseTermImmediately = true; - //TOOD notify + stateMaintainer.wakeup(); return CompletableFuture.completedFuture(new HeartBeatResponse().code(DLedgerResponseCode.TERM_NOT_READY.getCode())); } } @@ -224,6 +224,7 @@ public CompletableFuture handleVote(VoteRequest request, boolean s //stepped down by larger term changeRoleToCandidate(request.getTerm()); needIncreaseTermImmediately = true; + stateMaintainer.wakeup(); //only can handleVote when the term is consistent return CompletableFuture.completedFuture(new VoteResponse(request).term(memberState.currTerm()).voteResult(VoteResponse.RESULT.REJECT_TERM_NOT_READY)); } @@ -624,6 +625,7 @@ public CompletableFuture handleTakeLeadership( takeLeadershipTask.update(request, response); changeRoleToCandidate(targetTerm); needIncreaseTermImmediately = true; + stateMaintainer.wakeup(); return response; } } @@ -693,14 +695,13 @@ public StateMaintainer(String name, Logger logger) { super(name, logger); } - @Override - public void doWork() { + @Override public void doWork() { try { if (DLedgerLeaderElector.this.dLedgerConfig.isEnableLeaderElector()) { DLedgerLeaderElector.this.refreshIntervals(dLedgerConfig); DLedgerLeaderElector.this.maintainState(); } - sleep(10); + waitForRunning(10); } catch (Throwable t) { DLedgerLeaderElector.logger.error("Error in heartbeat", t); } From 959bbf8945ab23134219e0fb5d3f6b9443473782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=BC=E5=8D=8E?= <43363120+BurningCN@users.noreply.github.com> Date: Thu, 14 Jul 2022 14:23:37 +0800 Subject: [PATCH 2/2] Update DLedgerLeaderElector.java --- .../openmessaging/storage/dledger/DLedgerLeaderElector.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java b/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java index dfbe2e26..cf3d9383 100644 --- a/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java +++ b/src/main/java/io/openmessaging/storage/dledger/DLedgerLeaderElector.java @@ -694,8 +694,8 @@ public class StateMaintainer extends ShutdownAbleThread { public StateMaintainer(String name, Logger logger) { super(name, logger); } - - @Override public void doWork() { + @Override + public void doWork() { try { if (DLedgerLeaderElector.this.dLedgerConfig.isEnableLeaderElector()) { DLedgerLeaderElector.this.refreshIntervals(dLedgerConfig);