前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊kingbus的startRaftPeer

聊聊kingbus的startRaftPeer

原创
作者头像
code4it
修改2020-06-15 10:53:27
2880
修改2020-06-15 10:53:27
举报
文章被收录于专栏:码匠的流水账

本文主要研究一下kingbus的startRaftPeer

startRaftPeer

kingbus/server/server.go

代码语言:javascript
复制
func (s *KingbusServer) startRaftPeer(peerURLs types.URLs) error {
    err := s.raftNode.NewPeerListener(peerURLs)
    if err != nil {
        return err
    }
    s.raftNode.SetPeerHandler()
    s.raftNode.PeerHandlerServe()
    log.Log.Infof("startRaftPeer success")
    return nil
}
  • startRaftPeer方法根据peerURLs通过s.raftNode.NewPeerListener开启listener,之后执行s.raftNode.SetPeerHandler()、s.raftNode.PeerHandlerServe()

NewPeerListener

kingbus/raft/peer_handler.go

代码语言:javascript
复制
//NewPeerListener create listener of peer
func (r *Node) NewPeerListener(peerURLs types.URLs) (err error) {
    peers := make([]*peerListener, len(peerURLs))
    defer func() {
        if err == nil {
            return
        }
        for i := range peers {
            if peers[i] != nil && peers[i].close != nil {
                log.Log.Info("stopping listening for peers on ", peerURLs.String())
                peers[i].close(context.Background())
            }
        }
    }()
​
    for i, u := range peerURLs {
        peers[i] = &peerListener{close: func(context.Context) error { return nil }}
        peers[i].Listener, err = rafthttp.NewListener(u, nil)
        if err != nil {
            return err
        }
        peers[i].close = func(context.Context) error {
            return peers[i].Listener.Close()
        }
        log.Log.Info("listening for peers on ", u.String())
    }
    r.PeerListener = peers
    return nil
}
  • NewPeerListener方法遍历peerURLs通过rafthttp.NewListener创建peerListener

PeerHandlerServe

kingbus/raft/peer_handler.go

代码语言:javascript
复制
//PeerHandlerServe serve
func (r *Node) PeerHandlerServe() {
    for _, peer := range r.PeerListener {
        go peer.serve()
    }
}
  • PeerHandlerServe方法则执行peer.serve()

小结

startRaftPeer方法根据peerURLs通过s.raftNode.NewPeerListener开启listener,之后执行s.raftNode.SetPeerHandler()、s.raftNode.PeerHandlerServe()

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • startRaftPeer
  • NewPeerListener
  • PeerHandlerServe
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档