做招聘网站如何宣传,网站开发用什么好,手机网站登陆模板,网站建设源码是什么#xff08;接上篇#xff09;
EdgeCore之devicetwin
前面对EdgeCore组件的edged功能模块进行了分析#xff0c;本节对EdgeCore组件的另一个功能模块devicetwin进行剖析#xff0c;包括devicetwin的struct调用链剖析、devicetwin的具体逻辑剖析、devicetwin的缓存机制剖析…接上篇
EdgeCore之devicetwin
前面对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 structdt : DeviceTwin{}
3注册将已经实例化的DeviceTwin structcore.Register(dt)。
下面深入剖析初始化devicetwin需要的数据库表具体做了哪些事情以及DeviceTwin struct具体由哪些属性组成。
1devicetwin数据库相关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三张表对应的结构体定义外还有针对这三张表的增、删、改、查方法的定义。
「未完待续……」