project2b handleRaftReady函数中 entry apply的疑问

2b中一个entry对应一个request,如果这个request是put或delete,那么无论是否有对应的callback都应该执行一次put或delete操作,这时这个entry是否可以视为applied并写入db,还是说必须要找到对应的callback后才写入db呢

1 Like

这个entry可以视为applied并写入db。

每个节点都要put或者delete,apply entry 并写入db。返回callback只是Leader要做的事情。

1 在处理RaftCmdrequest 请求的时候,一个entry对应peer 的proposals 数组中的一个proposal。proposal的(index,term)与该entry 的(index,term)相一致,但proposal 的callback此时并没有赋值。

2 当这个entry 被大多数结点所commit, 需要进行应用,所谓应用就是根据这条entry 执行相应的数据库操作。应用之后需要根据(index,term )找到相应的proposal,根据数据库操作的respnse对其callback 进行赋值。Callback 有个Done 方法其要求传入RaftCmdResponse,来对callback进行赋值。