「连载」边缘计算(二十九)03-11:边缘部分源码(源码分析篇)

(接上篇)

EdgeCorematamanager

前面对EdgeCore组件的edged、devicetwinedgehubeventbus功能模块进行了分析,本节对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表的一些操作定义,如SaveMetaDeleteMetaByKeyUpdateMetaInsertOrUpdateUpdateMetaFieldUpdateMetaFieldsQueryMetaQueryAllMeta

未完待续……  

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 15:22:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 15:22:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 15:22:01       82 阅读
  4. Python语言-面向对象

    2024-03-14 15:22:01       91 阅读

热门阅读

  1. Linux 用户和用户组管理

    2024-03-14 15:22:01       35 阅读
  2. ubuntu22.04环境中安装pylint

    2024-03-14 15:22:01       35 阅读
  3. 高通qcm2290功耗问题

    2024-03-14 15:22:01       36 阅读
  4. 数据类型(面向对象)

    2024-03-14 15:22:01       28 阅读
  5. YOLOv8模型验证以及一些报错

    2024-03-14 15:22:01       43 阅读
  6. 代码随想录day39:动态规划part7,完全背包继续

    2024-03-14 15:22:01       37 阅读
  7. django根据时间(年月日)动态修改表名--方法二

    2024-03-14 15:22:01       40 阅读
  8. ES6 Nunber类型、Math对象扩展

    2024-03-14 15:22:01       37 阅读
  9. IOS面试题object-c 81-90

    2024-03-14 15:22:01       42 阅读
  10. mysql数据库备份恢复

    2024-03-14 15:22:01       37 阅读
  11. Python: for,while循环语句

    2024-03-14 15:22:01       51 阅读
  12. JDK、JRE和JVM的区别

    2024-03-14 15:22:01       38 阅读
  13. 后端各种格式传参混合vue前端传参

    2024-03-14 15:22:01       44 阅读
  14. FFmpeg--packet数据包和frame数据帧的区别

    2024-03-14 15:22:01       34 阅读
  15. STM32单片机实现串口通信

    2024-03-14 15:22:01       32 阅读
  16. git--协同开发

    2024-03-14 15:22:01       44 阅读