Repository navigation
Retry the second phantom-store-path eval wording in the devenv retry wrapper (#3594) - #3595
Conversation
The daily fuzz's Oct 26 scheduled run died at shell evaluation with 'error: getting attributes of path .../builder.pl: No such file or directory' — the same per-eval coin flip the retry wrapper exists for (#2774 / cachix/devenv#3064), in the stat-failure wording instead of the database-miss 'is not valid' wording the wrapper matched. Both wordings now retry once (quote-style tolerant; the ANSI strip is now printf-built so it works on BSD sed too). Behavior tests execute the real wrapper against fake commands: each wording retries once and succeeds (including an SGR-colored message), unrelated failures pass through with their original exit code, and a signature on both attempts fails after exactly one retry.
Fresh-eyes reviewInvestigation complete. Probes of the real wrapper (exit codes preserved in every case,
Regex bytes verified via Blocking issuesNone found. Important issuesNone found. Specifically checked and cleared:
Nits / questions
VerdictAPPROVE — the fix is correct, tightly scoped, well-tested, and every adversarial probe either retried harmlessly or passed through with its original exit code. The three nits (stale Prepare-step comment, lazy ANSI strip, unquoted-path test pin + annotation assertion) landed in 2c78558; 219 tests green. |
3D dependency graph (self-contained HTML)The page is fully self-contained: save it from either link and it opens offline. GitHub serves the raw gist as plain text, so the source link downloads; the render link views. |
|
Successfully created backport PR for |
…wrapper (#3594) (#3595) (#3596) * Retry the second phantom-store-path eval wording (#3594) The daily fuzz's Oct 26 scheduled run died at shell evaluation with 'error: getting attributes of path .../builder.pl: No such file or directory' — the same per-eval coin flip the retry wrapper exists for (#2774 / cachix/devenv#3064), in the stat-failure wording instead of the database-miss 'is not valid' wording the wrapper matched. Both wordings now retry once (quote-style tolerant; the ANSI strip is now printf-built so it works on BSD sed too). Behavior tests execute the real wrapper against fake commands: each wording retries once and succeeds (including an SGR-colored message), unrelated failures pass through with their original exit code, and a signature on both attempts fails after exactly one retry. * Review nits: lazy ANSI strip, unquoted-path pin, fresh action comment (#3594) (cherry picked from commit 2a22455)
Summary
Fixes the Oct 26 daily-fuzz failure (run 40320711358): the run died 49s into shell evaluation with
error: getting attributes of path "/nix/store/…-builder.pl": No such file or directory— the same per-eval coin flipretry-on-invalid-path.shexists to absorb (#2774 / cachix/devenv#3064), but in the stat-failure wording rather than the database-missis not validwording the wrapper's signature matched, so the one-retry conversion never ran. Closes #3594. The #3591 bootstrap fix from the prior day is uninvolved and intact — this failure is one layer earlier (eval, before any task ran).The wrapper now retries both phantom-missing-store-path wordings, tolerating either quote style; the ANSI strip is printf-built so it works on BSD sed as well as GNU (nix colorizes when it believes stderr is a terminal — run 40320711358's log carried raw SGR sequences between the tokens). All four consumers (devenv-setup Prepare/Build, e2e-suite, fuzz-daily Build images) get the widened match automatically.
Verification
scripts/tests/test_retry_on_invalid_path.py, thetest_podman_reexec_retrypattern) execute the real wrapper against fake commands: each wording retries once and succeeds (including an SGR-colored message), an unrelated failure passes through with its original exit code and no retry, and a signature on both attempts fails after exactly one retry.scripts/tests: 218 passed; xenon gate passed.Notes