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、DB/Redis 原始能力保持既有语义
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-002raw Redis 已启用、global 未启用shield.redis.get仍可正常使用
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_connect/on_client_message/on_disconnect 仍可独立工作
OMOD-PL-002启用 player登录成功on_auth -> on_login 顺序稳定
OMOD-PL-003客户端业务消息on_client_message(player, payload)只传 payload / player 状态,不走 legacy msg_type 入口
OMOD-PL-004跨 service 协作gateway -> player_manager只传 session_id,不传 SessionHandle
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
OMOD-SV-002启用 serverinit complete状态进入 running
OMOD-SV-003maintenance 切换server:set_state("maintenance")新登录按模块策略受限,现有 service 继续运行
OMOD-SV-004shutdown 请求server:shutdown(ms)进入 shutdown,最终仍走 bootstrap/core 的优雅关闭路径
OMOD-SV-005状态观察者watch_state 注册状态变化收到通知
OMOD-SV-006配置缺失/非法启动模块定位为 server_manager 配置错误
OMOD-SV-007非法状态迁移running -> starting返回 server 模块 API 错误,不导致 runtime 崩溃

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