修复:删除算法绑定后边缘端未停止对应算法推理

根本原因:config_sync.py 的 _cleanup_stale_records() 方法接收了
incoming_bind_ids 参数但从未使用,导致当 ROI 仍存在但其中某个
算法绑定被删除时,孤立的绑定记录继续留在 SQLite 中,推理循环
仍然从 SQLite 读取到已删除的绑定并继续生成告警。

修复内容:
1. config/database.py: 添加 get_all_bind_ids() 方法
2. core/config_sync.py: 在 _cleanup_stale_records() 中补全
   使用 incoming_bind_ids 清理孤立绑定的逻辑
3. algorithms.py: 在 reload_all_algorithms() 中添加清理内存中
   孤立算法实例的逻辑,防止内存泄漏
This commit is contained in:
2026-03-05 17:12:15 +08:00
parent 1d4eaf0174
commit 3d88dfc1c6
3 changed files with 50 additions and 1 deletions

View File

@@ -640,6 +640,15 @@ class ConfigSyncManager:
removed += 1 + bind_count
logger.info(f"清理旧 ROI: {old_roi_id} (含 {bind_count} 条算法绑定)")
# 清理孤立的算法绑定ROI 仍存在但绑定已被删除的情况)
if incoming_bind_ids:
existing_bind_ids = self._db_manager.get_all_bind_ids()
for old_bind_id in existing_bind_ids:
if old_bind_id not in incoming_bind_ids:
self._db_manager.delete_roi_algo_bind(old_bind_id)
removed += 1
logger.info(f"清理孤立算法绑定: {old_bind_id}")
if removed > 0:
logger.info(f"旧数据清理完成: 共删除 {removed} 条过期记录")