线性一致性如何保证reader能读到最近的修改?

TiDB的readindex通过读取leader最大编号的commited的raft log来实现线性一致性,假如场景如下:
1、线程1从PD获取commit_ts开始执行提交
2、线程2从PD获取read_ts开始读取(commit_ts < read_ts)
3、线程2到leader region中读取的时候,线程1的raft log还没有commit成功(可能正在replication)

那么此时线程2读取到的raft log index岂不是没有包含线程1的提交?但是它读取的时间又是大于线程1的,TiDB有什么机制来避免着这种场景么?

https://cn.pingcap.com/blog/lease-read 可以参考下

分布式事务、MVCC了解下

推荐阅读这篇文章:线性一致性和 Raft

感谢大佬回复,可能我没有描述清楚。我感到疑惑的是,一个readindex操作怎么能保证可以拿到包含了最近提交的commited log。就像例子中描述的,线程2的读取时间是晚于线程1的,但是如果线程1的raft log落地过程中卡住了,线程2读到的是什么呢?即使后面成功落地,但是线程1已经返回了,那岂不是违背了线性一致性

等待状态机至少应用到 ReadIndex 记录的 Log,这一步说明了。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。