Repository navigation
Add Launcher fail-stop runtime supervision - #63
Conversation
tmori
left a comment
There was a problem hiding this comment.
レビュー結果: 修正後の再レビューを推奨(現時点ではマージ保留)。
良い点: 起動前/監視中の check、ABORT で管理プロセスの停止、UNKNOWN は警告、自動 recover しない、既存の起動時 mmap 自動削除を拒否する方針は良いです。Launcher の 3 OS CI も成功しています。
[P1] 異常な asset exit が TERMINATED で確定します — src/hakoniwa_pdu/apps/launcher/hako_launcher.py:223-229
watch で予期せぬ終了を検出しても self.terminate() を呼び、成功時に state=TERMINATED に上書きされます。Issue #62 の「異常 asset exit は FAILED として保持」に反します。失敗理由・該当 asset 名/終了コードを記録して FAILED のまま全 managed process を stop し、背景 session status に反映してください。
[P1] クリーンアップ失敗・生存者の記録不足 — hako_launcher.py:117-130
_fail_stop() の monitor.abort() が例外を投げた際、stderr に出すだけで failure_report に cleanup_failed / survivors が保存されません。プロセスが残っても session.json だけではわからず、オペレータが recover してよいか判断できません。少なくとも例外と survivor 情報を failure_report に記録し、未停止を明示してください。
[P2] バックグラウンド起動時 ABORT の詳細消失 — hako_launcher.py の _run_background_worker() 例外経路
activate() の startup check が ABORT で failure_report を作っても、catch が service.terminate() した後 _write_failed_session() に汎用メッセージだけを書きます。起動直後の障害も health details/owner/reason を残してください。
[P2] OS 実プロセスの統合検証 — 追加 CI は主に mock の Python テストです。Windows の AssetRunner.kill() は native child の親 PID を kill するだけで、子孫を確実に止めたことを検証できません。少なくとも子プロセスを生成する実プロセス型の ABORT 統合テストと、失敗時の残存プロセス診断をお願いします(改善不能な範囲は明記)。
これらを満たせば、Core CPP #64 → Core PRO #97 → Launcher #63 の依存順で取り込めます。
Summary
Dependencies
Validation
Closes #62