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

(接上篇)

EdgeCore d evicetwin

前面对EdgeCore组件的edged功能模块进行了分析,本节对EdgeCore组件的另一个功能模块devicetwin进行剖析,包括devicetwin的struct调用链剖析、devicetwin的具体逻辑剖析、devicetwin的缓存机制剖析。

1. devicetwin 的struct调用 剖析

从EdgeCore模块注册函数入手,具体如下所示。

|----------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/cmd/EdgeCore/app/server.go |
| // registerModules register all the modules started in EdgeCore func registerModules() { devicetwin.Register() ... } |

进入registerModules()函数中的devicetwin.Register()函数定义,具体如下所示。

|-------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/devicetwin.go |
| // Register register devicetwin func Register() { dtclient.InitDBTable() dt := DeviceTwin{} core.Register(&dt) } |

Register()函数主要做了如下3件事。

1)初始化devicetwin需要的数据库表(dtclient.InitDBTable());

2)实例化DeviceTwin struct(dt := DeviceTwin{});

3)注册将已经实例化的DeviceTwin struct(core.Register(&dt))。

下面深入剖析初始化devicetwin需要的数据库表具体做了哪些事情以及DeviceTwin struct具体由哪些属性组成。

(1)devicetwin数据库相关struct剖析

这部分剖析初始化devicetwin需要的数据库及数据库表相关的struct,具体如下所示。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtclient/sql.go |
| //InitDBTable create table func InitDBTable() { klog.Info("Begin to register twin model") dbm.RegisterModel("twin", new(Device)) dbm.RegisterModel("twin", new(DeviceAttr)) dbm.RegisterModel("twin", new(DeviceTwin)) } |

在InitDBTable()函数中,通过封装的beego的orm(https://GitHub.com/astaxie/beego/tree/develop/orm)创建数据库twin,并初始化device、device_attr和device_twin三张表。与上述三张表对应的结构体如下所示。

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtclient/device_db.go |
| //Device the struct of device type Device struct { ID string `orm:"column(id); size(64); pk"` Name string `orm:"column(name); null; type(text)"` Description string `orm:"column(description); null; type(text)"` State string `orm:"column(state); null; type(text)"` LastOnline string `orm:"column(last_online); null; type(text)"` } KubeEdge/edge/pkg/devicetwin/dtclient/deviceattr_db.go //DeviceAttr the struct of device attributes type DeviceAttr struct { ID int64 `orm:"column(id);size(64);auto;pk"` DeviceID string `orm:"column(deviceid); null; type(text)"` Name string `orm:"column(name);null;type(text)"` Description string `orm:"column(description);null;type(text)"` Value string `orm:"column(value);null;type(text)"` Optional bool `orm:"column(optional);null;type(integer)"` AttrType string `orm:"column(attr_type);null;type(text)"` Meta Data string `orm:"column(metadata);null;type(text)"` } KubeEdge/edge/pkg/devicetwin/dtclient/devicetwin_db.go //DeviceTwin the struct of device twin type DeviceTwin struct { ID int64 `orm:"column(id);size(64);auto;pk"` DeviceID string `orm:"column(deviceid); null; type(text)"` Name string `orm:"column(name);null;type(text)"` Description string `orm:"column(description);null;type(text)"` Expected string `orm:"column(expected);null;type(text)"` Actual string `orm:"column(actual);null;type(text)"` ExpectedMeta string `orm:"column(expected_meta);null;type(text)"` ActualMeta string `orm:"column(actual_meta);null;type(text)"` ExpectedVersion string `orm:"column(expected_version);null;type(text)"` ActualVersion string `orm:"column(actual_version);null;type(text)"` Optional bool `orm:"column(optional);null;type(integer)"` AttrType string `orm:"column(attr_type);null;type(text)"` Meta Data string `orm:"column(metadata);null;type(text)"` } |

以上3个文件中除了包含与device、device_attr和device_twin三张表对应的结构体定义外,还有针对这三张表的增、删、改、查方法的定义。

未完待续......

相关推荐
张洛闻Eren8 小时前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
布莱克6059 小时前
理解索引:从概念到实践
数据库·mysql
我不是疯子是傻子12 小时前
Qt CAN通信周期发送抖动?实测定时器精度校准与时间戳补偿方案
开发语言·数据库·qt
这个DBA有点耶12 小时前
数据库迁移怎么做到“零翻车“:金仓 KDMS/KDTS/KFS 工具链实测
数据库·架构·dba
2501_9378609413 小时前
MySQL联合查询(多表查询)
数据库·mysql
名字还没想好☜13 小时前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
迷迭香yy14 小时前
行业板块轮动因子实战从板块资金到因子建模的本地化Python全流程
数据库·人工智能·python
SelectDB14 小时前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB15 小时前
网易 日志与时序数据分析:Apache Doris / SelectDB 的技术能力与实践
数据库
weixin_5394467815 小时前
Navicat Premium 17报缺少ODBC驱动
数据库