[P2][BUG] Speicherleck: _UPDATE_RUNS und partial_outputs werden nur bei vollständigem Client-Poll aufgeräumt #228
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Befund
Zwei In-Memory-Strukturen halten Kommando-Ausgaben und werden nur aufgeräumt, wenn der Client bis zum Ende pollt.
_UPDATE_RUNS(routers/docker_router.py:21) wird indocker_router.py:185nur entfernt, wenn der Client die Ausgabe vollständig abgeholt hat:Schließt der Nutzer den Tab, verliert das Frontend die Verbindung oder bricht der Poll ab, bleibt der Eintrag samt vollständiger Ausgabe für die Lebensdauer des Prozesses liegen. Kein TTL, kein GC.
manager.partial_outputs(websocket/manager.py:40) ist laut Kommentar in Zeile 200 bewusst nicht indisconnect()aufgeräumt. Entfernt wird nur an sechs Stellen in den Routern — jeweils im Erfolgspfad. Bricht der Pfad vorher ab, bleibt der Eintrag.Auswirkung
Kein Absturz, sondern langsames Wachstum: jeder abgebrochene Docker-Update-, Host-Update- oder Bulk-Update-Lauf hinterlässt seine Ausgabe im Speicher. Bei mehr Nodes und mehr Läufen wächst das monoton bis zum nächsten Neustart. Da Updates typischerweise die längsten und ausgabestärksten Kommandos sind, sind die Einträge nicht klein.
_GUAC_SESSIONS(rdp_router.py:27) macht es richtig — TTL von 60 s plus_gc_guac_sessions()bei jedem Zugriff. Das Muster existiert im Projekt also schon und wird hier nur nicht angewandt.Aufwand
Über 30 Minuten, weil an mehreren Stellen eingegriffen wird und die Aufräumbedingung nicht ohne Blick auf die Poll-Logik geändert werden kann — deshalb ein Issue statt eines Nebenfixes.
Prompt für Claude Code
Definition of Done
Aus dem Code-Review vom 2026-07-27 (Commit
4152c4d). Gesamtblock: #226, #227, #228, #229, #230, #231.Abarbeitung niedrig → hoch: #231 → #230 → #229 → #228 → #227 → #226.