(接上篇)

EdgeCore之matamanager

前面对EdgeCore组件的edged、devicetwin、edgehub、eventbus功能模块进行了分析,本节对EdgeCore组件的另一个功能模块metamanager进行剖析。metamanager作为EdgeCore中的edged模块与edgehub模块进行交互的桥梁,除了将edgehub的消息转发给edged,还对一些必要的数据通过SQLite进行缓存,在某种程度上实现了KubeEdge的offline mode。本节就对metamanager所涉及的SQLite数据库相关逻辑和业务逻辑进行剖析,metamanager数据库相关逻辑剖析,metamanager业务逻辑剖析。

metamanager数据库相关逻辑剖析

metamanager的模块注册函数具体如下所示。

KubeEdge/edge/pkg/metamanager/module.go

//constant metamanager module name

const (

MetaManagerModuleName = "metaManager"

)

...

// Register register metamanager

func Register() {

dbm.RegisterModel(MetaManagerModuleName, new(dao.Meta))

core.Register(&metaManager{})

}

注册函数Register()做了两件事。

  1. 在SQLite中的数据库中初始化metaManager表;

2)注册已经初始化的metamanager。

下面深入剖析 在SQLite中的数据库中初始化metaManager表相关内容。dbm.RegisterModel()定义具体如下所示。

KubeEdge/edge/pkg/common/dbm/db.go

//RegisterModel registers the defined model in the orm if model is enabled

func RegisterModel(moduleName string, m interface{}) {

if isModuleEnabled(moduleName) {

orm.RegisterModel(m)

...

} else {

...

}

}

RegisterModel()函数是对[GitHub.com/astaxie/beego/orm](https://GitHub.com/astaxie/beego/tree/develop/orm)的封装。

   回到在SQLite中的数据库中初始化metaManager表,下面深入剖析metaManager表的具体定义dao.Meta。dao.Meta定义具体下所示。

KubeEdge/edge/pkg/metamanager/dao/meta.go

// Meta metadata object

type Meta struct {

// ID    int64  `orm:"pk; auto; column(id)"`

Key   string `orm:"column(key); size(256); pk"`

Type  string `orm:"column(type); size(32)"`

Value string `orm:"column(value); null; type(text)"`

}

metaManager表的具体定义包含Key、Type和Value三个字段,具体含义如下。

1) Key:meta的名字;

2) Type: meta对应的操作类型;

3) Value:具体的meta值;

与Meta Struct的定义在同一文件内,还有对metaManager表的一些操作定义,如SaveMeta、DeleteMetaByKey、UpdateMeta、InsertOrUpdate、UpdateMetaField、UpdateMetaFields、QueryMeta、QueryAllMeta。

「未完待续……」  

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐