Repository navigation
CI: balance the two slowest fixture parts and keep repair-flake evidence - #759
Conversation
The existing-php-mysql-matrix native-tests part was the slowest fixture part, at 17 to 18 minutes; 13 of them were the execution suite at two test threads. A second part, native-tests-b, now runs half of that suite on its own runner. The bootstrap lists the suite, sorts the names bytewise and deals them round-robin, so every listed test runs in exactly one half and a new test joins one automatically. An empty selection fails the part. The other labels deal one shard, the whole suite, in native-tests as before. The selection is inline in the container command, so the Docker isolation policy still sees no repository script inside it. The parts test runs that exact awk program to check the halves are disjoint and complete. Checked against the current suite: each half selected 242 of 484 tests, and the second half's exact command passed all 242. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two recent single-job flakes (#754) were reference repair passes acting during a fixture phase: an embedded record ended with repair_count 1 on one of its tasks, and a published PHP record's heartbeat named a recreated task. The embedded record makes no wire requests, so its excerpt held only the error line, and the record itself is not retained. The excerpt now also lists every stored workflow task a failed case kept, by identity, type, status, attempt and repair counters and clock fields. Payloads, errors and lease owners are not read, so the next occurrence names the repaired task and when it was dispatched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The three signal SDK profiles share a task queue, so they had to run in one lane against the shared native node: 162 + 365 + 213 s on the existing PHP MySQL matrix, against about 545 s for each other lane, making the sdk-directions part the slowest after native-tests (16 min). Each sdk-directions part now starts a second native node with its own database (MySQL native_ref_b, PostgreSQL native_ref_b, SQLite rust-b.sqlite) and passes both URLs to the lanes script. The namespace-signal, timer and activity profiles run on node b. The two signal profiles that remain on node a share one lane, and the updates lane is unchanged. By the measured durations the slowest lane drops from 740 s to about 640 s. The lanes test now requires every lane to name its server, checks each profile runs on its declared server, allows a shared task queue across lanes only between different servers, and refuses a run without the second URL. Both nodes are removed by each job's existing cleanup; SQLite's cleanup now also removes rust-b. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lance-parts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Bounded Cloud wrapper review: exact head
This was source review plus synthetic shell/partition checks only. No native/shared/frozen implementation inspection or owner fixture execution. Full CI, real database/native qualification, measured queue/runtime improvement and merge remain with the Rust Server owner. Follow-up at exact |
SonarCloud's clear-text protocol rule (githubactions:S5332) flags curl URLs whose host is a shell expansion, as on the three per-node readiness loops. Loop over the fixed container URLs instead, as main's other probes do, and derive the evidence name from the URL. The probe test accepts a "$url/api/ready" target and still requires bounded timeouts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In #740's final fixtures run (40183862103) mysql-8.0 native-tests took 20.7 min against 21.0 for existing-php-mysql-matrix, almost all of it the bootstrap step's native build and execution tests. Halving only the existing matrix would leave mysql-8.0 as the run's longest part. Give mysql-8.0 the same two shards and its own native-tests-b combination; the parts test checks both labels' pairs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An added matrix combination's default job name lists every value it sets, so the native-tests-b jobs showed the database image digest. Name the jobs explicitly; the other combinations' names are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
CI receipt — exact head
|
| before | after | |
|---|---|---|
| Run wall time | 25.9 min | 21.6 min |
| Longest part | 21.0 (existing matrix native-tests) | 15.7 (existing matrix sdk-directions) |
| existing-php-mysql-matrix native-tests | 21.0 | 13.3 + 8.6 (-b) |
| mysql-8.0 native-tests | 20.7 | 12.9 + 9.9 (-b) |
| sdk-directions, mysql-8.0 / postgres-17 / existing pgsql / mariadb / SQLite | 17.1 / 17.0 / 15.8 / 15.3 / 14.0 | 15.3 / 14.4 / 11.0 / 11.8 / 8.9 |
| Jobs / runner minutes | 46 / 489 | 48 / 480 |
The two added jobs cost no extra runner minutes. Each part also builds the native binary, and the second SDK node's lanes recovered that cost. One SDK part varied upward: existing-matrix sdk-directions went 13.4 → 15.7, within the run-to-run spread this job has shown (12.8 on dc1872d31). The next longest parts are now the sdk-directions and mariadb/pgsql native-tests parts at 14–15 min, close enough that further splitting has diminishing returns.
The only failure in between, on dc1872d31, was the published PHP 2.11.1 SQLite reference losing a validation lease write to "database is locked". Root cause is on #754 (6397042102). A separate CI PR retries only that reference record.
…lite-reference-retry Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reviewed the remaining matrix-only delta from
Independently ran the existing |
…-pip Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dec-one-job Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



CI: balance the two slowest Shared Server fixtures parts, and keep repair-flake evidence.
Why. After #757, the slowest Shared Server fixtures part is
mysql-execution (existing-php-mysql-matrix, native-tests): 17–18 min across three runs (40162397220, 40169120328, 40173583253). Of that, 13 min is the native execution suite at two test threads (job 121097162404, 06:38:04 → 06:51:03). The same suite takes 13 min in total on mysql-8.0 and MariaDB, and 12–13 min on PostgreSQL. Every other part takes 10–13 min, exceptsdk-directionson the same label (16 min).What changes.
native-tests-b, on its own runner.native-testskeeps the MySQL database suite and TLS checks, and runs the first half of the execution suite.native-tests-bruns the second half.cargo test --test execution -- --list, sorted bytewise, dealt round-robin withawk. Every listed test runs in exactly one half, and a new test joins one automatically. An empty selection fails the part.Expected effect of this first commit. That part drops from 17–18 min to about 11–12 min.
Checks.
ServerParityPartsTest.mjs(run in PHPUnit Feature) now checks:awkprogram, that the two halves of a 489-name list are disjoint and complete and differ in size by at most one, and that one shard is the whole list.Second commit: flake diagnostics (#754). When a case fails, its excerpt now also lists every stored workflow task it kept: identity, type, status, attempt and repair counters, and clock fields. No payloads, errors or lease owners. The two newest flakes were reference repair passes acting mid-phase. One was an embedded record whose excerpt held only its error line, because embedded mode makes no wire requests. The next such failure will name the repaired task and when it was dispatched.
ServerParityFailureExcerptTest.mjsadds a case checking that the extra fields stay out.Third commit: the namespace-signal SDK profile gets its own native node.
sdk-directions(16 min on the existing PHP MySQL matrix) was the next slowest part. Its signal lane held all three signal profiles, because they share theserver-parity-sdk-signalstask queue: 162 + 365 + 213 = 740 s, against about 545 s for each other lane.native_ref_b, SQLiterust-b.sqlite) and passes both URLs tosdk-direction-lanes.sh.ServerParitySdkDirectionLanesTest.mjsnow checks that every lane names its server and each profile runs on its declared server. A task queue may be shared across lanes only between different servers. The script refuses to run without the second URL.native-b; SQLite's cleanup now also removesrust-b.Together: the two slowest parts were 17–18 and 16 min. They should land near the others (10–13 min), shortening the fixtures critical path by about 4–5 minutes.
Measured: I'll post this PR's own part timings after its run.
🤖 Generated with Claude Code