o0yo
(Ti D Ber R Ib Wy Jt P)
1
大家好,我刚刚开始学习 tidb/tikv,然后正在阅读 tikv 的代码,但是遇到了很多问题。
比如我大致稍微了解了 raftstore 还有它下面的 batchsystem 的大致工作流程,然后我读到了 PeerFsmDelegate.handle_msgs
这个函数内去处理日志复制、选举类的 message 时会去调用 on_raft_message
,然后在这个函数内部,它看起来做了很多的 check(比如接收到了过期的消息),然后就很多都不太懂在做什么,有些打开到对应 github 的 pr 链接,也有些不太懂。
这一块貌似涉及到了很多细节,想问下大家的建议以及该怎么去读源码。
忽略那么多细节,大概看看整体流程就行。我相信写代码的时候也不是全都设计的很好再在合适的地方加check,感觉是一开始一个大逻辑,后面加一点逻辑,就在相应位置加个 check,慢慢就加成这样了。
要么就先仔细看看每个模块,然后串起来。比如说 raft-rs 这个就是处理 raft 消息的,你想了解可以看看,如果了解了这个,后面遇到 raft.step 之类的就不用走进去了。看代码就快了。
基本上大的流程就是这样:
tidb=> grpc => scheduler => raft-batchsystem=>apply-batchsystem
其中向 raft-batchsystem 发消息是向 router 发送,向apply-batchsystem 发送消息是向 apply-router 发送。
然后可以跟着一个流程看看,比如说:写入,就是在 raft-batchsystem 里面搞个 proposal,然后走一圈raft,然后 collectready 的地方把 commit 的消息拿出来,构造一个 applytask,发送给 apply-batchsystem 写入rocksdb,完事儿。
1 个赞
o0yo
(Ti D Ber R Ib Wy Jt P)
3
em,这个流程我大概了解一点,raft-rs 我大概知道它是怎么做的。我就是想看一下这个的细节,因为在这个处理 msg 的地方,它貌似考虑了很多 corner cases,我觉得这些都是经验。。。
谢谢!
diwing
(Ti D Ber R Qstj35v)
5
忽略细节。比如一大片深林,首先应该分析树木的数量,种类,方位等等,才能再聚集具体到树木,树叶。当你一上来就专注聚焦于某颗树的树叶,自然就脑壳痛了
system
(system)
关闭
8
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。