元数据升级失败怎么办?排查指南速看!

小编有话说
MC(租户管理中心)是管理苍穹系统不可或缺的工具,其中有一项重要功能是对苍穹系统的升级部署,从补丁官网下载标准补丁包后,运维人员可以使用它一键完成系统的更新升级,也可通过CI/CD流水线工具自动化部署升级。
苍穹系统的升级主要包括集群静态资源及微服务JAR包的更新、数据中心升级脚本及元数据的部署。每一个环节都必不可少,需要保证升级的准确性。
JAR包升级通常比较顺利,而元数据升级因其部署的复杂性,偶尔会遇到升级失败的情况。当JAR和元数据未同步升级时,会使系统环境中断,整体升级失败。
那遇到元数据升级失败的情况,该如何排查问题呢?本期文章就以小P为例,为大家演示这类问题的排查方法~
1 案例背景
小P在开发环境修改了一个元数据,调整了按钮区的高度后,预期效果应该如下图所示:

图1-调整了按钮区的适合高度
于是提交SVN或Git、启动构建更新测试环境,预览的效果却是下图,按钮区的高度明显大于预期...

图2-更新环境后的预览效果
为了查明具体原因,小P展开了一系列的排查。
2 排查步骤和方法
问题一:元数据没升级成功!升级工具有问题?
苍穹元数据分为设计时元数据和运行时元数据,升级包含设计时部署、运行时重建两个过程。
首先,我们来检查设计时元数据的效果,判断是哪个环节出错,先分别从开发环境和测试环境效果着手。
开发环境的内容区面板设置高度384px,测试环境的内容区面板无高度设置,可以判断,在部署设计时元数据时已发生异常。如下图:

图3-开发环境效果

图4-测试环境效果
接下来,需要找到对应的升级日志,检查这个元数据有没有被更新升级过。检查方法如下:
查找日志并搜索元数据文件
每个环境有独立的升级日志访问地址,找到对应的环境获取对应的升级包,点击进入查看日志,点击“查看详情”查看详细日志,并搜索有问题的元数据数据文件。

图5-查看日志详情并搜索元数据文件
查看是否有 finish字样,或者报错信息
1. 如果有报错,说明元数据没有部署成功,这时通常需要检查提交到SVN上的元数据是否规范完整。
2. 如果有finish字样说明元数据文件确实已经部署过了。
这里搜索的情况是元数据显示finish。日志显示finish代表文件成功升级了。
问题二:文件成功升级了,但是结果不对,是不是升级工具有问题?
苍穹的元数据升级基于元数据文件中的版本号差异,如果版本号和当前环境的元数据一致,则不会被升级。针对这个问题,需要检查元数据版本号的数据,可通过查看dm包中元数据的版本号与数据库中的元数据版本号进行比对,具体步骤如下:
首先,下载并查看dm包中元数据的版本号。
把日志详情中的滚动条拖到最上面,日志中有该dm包的下载地址,下载解压下来,找到问题元数据文件用文本编辑工具打开,找到标签内容。

图6-日志中的dm包的下载地址
然后,比对数据库中的元数据版本号。
在【系统管理】→【查询分析器】中选择元数据库(如果没有元数据库则选择系统库)查询当前环境数据库元数据的版本号进行比对。相关命令如下:
select fversion from t_meta_formdesign where fnumber ='元数据编';

图7-比对数据库中的元数据版本号
结果,发现版本不一致!而且数据库中元数据的创建时间还比较新,那应该确实更新过。出于对DB的信任,小P依然倔强。
问题三:会不会是多份ID相同的元数据先后升级互相覆盖了呢?
元数据的更新机制是通过元数据id进行内容替换,想到开发中常见的ABA问题,会不会是多份ID相同的元数据先后升级互相覆盖了呢?根据这个思考,小P进一步检查。
搜索整个补丁包发现,确实有两个一模一样的元数据文件分别在不同的应用下。一个在ide应用下,一个在frame应用下。进一步查看datamode.xml,发现ide在frame的后面,ide中的元数据覆盖了frame下的这个元数据。

图8-不同应用下的两个一样的元数据文件

图9-查看datamode.xml文件
问题四:“这咋提交了两个一样的元数据到SVN呢”
小P一看提交记录顿时懊悔不已,原来是之
元数据升级失败怎么办?排查指南速看!
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



