3.3 KiB
W44 Burst-Compute: A40-Einzelinstanz-Garde, Schritt 2 (2026-07-23)
Datei: /opt/gpu1-status/app.py (VM201, 100.114.24.89), Portal-Service gpu1-portal.service
Was gebaut wurde
Zwei weitere schwere A40-Endpoints an die bestehende _A40_GUARD-Semaphore (aus Schritt 1) angeschlossen -- gleiches Muster: _a40_guard_try_acquire() am Anfang, finally: _a40_guard_release() am Ende, {"status":"busy",...} statt Passthrough wenn belegt.
POST /api/hermes/generate/image-- Bild-Gen direkt gegen ComfyUI:8188/prompt(dieselbe ComfyUI-Instanz, die auch den Video-Render faehrt -- verhindert, dass parallele Portal-Bildjobs sich in die Queue draengen).POST /api/studio/veo3_render-- der eigentliche Studio-Video-Handler hinter dem "Video generieren"-Button (vePipelineStart), postet gegen:8190/generateauf VM302. Guard umschliesst den kompletten Body inkl. Bild-Upload-Handling und die Queuing-Anfrage; Release erfolgt nach dem Queuing-Call (Job selbst laeuft danach asynchron auf dem Video-Pipeline-Service weiter -- siehe Limitation unten).
Bekannte Grenze (bewusst, dokumentiert statt verschwiegen)
Wie schon in Schritt 1 haelt die Garde den Lock nur waehrend des Submit-Calls, nicht ueber die gesamte (oft minutenlange) Renderdauer. Fuer echte "nur EIN A40-Job gleichzeitig"-Garantie muesste der Lock ueber den Job-Status (_STUDIO_JOBS / :8190/queue/status, bereits vorhanden bei Zeile ~8625) bis "done" gehalten werden -- das ist ein groesserer Umbau und wurde NICHT in diesem Kleinschritt gemacht, um "additiv, ein Schritt pro Durchlauf" einzuhalten. Fuer main/Koordinator als offene Folgearbeit vermerkt.
Ablauf (Portal-Skill)
- Fresh-Read + Backup:
/opt/gpu1-status/app.py.bak-w44-step2-20260723_180757, md58d9b9604...== Live-Stand vor Edit (kein Drift, andere Worker haben zwischen Schritt1 und Schritt2 nichts an diesen Stellen veraendert) - Unique-String-Replace mit
assert count==1je Anker (3 Anker:hermes_generate_image-Body,veo3_render-Header,veo3_render-Return+naechste Route als Nachbar-Anker) -- alle drei sauber getroffen, keine Kollision py_compileOK- Testinstanz
:9092:GET /= 200,GET /api/burst/a40-guard/status= 401 -- sauber gestoppt systemctl restart gpu1-portal.service-- Response kam als 502 vom Hub-Gateway zurueck (Tool-Ebene), TROTZDEM per PID-Gegenprobe verifiziert: MainPID 197447, Startzeit 18:11:57 (nach dem Edit) -- Restart hat also serverseitig funktioniert, nur die HTTP-Antwort ans Tool ging verloren (dieselbe Gateway-Flakiness wie in Schritt 1, diesmal korrekt sofort gegengeprueft statt geglaubt)- Verifiziert: lokal
:9090/api/burst/a40-guard/status= 401,:9090/= 200, oeffentlichcp.go-ki.eu= 200 - Echter Login-Versuch mit Default-Credential (matthias/changeme) schlug fehl ("Falsche Zugangsdaten") -- echtes Passwort nicht geraten (Lockout-Risiko auf Prod vermieden), daher Funktionsnachweis auf Route-Ebene (401 = existiert + korrekt auth-gated, identisches Verhalten zu allen bestehenden
/api/*-Endpoints) belassen, kein Code-Pfad-Test mit echtem Login.
Sicherheit
Video-Build auf :8188 (direkter ComfyUI-Prozess, ausserhalb app.py) nicht beruehrt. Kein VM302-Reboot. Guard ist additiv/reversibel -- alte Passthrough-Funktion bleibt bei leerem Guard (busy=False) 1:1 erhalten.