(接上篇)
metamanager业务逻辑剖析
metamanager的模块启动函数具体如下所示。
KubeEdge/edge/pkg/metamanager/module.go |
func (m *metaManager) Start(c *context.Context) { m.context = c InitMetaManagerConfig() go func() { period := getSyncInterval() timer := time.NewTimer(period) for { select { case <-timer.C: timer.Reset(period) msg := model.NewMessage("").BuildRouter(MetaManagerModuleName, GroupResource, model.ResourceTypepodStatus, OperationMetaSync) m.context.Send(MetaManagerModuleName, *msg) } } }() m.mainLoop() } |
启动函数Start()做了如下4件事。
1)接收并保存模块启动时传入的\*context.Context实例;
2)初始化metamanager配置;
3)启动一个goroutine同步心跳信息;
4)启动一个循环处理各种事件。
接下来,具体展开分析第2、第3、第4件事。
(1)初始化metamanager配置
InitMetaManagerConfig()定义具体如下所示。
KubeEdge/edge/pkg/metamanager/msg_processor.go |
// InitMetaManagerConfig init meta config func InitMetaManagerConfig() { var err error groupName, err := config.CONFIG.GetValue("metamanager.context-send-group").ToString() ... edgeSite, err := config.CONFIG.GetValue("metamanager.edgesite").ToBool() ... moduleName, err := config.CONFIG.GetValue("metamanager.context-send-module").ToString() ... } |
在初始化metamanager配置时,从配置文件中获取metamanager.context-send-group、metamanager.edgesite、metamanager.context-send-module,并根据获取的值对相关变量进行设置。
(2)启动一个goroutine同步心跳信息
其具体实现如下所示。
KubeEdge/edge/pkg/metamanager/module.go |
go func() { period := getSyncInterval() timer := time.NewTimer(period) for { select { case <-timer.C: timer.Reset(period) msg := model.NewMessage("").BuildRouter(MetaManagerModuleName, GroupResource, model.ResourceTypepodStatus, OperationMetaSync) m.context.Send(MetaManagerModuleName, *msg) } } } |
在同步心跳信息的goroutine中,做了如下两件事:
1)获取通信心跳的时间间隔,具体如下所示。
period := getSyncInterval() |
2)创建定时器,并定时发送心跳信息,具体如下所示。
timer := time.NewTimer(period) for {...} |
「未完待续……」