etcd网络层(二)——pipeline通道实现

一、pipeline结构体

 

pipeline通道主要负责传递快照数据

pipeline结构体及相关字段如下:

type pipeline struct {

       peerID types.ID   //该pipeline对应节点的ID



       tr     *Transport  //关联的rafthttp.Transport实例

       picker *urlPicker  //用于选择可用的url

       status *peerStatus  //当前peer的状态

       raft   Raft   //底层的raft实例

       errorc chan error

       // deprecate when we depercate v2 API

       followerStats *stats.FollowerStats



       msgc chan raftpb.Message  //pipeline实例从该通道中获取待发送的消息

       // wait for the handling routines

       wg    sync.WaitGroup   //负责同步多个goroutine结束。每个pipeline默认开启4个goroutine来处理msgc中的消息,必须先关闭这些goroutine,才能真正关闭该pipeline

       stopc chan struct{}

}

 

tr 关联的rafthttp.Transport实例

msgc 该channel中存放待发送到对端的消息(快照消息)

raft 底层的raft实例,用于向底层的raft发送消息(如:快照发送成功或失败等)

 

二、start方法

func (p *pipeline) start() {

       p.stopc = make(chan struct{})

       p.msgc = make(chan raftpb.Message, pipelineBufSize)  //初始化msgc通道,默认缓冲是64个

       p.wg.Add(connPerPipeline)

       for i := 0; i < connPerPipeline; i++ {  //默认开启4个goroutine来处理msgc中待发送的消息

              go p.handle()

       }



       if p.tr != nil && p.tr.Logger != nil {

              p.tr.Logger.Info(

                     "started HTTP pipelining with remote peer",

 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值