提交 ca45a894 编写于 作者: Z zhangshuang

fix jira 654 , after lc ,new leader heartbeat start failed

上级 33bf1ef1
......@@ -774,7 +774,7 @@ public class Synchronizer {
execManager.setNewLeader(electionResult.getRegency().getLeaderId());
// 重启心跳
tom.heartBeatTimer.restart();
tom.heartBeatTimer.restartformlc();
// 重启业务消息超时定时器
requestsTimer.startTimer(controller.getStaticConf().getRequestTimeout());
......
......@@ -102,6 +102,25 @@ public class HeartBeatTimer {
start();
}
// 在领导者切换过程中触发的心跳重新启动,要与领导者确认过程解耦
public synchronized void restartformlc() {
stopAll();
if (leaderTimer == null) {
leaderTimer = Executors.newSingleThreadScheduledExecutor();
leaderTimer.scheduleWithFixedDelay(new LeaderHeartbeatBroadcastingTask(this), NORMAL_DELAY,
tomLayer.controller.getStaticConf().getHeartBeatPeriod(), TimeUnit.MILLISECONDS);
}
if (followerTimer == null) {
// 非领导者心跳定时器重新开启后,更新上次心跳消息接收时间
heartBeatting.time = System.currentTimeMillis();
followerTimer = Executors.newSingleThreadScheduledExecutor();
followerTimer.scheduleWithFixedDelay(new FollowerHeartbeatCheckingTask(), NORMAL_DELAY,
tomLayer.controller.getStaticConf().getHeartBeatPeriod(), TimeUnit.MILLISECONDS);
}
}
public synchronized void stopAll() {
innerStop();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册