Hi William, I agree that it is better to initialize matchIndex to -1 (INVALID_LOG_INDEX). Good catch! Would you like to submit a pull request?
Tsz-Wo On Tue, Jan 10, 2023 at 12:24 AM William Song <[email protected]> wrote: > Hi dev, > > I noticed that matchIndex in leaderStateImpl in initialized with value > 0[1] and I think it is incorrect. > > As the Raft Paper[2] states, matchIndex is 'for each server, index of > highest log entry known to be replicated on server’. > > 0 is considered to be a valid Raft Log index in Ratis, and if we > initialize matchIndex to 0, the very first log entry will become committed > as soon as it is flushed into leader’s LogSegment, instead of after > receiving majority ack responses. > > Therefore, I think the correct initialization value for match index is -1. > Existing CI passed with -1: > https://github.com/apache/ratis/actions/runs/3875583646. What do you > think? > > Regards, > William Song > > > [1] > https://github.com/apache/ratis/blob/d45dccc09c34d9dc51c52c6b14b468b2641692c2/ratis-server/src/main/java/org/apache/ratis/server/impl/FollowerInfoImpl.java#L40 > [2] https://raft.github.io/raft.pdf
