对于这个问题,以下是我对这个图片过程的理解,如有错误,还请大家帮忙指正。
- 绿session在10:00时刻对1-95对应的raft log index对应的修改进行了commit操作,但是raft kv 还没有apply到 1-95
- 黄session在10:05时刻发起读请求,获取raft log index:1-95对应的内容,发起如下流程:
- 查看当前时刻raft log index 最新值(最大值),并保存在当前读取session的本地,此raft log index就是所谓的ReadIndex
- 在TiKV中,所有读写操作都在leader节点上进行,所以会进行一次当前leader的判断,通过heartbeat进行,收到多数节点的回应后,当前节点会认定自己仍然是leader,才会继续执行后续操作
- 绿session在10:08时刻,等到了TiKV 完成对写操作的Raft log index 1-95的apply(持久化到RocksDB KV中)
- 黄session在10:09时刻,等到了TiKV 完成对本地缓存的ReadIndex对应的raft log index 的apply,此时符合线性一致性读的条件,读取1-95对应的Raft KV值,并返回结果给客户端