Repository navigation
CI: give PHPUnit Feature's backup MySQL room for the whole suite - #767
Conversation
On #764's PHPUnit Feature run, the backup MySQL container died twice in a row near the end of the suite (connection refused, then its name no longer resolved) inside WorkflowTaskRepairRaceTest, and the third attempt passed. Locally, CI's exact MySQL image, flags and 512 MiB cap, running only the six test files that use it, grew from 305 MiB to 473 MiB (92% of the cap), peaking in the last two race-test files. Each of those creates and migrates fresh databases, and performance_schema, which the race tests read for lock waits, keeps the instrumentation. The suite grew with WorkerSessionRegistrationRaceTest (#740), which put the run within reach of the cap. The container now gets 1 GiB. A failed suite also records each test service's state (OOM-killed, exit code, finish time) and its last 40 log lines before cleanup, so the next service failure says why. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Security review accepts exact head The change only raises the isolated backup-MySQL cgroup ceiling from 512 MiB to 1 GiB and adds a failure-only, 40-line-bounded diagnostic for the three test service containers before their existing cleanup. It does not change workflow permissions, credentials, network publication, product code, or cleanup ownership. The diagnostic reads container state and application logs, not environment/config inspection; these services use only repository-visible fixture authentication (empty/trust database auth and static local S3 fixture values), so it does not add a live-secret disclosure path. The measured 473 MiB peak at a 512 MiB hard limit is consistent with the observed service death and gives a concrete reason for the bounded increase. This approval is exact-head/source only; the PHPUnit job and remaining hosted checks must still pass before merge. |
|
|
Independent source review of exact The backup MySQL remains bounded: memory and total memory/swap both move from512MiB to1GiB, preserving the no-swap constraint and the existing pinned image/server settings. The new failure diagnostic selects the three run/attempt/job-specific service names, reads only state/OOM/exit/error metadata and40log lines, and runs before their existing unconditional teardown. It adds no workflow permission, runner class or credential inspection. Scope: reviewed the exact diff and surrounding startup/teardown; no local service or test execution. Repository-contract and analysis checks are green at review time; the hosted PHPUnit Feature result and remaining checks are still required before merge. This does not substitute for the final import/native contract qualification. |
…-record-local-activity # Conflicts: # .github/workflows/server-parity.yml
…st-325-cancellation-scopes # Conflicts: # .github/workflows/server-parity.yml # docs/rust-server-port.md
…st-325-nexus-operations # Conflicts: # .github/workflows/server-parity.yml # docs/rust-server-port.md # rust/src/runtime/execution.rs # rust/tests/fixtures/unserved-php-routes.v2.11.1.txt



Fixes the intermittent PHPUnit Feature failure from #764 (run 40221723442). On attempts 1 and 2, the backup MySQL container died near the end of the suite inside
WorkflowTaskRepairRaceTest. Attempt 1 failed withConnection refused; attempt 2 found the container's name no longer resolved. Attempt 3 passed.Evidence
I ran CI's exact MySQL image, flags and
--memory 512mcap locally, against only the six test files that use it, sampling memory every 2 s:That round wasn't killed. Even so, 92% at the end of the suite matches CI losing the container at exactly that point.
Why it grows: each race test creates and migrates a fresh database, and
performance_schema, which the race tests read for lock waits, keeps its instrumentation.WorkerSessionRegistrationRaceTest(#740) added another set of those databases.Change
--memory 1g --memory-swap 1g, about twice its observed peak. The runner has 16 GB.status,oom_killed, exit code and finish time, plus its last 40 log lines. If a service dies again, the log will say why.PhpunitFeatureWorkflowContractTestandOpenApiDocumentEvolutionTestpass locally, as does the merge-group trigger test.🤖 Generated with Claude Code