文件最后提交记录最后更新时间
【PR】: 简要描述 Co-authored-by: pan-tong<pantong@huawei.com> # message auto-generated for no-merge-commit merge: !2367 merge feat/plugin-version-compat into master 【PR】: 简要描述 Created-by: pan-tong Commit-by: pan-tong Merged-by: cann-robot Description: # Pull Request ## 描述 新增 host/device compat 插件包基于 **DRV 升级策略 + version + timestamp + checkcode** 的多级装包决策,避免在 host/device 插件包内容已一致时重复下发,并支持版本回退/前进的精准控制。 在 LoadPackageToDeviceByConfig 中识别 compat 插件包后,按以下优先级判定是否真实下发: 1. **DRV 升级策略**:通过 halGetDeviceInfo(MODULE_TYPE_SYSTEM, INFO_TYPE_SWPLUGIN_UPGRADE_FLAG)PluginUpdateStrategy: - PLUGIN_NO_UPDATE:跳过该包; - PLUGIN_FORCE_UPDATE:忽略版本,回落 checkcode(一致仍跳过避免无意义传输); - PLUGIN_NOT_FORCE_UPDATE:进入版本比较。 - DRV 调用失败或返回值不在 [0,2] 范围内:打 TSD_RUN_WARN 并回落到 PLUGIN_NOT_FORCE_UPDATE(走版本比较),流程不拦截;失败结果不缓存,下次仍可重试。 2. **device 侧版本可得性**:device 未上报版本(旧 tsdaemon / 未加载过)时回落 checkcode;host 侧 .ini 缺失或解析失败时跳过下发并打 WARN。 3. **PluginPkgVersionUtil::Compare**:host 新于 device → 装;host 旧于或等于 device → 跳过。 ### 数据通路 - **host 侧 compat 插件包版本采集**:由 PackageProcessConfig::RefreshHostPluginVersionsLoadPackageConfigInfoToDevice 中调用,遍历 configMap_ 仅对 COMPAT_PLUGIN_PATH 的条目解析同名 .ini 文件得到 version/timestamp,结果存入 PackageProcessConfig::hostPluginVersions_,并由 ConstructPkgConfigMsg 写入 host_plugin_versions 字段随 TSD_UPDATE_PACKAGE_PROCESS_CONFIG 一并下发。 - **device 侧版本回传**:device 在收到 TSD_UPDATE_PACKAGE_PROCESS_CONFIG 后,于 TSD_UPDATE_PACKAGE_PROCESS_CONFIG_RSPdevice_plugin_versions 字段回填本地已加载 compat 插件包版本,host 侧 ProcessModeMsgParse::DeviceMsgProcess 收到后调用 HandleDevicePluginVersionRsp 把数据存入 ProcessModeManager::devicePluginVersions_。 ### 工具函数整合 - plugin_pkg_version.cpp 中的 Trim/Split/CompareSegmentNumeric 抽出到 tsd_util_func: - tsd::SplitByChartsd::CompareSegmentNumeric 直接迁出; - 因 tsd_util_func.cpp 已存在仅去空格的 Trim,新增并保留语义上去全部空白字符的 tsd::TrimWhitespace,避免修改既有调用方。 - PluginPkgVersionUtil::ParseIniFile 限制最多解析 10 行,且在拿到 version + timestamp 后立刻 break。 ### Loader 圈复杂度治理 - 将 LoadPackageToDeviceByConfig 的圈复杂度降到 20 以下,抽取两个辅助函数: - GetTrustedBasePathFromDevice:封装 drvHdcGetTrustedBasePathV2 取信任根路径; - LoadSinglePackageToDevice:封装单个包的「是否需要加载 → 取路径 → 计算 hash → compat 版本/策略判定 → checkcode 判定 → 下发」全流程,返回 TSD_StatusT。 - 主函数仅保留「支持性判断 + 取路径 + 遍历配置」骨架,逻辑等价、可读性更佳。 ## 单元测试 - tsd_client_utest:673/673 通过。 - 新增/调整的用例覆盖:IsCompatPluginPackageGetPluginUpdateStrategy(含 DRV 失败/越界 fallback)、ShouldLoadCompatPluginPkg(NoUpdate/Force/ForceHashSame/DeviceVersionEmpty±HashSame/HostNewer/HostOlder/SameVersion/HostIniMissing)、ConstructOpenMsg_DoesNotCarryPluginInfoPluginPkgVersionUtil 解析与比较。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue #582 ## 如何测试 1. 编译构建 runtime,确保 tsd_client_utest 通过; 2. 运行 tsd_client_utest,重点覆盖 LoadPackageToDeviceByConfigGetPluginUpdateStrategyShouldLoadCompatPluginPkgPluginPkgVersionUtil 等用例; 3. host/device 联调场景验证 compat 插件包按版本/策略下发与跳过逻辑。 ![image.png](https://raw.gitcode.com/user-images/assets/8810053/2459b671-bb28-4494-b7bd-ea261f27cf34/image.png 'image.png') ## Self-check - [x] 代码符合贡献指南 - [x] 已构建并通过单元测试 - [x] 提交信息符合规范 See merge request: cann/runtime!236723 小时前
【PR】: 简要描述 Co-authored-by: pan-tong<pantong@huawei.com> # message auto-generated for no-merge-commit merge: !2367 merge feat/plugin-version-compat into master 【PR】: 简要描述 Created-by: pan-tong Commit-by: pan-tong Merged-by: cann-robot Description: # Pull Request ## 描述 新增 host/device compat 插件包基于 **DRV 升级策略 + version + timestamp + checkcode** 的多级装包决策,避免在 host/device 插件包内容已一致时重复下发,并支持版本回退/前进的精准控制。 在 LoadPackageToDeviceByConfig 中识别 compat 插件包后,按以下优先级判定是否真实下发: 1. **DRV 升级策略**:通过 halGetDeviceInfo(MODULE_TYPE_SYSTEM, INFO_TYPE_SWPLUGIN_UPGRADE_FLAG)PluginUpdateStrategy: - PLUGIN_NO_UPDATE:跳过该包; - PLUGIN_FORCE_UPDATE:忽略版本,回落 checkcode(一致仍跳过避免无意义传输); - PLUGIN_NOT_FORCE_UPDATE:进入版本比较。 - DRV 调用失败或返回值不在 [0,2] 范围内:打 TSD_RUN_WARN 并回落到 PLUGIN_NOT_FORCE_UPDATE(走版本比较),流程不拦截;失败结果不缓存,下次仍可重试。 2. **device 侧版本可得性**:device 未上报版本(旧 tsdaemon / 未加载过)时回落 checkcode;host 侧 .ini 缺失或解析失败时跳过下发并打 WARN。 3. **PluginPkgVersionUtil::Compare**:host 新于 device → 装;host 旧于或等于 device → 跳过。 ### 数据通路 - **host 侧 compat 插件包版本采集**:由 PackageProcessConfig::RefreshHostPluginVersionsLoadPackageConfigInfoToDevice 中调用,遍历 configMap_ 仅对 COMPAT_PLUGIN_PATH 的条目解析同名 .ini 文件得到 version/timestamp,结果存入 PackageProcessConfig::hostPluginVersions_,并由 ConstructPkgConfigMsg 写入 host_plugin_versions 字段随 TSD_UPDATE_PACKAGE_PROCESS_CONFIG 一并下发。 - **device 侧版本回传**:device 在收到 TSD_UPDATE_PACKAGE_PROCESS_CONFIG 后,于 TSD_UPDATE_PACKAGE_PROCESS_CONFIG_RSPdevice_plugin_versions 字段回填本地已加载 compat 插件包版本,host 侧 ProcessModeMsgParse::DeviceMsgProcess 收到后调用 HandleDevicePluginVersionRsp 把数据存入 ProcessModeManager::devicePluginVersions_。 ### 工具函数整合 - plugin_pkg_version.cpp 中的 Trim/Split/CompareSegmentNumeric 抽出到 tsd_util_func: - tsd::SplitByChartsd::CompareSegmentNumeric 直接迁出; - 因 tsd_util_func.cpp 已存在仅去空格的 Trim,新增并保留语义上去全部空白字符的 tsd::TrimWhitespace,避免修改既有调用方。 - PluginPkgVersionUtil::ParseIniFile 限制最多解析 10 行,且在拿到 version + timestamp 后立刻 break。 ### Loader 圈复杂度治理 - 将 LoadPackageToDeviceByConfig 的圈复杂度降到 20 以下,抽取两个辅助函数: - GetTrustedBasePathFromDevice:封装 drvHdcGetTrustedBasePathV2 取信任根路径; - LoadSinglePackageToDevice:封装单个包的「是否需要加载 → 取路径 → 计算 hash → compat 版本/策略判定 → checkcode 判定 → 下发」全流程,返回 TSD_StatusT。 - 主函数仅保留「支持性判断 + 取路径 + 遍历配置」骨架,逻辑等价、可读性更佳。 ## 单元测试 - tsd_client_utest:673/673 通过。 - 新增/调整的用例覆盖:IsCompatPluginPackageGetPluginUpdateStrategy(含 DRV 失败/越界 fallback)、ShouldLoadCompatPluginPkg(NoUpdate/Force/ForceHashSame/DeviceVersionEmpty±HashSame/HostNewer/HostOlder/SameVersion/HostIniMissing)、ConstructOpenMsg_DoesNotCarryPluginInfoPluginPkgVersionUtil 解析与比较。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue #582 ## 如何测试 1. 编译构建 runtime,确保 tsd_client_utest 通过; 2. 运行 tsd_client_utest,重点覆盖 LoadPackageToDeviceByConfigGetPluginUpdateStrategyShouldLoadCompatPluginPkgPluginPkgVersionUtil 等用例; 3. host/device 联调场景验证 compat 插件包按版本/策略下发与跳过逻辑。 ![image.png](https://raw.gitcode.com/user-images/assets/8810053/2459b671-bb28-4494-b7bd-ea261f27cf34/image.png 'image.png') ## Self-check - [x] 代码符合贡献指南 - [x] 已构建并通过单元测试 - [x] 提交信息符合规范 See merge request: cann/runtime!236723 小时前