带着问题撸源码系列-zookeeper-客户端先写后读,怎么保证能读到写的数据?

问题

带着问题撸源码系列-zookeeper-客户端先写后读,怎么保证能读到写的数据?

猜测

从我们的系列文章上一篇:
带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?
分析过程中可以看到,在处理请求的时候,有一些神奇的队列帮助处理这个问题。

我们猜测就是通过这些队列,把读请求放在写请求后边。
下面让我们来探讨细节吧。

读源码

由于上一篇:带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?
已经分析了follower的处理请求过程,这里就不再赘述了,直接分析当先写后读的时候会发生什么情况

org.apache.zookeeper.server.quorum.CommitProcessor#run
在这里插入图片描述
我们可以想象,如果同一个客户端很快地发过来写请求和读请求,写请求会进pendingRequest中,然后写请求也会跟在这个读请求后面。

接下来的代码太复杂了感觉不好读,试试断点一波

断点调试

把断点只打在上面的if分支,客户端迅速发写请求create /t1和读请求ls / 没法比较简单地模拟出这种情况。因为涉及到leader处理写请求,所以我们先看leader怎么处理写请求的。

回答问题

can’t yet

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值