Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 PhoenixVang 的贡献)变更摘要
此 PR 旨在使 RH2D(Pipeline H2D)功能支持在 URMA mock 模式下编译,即无需真实 liburma.so SDK 即可完成构建。核心思路是打破 BUILD_PIPLN_H2D 对 BUILD_WITH_URMA 的硬依赖,允许 BUILD_WITH_URMA_MOCK 作为替代后端;同时通过条件编译使相关源文件在 mock 模式下引用 urma_abi_compat.h 而非真实的 urma_api.h,并为第三方库 MLCacheDirect 提供补丁以适配 mock ABI。
主要改动
-
解耦
BUILD_PIPLN_H2D与BUILD_WITH_URMA的强制绑定:在BUILD.bazel和bazel/sdk/root.BUILD.bazel中,enable_pipeline_h2d的define_values移除了对enable_urma的依赖;cmake/dependency.cmake中BUILD_PIPLN_H2D的前置条件从仅允许BUILD_WITH_URMA扩展为允许BUILD_WITH_URMA或BUILD_WITH_URMA_MOCK,并为 mock 模式添加USE_URMA_MOCK编译宏。 -
新增
pipeline_h2d_mockBazel 配置:在.bazelrc中新增build:pipeline_h2d_mock配置,继承urma_mock并同时启用enable_pipeline_h2d和mock_mode;同时扩展build:urma_mock添加-DUSE_URMA和-DUSE_URMA_MOCK编译宏。 -
条件编译切换 URMA 头文件:
chunk_manager.cpp、chunk_manager.h、os_transport_pipeline_common_api.h、os_transport_pipeline_types.h四个文件通过#ifdef USE_URMA_MOCK分支引入datasystem/common/urma_mock/abi/urma_abi_compat.h替代ub/umdk/urma/urma_api.h,并在 Bazel 构建文件中为相关ds_cc_library目标添加对urma_abi_compat的 select 依赖。 -
urma_abi_compat.h增加防重复定义宏:新增#define URMA_ABI_COMPAT_H,防止MLCacheDirect的基础头文件在 mock 模式下重复定义共享的 URMA 类型。 -
MLCacheDirect第三方库适配 mock 编译:在bazel/ds_deps.bzl中为setup_mlcachedirect添加补丁应用;cmake/external_libs/mlcachedirect.cmake中在 mock 模式下自动检测并打补丁、追加urma_mock_backend.c源文件、设置USE_URMA_MOCK编译定义及 mock 头文件路径,且不再链接真实URMA_LIBRARY;新增补丁文件urma_mock_rh2d_compile.patch为MLCacheDirect的 mock ABI 补充缺失的urma_send_wr_t结构体、flag联合体字段及URMA_ENOMEM/URMA_OPC_SEND_IMM宏。 -
构建脚本适配:
scripts/build_bazel.sh在BUILD_PIPLN_H2D与BUILD_WITH_URMA_MOCK同时开启时选用pipeline_h2d_mock配置,且不再重复添加urma_mock;scripts/build_common.sh的normalize_build_options在BUILD_WITH_URMA_MOCK开启时不再强制启用BUILD_WITH_URMA。


代码审查
配置链检查完毕。现在生成最终报告。
审查总结
本次审查覆盖了全部 8 个变更文件:
| 文件 | 审查结果 |
|---|---|
.bazelrc |
发现 1 个问题(P3) |
BUILD.bazel |
无问题 |
bazel/ds_deps.bzl |
发现 1 个问题(P2) |
bazel/sdk/root.BUILD.bazel |
无问题 |
cmake/dependency.cmake |
发现 1 个问题(P2) |
cmake/external_libs/mlcachedirect.cmake |
无问题 |
scripts/build_bazel.sh |
无问题 |
scripts/build_common.sh |
无问题 |
按严重度统计:
- P0:0
- P1:0
- P2:2 个(Bazel 无条件补丁、CMake 缺少 USE_URMA 定义)
- P3:1 个(无引用的
mock_modedefine)
整体风险判断:中等。两个 P2 问题是 Bazel / CMake 构建系统之间的行为不一致,可能导致两套构建产出行为不同的二进制文件;其中无条件补丁问题可能影响非 mock 生产构建的 MLCacheDirect 编译结果。P3 问题为无效配置残留,影响极低。建议在合并前解决两个 P2 不一致性。
所有文件均已审查完毕。以下为我的最终分析:
审查总结
| 优先级 | 数量 | 说明 |
|---|---|---|
| P0 | 2 | BUILD.bazel 中两个 target 缺少 USE_URMA_MOCK define |
| P1–P3 | 0 | 无其他问题 |
逐文件确认:
| 文件 | 审查结论 |
|---|---|
src/datasystem/common/os_transport_pipeline/BUILD.bazel |
2 个 P0 问题:os_transport_pipeline 和 os_transport_pipeline_api 两个 target 均缺少 USE_URMA_MOCK define,导致 mock 模式下编译失败 |
src/datasystem/common/os_transport_pipeline/chunk_manager.cpp |
无问题:#ifdef USE_URMA_MOCK 守卫及 include 路径正确 |
src/datasystem/common/os_transport_pipeline/chunk_manager.h |
无问题:守卫及 include 路径正确 |
src/datasystem/common/os_transport_pipeline/os_transport_pipeline_common_api.h |
无问题:守卫正确,EOF 换行修复无害 |
src/datasystem/common/os_transport_pipeline/os_transport_pipeline_types.h |
无问题:嵌套 #ifdef 结构正确(外层 BUILD_PIPLN_H2D,内层 USE_URMA_MOCK) |
src/datasystem/common/urma_mock/abi/urma_abi_compat.h |
无问题:#define URMA_ABI_COMPAT_H 位置正确,位于自身 include guard 内部 |
third_party/patches/mlcachedirect/BUILD.bazel |
无问题:简单干净的 exports_files |
third_party/patches/mlcachedirect/urma_mock_rh2d_compile.patch |
无问题:标准 unified diff 格式,内容与变更目标一致 |
整体风险评估: 该变更在结构设计上是正确的——通过条件编译和依赖选择来支持 URMA mock。但存在一个关键的构建配置遗漏:BUILD.bazel 中添加了 urma_abi_compat 依赖,却未同步定义 USE_URMA_MOCK 宏,导致 enable_urma_mock 模式下所有 #ifdef USE_URMA_MOCK 守卫会走向错误的 #else 分支,引发编译失败。这是一个阻塞性问题,必须在合入前修复。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 1 |
⛔ 需要修改


/pr-check


/check-pr


【OpenYuanRong Actor 冒烟 · PR 验证报告】
✅ 总结论:通过(共 1 个环境/用例问题,C++ 1 个(单语言阈值 ≤10),请测试人员及时优化)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#1979
分支:master
提交:59e08a9a2bd3a03e94343b82d8f10cc7bc7e1bdd
作者:wangzhiyong41@huawei.com
操作:merge
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
分语言汇总
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
语言 总用例 成功 失败 跳过 通过率
C++ 44 43 1 0 97.7%
Python 90 90 0 0 100.0%
Java 26 26 0 0 100.0%
合计 160 159 1 0 99.4%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
失败类型分布
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
测试用例问题:1 例
代码BUG:0 例
环境问题:0 例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
代码BUG失败用例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(无代码BUG分类数据;若存在失败用例,请检查 Agent 分析报告是否完整生成)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
环境/用例问题提醒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 【测试人员请及时优化用例】
以下问题判定为环境问题或测试用例问题,共 1 个(C++ 1 个(单语言阈值 ≤10)):
- 测试用例问题:1 个
- C++: ExitTest.cpp_exit_oncloud_001
请测试人员尽快:
- 排查并修复测试环境配置/依赖问题
- 修正预期错误或设计不合理的测试用例
- 补充缺失的测试数据或前置条件
- 在后续迭代中持续优化,避免同类问题累积
Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/OpenYR_Actor_Smoke_Process_X86/568/


这是什么类型的PR?
必须是以下之一:
/kind feat (新增功能)
1. 问题背景 / 问题现象
RH2D 原构建流程依赖真实 URMA SDK。在未安装 URMA SDK 的开发及 CI 环境中,Bazel 会因找不到 ub/umdk/urma/urma_api.h 编译失败,CMake 使用 URMA mock 时也会因构建宏和依赖传递不完整出现 URMA 类型未声明,导致 RH2D 无法进行无硬件环境下的持续编译看护。
2. 修改方案 / 解决方案
打通 CMake 和 Bazel 的 RH2D + URMA mock 构建路径:RH2D 在 mock 模式下引用 datasystem 的 URMA mock ABI,MLCacheDirect 使用自身 mock backend,并通过兼容补丁补齐 RH2D 所需的 mock ABI 定义。同时处理两套 mock 头文件的重复定义问题,保留原有真实 URMA 构建路径不变,实现无 URMA 环境下的 RH2D 编译看护。
修改文件清单:
.bazelrcpipeline_h2d_mock配置,组合启用 RH2D、URMA mock 和 mock 模式编译宏。BUILD.bazelbazel/sdk/root.BUILD.bazelbazel/ds_deps.bzlcmake/dependency.cmakeUSE_URMA、USE_URMA_MOCK编译宏并校验二者互斥。cmake/external_libs/mlcachedirect.cmakescripts/build_common.shscripts/build_bazel.shRH2D + URMA mock参数映射到pipeline_h2d_mock,避免重复或冲突的 Bazel 配置。src/datasystem/common/os_transport_pipeline/BUILD.bazelsrc/datasystem/common/os_transport_pipeline/chunk_manager.cppsrc/datasystem/common/os_transport_pipeline/chunk_manager.hurma_api.h。src/datasystem/common/os_transport_pipeline/os_transport_pipeline_common_api.hsrc/datasystem/common/os_transport_pipeline/os_transport_pipeline_types.hsrc/datasystem/common/urma_mock/BUILD.bazelsrc/datasystem/common/urma_mock/abi/urma_abi_compat.hthird_party/patches/mlcachedirect/BUILD.bazelthird_party/patches/mlcachedirect/urma_mock_rh2d_compile.patch3. 验证方案
4. 验证结果
1、编译验证
(1)cmake编译
验证点1:编译不带rh2d+使用urma mock(环境上没有urma相关rpm)
验证点2:编译不带rh2d+使用urma
验证点3:编译带rh2d+使用urma mock(环境上没有urma相关rpm)
验证点4:编译带rh2d+使用urma
(2)bazel编译
验证点1:编译不带rh2d+使用urma mock(环境上没有urma相关rpm)
验证点2:编译不带rh2d+使用urma
验证点3:编译带rh2d+使用urma mock(环境上没有urma相关rpm)
验证点4:编译带rh2d+使用urma
2、功能验证
(1)基础功能验证
(2)RH2D功能验证
5. 待处理项(如有)
无
6. 自检清单
方案评审
构建
正确性
内存
并发
性能
安全
可观测性
日志
前向兼容
对外接口变更
Fixes #
Mermaid 图注意事项
GitCode 的 mermaid 版本限制:
禁用语法:
note for/Note over— 均不支持,用<<stereotype>>替代(类图)或在 alt 分支内用消息替代(时序图)::在 participant 名称中 — 解析器误认为命名空间限定符,改为空格分隔()在 alt/else 标签中 — 解析器误认为函数调用,改为-分隔消息文本限制:
(){}<>[]等括号类字符—等 Unicode 特殊字符,用-或:替代箭头语法:
->>实线箭头,-->>虚线箭头在旧版 mermaid 可能渲染异常--|>(继承) 和..|>(实现)