ETCD 源码学习--Raft 提案消息的旅程(十二)

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。

消息的来源主要有两种,一个是终端的API请求,另个一是节点内部自动发起的消息,比如心跳。而不同消息类型的处理已经在前面的文章中说明,这里不再累赘,本文只介绍一个提案消息发送到 Leader 节点直到被节点应用的流程。

主要流程

1.将提交消息传递到底层 Node 处理(/ectdserver/v3_server.go)。

(1) 终端调用API,设置新键值对,节点 的 Server 接收到请求,执行对应操作 PUT。

(2) 执行 raftRequest 。

(3) 执行 raftRequestOnce。

(4) 执行 processInternalRaftRequestOnce,调用 Propose 将消息传递给 node 模块。

2.Node 对消息处理(/raft/node.go)。

(1) Propose 将消息封装,设置消息类型为 MsgProp,最终由 stepWithWaitOption 进行处理。

(2) stepWithWaitOption  将消息推入 propc  管道,等待被 node 的 后台 goroutine 处理。

(3) run() 是 node 的一个后台goroutine,用于处理各种消息。propc 管道的消息将被交给底层 Raft 模块 Step 方法处理。

3.底层 Raft 对消息处理(/ratf/raft.go)。

(1) Step 方法会根据当前节点的状态和消息类型的不同,调用相应的方法进行处理(这里的场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值