Skip to content

官方可选模块验收矩阵 ​

本文定义官方可选模块的验收矩阵。它不是实现计划,也不是示例集合,而是后续编码必须满足的模块级契约。

目标:

  • 防止 optional module 反向污染 shield_core
  • 冻结模块启停边界
  • 冻结 public surface、配置 ownership 和关键失败语义

examples/hello_world/ 不替代本文测试。

通用验收项 ​

ID场景操作期望
OMOD-000-01不启用任何 optional module启动最小 runtimecore path 正常工作
OMOD-000-02配置中存在 optional 段但模块未注册或未启用bootstrap启动失败,错误包含模块名和配置路径
OMOD-000-03optional module 初始化失败启动 runtime错误定位到对应模块,不改写 core 错误语义
OMOD-000-04optional module 关闭调用最小 APIshield.send/call/query、gateway、插件 namespace 数据能力保持既有语义
OMOD-000-05public header / Lua API 检查构建/绑定测试optional module 不把 CAF 或旧架构 API 泄漏给用户
OMOD-000-06optional module 被显式启用但配置非法bootstrap默认 fail fast;只有模块文档声明的 degrade 场景才允许继续启动并暴露 unhealthy

OMOD-CL shield_cluster ​

ID场景操作期望
OMOD-CL-001cluster 未启用shield.query("local")仍只查询本地 registry
OMOD-CL-002cluster 未启用本地 shield.send/call语义与 core 完全一致
OMOD-CL-003duplicate NodeId两节点握手新连接被拒绝
OMOD-CL-004远端 name 解析shield.cluster.query(node, name)返回 remote ServiceHandle 或明确错误
OMOD-CL-005remote handle sendshield.send(remote_handle, ...)复用本地 envelope / timeout 语义
OMOD-CL-006remote handle call timeoutshield.call(remote_handle, ...)返回 false, timeout
OMOD-CL-007节点离线pending call 存在返回 false, node_offline
OMOD-CL-008节点离线后恢复route cache 存在stale route 被清理并重新解析
OMOD-CL-009cluster 关闭远端发现接口返回 module_unavailable 或同等级明确错误;不允许 silent success
OMOD-CL-010discovery 切换static / redis / k8s只影响节点发现,不改本地 service registry 规则
OMOD-CL-011远端连接失败但本地配置合法启动 cluster可退化到单节点,本地服务继续运行,cluster 状态为 unhealthy

OMOD-GL shield_global ​

ID场景操作期望
OMOD-GL-001global 未启用调用全局命名空间返回 module_unavailable 或模块不可用错误
OMOD-GL-002cache/queue/leaderboard 插件已启用、global 未启用调用对应插件 namespace仍可正常使用
OMOD-GL-003分布式锁acquire/release基于模块契约完成,不暴露底层 Redis handle
OMOD-GL-004Redis 不可用distributed lock / rank / queue返回 Redis 相关错误,不回写 core 语义
OMOD-GL-005rank reset到达重置周期只影响 rank 数据,不修改 core scheduler 语义
OMOD-GL-006queue 持久化服务重启队列按模块配置恢复或丢弃
OMOD-GL-007rate limiter超额请求返回模块级限流结果,不污染 shield.call 成功/失败语义
OMOD-GL-008global 配置缺失启动模块定位为模块配置错误
OMOD-GL-009锁竞争/空队列等负结果acquire / pop作为模块契约结果返回,不伪装成 runtime transport error

OMOD-PL shield_player ​

ID场景操作期望
OMOD-PL-001player 未启用gateway 回调on_client_bound/on_disconnect/on_client_unbound 仍可独立工作
OMOD-PL-002启用 player登录成功on_auth -> on_login 顺序稳定
OMOD-PL-003客户端业务消息编译绑定 handler(ctx, client, request)只传 request / player 状态,不走 legacy msg_type 入口
OMOD-PL-004跨 service 协作gateway -> player_manager只传 session_id/ClientRef 标记,不传裸连接句柄
OMOD-PL-005断线重连成功reconnect window 内重连触发 on_reconnect,恢复 PlayerSession
OMOD-PL-006重连窗口超时reconnect fail触发 on_logout(reason=timeout)
OMOD-PL-007离线消息缓存玩家离线后再上线消息按模块策略投递并清空
OMOD-PL-008多设备策略second login行为符合 single/multi/kick_old 配置
OMOD-PL-009PlayerManager 索引login/logoutuid/state 索引同步更新
OMOD-PL-010模块关闭普通 service method dispatch不受 player hooks 影响
OMOD-PL-011认证拒绝on_auth 返回拒绝表达为 player 契约结果,不伪装成 handler_error

OMOD-SV shield_server ​

ID场景操作期望
OMOD-SV-001server 模块未启用启动 runtimebootstrap / core 不依赖 server_manager;shield.server.* 返回 module_unavailable
OMOD-SV-002启用 serverinit complete状态自动进入 running(mark_ready),uptime/started_at 从该点计起
OMOD-SV-003maintenance 切换server:set_state("maintenance")状态迁移成功并通知观察者;准入 gate 由业务层实现,现有 service 继续运行
OMOD-SV-004shutdown 请求server:shutdown(ms)立即进入 shutdown 并通知观察者,ms 后走与 SIGINT 同路径的停止请求;drain 预算仍归 bootstrap
OMOD-SV-005状态观察者server:watch(fn) 注册状态变化在观察者 actor 线程收到 fn(ctx, new_state) 通知
OMOD-SV-006配置缺失/非法启动模块缺失用默认值;非法(空 name / info 超 64 字符)fail fast,定位为 server_manager 配置错误
OMOD-SV-007非法状态迁移running -> starting 等返回 invalid_state_transition,不导致 runtime 崩溃、状态不变
OMOD-SV-008server 模块未编译调用任一 shield.server.* 入口返回 nil + {code="module_unavailable"},retryable=false
OMOD-SV-009重复 watch / 未知 unwatch同 service 再次 watch;unwatch 已注销 id重复 watch 返回同一 id;未知 unwatch 静默成功
OMOD-SV-010shutdown 非法参数shutdown(-1) / shutdown(1.5) / shutdown("x")返回 invalid_argument,不迁移状态、不触发停止
OMOD-SV-011maintenance 下服务继续运行置 maintenance 后 send/callservice messaging、gateway、插件 namespace 语义不变
OMOD-SV-012观察者 service 退出迁移状态失效观察者自动注销,不影响其他观察者与状态机
OMOD-SV-013配置非法 fail fastserver_manager.info.name 超长启动bootstrap 初始化失败,错误定位到 server_manager 配置路径
OMOD-SV-014只读观测暴露root.server / GET /ops/status输出 {state, uptime_seconds, version, node_id, started_at_ms, name, info, watchers};未编译时 root.server 明确提示、响应无 server 块

OMOD-SV 测试映射 ​

  • OMOD-SV-001 → tests/lua_api/test_lua_api_server.cpp stub 分支 + shield_config_server_requires_module 负向 CLI 用例
  • OMOD-SV-002/007 → tests/server/test_server_manager.cpp ServerTransitions/ServerLifecycle/ServerSetState
  • OMOD-SV-003/011 → ServerSetState + tests/lua_api/test_lua_api_server.cpp(迁移后 messaging 语义不变)
  • OMOD-SV-004/010 → ServerShutdownScheduling + Shutdown suite(立即/重复/非法参数)
  • OMOD-SV-005/009/012 → ServerWatch + Watch suite(幂等/自动注销/unwatch)
  • OMOD-SV-006/013 → ServerConfigParsing + InitializeFailsOnInvalidServerConfig
  • OMOD-SV-008 → stub 分支全入口断言
  • OMOD-SV-014 → console/ops 套件 root.server 与 /ops/status server 块断言

OMOD-OPS shield_ops ​

ID场景操作期望
OMOD-OP-001ops 未启用访问 /ops/*无端点暴露
OMOD-OP-002ops 启用GET /ops/status只读展示 runtime snapshot
OMOD-OP-003敏感字段/ops/config / diagnosticstoken、password、密钥被 redaction
OMOD-OP-004profile/console 默认关闭生产配置启动不自动开放高风险入口
OMOD-OP-005auth 缺失访问受控端点请求被拒绝
OMOD-OP-006模块内部失败metrics/exporter 错误不影响 core 运行和业务消息路径
OMOD-OP-007服务详情/ops/services/:name不暴露 CAF actor handle 或完整业务 payload
OMOD-OP-008管理平面错误非法 profile/control 请求错误留在 HTTP/admin 平面,不回流为业务 Lua runtime error
OMOD-OP-009ops 管理端口绑定失败启动 opsfail fast,避免用户误以为观测入口已启用

与现有专题文档的关系 ​

Apache License 2.0