Skip to content

サイドカーの鍵の待ちで tokio のワーカーを塞がない - #38

Merged
AkashiSN merged 1 commit into
mainfrom
fix-sidecar-lock-blocking
Oct 18, 2026
Merged

AkashiSN merged 1 commit into
mainfrom
fix-sidecar-lock-blocking

Conversation

@AkashiSN

Copy link
Copy Markdown
Owner

背景

v0.5.0 のリリースのワークフローで、rust ジョブの rejudge_waits_for_the_shared_sidecar_lock が 30 分以上止まった(取り消した)。PR #37 の CI と v0.5.0-rc.1 では通っていた。手元でも taskset -c 0 で CPU を 1 つにすると 11 回中 10 回止まる。

再判定と ytdl はサイドカー(spindle-inbox.json)の読んで直して書くを std の Mutex で直列にしているが、鍵の待ちを async の中で同期にしていたため、待つ間 tokio のワーカーが止まる。テストは鍵を持たせたまま再判定を走らせるので、CPU が少ないと鍵を放す側まで進めなくなっていた。本番でも、ytdl が鍵を持つ間に再判定のワーカーが止まりうる。

変更

  • 鍵を取って読んで書くまでを DownloaderEnv::with_sidecar_lock にまとめ、spawn_blocking で回す
  • ytdl の finish_staging、再判定の update_sidecar / drop_stale_entries をこれに乗せる(async にした)

確認

  • taskset -c 0 で当該テストが 15 回中 15 回通る(直す前は 11 回中 1 回)
  • cargo test --workspace --locked(2273 件)/ cargo clippy --all-targets -- -D warnings / cargo fmt --check

再判定と ytdl はサイドカーの読み書きを std の Mutex で直列にしているが、
鍵の待ちを async の中で同期にしていたので、待つ間ワーカーが止まる。
CPU の少ない CI では rejudge_waits_for_the_shared_sidecar_lock が
鍵を放す側を進められずに止まった(v0.5.0 のリリースのジョブ)。

鍵を取って読んで書くまでを DownloaderEnv::with_sidecar_lock にまとめ、
spawn_blocking で回す。
@AkashiSN
AkashiSN merged commit 13c1125 into main Oct 18, 2026
5 checks passed
@AkashiSN
AkashiSN deleted the fix-sidecar-lock-blocking branch October 18, 2026 12:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant