已合并
fix(RH2D):新增RH2D支持urma mock编译 #1979
fix(RH2D):新增RH2D支持urma mock编译 #1979
已合并
PhoenixVang创建于 11 天前
PhoenixVang
11 天前

这是什么类型的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 编译看护。

修改文件清单:

文件 变更说明
.bazelrc 新增 pipeline_h2d_mock 配置,组合启用 RH2D、URMA mock 和 mock 模式编译宏。
BUILD.bazel 调整 RH2D 配置判定,使 RH2D 不再强依赖真实 URMA 配置,可由 mock 配置独立启用。
bazel/sdk/root.BUILD.bazel 同步 SDK Bazel 工作区的 RH2D 配置判定,保证外部工作区使用一致。
bazel/ds_deps.bzl Bazel 拉取 MLCacheDirect 时应用 RH2D mock ABI 兼容补丁。
cmake/dependency.cmake 允许 RH2D 使用真实 URMA 或 URMA mock 后端;mock 模式补充 USE_URMAUSE_URMA_MOCK 编译宏并校验二者互斥。
cmake/external_libs/mlcachedirect.cmake CMake mock 模式下应用 MLCacheDirect 兼容补丁,编译其 mock backend,并移除对真实 URMA 库的链接依赖。
scripts/build_common.sh 规范 RH2D、真实 URMA 和 URMA mock 参数组合,避免已选择 mock 时再次自动启用真实 URMA。
scripts/build_bazel.sh RH2D + URMA mock 参数映射到 pipeline_h2d_mock,避免重复或冲突的 Bazel 配置。
src/datasystem/common/os_transport_pipeline/BUILD.bazel 为 RH2D 主库和公共 API 目标补充 datasystem URMA mock ABI 依赖。
src/datasystem/common/os_transport_pipeline/chunk_manager.cpp mock 模式引用 datasystem 的 URMA ABI 兼容头,真实 URMA 模式继续引用 SDK 头文件。
src/datasystem/common/os_transport_pipeline/chunk_manager.h mock 模式引用 datasystem 的 URMA ABI 兼容头,避免无 SDK 环境找不到 urma_api.h
src/datasystem/common/os_transport_pipeline/os_transport_pipeline_common_api.h 为 RH2D 公共接口增加真实 URMA/mock ABI 的条件头文件引用。
src/datasystem/common/os_transport_pipeline/os_transport_pipeline_types.h 为 RH2D 类型定义增加真实 URMA/mock ABI 的条件头文件引用。
src/datasystem/common/urma_mock/BUILD.bazel 导出 datasystem URMA mock ABI 头并提供可复用的 Bazel library target。
src/datasystem/common/urma_mock/abi/urma_abi_compat.h 增加与 MLCacheDirect mock ABI 的头文件保护兼容,避免两套 mock 共存时重复定义 URMA 类型。
third_party/patches/mlcachedirect/BUILD.bazel 将 MLCacheDirect RH2D mock 兼容补丁导出给 Bazel 外部依赖规则使用。
third_party/patches/mlcachedirect/urma_mock_rh2d_compile.patch 补齐 MLCacheDirect 0.1.6 mock ABI 中 RH2D 编译所需的错误码、SEND_IMM 操作码、完成标志和 send work request 类型。

3. 验证方案

  • 编译:bazel + cmake 双编译通过(同时需要覆盖是否urma mock)
  • 部署:部署到测试环境的具体步骤(dscli / 配置文件 / ETCD 地址),验证基础连通性
  • 测试:只涉及urma mock相关修改,验证基础功能。

4. 验证结果

1、编译验证
(1)cmake编译
验证点1:编译不带rh2d+使用urma mock(环境上没有urma相关rpm)

adding 'openyuanrong_datasystem-0.9.2.dist-info/METADATA'
adding 'openyuanrong_datasystem-0.9.2.dist-info/WHEEL'
adding 'openyuanrong_datasystem-0.9.2.dist-info/entry_points.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/top_level.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/RECORD'
removing build/bdist.linux-aarch64/wheel
---- [TIMER] Build source: 266 seconds
/home/wzy/0810/yuanrong-datasystem/build
-- build datasystem success!
---- [TIMER] Total use time: 303 seconds
[root@worker1 yuanrong-datasystem]# bash build.sh -b cmake -j 200 -X off -s off -U on -P on -i on

验证点2:编译不带rh2d+使用urma

adding 'openyuanrong_datasystem-0.9.2.dist-info/METADATA'
adding 'openyuanrong_datasystem-0.9.2.dist-info/WHEEL'
adding 'openyuanrong_datasystem-0.9.2.dist-info/entry_points.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/top_level.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/RECORD'
removing build/bdist.linux-aarch64/wheel
---- [TIMER] Build source: 382 seconds
/home/wzy/code/0810mock/yuanrong-datasystem/build
-- build datasystem success!
---- [TIMER] Total use time: 416 seconds
[root@master yuanrong-datasystem]# bash build.sh -b cmake -j 200 -X off -s off -M on -P on -i on

验证点3:编译带rh2d+使用urma mock(环境上没有urma相关rpm)

adding 'openyuanrong_datasystem-0.9.2.dist-info/WHEEL'
adding 'openyuanrong_datasystem-0.9.2.dist-info/entry_points.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/top_level.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/RECORD'
removing build/bdist.linux-aarch64/wheel
---- [TIMER] Build source: 263 seconds
/home/wzy/0810/yuanrong-datasystem/build
-- build datasystem success!
---- [TIMER] Total use time: 300 seconds
[root@worker1 yuanrong-datasystem]# bash build.sh -b cmake -j 200 -X off -s off -U on -P on -T on -i on

验证点4:编译带rh2d+使用urma

adding 'yr/datasystem/lib/libzmq.so.5'
adding 'openyuanrong_datasystem-0.9.2.dist-info/METADATA'
adding 'openyuanrong_datasystem-0.9.2.dist-info/WHEEL'
adding 'openyuanrong_datasystem-0.9.2.dist-info/entry_points.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/top_level.txt'
adding 'openyuanrong_datasystem-0.9.2.dist-info/RECORD'
removing build/bdist.linux-aarch64/wheel
---- [TIMER] Build source: 260 seconds
/home/wzy/code/0810mock/yuanrong-datasystem/build
-- build datasystem success!
---- [TIMER] Total use time: 317 seconds
[root@master yuanrong-datasystem]# bash build.sh -b cmake -j 200 -X off -s off -M on -P on  -T on -i on

(2)bazel编译
验证点1:编译不带rh2d+使用urma mock(环境上没有urma相关rpm)

INFO: Found 5 targets...
INFO: Elapsed time: 201.018s, Critical Path: 95.96s
INFO: 4444 processes: 8 internal, 4436 linux-sandbox.
INFO: Build completed successfully, 4444 total actions
---- [TIMER] Build source: 201 seconds
-- installing bazel outputs to /home/wzy/0810mock/yuanrong-datasystem/output...
-- copied wheel: openyuanrong_datasystem-0.9.2-cp311-cp311-manylinux_2_38_aarch64.whl
-- bazel install done.
-- build datasystem (bazel) success!
---- [TIMER] Total use time: 222 seconds
[root@master yuanrong-datasystem]# bash build.sh -b bazel -j 200 -X off -s off -U on -P on  -i on

验证点2:编译不带rh2d+使用urma

INFO: Found 5 targets...
INFO: Elapsed time: 408.144s, Critical Path: 113.92s
INFO: 8265 processes: 3065 internal, 5200 linux-sandbox.
INFO: Build completed successfully, 8265 total actions
---- [TIMER] Build source: 408 seconds
-- installing bazel outputs to /home/wzy/code/0810mock/yuanrong-datasystem/output...
-- copied wheel: openyuanrong_datasystem-0.9.2-cp311-cp311-manylinux_2_38_aarch64.whl
-- bazel install done.
-- build datasystem (bazel) success!
---- [TIMER] Total use time: 425 seconds
[root@master yuanrong-datasystem]# bash build.sh -b bazel -j 200 -X off -s off -M on -P on -i on

验证点3:编译带rh2d+使用urma mock(环境上没有urma相关rpm)

INFO: Found 5 targets...
INFO: Elapsed time: 287.187s, Critical Path: 130.43s
INFO: 8302 processes: 3087 internal, 5215 linux-sandbox.
INFO: Build completed successfully, 8302 total actions
---- [TIMER] Build source: 288 seconds
-- installing bazel outputs to /home/wzy/0810mock/yuanrong-datasystem/output...
-- copied wheel: openyuanrong_datasystem-0.9.2-cp311-cp311-manylinux_2_38_aarch64.whl
-- bazel install done.
-- build datasystem (bazel) success!
---- [TIMER] Total use time: 308 seconds
[root@master yuanrong-datasystem]# bash build.sh -b bazel -j 200 -X off -s off -U on -P on -T on -i on

验证点4:编译带rh2d+使用urma

INFO: Found 5 targets...
INFO: Elapsed time: 164.223s, Critical Path: 83.48s
INFO: 4485 processes: 35 internal, 4450 linux-sandbox.
INFO: Build completed successfully, 4485 total actions
---- [TIMER] Build source: 164 seconds
-- installing bazel outputs to /home/wzy/code/0810mock/yuanrong-datasystem/output...
-- copied wheel: openyuanrong_datasystem-0.9.2-cp311-cp311-manylinux_2_38_aarch64.whl
-- bazel install done.
-- build datasystem (bazel) success!
---- [TIMER] Total use time: 184 seconds
[root@master yuanrong-datasystem]# bash build.sh -b bazel -j 200 -X off -s off -M on -P on  -T on -i on

2、功能验证
(1)基础功能验证

[root@client-gpu-d64587cf-7m5w9 share]# numactl -N 0 -m 0 /root/os_transport/pipeline_h2d 192.168.235.180 set --count 1 --value_prefix a --value_size 8388608 --gpu_id 0 --thread 1 --port 28681
[Main] Starting with 1 thread(s), target GPU: 0, port: 28681, command=set, enable_local_cache=true, enable_client_direct_rh2d=false, client_direct_thread_num=32, fast_transport_mem_size=2147483648
[Main] Shared KVClient initialized once: 0x15103520, host=192.168.235.180, port=28681, gpu=0
[T0] Using shared KVClient instance: 0x15103520 (GPU: 0)
[T0] generate data ok, count=1, value_prefix='aT0', value_size=8388608
[T0] Set 1 keys completed.[T0] 
[T0] Set keys: 0_T0
[Main] All threads completed.
[root@client-gpu-d64587cf-7m5w9 share]# numactl -N 0 -m 0 /root/os_transport/pipeline_h2d 192.168.219.78  originget --count 1 --value_prefix a --value_size 8388608 --gpu_id 0 --thread 1 --port 28681
[Main] Starting with 1 thread(s), target GPU: 0, port: 28681, command=originget, enable_local_cache=true, enable_client_direct_rh2d=false, client_direct_thread_num=32, fast_transport_mem_size=2147483648
[Main] Shared KVClient initialized once: 0xc723520, host=192.168.219.78, port=28681, gpu=0
[T0] Using shared KVClient instance: 0xc723520 (GPU: 0)
[T0] generate data ok, count=1, value_prefix='aT0', value_size=8388608
[T0] Allocated device memory at: 0xffeeb4400000
[T0] Get: 1859 us
[T0] H2D: 358 us
[T0] OriginGet: 2235 us
[Main] All threads completed.
[root@client-gpu-d64587cf-7m5w9 share]# 

(2)RH2D功能验证

[root@client-gpu-d64587cf-7m5w9 share]# numactl -N 0 -m 0 /root/os_transport/pipeline_h2d 192.168.235.180 set --count 1 --value_prefix a --value_size 8388608 --gpu_id 0 --thread 1 --port 28681
[Main] Starting with 1 thread(s), target GPU: 0, port: 28681, command=set, enable_local_cache=true, enable_client_direct_rh2d=false, client_direct_thread_num=32, fast_transport_mem_size=2147483648
[Main] Shared KVClient initialized once: 0xc963520, host=192.168.235.180, port=28681, gpu=0
[T0] Using shared KVClient instance: 0xc963520 (GPU: 0)
[T0] generate data ok, count=1, value_prefix='aT0', value_size=8388608
[T0] Set 1 keys completed.[T0] 
[T0] Set keys: 0_T0
[Main] All threads completed.
[root@client-gpu-d64587cf-7m5w9 share]# numactl -N 0 -m 0 /root/os_transport/pipeline_h2d 192.168.219.78  get --count 1 --value_prefix a --value_size 8388608 --gpu_id 0 --thread 1 --port 28681
[Main] Starting with 1 thread(s), target GPU: 0, port: 28681, command=get, enable_local_cache=true, enable_client_direct_rh2d=false, client_direct_thread_num=32, fast_transport_mem_size=2147483648
[Main] Shared KVClient initialized once: 0x2adf3520, host=192.168.219.78, port=28681, gpu=0
[T0] Using shared KVClient instance: 0x2adf3520 (GPU: 0)
[T0] generate data ok, count=1, value_prefix='aT0', value_size=8388608
[T0] Using GPU 0
[T0] Allocated device memory at: 0xffedc7800000
[T0] MGETH2D_SUBMIT: 2260 us
[T0] MGETH2D_COPY_WAIT: 97 us
[T0] MGETH2D: 2373 us
[T0] MGetH2D success!
[T0] CheckData success!
[Main] All threads completed.
[root@client-gpu-d64587cf-7m5w9 share]# 

5. 待处理项(如有)

6. 自检清单

方案评审

构建

正确性

内存

并发

性能

安全

可观测性

日志

前向兼容

对外接口变更


Fixes #


Mermaid 图注意事项

GitCode 的 mermaid 版本限制:

禁用语法

  • note for / Note over — 均不支持,用 <<stereotype>> 替代(类图)或在 alt 分支内用消息替代(时序图)
  • :: 在 participant 名称中 — 解析器误认为命名空间限定符,改为空格分隔
  • () 在 alt/else 标签中 — 解析器误认为函数调用,改为 - 分隔

消息文本限制

  • 禁止 () {} <> [] 等括号类字符
  • 禁止 em dash 等 Unicode 特殊字符,用 -: 替代
  • 消息尽量简短英文

箭头语法

  • 统一用 ->> 实线箭头,-->> 虚线箭头在旧版 mermaid 可能渲染异常
  • 类图关系用 --|> (继承) 和 ..|> (实现)
  • 类图中禁止泛型参数,用文字描述替代

likedislike
Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 PhoenixVang 的贡献)
PPhoenixVang
11 天前 创建了 pull request,commit 13a35b3e
atomgit-bot
atomgit-bot
11 天前 评论:

变更摘要

此 PR 旨在使 RH2D(Pipeline H2D)功能支持在 URMA mock 模式下编译,即无需真实 liburma.so SDK 即可完成构建。核心思路是打破 BUILD_PIPLN_H2DBUILD_WITH_URMA 的硬依赖,允许 BUILD_WITH_URMA_MOCK 作为替代后端;同时通过条件编译使相关源文件在 mock 模式下引用 urma_abi_compat.h 而非真实的 urma_api.h,并为第三方库 MLCacheDirect 提供补丁以适配 mock ABI。

主要改动

  • 解耦 BUILD_PIPLN_H2DBUILD_WITH_URMA 的强制绑定:在 BUILD.bazelbazel/sdk/root.BUILD.bazel 中,enable_pipeline_h2ddefine_values 移除了对 enable_urma 的依赖;cmake/dependency.cmakeBUILD_PIPLN_H2D 的前置条件从仅允许 BUILD_WITH_URMA 扩展为允许 BUILD_WITH_URMABUILD_WITH_URMA_MOCK,并为 mock 模式添加 USE_URMA_MOCK 编译宏。

  • 新增 pipeline_h2d_mock Bazel 配置:在 .bazelrc 中新增 build:pipeline_h2d_mock 配置,继承 urma_mock 并同时启用 enable_pipeline_h2dmock_mode;同时扩展 build:urma_mock 添加 -DUSE_URMA-DUSE_URMA_MOCK 编译宏。

  • 条件编译切换 URMA 头文件chunk_manager.cppchunk_manager.hos_transport_pipeline_common_api.hos_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.patchMLCacheDirect 的 mock ABI 补充缺失的 urma_send_wr_t 结构体、flag 联合体字段及 URMA_ENOMEM/URMA_OPC_SEND_IMM 宏。

  • 构建脚本适配scripts/build_bazel.shBUILD_PIPLN_H2DBUILD_WITH_URMA_MOCK 同时开启时选用 pipeline_h2d_mock 配置,且不再重复添加 urma_mockscripts/build_common.shnormalize_build_optionsBUILD_WITH_URMA_MOCK 开启时不再强制启用 BUILD_WITH_URMA

likedislike
atomgit-bot
atomgit-bot
11 天前 评论:

代码审查

配置链检查完毕。现在生成最终报告。


审查总结

本次审查覆盖了全部 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_mode define)

整体风险判断:中等。两个 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_pipelineos_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

⛔ 需要修改

likedislike
openeuler-ci-botopeneuler-ci-bot成员
11 天前 将luozhancheng,liangyi1234,yuchaow,yche-huawei,slichengsong,iewauh,tianyi-huawei设为审查人
openeuler-ci-botopeneuler-ci-bot成员
11 天前 添加了label:sig/sig-YuanRong
此处折叠了109条消息 查看更多
Zzhujunliang成员
8 天前 解决了最后一个问题
PhoenixVang
8 天前 评论:

/pr-check

likedislike
PhoenixVang
8 天前 评论:

/check-pr

likedislike
openeuler-ci-botopeneuler-ci-bot成员
8 天前 合入了pull request,合并节点 SHA:23e15fd15015d8f7531c009be422680e0d169684
yuanrong-ci-robot
8 天前 评论:

【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

请测试人员尽快:

  1. 排查并修复测试环境配置/依赖问题
  2. 修正预期错误或设计不合理的测试用例
  3. 补充缺失的测试数据或前置条件
  4. 在后续迭代中持续优化,避免同类问题累积

Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/OpenYR_Actor_Smoke_Process_X86/568/

likedislike