Refuse a blank owner, and assemble the claim where the owner lives - #1550
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
ast-lol | 111139f | Commit Preview URL Branch Preview URL |
Sep 14 2026, 07:56 PM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
1d4-web | 111139f | Commit Preview URL Branch Preview URL |
Sep 14 2026, 07:55 PM |
2d81b8c to
1cdcc7f
Compare
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
iili | 111139f | Commit Preview URL Branch Preview URL |
Sep 14 2026, 07:56 PM |
Review panelFour read-only agents, four lenses (correctness/control flow; data access/SQL/resource safety; tests/docs/CI; altitude). Each hunted then tried to refute. Aggregation re-checked survivors against HEAD Headline: the change is the right second layer under #1549 — queue refusal + V004 CHECK + assembling 1 finding in the inline comments; soft notes below. Verified clean (not reported):
Soft notes (not blockers; fold or ignore)
The code is ready. The CI receipt for it is not — see the inline comment. Review panel via Cursor |
| // progress report inside the run, and the terminal write after it. Every one | ||
| // of those is fenced on the id the row was claimed under, so this is where a | ||
| // claim made under any other id shows up — as a lease nobody took. | ||
| TEST_F(PgQueueTest, ARunTakenThroughTheGateIsFencedAllTheWayToCompleted) { |
There was a problem hiding this comment.
should-fix (CI receipt): these suites — and OwnerNeverBlankConstraintTest — have no execution receipt on this head's required build-and-test.
On run 34859493099, scripts/diff-build reported 533 first-party impacted targets, then:
./scripts/diff-build: line 92: /usr/local/bin/bazel: Argument list too long
--- [diff-build] tests to run: 0
./scripts/diff-build: line 97: /usr/local/bin/bazel: Argument list too long
--- [diff-build] targets to build: 0
The bazel query "… set($TARGET_SET) …" failure is swallowed by | grep … || true, so the job exits 0 having run only //:buildifier_test. Postgres was up; nothing asked it to exercise the blank-owner or gate→COMPLETED paths. (#1549's green run had ~64 impacted → real one_d4_worker suites.)
Not a defect in the tests themselves — they look correctly shaped. Either:
- fix
scripts/diff-buildto fail loud (and/or feed targets via--target_pattern_file/ query-from-file so ARG_MAX cannot empty the set), or - land that fix and re-run, so this PR's claims have a CI receipt before merge.
asan on the same head is a separate infra miss (rust-redist 504 during Resolve target set) — also not a finding on this code, but another required check that never reached the new tests.
There was a problem hiding this comment.
Receipt on the rebased head (https://github.com/muchq/MoonBase/actions/runs/34889778959/job/104129247549): 533 impacted → tests to run: 73, targets to build: 56, executed 73 of 73, all pass — pg_queue_test, reanalysis_queue_test and OwnerNeverBlankConstraintTest among them, against the postgres service.
|
CI update on asan’s first fail was the rust-redist 504; the retry ran ~45m and passed — confirms it was infra, not a memory finding on this change. Its sanitizer target set also never included
|
|
build-and-test on this head ran nothing — 533 impacted targets blew the inlined query past ARG_MAX and the failure was swallowed. Fix is #1551; I'll rebase this once it lands so the new suites get a real run. |
Both queues refuse an empty owner with InvalidArgument before touching the row, and V004 adds CHECK (owner_id <> '') to both request tables, nulling existing blanks on the deploy that adds it. A blank is an owner no fence matches, so a row claimed under one neither completes nor retires. PlatformAdmission::Claim returns the job and its slot; ClaimOne moves the owner into the Claim after the queue's last read of it.
A run that never completes now fails the pool test at its assertion inside ten seconds rather than as a timeout on the whole target.
5683859 to
111139f
Compare
|
Rebased onto main with #1551; build-and-test is re-running and should show the new suites this time. Heal test now covers both tables. Not taking the whitespace-only owner: a " " owner is fenceable (its own heartbeat matches it), so it isn't the case that loops — the CHECK is scoped to the one that does. |
Two layers under #1549. Both queues refuse an empty owner with InvalidArgument before touching the row, and V004 adds
CHECK (owner_id <> '')to both request tables, nulling existing blanks on the deploy that adds it. Java only ever writes NULL there.PlatformAdmission::Claimno longer sees the owner;ClaimOneassembles theClaimafter the queue's last read of the string. The new gated test drivesIndexPoolthrough the gate over the real queue SQL to COMPLETED and kills a mutation that blanks the owner for the duration of the claim.