opsx
bad61e5027
fix(deploy): 删除部署时同步清理自动注册的查询数据源(孤儿数据源)
=== 现象(用户实测)===
在 /deployments 页面删掉两个主机模式部署后,本机(172.19.16.8)容器确实清干净了:
docker ps -a 无任何 lokistack-* 容器
/etc/promtail、/var/lib/promtail 等目录均不存在
无 promtail systemd 单元
但**平台里残留一个数据源** host-verify-loki(url=http://172.19.16.8:3100),
「日志查询」下拉里还能选到它,选中必然连接失败。
=== 根因 ===
DeploymentService.Delete 只做了两件事:删容器、删部署记录。
部署创建时由 EnsureLogSourceForDeployment 自动注册的托管数据源(Managed=true)
没有任何清理逻辑 —— 删除动作只完成了一半。
=== 修法 ===
1) DeploymentService.Delete 删完记录后调用 CleanupManagedLogSource(部署名)
- 删掉同名且 Managed=true 的数据源(手填的 Managed=false 不动)
- DeleteLogSource 内部会连带删除指向它的查询授权策略组
- 绑定该源的告警规则置为禁用(保留配置便于审计,但不让它每次评估都失败)
- 注意锁顺序:必须先 db.Unlock() 再调用,CleanupManagedLogSource 内部会自己加锁,
持有锁再调用会死锁
2) schemaVersion v6→v7 迁移 removeOrphanManagedLogSources()
清理历史遗留:Managed=true 但没有任何同名部署的数据源 → 删除,
连带删策略组、禁用告警规则
=== 实测(d9487694ece6)===
v7 迁移日志:移除孤儿数据源 "host-verify-loki"(id=2):对应部署已删除
数据源:1 个(只剩 loki-pre,managed=true)
部署:1 / 采集器:1 / 策略组:1
本机:docker ps -a 无 lokistack-* 容器,/etc/promtail 等目录不存在,无 systemd 单元
2026-10-28 23:18:43 +00:00
..
2026-10-27 17:11:38 +08:00
2026-10-28 23:18:43 +00:00
2026-10-28 22:11:48 +00:00
2026-10-27 17:11:38 +08:00
2026-10-27 17:11:38 +08:00