Repository navigation
test(interaction-harness): the WebKit container lifts podman's process cap, which eight workers reached - #8912
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
…s cap, which eight workers reached Podman caps a container at 2,048 processes, threads included, and the WebKit container runs every worker's browser and the tests' own child processes. At eight workers on a loaded machine the cap was reached: WebKit could not start a new page's process, so `newPage` for trackMarker's decoding page, or that page's first evaluate, waited out the test. rectMorph's on-screen proof failed 8 of 12 that way at eight workers and passed at one. `--pids-limit=-1` leaves the container the host's own limits (docker takes the same flag). Red first, on meta#8329's tree at eight workers, eight tests a run: with the cap, every run hung 8 of 8 (seven runs, including runs without the shader-cache mount, with a fresh cache, and with the decoding page in a context of its own); without it, none hung in four runs (the proof's own on-screen assertion failed 0 to 2 times, a separate matter). The harness's touch and frame-evidence self-tests pass in WebKit with the flag.
a3e6549 to
5c7a475
Compare
PR Analysis Report📚 Storybook Preview🧪 Sandbox PreviewNo new or modified components detected. Bundle Size SummaryNo component packages changed. Accessibility AuditStatus: The accessibility audit did not run on this pull request. It runs after merges to Generated by PR Enrichment workflow | Storybook | Sandbox | View full report |
There was a problem hiding this comment.
No issues found: --pids-limit=-1 lifts podman's default 2,048-task cap on the WebKit container, reaches the engine before the image, and matches docker's default, so no spec, CI lane or caller-facing option changes. Nothing more is needed from you for this change.
[Automated review]
Why
At eight workers, WebKit specs in the container stopped starting pages:
trackMarker's decoding page never opened (newPage) or never answered its first evaluate, and the test timed out. rectMorph's on-screen proof failed 8 of 12 that way at eight workers and passed at one.What led to it
Podman caps a container at 2,048 processes, threads included, and
webkit-container.mjsruns every worker's browser and the tests' own child processes in one container. At eight workers the cap was reached, and WebKit could not start a new page's process. During a hang the browsers sat at 4 to 7% CPU: blocked, not starved.Options and tradeoffs
Why this choice
--pids-limit=-1leaves the container the host's own limits. That is docker's default, so podman now behaves as docker does, and docker takes the same flag. A comment beside the flag says why.How to check it
Run eight WebKit workers on a proof that tracks a marker, for example
node internal/interaction-harness/scripts/webkit-container.mjs --workers=8 --repeat-each=8 <spec>: no test hangs innewPage.Evidence
Local gates at 5c7a475: Prettier passes on the changed file, which ESLint skips by the repository's own ignore pattern; the harness typecheck and the root build pass; the core UI suite passes; the node project passes except two process-timing cases in
packages/cli/foundation/release/cache.test.mjs, which pass when that file runs alone (34 of 34), on this head and on main; the harness browser spec passes in Chromium (51 of 51) and in WebKit (43 passed, 8 skipped) at eight workers in the container.