| ユーザー依頼「同じファイルは別ポートで開かない」 |
同一レポートの重複サーバー起動を止める |
起動対象ファイルの実パスと一致するロックを所有する生存中プロセスの配信ポート |
値 |
新しいポートを探索する前に取得する |
既存配信ポートとは、同じ実パスを配信している生存中プロセスのロックに記録されたポートを指す |
running_port_for_file |
| ユーザー依頼「同じファイルは別ポートで開かない」 |
同一レポートの重複サーバー起動を止める |
起動対象ファイルに既存配信ポートが存在すること |
開始条件 |
新しいサーバーの bind より前に判定する |
同一ファイル配信中とは、既存配信ポートが正の整数として見つかった状態を指す |
file_server_already_running |
yunomi の herdr run 契約 |
既存サーバー検出をレビュー完了と区別する |
新しいサーバーを起動せず、既存 URL を表示して非ゼロ終了する事象 |
事象 |
同一ファイル配信中の判定後、新規 bind の代わりに発生する |
重複起動拒否とは、既存のレビューを終了させず新しいサーバーも作らない終了を指す |
duplicate_launch_rejected |
| reviewer 指摘「同時起動と同一コマンド内の重複指定」 |
起動前検査と bind の間の競合をなくす |
実パスのハッシュで一意になるファイルロックを排他的に新規作成できたこと |
開始条件 |
既存ポートロックの確認後、サーバー作成より前に成立させる |
ファイル配信権取得とは、同じ実パスについて一つの生存 PID だけが排他的ロックを所有することを指す |
claim_file_server |
| reviewer 指摘「HTMLプレビューはロックを通らない」 |
全ファイル形式で重複起動を防ぐ |
HTML専用サーバーが実際に bind したポートを共通ロックへ記録する通知 |
事象 |
HTMLサーバーの listen 成功後、ブラウザを開く前に発生する |
HTML配信開始通知とは、専用サーバーの実ポートを共通のロック管理へ渡すことを指す |
on_html_server_listening |
| reviewer 指摘「live PIDのhealthz失敗でロック削除」 |
一時遅延やIPv6 hostで重複起動に戻らないようにする |
ロック所有 PID が生存している限りそのファイルロックを有効とする判定 |
状態 |
ロック読取後、HTTP到達性とは独立して判定する |
生存所有ロックとは、記録された PID に signal 0 が成功するロックを指す |
live_owner_lock |
| reviewer 再監査「review/shareが排他取得を迂回」 |
複数ファイルを1サーバーで配信する全経路を同じ排他契約にする |
review/share対象の全実パスについて、一つでも取得できなければ今回取得した全ロックを戻して起動を拒否する処理 |
手段 |
muxコンテキスト作成とshare token発行より前に実行する |
全ファイル配信権取得とは、同一muxへ含める全ファイルの排他ロックを一括で所有することを指す |
claim_all_file_servers |
| reviewer 再監査「SIGTERM・起動失敗でロックが残る」 |
正常提出以外の終了でも所有ロックを残さない |
active serverが所有するポートロックとファイルロックを削除する共通処理 |
手段 |
SIGINT、SIGTERM、回復不能なlisten失敗、正常提出完了で呼ぶ |
配信ロック解放とは、現在PIDが所有するロックだけを終了前に削除することを指す |
cleanup_server_locks |