(接上篇)
启动一个循环处理各种事件
m.mainLoop()定义具体如下所示。
KubeEdge/edge/pkg/metamanager/msg_processor.go |
func (m *metaManager) mainLoop() { go func() { for { if msg, err := m.context.Receive(m.Name()); err == nil { ... m.process(msg) } else { ... } } }() } |
mainLoop()函数启动了一个for循环,在循环中主要做了两件事。
1) 接收信息,具体如下所示。
msg, err := m.context.Receive(m.Name()) |
2)对接收到的信息进行处理,具体如下所示。
m.process(msg) |
想弄明白对信息的处理过程,需要进入m.process()函数,具体如下所示。
KubeEdge/edge/pkg/metamanager/msg_processor.go |
func (m *metaManager) process(message model.Message) { operation := message.GetOperation() switch operation { case model.InsertOperation: m.processInsert(message) case model.UpdateOperation: m.processUpdate(message) case model.DeleteOperation: m.processDelete(message) case model.QueryOperation: m.processQuery(message) case model.ResponseOperation: m.processResponse(message) case messagepkg.OperationNodeConnection: m.processNodeConnection(message) case OperationMetaSync: m.processSync(message) case OperationFunctionAction: m.processFunctionAction(message) case OperationFunctionActionResult: m.processFunctionActionResult(message) case constants.CSIOperationTypeCreateVolume, constants.CSIOperationTypeDeleteVolume, constants.CSIOperationTypeControllerPublishVolume, constants.CSIOperationTypeControllerUnpublishVolume: m.processVolume(message) } } |
process()函数中主要做了如下两件事。
1)获取消息的操作的类型,具体如下所示。
operation := message.GetOperation() |
2)根据信息操作类型对信息进行相应处理,具体如下所示。
switch operation { ... } |
信息的操作类型包括insert、update、delete、query、response、publish、meta-internal-sync、action、action_result等,本节不对信息的具体处理过程剖析,感兴趣的读者可以在本节的基础上自行剖析。
到此,对EdgeCore中metamanager模块的剖析就结束了。
「未完待续……」