From dc1ceda0c2c313bf2219b0007220e7c5989015aa Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 24 Jul 2026 18:33:22 +0200 Subject: [PATCH] fix(capabilities): Node-Zuordnung eindeutig bei mehreren Workern pro Host MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Laufen zwei Worker auf demselben Rechner (Befund 24.07.: alter + neuer Windows-Worker auf TobisNicerPC), war die Node-Zuordnung mehrdeutig — der Hostname-Match traf irgendeinen. Jetzt disambiguiert der Name-Teil des Celery-Knotens (WORKER_NAME), sonst Fallback auf den ersten Host-Treffer. Co-Authored-By: Claude Fable 5 --- docker/api/main.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docker/api/main.py b/docker/api/main.py index 3c2bf26..1b8901d 100644 --- a/docker/api/main.py +++ b/docker/api/main.py @@ -662,10 +662,15 @@ async def capabilities(): for zeile in zeilen: # Celery-Knotenname = @. Der Ping liefert ihn voll; # gematcht wird über den Hostname (der Docker-Worker heißt celery@…, - # der WORKER_NAME steckt nur in info). `node` ist der Routing-Ziel- - # Knoten für die gezielte Encoder-Wahl. + # der WORKER_NAME steckt nur in info). Laufen MEHRERE Worker auf + # demselben Host (Befund 24.07.), disambiguiert der Name-Teil — + # sonst bekäme der falsche Worker den Node. `node` ist der + # Routing-Ziel-Knoten für die gezielte Encoder-Wahl. hostname = (zeile.get("info") or {}).get("hostname") or zeile["name"] - node = next((k for k in ping_knoten if k.split("@", 1)[-1] == hostname), None) + kandidaten = [k for k in ping_knoten if k.split("@", 1)[-1] == hostname] + node = next( + (k for k in kandidaten if k.split("@", 1)[0] == zeile["name"]), None + ) or (kandidaten[0] if kandidaten else None) zeile["online"] = node is not None zeile["node"] = node return zeilen