From 110b77899f351291f3e0787c0c7a121c9f55e295 Mon Sep 17 00:00:00 2001 From: gx Date: Sun, 24 May 2026 08:06:40 +0100 Subject: [PATCH] =?UTF-8?q?pipeline=5Fmonitor:=202-sec=20wait=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=20restore=20=E2=80=94=20fix=20overlay?= =?UTF-8?q?=20loss=20race?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: restore триггерился сразу после detected "ZMQ ping success", но filter graph внутри ffmpeg ещё в startup phase — accepts ZMQ commands но overlay add не fully apply'ются. Часть overlays lost silently. Симптом: monitor logs "restore_done overlays=6", но pipeline ZMQ probe показывает filter имеет только 2-3 overlays. Grafana / alerts_chat / frigate event overlays отсутствуют → user sees пустые cells / strip. Fix: asyncio.sleep(2.0) перед re-pushing layout + overlays. Pipeline filter всегда успевает finish init за 2 sec (verified повторными restart tests). Cost: 2-sec задержка между detect + visible restore. Acceptable — total recovery time pipeline crash → fully visible на TV ≈ 5-7 sec. Co-Authored-By: Claude Opus 4.7 --- controller/cuda_grid_controller/pipeline_monitor.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/controller/cuda_grid_controller/pipeline_monitor.py b/controller/cuda_grid_controller/pipeline_monitor.py index 3c840d8..51c7b27 100644 --- a/controller/cuda_grid_controller/pipeline_monitor.py +++ b/controller/cuda_grid_controller/pipeline_monitor.py @@ -109,6 +109,11 @@ class PipelineMonitor: return client = self.dispatcher._client(inst) + # Pipeline filter может быть ещё в startup — ZMQ может отвечать но + # filter graph не полностью инициализирован. Wait 2 sec чтобы overlays + # accepted reliably. + await asyncio.sleep(2.0) + # 1. Layout (set_layout уже sent в _check_instance — pipeline restored к # нему. Просто apply ещё раз чтобы быть consistent.) layout = await self.state.get_layout(instance) or inst.default_layout