Open hqlalala opened 9 months ago
if (N > commitIndex) { LogEntry entry = logModule.read(N); if (entry != null && entry.getTerm() == currentTerm) { commitIndex = N; } }
// 响应客户端(成功一半) if (success.get() >= (count / 2)) { // 更新 commitIndex = logEntry.getIndex(); // 应用到状态机 getStateMachine().apply(logEntry);
大佬,这一段代码复制日志成功后只提交了本日志。如果出现这种情况: 出现一个日志A成功复制过半但宕机未提交,重启后又重新当选,这时出现一个日志B成功复制且提交,那么过去这个日志A岂不是永远无法提交了。
新领导者上台后会提交一个no-op空日志,顺带把日志A也提交了
if (N > commitIndex) { LogEntry entry = logModule.read(N); if (entry != null && entry.getTerm() == currentTerm) { commitIndex = N; } }
大佬,这一段代码复制日志成功后只提交了本日志。如果出现这种情况: 出现一个日志A成功复制过半但宕机未提交,重启后又重新当选,这时出现一个日志B成功复制且提交,那么过去这个日志A岂不是永远无法提交了。