MCPcopy Create free account
hub / github.com/e2wugui/zeze / isLastLogUpToDate

Method isLastLogUpToDate

ZezeJava/ZezeJava/src/main/java/Zeze/Raft/Raft.java:632–651  ·  view source on GitHub ↗
(BRequestVoteArgument candidate)

Source from the content-addressed store, hash-verified

630 }
631
632 private boolean isLastLogUpToDate(BRequestVoteArgument candidate) throws RocksDBException {
633 // NodeReady local candidate
634 // false false IsLastLogUpToDate
635 // false true false
636 // true false false
637 // true true IsLastLogUpToDate
638 var last = logSequence.lastRaftLogTermIndex();
639 if (!logSequence.getNodeReady()) {
640 if (!candidate.getNodeReady()) {
641 // 整个Raft集群第一次启动时,允许给初始节点投票。此时所有的初始节点形成多数派。任何一个当选都是可以的。
642 // 以后由于机器更换再次启动而处于初始状态的节点肯定是少数派,即使它们之间互相投票,也不能成功。
643 // 如果违背了这点,意味着违背了Raft的可用原则,已经不在Raft的处理范围内了。
644 return isLastLogUpToDate(last, candidate);
645 }
646
647 // 拒绝投票直到发现达成多数派。
648 return false;
649 }
650 return candidate.getNodeReady() && isLastLogUpToDate(last, candidate);
651 }
652
653 private static boolean isLastLogUpToDate(RaftLog last, BRequestVoteArgument candidate) {
654 if (candidate.getLastLogTerm() > last.getTerm())

Callers 1

processRequestVoteMethod · 0.95

Calls 6

lastRaftLogTermIndexMethod · 0.80
getLastLogTermMethod · 0.80
getLastLogIndexMethod · 0.80
getNodeReadyMethod · 0.45
getTermMethod · 0.45
getIndexMethod · 0.45

Tested by

no test coverage detected