已合并
refactor(routing): 收敛 worker 选择策略接口 #2117
refactor(routing): 收敛 worker 选择策略接口 #2117
已合并
Qin Yufei创建于 6 天前
Qin Yufei
Qin Yufei
6 天前

这是什么类型的PR?

/kind cleanup

1. 问题背景 / 问题现象

关联问题 / Related issue:

  • 无独立缺陷单;本 PR 来自 routing module review,目标是收敛 worker selection API surface,避免维护者误认为存在多套 SelectWorker 链路。

现象 / Symptom:

  • routing 层同时暴露 SelectStrategyDataPlacementPolicy 相关入口,但 SelectStrategy 只是 legacy compatibility wrapper,实际最终仍映射到 DataPlacementPolicy
  • 多入口造成 review noise:容易把 API alias 误读为 HashRing refresh、metadata-owner selection 或 data-placement selection 的多套实现。

根因 / Root cause:

  • 历史兼容 wrapper 在调用方迁移后没有及时移除,导致 public/internal routing API 面积偏大。
  • 测试和调用点仍引用旧枚举名,使“策略枚举”和“选择算法”看起来被拆成两条链路。

2. 修改方案 / 解决方案

核心方案 / Core solution:

  • 保留 DataPlacementPolicy 的两个正式入口:single-key SelectWorker 与 batch SelectWorkers
  • 删除 SelectStrategy overload / wrapper,并将调用点统一迁移到 DataPlacementPolicy
  • DataPlacementPolicy 放入独立头文件,调用方无需为策略枚举引入完整 routing declaration。

关键设计决策 / Key design decisions:

  • SelectStrategy was a legacy compatibility wrapper; HashRing refresh and metadata-owner selection behavior are unchanged.
  • SelectStrategy 是历史兼容包装;HashRing refresh 与 metadata-owner selection behavior 保持不变。
  • 本 PR 不改 HashRingRefresherWorkerRouter ring view、filter chain、same-node preference、exclude reroute 或 fallback algorithm。

3. 修改文件清单

文件 修改内容
src/datasystem/client/routing/data_placement_policy.h 新增独立 DataPlacementPolicy enum 头文件。
src/datasystem/client/routing/routing.h 删除 legacy SelectStrategy overload,只保留正式 policy API。
src/datasystem/client/routing/routing.cpp 删除 SelectStrategyDataPlacementPolicy 的中转实现。
src/datasystem/client/routing/worker_router.h 删除 legacy overload,保留 data-placement policy 选择入口。
src/datasystem/client/routing/worker_router.cpp 删除 wrapper 代码,不改变原 worker selection algorithm。
src/datasystem/client/object_cache/exist_handler.* 调用点迁移到 DataPlacementPolicy
src/datasystem/client/object_cache/object_client_impl.cpp routing selection 调用迁移到 DataPlacementPolicy
tests/ut/client/**tests/st/client/** 更新测试中的枚举名与 include,验证行为保持一致。

4. 验证计划

  • Build routing、object-client 及受影响 UT,确认旧 wrapper 删除后无 caller 遗漏。
  • Run worker router、HashRing refresher、routing failure switch、object client Exist 等 select-worker coverage。
  • Run e2e select-worker validation,确认 metadata-owner selection、same-node preferred、state/disconnect filter convergence 不变。

5. 验证结果

  • 专项环境验证:select-worker focused suite 80/80 passed
  • Coverage includes routing failure-switch e2e ST: RoutingFailureSwitchTest.StateAndDisconnectFiltersConverge passed。
  • 本 PR 不依赖 URMA;它是 API cleanup,验证重点是 routing selection behavior equivalence。
  • Current PR head noted for this description update: 8af19027

6. 影响范围

  • Scope 限定在 routing worker-selection API 表面和调用点 enum 类型。
  • HashRing ring view、refresh timing、metadata-owner calculation、same-node filtering、fallback selection 均不改变。
  • 不涉及 data-plane transport、URMA/TCP/SHM selection、master metadata protocol 或 worker topology membership。

7. 风险与边界

  • 风险 / Risk: downstream 若仍直接调用旧 SelectStrategy overload,需要迁移到 DataPlacementPolicy
  • Boundary: 本 PR 不删除 HashRing,不修改 ring token layout,不改变 routing runtime behavior。

8. 自检清单

likedislike
Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 Qin Yufei 的贡献)
Qin YufeiQin Yufei
6 天前 创建了 pull request,commit 911e8991
atomgit-bot
atomgit-bot
6 天前 评论:

变更摘要

本 PR 为 routing 模块的接口收敛重构:删除仅做枚举转换、无独立语义的历史兼容层 SelectStrategy,保留 DataPlacementPolicy 作为 worker selection 的唯一语义入口,并将该枚举独立到轻量头文件 data_placement_policy.h,同时清理 Routing / WorkerRouter 的 legacy overload 及各调用方、测试中的旧枚举引用。HashRing 计算、worker filter chain、routing refresh 控制链路及数据面选择语义均保持不变。

主要改动

  • 删除 SelectStrategy 兼容层并迁移枚举select_strategy.h 重命名为 data_placement_policy.hDataPlacementPolicy 枚举(PREFERRED_SAME_NODE / REQUIRED_SAME_NODE / PREFERRED_META_OWNER)改为显式 uint8_t 底层类型并新增 #include <cstdint>SelectStrategy 及其 HASH_RING_AFFINITYSAME_NODE_PREFERRED 枚举值全部移除。
  • 清理 Routing / WorkerRouter 的 legacy overloadrouting.h/.cppworker_router.h/.cpp 中删除基于 SelectStrategySelectWorker / SelectWorkers overload 及 SAME_NODE_PREFERRED → PREFERRED_SAME_NODE 的转换逻辑,仅保留 DataPlacementPolicy 单 key 与 batch 入口。
  • ExistHandler 直接使用新策略枚举exist_handler.h/.cppobject_client_impl.cppRoutingExistAdapterIExistRouting::SelectWorkers 参数类型由 client::SelectStrategy 改为 client::DataPlacementPolicy,批量选择调用点改用 DataPlacementPolicy::PREFERRED_META_OWNER
  • 同步 Bazel target 与依赖:routing 与 object_cache 的 BUILD.bazel:select_strategy target 收敛为 :data_placement_policy,并更新头文件依赖引用。
  • 更新测试中的枚举引用hash_ring_refresher_test.cppworker_router_test.cppobject_client_impl_exist_test.cpp 及 ST 的 routing_failure_switch_test.cppSelectStrategy::HASH_RING_AFFINITY / SAME_NODE_PREFERRED 替换为对应的 DataPlacementPolicy 枚举值,mock 记录字段同步改为 selectedPolicy
likedislike
atomgit-bot
atomgit-bot
6 天前 评论:

代码审查

✅ 未发现问题

likedislike
openeuler-ci-botopeneuler-ci-bot成员
6 天前 将luozhancheng,liangyi1234,yuchaow,yche-huawei,slichengsong,iewauh,tianyi-huawei设为审查人
Qin Yufei
Qin Yufei
6 天前 评论:

/retest

likedislike
此处折叠了60条消息 查看更多
openeuler-ci-botopeneuler-ci-bot成员
3 天前 添加了label:approvedlgtm
openeuler-ci-bot
openeuler-ci-bot成员
3 天前 评论:

Review Code Feedback

  • The label lgtm, approved was added to this pull request. It means that yche-huawei reviewed the code changes. 👋
Tips
  • If this pull request is not merged while all conditions are met, comment /check-pr to try again. 😄
likedislike
openeuler-ci-botopeneuler-ci-bot成员
3 天前 合入了pull request,合并节点 SHA:f826378a57a9975c09305d30106582c759818857
yuanrong-ci-robot
3 天前 评论:

【OpenYuanRong PROCESS 部署 Actor 冒烟 · PR验证报告】

✅ 总结论:通过

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#2117
分支:master
提交:8af190271cf8f32bce01bfd33f3bb2a4a094812c
作者:qinyufei5@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/612/

likedislike
yuanrong-ci-robot
3 天前 评论:

【OpenYuanRong K8S 部署 Actor 冒烟 · PR验证报告】

❌ 总结论:未通过(成功率低于10%: Java(0.0%))

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#2117
分支:master
提交:8af190271cf8f32bce01bfd33f3bb2a4a094812c
作者:qinyufei5@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 例:

  1. GetEnvTest.cpp_yr_workdir_instanceid_1
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  2. GetEnvTest.cpp_yr_workdir_instanceid_4
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  3. GetEnvTest.cpp_instance_dir_disk_quota_1
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  4. GetEnvTest.cpp_instance_dir_disk_quota_2
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  5. WaitTest.cpp_wait_partial_call_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  6. WaitTest.cpp_wait_call_between_functions
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  7. InvokeTest.cpp_invoke_oncloud_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  8. InvokeTest.cpp_invoke_onclond_multilevel_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  9. TenantIdTest.cpp_tenantid_128_size
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  10. AddAffinityTest.cpp_task_label_rpa_leo_2
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  11. AddAffinityTest.cpp_actor_label_rpa_lnio
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem
  12. AddAffinityTest.cpp_actor_label_rraaa_lio
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem
  13. AntiOtherLabelsTest.cpp_task_antiotherlabels_label_rpa_leo_2
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  14. AntiOtherLabelsTest.cpp_actor_antiotherlabels_label_rpa_lnio
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem
  15. AntiOtherLabelsTest.cpp_actor_antiotherlabels_label_rraaa_lio
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong-functionsystem
  16. InstanceNodeAffinityTest.cpp_instance_node_affinity_required
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  17. MaxTaskInstancesTest.cpp_instances_largethan_configuration1
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  18. TeminateTest.cpp_teminate_uncloud
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  19. TeminateTest.cpp_teminate_oncloud
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  20. StatefulTest.cpp_stateful_invoke_modifystate_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  21. StatefulTest.cpp_stateful_invoke_acallb_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  22. AsyncTerminateTest.cpp_asyncterminate_uncloud_get
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  23. AsyncTerminateTest.cpp_syncterminate_uncloud_get
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  24. NamedInstanceTest.cpp_get_named_instance_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  25. ShutdownHandlerTest.cpp_shutdownhandler_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  26. SaveStateTest.cpp_savestate_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  27. AlwaysLocalModeTest.cpp_task_alwayslocalmode_true_1
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  28. StreamTest.cpp_stream_cloud_003
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong

【Python】共 5 例:

  1. test_other.py::test_passing_args_by_value_outer
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  2. 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
  3. test_yr_api.py::test_passing_args_by_value_outer_api
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  4. test_config_init.py::test_invoke_remote
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  5. test_config_init.py::test_cloud_recycle_time
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong

【Java】共 31 例:

  1. GangScheduleTest.test_gang_schedule_cloud_003
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  2. GracefulShutdownTest.test_graceful_shutdown_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  3. KVTest.test_kv_set_get_mutil_notexist_undercloude
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  4. KVTest.test_kv_get_single_key_timeout_forever1
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  5. KVTest.test_kv_set_get_del_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  6. KVTest.test_kv_set_get_oncloud
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  7. KVTest.test_java_getwithparam_003
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  8. ObjectStoreTest.test_get_remote_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong-datasystem
  9. AntiothersAffinityTest.test_antiothers_actor_label_rpa_leo_02
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  10. GroupPenetrationTest.test_init_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  11. PutGetTest.test_init_put_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  12. PutGetTest.test_finalize_get_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  13. PutGetTest.test_put_get_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  14. PutGetTest.test_put_invoke_multi_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  15. MultiThreadingTest.test_invoke_concurrency_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  16. AffinityTest.test_actor_label_rpa_leo_2
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  17. InstanceTest.test_create_and_call_instance
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  18. BaseTest.test_init_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  19. BaseTest.test_actor_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  20. BaseTest.test_task_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  21. BaseTest.test_cloud_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  22. BaseTest.test_nested_function_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  23. BaseTest.test_return_empty_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  24. InvokeTest.test_invoke_multiple_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  25. InvokeTest.test_invoke_remote_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  26. InvokeTest.test_cloud_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  27. SaveStateTest.test_save_load_state_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  28. FinalizeTest.test_finalize_invoke_smoke
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  29. ChangeContextTest.test_change_context_003
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  30. ChangeContextTest.test_change_context_010
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong
  31. RequiredPriorityTest.test_actor_requiredpriority_001
    根因:LLM 根因分析未执行或失败,请结合失败日志人工补全
    ⚠️ 待手动提交Issue → openeuler/yuanrong

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
成功率异常提醒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚨 【测试人员 & 开发人员请排查】

以下测试模块成功率低于10%:

  • Java: 成功率 0.0% (0成功/31失败/0跳过)

请检查:

  1. 测试环境配置是否正常
  2. 测试数据/依赖是否完整
  3. 代码是否有环境兼容性问题
  4. 服务/中间件是否正常运行

Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/k8s-daily-pr/62/

likedislike