「连载」边缘计算(二十九)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

未完待续……  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求根节点到叶节点数字之和

题目链接 求根节点到叶节点数字之和 题目描述 注意点 树中节点的数目在范围 [1, 1000] 内0 < Node.val < 9树的深度不超过10 解答思路 深度优先遍历计算从根节点到叶子节点组成的所有数字&#xff08;每向下一层乘以10&#xff09;&#xff0c;再计算所有的数字之和…

中小型生产企业工业数据采集分析平台 规划生产流程

工业数据采集分析平台是一款优秀的工控自动化软件&#xff0c;可以用于数据采集、实时监测和过程控制、数据传输、系统联动、远程监控等多种应用&#xff0c;数据采集平台通过对设备运行状态及相关参数监视实现保证每个环节都能按照既定方案进行&#xff0c;同时缩短非正常停机…

shiro整合thymeleaf(接上一篇抛出的问题)

在上一篇末尾&#xff0c;讲到如何实现不同身份的用户&#xff0c;有不同的权限&#xff0c;从而看到不同的页面&#xff0c;下面我们就来实现下这个功能 1.导入依赖 <!--shiro整合thymeleaf--><dependency><groupId>com.github.theborakompanioni</group…

python(ogr)处理geojson为本地shp文件

前言 本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json &#xff0c;如果觉得下方代码看起来不方便&#xff0c;可以来GitHub上来看&#xff0c;在这上面还有一些辅助内容便于理解 GISpjd/GIS-union-Python (github.com)https://gi…

14.WEB渗透测试--Kali Linux(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;13.WEB渗透测试--Kali Linux&#xff08;一&#xff09;-CSDN博客 netcat简介内容:13.WE…

精品基于Springboot的体育用品租赁租用管理系统的设计与实现

《[含文档PPT源码等]精品基于Springboot的体育用品管理系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&…

c# DbHelper的封装

c# DbHelper的封装 基于ADO.NET框架&#xff0c;封装了适用于多个关系型数据库的DbHelper。通过简洁明了的代码&#xff0c;实现了对各种数据库的高效操作。 public class DbHelper{private readonly DataBase _dataBase;public DbHelper(DataBase dataBase){_dataBase data…

SpringCloud-实现基于RabbitMQ的消息队列

消息队列是现代分布式系统中常用的通信机制&#xff0c;用于在不同的服务之间传递消息。在Spring Cloud框架中&#xff0c;我们可以利用RabbitMQ实现强大而可靠的消息队列系统。本篇博客将详细介绍如何在Spring Cloud项目中集成RabbitMQ&#xff0c;并创建一个简单的消息队列。…

【Kotlin】类和对象

1 前言 Kotlin 是面向对象编程语言&#xff0c;与 Java 语言类似&#xff0c;都有类、对象、属性、构造函数、成员函数&#xff0c;都有封装、继承、多态三大特性&#xff0c;不同点如下。 Java 有静态&#xff08;static&#xff09;代码块&#xff0c;Kotlin 没有&#xff1…

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API&#xff0c;通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…

博士推荐 | 纤维与聚合物科学博士,功能性纺织品研发主管

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

二分查找【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;二分查找的简单思路&#xff0c;为什么必须在有序的前提下才能使用二分查找&#xff0c;该怎么用C程序来实现二分查找&#xff0c;二分查找的局限性&#x1f440;。 文章目录 1. 题目2. 思路3. 前提条件4. 编写程序 1. 题目 在一个有…

选择性遗忘可以帮助人工智能学得更好?

最近&#xff0c;一些计算机科学家创建了一种更灵活、更灵巧的机器学习模型。诀窍在于&#xff1a;它必须定期忘记它所知道的信息。虽然这种新方法不会取代支撑最大应用程序的庞大模型&#xff0c;但它能揭示这些程序如何理解语言的更多信息。 &#xff08;PS&#xff1a;如果…

日常007:alias给长命令起个简短的别名

alias 命令可以给那些太长的命令起一个简短的别名。便于记忆&#xff0c;提高输入效率。 用法和示例 1. 创建别名 创建别名&#xff0c;使用语法alias new_commandoriginal_command&#xff0c;例如 alias llls -lF使用别名 $ ll total 32 -rw-r--r-- 1 soulio soulio 1…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

【Docker】Node 容器部署及配置参数

Node.js环境标准软件基于Bitnami node 构建。当前版本为20.11.1 你可以通过轻云UC部署工具直接安装部署&#xff0c;也可以手动按如下文档操作&#xff0c;该项目已经全面开源&#xff0c;可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform Q…

解决报错The following packages have unmet dependencies

一、问题描述 终端输入&#xff1a; nvcc -V 提示&#xff1a; Command nvcc not found, but can be installed with:sudo apt install nvidia-cuda-toolkit按照提示安装&#xff0c;终端输入 sudo apt install nvidia-cuda-toolkit&#xff0c;报错内容如下&#xff1a; …

3分钟彻底搞懂Web UI自动化测试之【POM设计模式】

为什么要用POM设计模式 前期&#xff0c;我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本&#xff08;以快递100网站登录举例&#xff09;&#xff1a; import time from selenium import webdriver from selenium.webdriver.common.by import By dri…

Python SSH协议库之paramiko使用详解

概要 在网络编程中,远程操作是一项非常常见的需求,特别是在服务器管理和自动化任务执行方面。Python提供了许多库来实现远程操作,其中Paramiko是一个备受欢迎的选择。Paramiko是一个纯Python编写的SSH协议库,它提供了一种简单而强大的方式来执行远程命令、上传和下载文件等…

YUNBEE云贝-热烈祝贺Guo同学成功通过Oracle 19c OCP认证考试!

恭喜Guo同学在 #Oracle19c OCP 考试中取得了OCP证书&#xff01;该认证是Oracle公司的权威技术标准&#xff0c;适用于有资格为Oracle核心产品提供服务和支持的专业人员。尽管OCP认证考题随着版本变化&#xff0c;并且是全英文考试&#xff0c;对中文习惯的人来说有一定的难度&…