stateIs0 / lu-raft-kv

this is raft java project. raft-kv-storage
https://thinkinjava.cn/2019/01/12/2019/2019-01-12-lu-raft-kv/
Apache License 2.0
771 stars 211 forks source link

日志提交问题 #28

Open hqlalala opened 9 months ago

hqlalala commented 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岂不是永远无法提交了。

leakey0626 commented 8 months ago

新领导者上台后会提交一个no-op空日志,顺带把日志A也提交了