Repository navigation
CI: SDK direction profiles in parallel lanes; deadline-health build off the critical path - #741
Conversation
In each database job of Shared Server fixtures, the nine published-SDK direction profiles ran one after another (two pairs already overlapped), about 22 of the job's 64-72 minutes (train #729, PostgreSQL 17 job 120866907013: 12:19:50 to 12:41:36). Each profile already has its own containers, PHP and embedded databases, evidence and state directory, and its own workflow-ID prefix on the shared native server. sdk-direction-lanes.sh now runs them in three lanes balanced by those durations, in order within a lane. Every profile runs even after another fails; the step fails if any did, after printing each profile's log in its own group. The job's existing cleanup steps still stop and remove every profile's containers. Expected saving: about 14 minutes per database job.
heartbeat_renews_only_progress_deadline_and_cannot_resurrect_elapsed_authority compared two lease_expires_at strings. Native times are whole milliseconds and serialize without a fraction on a whole second, so a claim lease of ...:26Z sorted after a renewal of ...:26.045Z and the assertion failed about one run in a thousand (train #729, PostgreSQL 17 job 120852521096). The test now parses both and reports the values.
Every database job waited for published-sdk-adapters (about 15 minutes), but 10 of those minutes built the optimized native binary only the codec-deadline-health cells use (train #729: "Build one bounded optimized native artifact for deadline health", 10.0 minutes). The build, its upload and its container cleanup now run in a codec-native-build job beside the adapters; codec-deadline-health needs both, and the database jobs still need only the adapters, so they start about 10 minutes sooner. The build script and its bounded resources are unchanged.
|
Security/reliability correction for current head
Please retire Integration note for the next PR: after #741 merges, #742 must explicitly account for the new independent |
|
Sonar reconciliation for current #741 head: the quality gate passes, but the branch has four open findings, all in the new lane wrapper.
These are narrow corrections and fit naturally with the requested per-profile server retirement/test. I do not recommend accepting four new findings as debt for this CI-efficiency change; please resolve them on the final head or record a specific contrary rationale. The GitHub workflow command remains recognized when emitted on stderr. |
…est the lane wrapper Each lane stops its profile's PHP server as soon as the profile ends, so at most three run at once, and a failed stop only warns. The profile's status is kept either way. A shell-level test runs the wrapper with stub profiles and docker: all nine profiles run, every server is stopped after its profile, a failed profile does not stop its lane, and the wrapper fails only after printing every status and log. Also resolves the wrapper's Sonar findings.
…and wait for it codec-native-build is a second root fixture job. It runs only through the change classifier, and the result needs it like every other fixture job.
|
Corrections for Security's two findings, at head
Also in this head, from earlier: the |
|
Security exact-head correction review for
The Security lifecycle/quality corrections are accepted at this immutable head. This does not waive the remaining hosted checks or authorize merging while they are unsettled. |
… the native server The namespace and selected-run signal profiles ran beside the plain signal profile, and on PostgreSQL 17 one's worker showed in another's routing diagnostics (server-parity-sdk-signals). The old serial workflow never overlapped them. A test now reads each profile's queues from its fixtures and refuses any two profiles that share one in different lanes.
|
Head The namespace-signal and selected-run-signal profiles ran in different lanes, but all three signal profiles use the task queue
The old serial workflow never overlapped these profiles. Lanes are now:
A new test reads each profile's queue names from its fixtures and refuses any two profiles that share a queue in different lanes. It fails against the previous layout; the lanes test now passes 6/6. This change is merged into #742 ( |
|



Part of #325. Security class: R0 (CI efficiency).
Why
Each database job of Shared Server fixtures takes 64-72 minutes. About 22 of those minutes are the nine published-SDK direction profiles, run one after another. On train #729's PostgreSQL 17 job 120866907013 they ran from 12:19:50 to 12:41:36. The fixture corpus itself takes about 5.5 minutes.
Change
sdk-direction-lanes.shruns the nine profiles in three concurrent lanes, balanced by those durations, in order within each lane. The profiles were already isolated from each other: each has its own containers, PHP and embedded databases, evidence and state directory, and its own workflow-ID prefix on the shared native server. Two of them already overlapped in the old step.Every profile runs even after another fails. The step fails if any did, and prints each profile's log in its own group. Cleanup is unchanged.
Expected saving: about 14 minutes per database job, which is the run's critical path. The run on this PR measures it.
Order
This merges after #729, so #729 does not need
mainagain.Also: the activity lease flake fix (from #735)
activity_deadlines::heartbeat_renews_only_progress_deadline_and_cannot_resurrect_elapsed_authoritycompared twolease_expires_atstrings. A lease on a whole second is written without a fraction (...:26Z), which sorts after...:26.045Z, so the test failed about one run in a thousand (train #729, PostgreSQL 17 job 120852521096). The test now compares parsed instants and prints both values. Test only.Also: the deadline-health build moves off the critical path
Every database job waited for
published-sdk-adapters, about 15 minutes. Ten of those minutes built the optimized native binary that only thecodec-deadline-healthcells use. That build now runs in its owncodec-native-buildjob beside the adapters, and the database jobs start about 10 minutes sooner. Together with the lanes, a run's critical path should drop from about 85 minutes to about 60.