「连载」边缘计算(三十一)03-13:边缘部分源码(源码分析篇)

(接上篇)

启动一个循环处理各种事件

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等,本节不对信息的具体处理过程剖析,感兴趣的读者可以在本节的基础上自行剖析。

到此,对EdgeCoremetamanager模块的剖析就结束了。

未完待续……    

你可能感兴趣的:(边缘计算,golang,人工智能)