From ac66f5b4e72afc4adf98e39e7fd81eca7cf3cbe8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 29 May 2026 23:57:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8D=B8=E8=BD=BDAgent=E5=90=8E?= =?UTF-8?q?=E6=B8=85=E9=99=A4Redis=E5=BF=83=E8=B7=B3=EF=BC=88=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E5=8F=AA=E6=B8=85MySQL=E5=AF=BC=E8=87=B4=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8A=B6=E6=80=81=E6=AE=8B=E7=95=99=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 卸载Agent后只更新MySQL is_online=False,但前端读Redis覆盖为True。 修复: uninstall_agent_remote + batch_uninstall_agent 都增加redis.delete(heartbeat:{id}) Co-Authored-By: Claude Opus 4.7 --- server/api/servers.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/server/api/servers.py b/server/api/servers.py index 665a9c87..a00649e2 100644 --- a/server/api/servers.py +++ b/server/api/servers.py @@ -824,6 +824,12 @@ async def batch_uninstall_agent( ok = r["exit_code"] == 0 if ok: + # Clear Redis heartbeat (real-time source) + MySQL + try: + redis = get_redis() + await redis.delete(f"{REDIS_KEY_PREFIX}{sid}") + except Exception: + pass server.is_online = False server.agent_version = None await db.commit() @@ -1250,7 +1256,12 @@ async def uninstall_agent_remote( detail=f"卸载失败: {_install_error_msg(result.get('stdout', ''), result.get('stderr', ''), result['exit_code'])}", ) - # Clear agent metadata in database + # Clear agent metadata: Redis (real-time source) + MySQL (history) + try: + redis = get_redis() + await redis.delete(f"{REDIS_KEY_PREFIX}{id}") + except Exception: + logger.warning(f"Failed to clear Redis heartbeat for server {id}", exc_info=True) server.is_online = False server.agent_version = None await db.commit()