pub async fn admin_shutdown(
__arg0: State<RestState>,
) -> Result<Json<Value>, (StatusCode, Json<Value>)>Expand description
POST /api/admin/shutdown — 优雅退出
返回 200 给客户端前调用 daemon-owned shutdown handler。
REST crate 不能自己 process::exit:那会绕过 opend phase4 已经维护的
shutdown 广播、surface JoinHandle await、超时 abort fallback 与日志收口。
为什么不做更精细的 drain(等正在执行的 trade 请求完成):
- opend 典型部署在 systemd / Docker 里,shutdown 语义就是“请求 daemon 进入统一退出路径,supervisor 按策略决定是否重启“。
- 正在执行的 broker trade 请求 client 端自己会超时重试,drain 没明显收益。
- 并发场景(例如 LLM 同时 100 个 GetFunds)drain 逻辑复杂度 >> 简单 exit。
如果未来真需要 drain:可以加 shutdown flag,listener 进 “拒新收旧” 状态, 等所有 in-flight 完成再 exit(类似 nginx -s quit)。目前不做。