fix(320): break troubleshoot segment-wait loop on ffmpeg failure #423
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
de63603aab |
test(320): don't blanket-delete foreign *.ts in the shared troubleshooting folder
Build ErsatzTV Image / CI image pin matches docker/ci (pull_request) Successful in 5s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 6s
Build ErsatzTV Image / decisions.md append-only (pull_request) Successful in 5s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 2m30s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m7s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 13m45s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 12m32s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 19m37s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Re-review nit: the regression test deleted every *.ts in the machine-global TranscodeTroubleshootingFolder, which could nuke a live troubleshooting session's segments on a dev machine (reaping files it didn't create). Drop the sweep and keep only Directory.CreateDirectory — the folder-exists guarantee is what closes the false-pass hole; NUnit runs serially and no test leaves >= 2 stray .ts, so determinism is unaffected (negative control re-verified: still fails in ~10s). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
5f8525eed7 |
fix(320): address cold-review nits — drop redundant cancel term, harden test
Build ErsatzTV Image / CI image pin matches docker/ci (pull_request) Successful in 5s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 5s
Build ErsatzTV Image / decisions.md append-only (pull_request) Successful in 5s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m13s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 4m49s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 53s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been cancelled
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Has been cancelled
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Has been cancelled
Cold review (PR #423) found two LOW nits: - The segment-wait break also checked cancellationToken.IsCancellationRequested, which could exit into the Ok gate and return a spurious 200 for a cancelled request with no segments. The term is redundant (Task.Delay already throws on cancel -> caught -> 404), so break on notifier.IsFailed only. - The regression test's non-vacuousness was filesystem-state dependent (absent troubleshooting folder -> Directory.GetFiles throws -> false pass pre-fix). Seed an empty folder like the sibling success test so the spin path is deterministic regardless of NUnit run order. Negative control re-verified: removing the IsFailed break fails the test in ~10s. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
b2059bd2a6 |
fix(320): break troubleshoot segment-wait loop on ffmpeg failure
Build ErsatzTV Image / CI image pin matches docker/ci (pull_request) Successful in 5s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 5s
Build ErsatzTV Image / decisions.md append-only (pull_request) Successful in 5s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 8m48s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 51s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 14m28s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 18m26s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 12m43s
The second (segment-readiness) poll in POST /api/v1/troubleshoot/playback/start only checked !hasSegments. If ffmpeg died after writing the HLS playlist but before the first segments appeared, the loop spun until the client cancelled — tying up the request thread and holding the troubleshooting lock (worse since #301 moved the manifest fetch server-side per #320's writeup). Mirror the first (playlist) wait loop's exit check so a dead ffmpeg or client cancellation breaks the wait; the existing !IsFailed guard then falls through to the terminal NotFoundProblem, releasing the thread + lock. Adds a non-vacuous regression test (verified it fails on the pre-fix spinning loop via a bounded cancellation deadline). fixes #320 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |