fix(capabilities): Node-Zuordnung eindeutig bei mehreren Workern pro Host
Ampel / ampel (push) Successful in 28s
Ampel / ampel (push) Successful in 28s
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 <noreply@anthropic.com>
This commit is contained in:
+8
-3
@@ -662,10 +662,15 @@ async def capabilities():
|
|||||||
for zeile in zeilen:
|
for zeile in zeilen:
|
||||||
# Celery-Knotenname = <name>@<hostname>. Der Ping liefert ihn voll;
|
# Celery-Knotenname = <name>@<hostname>. Der Ping liefert ihn voll;
|
||||||
# gematcht wird über den Hostname (der Docker-Worker heißt celery@…,
|
# gematcht wird über den Hostname (der Docker-Worker heißt celery@…,
|
||||||
# der WORKER_NAME steckt nur in info). `node` ist der Routing-Ziel-
|
# der WORKER_NAME steckt nur in info). Laufen MEHRERE Worker auf
|
||||||
# Knoten für die gezielte Encoder-Wahl.
|
# 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"]
|
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["online"] = node is not None
|
||||||
zeile["node"] = node
|
zeile["node"] = node
|
||||||
return zeilen
|
return zeilen
|
||||||
|
|||||||
Reference in New Issue
Block a user