Open
feat: 支持通过 feature_basic 裁剪可观测组件 #106
feat: 支持通过 feature_basic 裁剪可观测组件 #106
Open
HuangJiayiAdd on 4 days ago
HuangJiayiCollaborators
4 days ago

当前PR是否有AI参与:

[x] 否

[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入:

支持可观测特性灵活裁剪

修改方案:

支持可观测特性灵活裁剪

验证方案:

支持可观测特性灵活裁剪

测试建议:

支持可观测特性灵活裁剪

自验证报告:

支持可观测特性灵活裁剪

该PR关联的issue

(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #https://gitcode.com/openUBMC/rackmount/issues/1158

希望检视人员了解:

支持可观测特性灵活裁剪

likedislike
Merge blocked
HHuangJiayiCollaborators
4 days ago Created pull request, commit b187ff79
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Set WeliveWelove,DataSculptor,huanghan,aaronlee as approver
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Added label: sig/sig-interface
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

欢迎来到 openUBMC 社区

Hey @PLUS_ONE , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。

联系指引

有疑问可以联系 SIG: sig-interface ,
维护者是: @DataSculptor, @WeliveWelove, @aaronlee, @huanghan ,
优秀贡献者是: @WeliveWelove, @aaronlee .

likedislike
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Added label: openUBMC-cla/yes
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Added label: needs-issue
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

CLA 签署成功

PLUS_ONE, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

关联 Issue 通知

@PLUS_ONE , 提交的PR需要关联issue,指导链接:https://forum.openubmc.cn/t/topic/208
如果已经关联了issue, 但是needs-issue标签仍然存在,你可以在评论 /check-issue 来移除它。

likedislike
Oopenubmc-ci-botCollaborators
4 days ago Added label: ci-running
openubmc-ci-botCollaborators
4 days ago Comments:

CI已开始运行,查看流水线详情:流水线链接

likedislike
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

/ai review

likedislike
atomgit-bot
atomgit-botCollaborators
4 days ago Comments:

代码审查

审查结论

逐文件确认

  • CMakeLists.txt:已审查(新增 option(CONAN_DEFS_FEATURE_BASIC) + 早退),发现 1 处问题(P3)。
  • conanfile.py:已审查(4 个生命周期钩子按 feature_basic 裁剪),发现 1 处问题(P2)。
  • mds/model.json:已审查(5 个模型新增 features: ["basic"]),发现 1 处问题(P3)。
  • mds/service.json:已审查(新增 options.feature_basic,键名 options/description/option/default 拼写均正确,JSON 结构合法),发现 1 处问题(P3)。

发现列表

优先级 文件:行 问题
P2 conanfile.py:7-21 只裁剪了 requirements/generate/build/package,未覆盖 build_requirements(),service.json 中的 build/test 依赖(opentelemetry、libmc4lua、mdb_interface、persistence、lcurl)在裁剪态仍会被解析/构建
P3 CMakeLists.txt:5-8 裁剪判断位于 include(conanbuildinfo.cmake)(第17-19行)之前,若变量由 conan 生成物提供则永不生效,仍会执行 pkg_search_module(... REQUIRED) 强依赖查找
P3 mds/model.json:4(及55/116/140/164) 新增的 features 键未在 mds/schema.json 中声明(该 schema 会被安装发布),codegen 是否识别该键无法自证,存在校验失败或键被静默忽略两种风险
P3 mds/service.json:13-17 feature_basic=true 时构建层"剔除"组件,而模型层 features: ["basic"] 若语义为"basic 集保留",则两层裁剪方向相反,会出现模型/路由存在但实现缺失

整体风险判断

变更面很小(34 行、4 个配置文件),没有发现 P0/P1 级缺陷:CMake 的 return() 位于 project() 之后,目录作用域早退是合法用法;conanfile 的各钩子调用链在 feature_basic=false(默认)时行为完全不变,无回归。主要风险集中在裁剪覆盖不完整与两处新增的 feature 语义是否与框架约定一致:建议合入前重点确认 build_requirements 钩子、CONAN_DEFS_FEATURE_BASIC 的传值方式,以及 mds features 的约定含义,其余为一致性/可维护性层面的待确认项。

类型 数量
🔴 阻塞 0
🟡 建议 3

💬 仅评论


🔍 另有 1 处,仅供参考(不影响合并)

下面这些地方 AI 觉得有点可疑,但把握不大,所以没有当成正式问题,也没有在代码行上留评论。列在这里只是多给你一个视角:觉得有道理可以顺手看看,觉得是误报直接忽略就行。

  • mds/service.json:13 — question: features 标记与 feature_basic 选项的裁剪方向需保持一致
likedislike
Incorrect?
Oopenubmc-ci-botCollaborators
4 days ago Added label: limit_1k_suc
atomgit-bot
atomgit-botCollaborators4 days agoStart code review1
mds/model.json
@@ -1,2 +1,3 @@
11{
22 "ObservabilityService": {
33 "path": "/bmc/kepler/ObservabilityService",
4+ "features": ["basic"],
atomgit-bot
atomgit-bot4 days agoComments:

🔵 Low Priority

变更行:mds/model.json:4/55/116/140/164 新增 "features": ["basic"],但同目录的 mds/schema.json(描述 model.json 的格式,且被 CMakeLists.txt:41 install(FILES mds/schema.json ...) 随组件发布到设备)本次未同步。对 mds 目录做全文检索,schema.json 中不存在任何 "feature" 字样的声明。

失败模式:若 codegen/校验工具按 schema 做严格校验(additionalProperties=false 一类),新增的 features 键会导致 model 校验失败、codegen 直接报错;若 schema 不严格或 codegen 不识别该键,则该键被静默忽略,模型侧裁剪完全不生效——"裁剪可观测组件"只落实到 conan/CMake 一层,路由与 ORM 中的接口仍会生成,造成部署态与模型态不一致。两种结果都不能从 diff 内部自证。

修复方向:确认 mds 代码生成对 features 的支持情况;若支持,请在 mds/schema.json 中补充 features 字段声明,保持 schema 与 model.json 一致;若不支持,则这些新增行无效,应改用框架实际支持的裁剪方式。

建议:核对 mds codegen 是否识别 model 的 features 键;若识别,同步在 mds/schema.json 中声明 features 字段(类型为 string 数组),避免 schema 与 model.json 漂移。

likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators4 days agoStart code review1
CMakeLists.txt
@@ -3,0 +5,4 @@
5+option(CONAN_DEFS_FEATURE_BASIC "Trim observability from the basic feature set" OFF)
6+if (CONAN_DEFS_FEATURE_BASIC)
7+ return()
8+endif()
atomgit-bot
atomgit-bot4 days agoComments:

🔵 Low Priority

变更行:CMakeLists.txt:5-8 在 project() 之后立刻 if (CONAN_DEFS_FEATURE_BASIC) return(),而本文件中所有 conan 侧变量是通过 CMakeLists.txt:17-19 的 include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + conan_basic_setup() 才被引入的(该 include 排在早退之后)。

失败模式(触发条件):只有当 CONAN_DEFS_FEATURE_BASIC 由 conan 的 cmake 生成物(conanbuildinfo.cmake)提供、而非由构建系统以 -DCONAN_DEFS_FEATURE_BASIC=... 缓存变量传入时,第 6 行的判断读到的是 option() 的默认值 OFF,早退永不触发;此时 feature_basic 已让 conanfile.py 跳过 build/package,但如果存在其它直接走 cmake(如源码/IDE/单独 configure 安装)的构建路径,就会继续执行 CMakeLists.txt:10-12 的 find_package(PkgConfig REQUIRED) / pkg_search_module(GLIB REQUIRED glib-2.0) 等强依赖查找,在基础功能集环境里以 “could not find GLIB” 之类的 configure 失败告终,即"裁剪"路径反而构建失败。

修复方向:二选一——(a) 把裁剪判断移到 conanbuildinfo.cmake 引入之后,并用 if(NOT CONAN_DEFS_FEATURE_BASIC) ... endif() 包裹后续全部内容;(b) 若确认变量是由构建系统以 -D 传入的,请在注释中写明该约定,避免后续误认为它可以来自 conanbuildinfo。

建议:确认 CONAN_DEFS_FEATURE_BASIC 的实际传递方式(-D 缓存变量 or conanbuildinfo);若来自 conanbuildinfo,应把该判断移动到第 17-19 行的 conan 引入之后,并用 if(NOT ...) 包裹后续内容而不是提前 return。

likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators4 days agoStart code review1
conanfile.py
@@ -9,0 +18,4 @@
18+ 
19+ def package(self):
20+ if not self.options.get_safe("feature_basic", False):
21+ super().package()
atomgit-bot
atomgit-bot4 days agoComments:

🟡 Medium Priority

变更行:conanfile.py:7-21 只对 requirements/generate/build/package 四个钩子加了 not self.options.get_safe("feature_basic", False) 判断,未覆盖 build_requirements()。

契约与证据链:本 recipe 自身不声明任何 conan 依赖(全文只有 from conanbase import ConanBase 与 package_info: pass),全部依赖来自 ConanBase;而 mds/service.json:19-38 的 dependencies 同时包含 build 类(libmc4lua、mdb_interface、opentelemetry/1.13.0.026)与 test 类(persistence、lcurl)。在 required_conan_version = ">=1.60.0"(conanfile.py:3)的 Conan 1.x 语义下,构建期/测试期依赖必须由 build_requirements() 中的 self.build_requires(...) 注入,因此 build_requirements() 是与 requirements() 并列的另一条依赖入口,本次没有加裁剪。

失败模式:feature_basic=true 时 requirements() 被跳过,但 build_requirements() 仍会执行,opentelemetry/1.13.0、libmc4lua 等仍会被解析、下载,甚至从源码构建;在基础功能集环境中如果缺少这些 recipe/预编译二进制,裁剪构建仍会失败,或者至少达不到“缩短构建、减少依赖”的目的,与 PR 目标不一致。

修复方向:对 build_requirements() 施加同一判断(若 ConanBase 还有其它依赖注入入口,如 config_options/configure,一并核对),并把判断收敛到一个属性里避免四处重复。

建议:新增 def build_requirements(self): if not self.options.get_safe("feature_basic", False): super().build_requirements(),与 requirements/build/package 保持一致;同时确认 ConanBase 读取的 mds/service.json dependencies 在裁剪态下不会通过其它钩子(config_options/configure)再次注入依赖。

likedislike
Incorrect?
Oopenubmc-ci-botCollaborators
4 days ago Removed label: ci-running
openubmc-ci-botCollaborators
4 days ago Comments:
任务名称结果
pre-commit检查✅ SUCCESS
PR描述检查❌ FAILED
防投毒检查✅ SUCCESS
开源合规检查✅ SUCCESS
编译构建✅ SUCCESS
UT测试✅ SUCCESS
IT测试✅ SUCCESS
代码覆盖率✅ SUCCESS
依赖校验✅ SUCCESS
ipmi修改✅ SUCCESS
修改行数检查✅ SUCCESS
likedislike
Oopenubmc-ci-botCollaborators
4 days ago Added label: ci-failed
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Added label: unresolved-reviews
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

注意

当前PR有 3 条评论意见. 其中 3 条未处理完毕. 全部处理完后, 请评论 /check-pr 进行检查. 😄

likedislike
openUBMC-robot
openUBMC-robotCollaborators
4 days ago Comments:

注意

当前PR有 3 条评论意见. 其中 3 条未处理完毕. 全部处理完后, 请评论 /check-pr 进行检查. 😄

likedislike
HHuangJiayiCollaborators
4 days ago Modify description of pull request
openUBMC-robotopenUBMC-robotCollaborators
4 days ago Removed label: needs-issue
HHuangJiayiCollaborators
4 days ago Resolved final issue
Oopenubmc-ci-botCollaborators
4 days ago Removed label: ci-failed
openubmc-ci-botCollaborators
4 days ago Comments:
任务名称结果
pre-commit检查✅ SUCCESS
PR描述检查✅ SUCCESS
防投毒检查✅ SUCCESS
开源合规检查✅ SUCCESS
编译构建✅ SUCCESS
UT测试✅ SUCCESS
IT测试✅ SUCCESS
代码覆盖率✅ SUCCESS
依赖校验✅ SUCCESS
ipmi修改✅ SUCCESS
修改行数检查✅ SUCCESS
likedislike
Oopenubmc-ci-botCollaborators
4 days ago Added label: ci-successful