From 47a30e87d8dab8e7ad0b70402aff5fa64318762b Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Wed, 8 Jul 2026 14:37:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20http.rs=20=E9=87=8D?= =?UTF-8?q?=E5=90=AF=E4=BF=A1=E5=8F=B7=E5=90=9E=E9=94=99=EF=BC=88P1?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/gateway/http.rs 的 /api/restart 处理器中: let _ = restart_tx.send(true); 静默丢弃了 watch::Sender::send 的错误。 若接收方任务已退出(select! 其他分支先完成), send 返回 Err 但 HTTP 已返回 success:true, 用户误以为重启成功,实际重启未触发,且无日志可排查。 改为 if let Err(e) = ... { tracing::warn!(...) } 记录错误。 保留 200ms 延迟设计(让 HTTP 响应先返回客户端), 不改变成功路径行为,仅在失败时增加诊断日志。 --- src/gateway/http.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gateway/http.rs b/src/gateway/http.rs index 1faa691..56a4215 100644 --- a/src/gateway/http.rs +++ b/src/gateway/http.rs @@ -187,7 +187,13 @@ pub async fn restart( let restart_tx = state.restart_tx.clone(); tokio::spawn(async move { tokio::time::sleep(std::time::Duration::from_millis(200)).await; - let _ = restart_tx.send(true); + if let Err(e) = restart_tx.send(true) { + tracing::warn!( + error = %e, + "Failed to send restart signal; receiver may have already exited. \ + HTTP response already returned success, but restart may not occur." + ); + } }); Ok(Json(RestartResponse {