TinyKv调用流程梳理二

news/2024/12/5 6:52:10/

addNode生成peer

 

 

 

 

 

func (c *client) heartbeatStreamLoop() {defer c.wg.Done()for {select {case <-c.ctx.Done():returndefault:}ctx, cancel := context.WithCancel(c.ctx)c.connMu.RLock()stream, err := c.leaderClient().RegionHeartbeat(ctx)c.connMu.RUnlock()if err != nil {cancel()c.schedulerUpdateLeader()time.Sleep(retryInterval)continue}errCh := make(chan error, 1)wg := &sync.WaitGroup{}wg.Add(2)go c.reportRegionHeartbeat(ctx, stream, errCh, wg)go c.receiveRegionHeartbeat(stream, errCh, wg)select {case err := <-errCh:log.Warnf("[%s][scheduler] heartbeat stream get error: %s ", c.tag, err)cancel()c.schedulerUpdateLeader()time.Sleep(retryInterval)wg.Wait()case <-c.ctx.Done():log.Info("cancel heartbeat stream loop")cancel()return}}
}
func (m *MockSchedulerClient) RegionHeartbeat(req *schedulerpb.RegionHeartbeatRequest) error {if err := m.checkBootstrap(); err != nil {return err}m.Lock()defer m.Unlock()regionID := req.Region.GetId()for _, p := range req.Region.GetPeers() {delete(m.pendingPeers, p.GetId())}for _, p := range req.GetPendingPeers() {m.pendingPeers[p.GetId()] = p}m.leaders[regionID] = req.Leaderif err := m.handleHeartbeatVersion(req.Region); err != nil {return err}if err := m.handleHeartbeatConfVersion(req.Region); err != nil {return err}resp := &schedulerpb.RegionHeartbeatResponse{Header:      &schedulerpb.ResponseHeader{ClusterId: m.clusterID},RegionId:    regionID,RegionEpoch: req.Region.GetRegionEpoch(),TargetPeer:  req.Leader,}if op := m.operators[regionID]; op != nil {if m.tryFinished(op, req.Region, req.Leader) {delete(m.operators, regionID)} else {m.makeRegionHeartbeatResponse(op, resp)}log.Debugf("[region %d] schedule %v", regionID, op)}store := m.stores[req.Leader.GetStoreId()]store.heartbeatResponseHandler(resp)return nil
}

 

 

 


http://www.ppmy.cn/news/908602.html

相关文章

4 海康视觉平台VisionMaster 上手系列:常用工具(一)

VisionMaster 常用的工具&#xff1a;&#xff08;以下用VM简称 VisionMaster&#xff09; 1&#xff0c;模板匹配工具&#xff0c;以及其扩展&#xff0c;位置修正工具。 2&#xff0c;测量矩形工具&#xff0c;以及其扩展应用&#xff1a;找边缘点&#xff0c;找直线&#…

自己搭建 KMS激活服务器

1、C盘建KMS文件夹&#xff0c;把vlmcsd-Windows-x64.exe复制到kms文件夹内 2、以管理员运行cmd,在cmd切换到C盘KMS文件下&#xff0c;先输入cd c:/ 回车&#xff0c;再输入cd kms&#xff0c;这两个命令的意思是进入到C盘的kms文件夹下&#xff0c; 3、输入 vlmcsd-Windows-x6…

传奇GOM引擎单机架设图文教程

T:准备下载好服务端&#xff08;版本&#xff09;gom引擎架设 选择GOM引擎版本 注;版本可以去论坛有免费&#xff0c;电脑还需要下载安装好客户端。 1.首先下载好版本后会有2个压缩包&#xff0c;一个是版本&#xff0c;一个是补丁&#xff0c; 简单来说架设分三部&#xff1…

【NacosSync】注册中心同步组件使用教程ZooKeeper迁移到Nacos

目录 介绍系统模块架构获取安装包数据库配置启动服务器控制台添加注册中心集群信息添加同步任务注意事项 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate…

用C++实现Java的ByteArray类(字节数组)

最近由于项目原因&#xff0c;需要将Java项目中的ByteArray类用C实现一遍&#xff0c;于是琢磨了一下&#xff0c;下面是该类中部分已实现方法的使用说明&#xff1a; // 添加一个字节到ByteArray中。 void addByte(uint8_t byte); // 添加多个字节到ByteArray中 void …

[橘汁仙剑网出品]仙剑奇侠传六全剧情视频动画配音版[1080P][720P][H264]

转载自橘汁仙剑网&#xff08;http://www.ojpal.com/article-856-1.html&#xff09; 全剧情1080P版本下载地址 百度网盘下载&#xff1a; 专辑分享&#xff1a; http://yun.baidu.com/pcloud/album/info?uk688129892&album_id6526257817887254126 公开链接&#xff1…

Woderwate-Intouch驱动(包括施耐德,西门子,AB等的DASever、IOServer)

1、Wonderware DeviceIntegration2014R2 SP1 百度网盘链接&#xff1a;https://pan.baidu.com/s/1aCBWAVpnXA0SLUSRWYsl0w 提取码&#xff1a;cyjn 2、Device Integration 百度网盘链接&#xff1a;https://pan.baidu.com/s/1k7bY0RFQotCF_KgM9FWYpQ 提取码&#xff1a;27e9…

黑苹果安装参考

http://www.cnblogs.com/zouzf/p/4356641.htmlhttp://bbs.pcbeta.com/viewthread-1581554-1-1.htmlhttp://tieba.baidu.com/p/2049965360http://bbs.pcbeta.com/forum.php?modforumdisplay&fid498http://osx86.cn/category/drive/安装置顶帖http://bbs.pcbeta.com/viewthr…