控制器故障排查决策树
当控制器发出的命令失败或无响应时使用此决策树。按顺序通过每个门控 — 大多数故障在第一个条件不满足的门控处解决。
决策门控
1. 认证握手健康?
- 预期:中继在
hello和auth帧后以auth_ack响应。 - 如果没有
auth_ack:验证hello→auth顺序;确认accessToken有效且未过期。 - 在
invalid_access_token上:使用otto client login刷新令牌,然后重连。
2. 目标节点已解析?
- 预期:
targetNodeId匹配已连接的节点。 - 运行
otto commands list(或GET /api/nodes/connected)查看已连接节点。 - 确保每个命令信封上显式设置
targetNodeId。
3. ACL 已授予?
- 预期:控制器客户端拥有目标节点的 ACL 授权。
- 在
acl_missing_node_grant上:使用节点持有者令牌发送POST /api/controller/access,或使用中继管理员 ACL 流程。
4. 负载有效?
- 预期:操作和负载与
command.list中的命令描述符匹配。 - 运行
otto commands list --site <site>检视输入约定。 - 修复未知键、缺失的必填字段或类型不匹配。
5. 标签页上下文有效?
- 预期:
tabSessionId引用一个活跃的受管理标签页,其提交的 URL 与命令站点匹配。 - 如果过期:运行
otto cmd --action primitive.tab.open创建新会话。 - 在
tab_url_not_ready上:短暂延迟后重试一次。
6. 流生命周期有效?
- 预期:
command.test返回stream.listeners;订阅命令返回终端结果;listener_update事件与订阅requestId关联。 - 验证 unsubscribe 或
command_cancel拆除是显式的。
7. 竞争问题?
- 预期:标签页锁无冲突获取。
- 在
tab_busy或tab_locked上:以有界退避重试,或设置waitPolicy: wait_with_timeout。
下一步
- requestId 关联手册 — 当决策树无法解决故障时跨组件追踪。
- 错误码 — 完整错误码参考。
- 可复用代码片段 — 每个 HTTP 门控的 curl 命令。