Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 yangxiaogang14 的贡献)变更摘要
本 PR 将 QueryAndGet 从 Master 服务下沉到元数据归属 Worker(关联 RFC #1101):Client 按元数据归属 Worker 分组调用 WorkerOCService.QueryAndGet,本地命中时通过 SHM、UB 或 TCP 内联直读数据,本地 miss 时仅返回对象位置、由 Client 继续复用现有 ReplicaReader 二阶段读取,从而减少快路径 RPC 跳转和数据拷贝,同时保持 KVClient::Get 对外语义不变。对应地,Proto/RPC 定义从 master_object.proto 迁移到 object_posix.proto,Master 侧的查询处理与本地数据读取逻辑被移除,WorkerRpcClient 改走 Worker control stub,并新增 Worker 端 access 日志、分阶段慢日志及配套 UT/ST 用例。
主要改动
- Proto/RPC 下沉到 Worker:
master_object.proto删除 Master 侧QueryAndGetReqPb/QueryAndGetRspPb及其 RPC,object_posix.proto新增 Worker 侧按序结果、位置、SHM 描述(QueryAndGetShmInfoPb)以及 TCP/UB/SHM transport oneof,并在WorkerOCService注册带 unary socket、attachment 与 URMA 能力的QueryAndGetRPC;WorkerRpcClient中InvokeQueryAndGet由masterStub_改为调用controlStub_。 - Client 端三通道选择与回退:
object_metadata_client.cpp按拓扑在InitializeInlineRequest中优先构造 SHM 请求(PrepareShmInlineRequest),SHM 不可用且开启 URMA 时尝试 UB,否则回退 TCP(SwitchInlineRequestToTcp);TCP 内联数据新增 payload 索引、累计大小与对象大小一致性校验,UB 按 key 分配独立接收 buffer;shm_connection.*新增BuildQueryAndGetResult,shm_transporter.h新增AcquireSession/InvalidateSession用于会话复用与失效。 - Worker 端实现:新增
worker_query_and_get_impl.*实现本地驻留对象探测、TCP/UB/SHM 三通道编码、miss 位置查询、分阶段慢日志,以及响应未送达时 SHM 引用回滚;worker_oc_service_get_impl.*新增无副作用的TryAcquireLocalObject和基于PureQueryMeta的QueryObjectLocations(含QueryPureMetadataGroup与重定向处理)。 - Master 侧清理:
master_oc_service_impl.*与oc_metadata_manager.*删除 MasterQueryAndGet处理及本地数据读取逻辑;worker_worker_oc_api.*删除GetObjectRemoteForQueryAndGet,worker_worker_oc_service_impl.*移除贯穿GetObjectRemote/LoadPayloadAndFillResponse/LoadSpilledObjectData的isQueryAndGet分支参数。 - 可观测性与测试:
access_point.def新增DS_POSIX_QUERY_AND_GETaccess 记录点;ds_trace_bottleneck.py及对应测试脚本将 QueryAndGet 超时归因从MasterOCService.QueryAndGet更新为WorkerOCService.QueryAndGet;ST 新增同机 SHM 命中、跨机 UB/TCP 命中、metadata miss 与混合批量保序路径,UT 覆盖请求编码、回退、重试与异常响应。


【OpenYuanRong PROCESS 部署 Actor 冒烟 · PR验证报告】
✅ 总结论:通过
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#2143
分支:master
提交:13caa6db5898e78e6a51eb17fa164a132b159645
作者:yangxiaogang14@huawei.com
操作:merge
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
分语言汇总
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
语言 总用例 成功 失败 跳过 通过率
C++ 43 43 0 0 100.0%
Python 90 90 0 0 100.0%
Java 26 26 0 0 100.0%
合计 159 159 0 0 100.0%
Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/OpenYR_Actor_Smoke_Process_X86/613/


【OpenYuanRong K8S 部署 Actor 冒烟 · PR验证报告】
❌ 总结论:未通过(成功率低于10%: Java(0.0%))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#2143
分支:master
提交:13caa6db5898e78e6a51eb17fa164a132b159645
作者:yangxiaogang14@huawei.com
操作:merge
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
分语言汇总
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
语言 总用例 成功 失败 跳过 通过率
C++ 39 11 28 0 28.2%
Python 54 49 5 0 90.7%
Java 31 0 31 0 0.0%
合计 124 60 64 0 48.4%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
失败类型分布
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
测试用例问题:0 例
代码BUG:64 例
环境问题:0 例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
代码BUG失败用例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【C++】共 28 例:
- GetEnvTest.cpp_yr_workdir_instanceid_1
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - GetEnvTest.cpp_yr_workdir_instanceid_4
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - GetEnvTest.cpp_instance_dir_disk_quota_1
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - GetEnvTest.cpp_instance_dir_disk_quota_2
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - WaitTest.cpp_wait_partial_call_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - WaitTest.cpp_wait_call_between_functions
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InvokeTest.cpp_invoke_oncloud_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InvokeTest.cpp_invoke_onclond_multilevel_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - TenantIdTest.cpp_tenantid_128_size
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AddAffinityTest.cpp_task_label_rpa_leo_2
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AddAffinityTest.cpp_actor_label_rpa_lnio
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem - AddAffinityTest.cpp_actor_label_rraaa_lio
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem - AntiOtherLabelsTest.cpp_task_antiotherlabels_label_rpa_leo_2
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AntiOtherLabelsTest.cpp_actor_antiotherlabels_label_rpa_lnio
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem - AntiOtherLabelsTest.cpp_actor_antiotherlabels_label_rraaa_lio
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem - InstanceNodeAffinityTest.cpp_instance_node_affinity_required
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - MaxTaskInstancesTest.cpp_instances_largethan_configuration1
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - TeminateTest.cpp_teminate_uncloud
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - TeminateTest.cpp_teminate_oncloud
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - StatefulTest.cpp_stateful_invoke_modifystate_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - StatefulTest.cpp_stateful_invoke_acallb_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AsyncTerminateTest.cpp_asyncterminate_uncloud_get
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AsyncTerminateTest.cpp_syncterminate_uncloud_get
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - NamedInstanceTest.cpp_get_named_instance_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - ShutdownHandlerTest.cpp_shutdownhandler_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - SaveStateTest.cpp_savestate_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AlwaysLocalModeTest.cpp_task_alwayslocalmode_true_1
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - StreamTest.cpp_stream_cloud_003
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong
【Python】共 5 例:
- test_other.py::test_passing_args_by_value_outer
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - test_yr_resource.py::test_yr_resource_003
错误:AttributeError: Can't get attribute '_function_setstate' on <module 'cloudpickle.cloudpickle' from '/opt/buildtools/python3.11/lib/python3.11/site-...
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - test_yr_api.py::test_passing_args_by_value_outer_api
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - test_config_init.py::test_invoke_remote
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - test_config_init.py::test_cloud_recycle_time
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong
【Java】共 31 例:
- GangScheduleTest.test_gang_schedule_cloud_003
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - GracefulShutdownTest.test_graceful_shutdown_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - KVTest.test_kv_set_get_mutil_notexist_undercloude
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - KVTest.test_kv_get_single_key_timeout_forever1
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - KVTest.test_kv_set_get_del_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - KVTest.test_kv_set_get_oncloud
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - KVTest.test_java_getwithparam_003
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - ObjectStoreTest.test_get_remote_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong-datasystem - AntiothersAffinityTest.test_antiothers_actor_label_rpa_leo_02
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - GroupPenetrationTest.test_init_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - PutGetTest.test_init_put_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - PutGetTest.test_finalize_get_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - PutGetTest.test_put_get_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - PutGetTest.test_put_invoke_multi_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - MultiThreadingTest.test_invoke_concurrency_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - AffinityTest.test_actor_label_rpa_leo_2
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InstanceTest.test_create_and_call_instance
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_init_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_actor_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_task_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_cloud_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_nested_function_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - BaseTest.test_return_empty_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InvokeTest.test_invoke_multiple_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InvokeTest.test_invoke_remote_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - InvokeTest.test_cloud_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - SaveStateTest.test_save_load_state_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - FinalizeTest.test_finalize_invoke_smoke
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - ChangeContextTest.test_change_context_003
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - ChangeContextTest.test_change_context_010
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong - RequiredPriorityTest.test_actor_requiredpriority_001
根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
⚠️ 待手动提交Issue → openeuler/yuanrong
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
成功率异常提醒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚨 【测试人员 & 开发人员请排查】
以下测试模块成功率低于10%:
- Java: 成功率 0.0% (0成功/31失败/0跳过)
请检查:
- 测试环境配置是否正常
- 测试数据/依赖是否完整
- 代码是否有环境兼容性问题
- 服务/中间件是否正常运行
Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/k8s-daily-pr/63/


这是什么类型的PR?
/kind feat
1. 问题背景 / 问题现象
当前
enableLocalCache=false的KVClient::Get由 Client 向元数据归属 Worker 发起读取,但原有QueryAndGet实际由 Master 服务处理。元数据归属 Worker 本地已经持有对象时,Client 仍需先查询位置、再发起一次独立数据 RPC,增加了一次请求跳转,也无法复用同机 SHM 和跨机 UB 的直接读取能力。
本 PR 关联 RFC #1101,将
QueryAndGet下沉到元数据归属 Worker:本地命中时直接返回数据,本地 miss时只查询对象位置并继续复用现有 ReplicaReader 读取数据,减少快路径 RPC 和数据拷贝,并保持
KVClient::Get对外语义不变。2. 修改方案 / 解决方案
WorkerOCService.QueryAndGet,并根据拓扑选择 SHM、UB 或 TCP:同机优先 SHM;SHM 不可用且开启 URMA 时尝试 UB;未开启 URMA 或数据面不可用时回退 TCP。
attachment 返回数据;本地 miss 时调用无副作用的
PureQueryMeta获取位置,不触发订阅、拉取、placeholder、L2 加载或缓存写入。
data_result表示快路径未命中,由 Client 继续走现有ReplicaReader;批量请求可以同时包含本地内联数据和二阶段副本读取结果。
索引、累计大小和单请求总大小,避免越界或错误拼装。
发送等耗时;诊断脚本同步识别新的 Worker RPC 名称。
master_object.proto删除 Master 侧 QueryAndGet 消息和 RPC,在object_posix.proto新增 Worker 侧请求、按序结果、位置、SHM 描述以及 TCP/UB/SHM transport oneof,并在
WorkerOCService注册 unary socket、attachment 和 URMA 能力。WorkerRpcClient改为调用Worker control stub,Master 的业务实现与本地数据读取逻辑一并移除。
sequenceDiagram participant Client participant Owner as Metadata owner Worker participant Master participant Data as Data Worker Client->>Owner: QueryAndGet with transport alt Local object hit Owner->>Client: Inline SHM UB or TCP data else Local object miss Owner->>Master: PureQueryMeta Master->>Owner: Object locations Owner->>Client: Ordered locations Client->>Data: Existing replica read Data->>Client: SHM UB or TCP data end修改文件清单:
src/datasystem/protos/object_posix.protosrc/datasystem/protos/master_object.protosrc/datasystem/client/transport/metadata/object_metadata_client.*src/datasystem/client/transport/object_read/object_read_flow.cppsrc/datasystem/client/transport/rpc/worker_rpc_client.*src/datasystem/client/transport/data_plane/shm_*src/datasystem/worker/object_cache/service/worker_query_and_get_impl.*src/datasystem/worker/object_cache/service/worker_oc_service_get_impl.*src/datasystem/master/object_cache/*src/datasystem/common/log/access_point.defscripts/ds_trace_bottleneck.pytests/ut/client/transport_test.cpptests/st/client/kv_cache/kv_client_transport_get_test.cppsrc/datasystem/worker/object_cache/{BUILD.bazel,CMakeLists.txt}.repo_context/modules/{client/client-sdk.md,runtime/worker-runtime.md}3. 验证方案
ExternalCluster启动同版本 Master、Worker 和 Client;非 URMA 环境验证 SHM/TCP,URMA 环境验证跨节点 UB。基础连通性由用例 Set/Get 前置步骤确认。
QueryAndGet 次数、SHM/UB/TCP 编码注入点、二阶段数据 RPC 次数、返回内容和批量顺序。
4. 验证结果
git diff --check upstream/master...HEADpython3 scripts/ai_context/validate_module_metadata.py非 UB 环境通过的场景包括:同机元数据归属 Worker SHM 命中、跨机 TCP 命中、metadata miss 后同机

SHM 读取、metadata miss 后跨机 TCP 读取、混合批量路径保持输入顺序。
UB 内联命中需在 URMA 环境验证通过
5. 自检清单
构建
正确性
内存
并发
安全
可观测性
日志
对外接口变更
Fixes #1101