Skip to content

Fix update-validation probe timing across retries - #870

Merged
rmcdaniel merged 3 commits into
mainfrom
fix/825-update-validation-request-timer
Oct 30, 2026
Merged

rmcdaniel merged 3 commits into
mainfrom
fix/825-update-validation-request-timer

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

The background update-validation request reset its timer on every lock-pressure retry, so an accepted or cached response reported only the last attempt. Measure elapsed time once with a monotonic clock across all attempts and backoff. Frozen timing bounds, retry policy and product runtime are unchanged.

Validation:

  • The actual extracted PHP child program and real retry policy execute against loopback HTTP. Old code fails both elapsed-time cases while cached-response and unrelated-error controls pass (2 fail / 2 pass); fixed code passes all four, preserving retry request bodies and accepted/cached responses.
  • Combined source c108ed328de8360aa05589f01a66eed35c331977 passes 114 focused Node tests, covering timing/retry, selection, cache/image-pull boundaries, aggregate handling and child retries. Actionlint passes. The earlier existing PHP retry-policy suite passes 6 tests / 70 assertions. The timer PHP and new regression file remain byte-identical to reviewed 5eddc262 after integrating main.
  • Published Server 2.11.7 / Core 2.15.7 PHP-only MariaDB corpus passes 83/83 with exact runner 5eddc262. Tuple, stock envelope and known-defect limits. That run had no retry notes; the focused real-HTTP controls prove retry timing.
  • The timing test is included in the normal parity workflow selection and execution list. The combined main integration retains child-retry and child-visibility entries. One argument per continued line preserves the exact comparator argv while reducing repeated fixture-addition conflicts.

Fresh hosted checks on current combined head c108 are pending. Its old merge-queue entry was removed on the base conflict; return through the normal queue after current-head checks pass. Combined-source receipt. The trusted-main native v2 dependency cache is seeded; actual equivalent-input restore and timing evidence remain required before a performance claim.

Refs #825. This repairs probe evidence; the historical approved-update HTTP 500 remains uncorrelated.

@rmcdaniel rmcdaniel left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Security source review at immutable head 5eddc262dea97b3c99f5188ba9577eb15c692a48: no finding.

The change moves one monotonic hrtime(true) origin before the existing bounded retry loop and reports elapsed nanoseconds after the terminal accepted, cached, or unchanged error response. It does not alter the retry admission rule, retry count/wait bounds, request bytes, idempotency key, authentication, response selection, runtime, or frozen reference behavior.

The focused test runs the actual extracted child program and the actual lockPressureOperationRetryDelay policy over loopback HTTP. It proves refused-attempt delay plus every backoff is included, identical bodies are replayed, the original accepted/cached receipt survives, and unrelated failures are not retried. The test is included in both the workflow path filter and the executed parity list. General's counterfactual old-helper result (two elapsed cases fail while two preservation controls pass), corrected 26/26 Node result, and existing 6-test/70-assertion PHP retry controls support the intended boundary.

This accepts the source correction. Normal hosted checks and the owning full published-PHP corpus follow-through remain required; this timing repair does not diagnose the historical approved-update HTTP 500.

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 29, 2026 22:43
@rmcdaniel
rmcdaniel added this pull request to the merge queue Oct 29, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 29, 2026
@rmcdaniel

Copy link
Copy Markdown
Member Author

Current main is integrated normally at a9f946244f0a785a46922cb1588db8f7b06d45b8, after #869 merged as 8ace5c15900d1199fb69766394f6a95b0498992b. The one workflow-list conflict retains both the child-retry contract test and update-validation timing test. Timer PHP/helper and regression-test bytes are unchanged from reviewed 5eddc262.

Combined local checks pass: 108 Node tests, no failures/skips, covering fixture selection, retry/timing, native cache/image-pull boundaries, aggregate handling and child retries. Actionlint and the staged whitespace check pass. No Rust build ran as part of this workflow-only integration.

Fresh hosted PR checks are automatic and pending, including Shared Server fixtures 40969563370. The earlier exact-head gates remain evidence for 5edd, not a claim that a9f is green. The old queue entry was removed on conflict; re-enter the normal queue after the current-head checks complete. Trusted-main native v2 seeding is verified in #871; record this new equivalent-input restore and actual timing before claiming a performance improvement.

@rmcdaniel
rmcdaniel added this pull request to the merge queue Oct 29, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 30, 2026
@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel

rmcdaniel commented Oct 30, 2026 •

Copy link
Copy Markdown
Member Author

Current main #874 is integrated normally at c108ed328de8360aa05589f01a66eed35c331977. The second comparator-list conflict is resolved by retaining the exact union of main's child-visibility test and this PR's timing test. The command now lists one test argument per continued line. Its parsed argument vector is unchanged apart from the already intended timing entry, reducing repeated conflicts when independent fixture tests are added.

The timing PHP/helper and regression-test blobs remain byte-identical to reviewed5edd. Combined focused checks pass 114 Node tests, no failures/skips, and actionlint/whitespace pass. Security independently confirms the helper/test byte identity and exact comparator argv. Current-head hosted checks are now complete: Shared run40978243986 is SUCCESS, and all57 PR checks are complete with no failures. It entered the normal protected merge queue at 2026-10-30 00:48:36 UTC, position1. Merge-group and main follow-through remain pending; no administrator bypass was used.

The earlier a9f Shared run40969563370 completed43/43 and its other checks passed, then it entered the normal queue at23:40:28. The #874 base advance removed it on conflict; those green results are retained for a9f and are not proof this current head is green. The current c108 queue entry now follows the successful fresh qualification. The historical approved-update HTTP500 remains a separate unresolved scope in #825.

Protected delivery: merged 6c1e63d at2026-10-30 01:14:27 UTC. Its normal merge-group Shared40982037136 and PHP40982037221 both succeed; no bypass. Normal main Shared40984638681/PHP40984638686/Sonar40984638635 are running on that exact commit. The separate historical500 disposition in825 remains open.

@rmcdaniel
rmcdaniel added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit 6c1e63d Oct 30, 2026
57 checks passed
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