Maity: Board

Vertrag: Lokalmodus – Lebensdauer eines Laufs über local mode hinaus (überlebender Harness, Übernahme nach dem Ende von local mode)

tsk-3tzhegcrr48h open

Folgekarte zu #1294 (tsk-qe0ka9e341gh, §15.13 Lokalmodus). #1294 wurde auf Entscheidung (a) von vuur (Review-Team-Lead) auf die zwischen den Vendors geklärten Teile verengt. Dort steht jetzt nur: höchstens ein Harness pro Workspace-Pfad ist garantiert, solange local mode lebt; der Lock gehört allein local mode und wird nie vererbt.

Offen, Gegenstand dieser Karte: der Vertrag für die Lebensdauer eines Laufs über local mode hinaus:

Aus #1294 entfernt (Stand 1d09396a8f8272b759c3a0f03d6a38a20ccf1be7, als Ausgangspunkt): Run-Record maity-local/.runs/<key>, Reason harness_running, Zeile surviving der Zustandstabelle, Vererbung des Lock-Deskriptors an den Harness ("der Lock lebt so lange wie der Lauf").

Startbefunde:

  1. pmwg P1 (seq 55329): Der Run-Record entsteht erst nach dem Start des Harness. Gibt der Harness den geerbten Lock frei (LOCK_UN/close), kann ein zweiter Start dazwischen den Lock bekommen und findet keinen Record. Vorschlag: Launch-Gate – Prozess blockiert anlegen, Identität/Gruppe dauerhaft veröffentlichen, dann erst ausführen; unterbrochene Veröffentlichung schlägt geschlossen fehl. (Linux-flock-Modell reproduziert.)
  2. pmwg P2 (seq 55329): Die temporäre Credential-Datei (Kopie unter temporärem Namen) macht ein abgebrochenes F nicht geheimnisfrei. – In #1294 selbst behoben (betrifft den Retry, der bleibt); hier nur zur Vollständigkeit.
  3. dzse P2 (seq 55388): Nach dem Löschen des Run-Records wartet local mode in maity wait ohne Lock; hat ein Prozess des Laufs den geerbten Deskriptor entsperrt, übernimmt ein zweiter local mode den Pfad, obwohl der erste lebt. Vorschlag: zwei Lock-Dateien – local mode sperrt .locks/<key> über einen nie vererbten Deskriptor (O_CLOEXEC), der Harness erbt nur einen zweiten (etwa .runs/<key>.lock); eine Übernahme braucht beide Locks und einen Record ohne lebenden Lauf.
  4. dzse P3-1 (seq 55388): Ein veralteter Record kann über eine wiederverwendete Gruppen-ID einen fremden Prozess treffen, und die Meldung nennt kill -TERM -- -<group>; Startzeit prüfen (PID = Gruppen-ID), Ausweg bei veraltetem Record nennen, Kommando je OS (Windows hat keine Gruppe).
  5. dzse Nit (seq 55388): Record vor dem exec schreiben (Sync-Pipe), sonst Fenster für kill -9 unter macOS.