Skip to content

test: #1339 findings in collation_change, tier_partition and column_extent, in both twins - #1351

Merged
jdatcmd merged 3 commits into
commandprompt:mainfrom
OffgridwithJD:test/1339-collation-tier
Oct 14, 2026
Merged

jdatcmd merged 3 commits into
commandprompt:mainfrom
OffgridwithJD:test/1339-collation-tier

Conversation

@OffgridwithJD

Copy link
Copy Markdown
Collaborator

Part of #1339: the first batch of the files you assigned me, as claimed there. Each fix was shown red first: the named mutation leaves main green and turns this branch red, in both twins. Where main was already red, I say so.

collation_change (round two, items 2 and 7)

finding proof
cannot_run("no en_US collation"): not a reason in UNRUNNABLE_REASONS Lookup pointed at a collation that doesn't exist. main: VacuityError: unrunnable reason 'no en_US collation' is not one of (…). here: UNRUN … MISSING_DEPENDENCY: no en_US collation, and the run exits 67, as an unexpected unrunnable must.
same() / same2() / _same said "same" for two empty answers The min/max arm's query pointed at an empty set (a test-side edit, to show the helper). main: 11/11. here: columnar [] heap [] in both twins.
The extent arm passed when column_extent() returned nothing A new arm requires that before the change the extent holds C's bound. The arm after it accepts "none" by design (the fix forgets the extent). With column_extent() returning no row: main 11/11 and pytest green; here got [none] want [B0|m6], red in both twins.

tier_partition:150 (weak)

The other-wrapper refusal now also requires that no file was written. This is an accuracy fix, not a closed gap. With the wrong-wrapper branch removed, main's arm was already red (HV00D, not 42809), so the SQLSTATE alone caught that mutation. The arm now also states what a refusal after the export would leave behind: HV00D|file.

column_extent

finding proof
:288 / :225: "TRUNCATE removes", "DROP TABLE removes them" and "it did move" proved the removal or movement of an extent nobody showed existed "Fifty committing writers leave a bounded number of extent rows" now also requires at least one, and new arms require an extent before expire and rows before DROP. With no extent row ever written (PgColumnarExtentPreCommit returns at once), main's fifty-writers, TRUNCATE and DROP arms all pass; here they're red.
:306: a 42501 for a role without SELECT could also come from a function refused to everyone Control: given SELECT, the same role reads the extent. With column_extent() refused to every non-superuser: main 36/36 green; here the control is red (42501).
:129 / :237: premise: on parallel_copy, expire and compact_rewrite, which are product code Renamed to arms in both twins, with ledger history kept (#1236). expire returning 0 and compact_rewrite returning 0 each redden theirs, so both are dated. The parallel_copy one stays never.

Evidence

  • Clean: collation_change 12/12 and column_extent 39/39 on each of 15–19. tier_partition 71/71 on 18–19, and 70 + 1 named SKIP on 15–17 (as on main). The three pytest files pass on each.
  • compare_to_bash: 0 missing for all three. shellcheck -S warning is clean. The guard half passes. No pytest tests added; the new arms live inside existing tests.
  • Ledger: four new rows (all dated) and three renames. Rows 2316 → 2320, never 1796 → 1794. No dated premise: added: the count is 27, the same as main's, which test: no premise the ledger has seen go red, and a gate rule against it (#1236) #1347 handles. Gate against origin/main: census agrees, ceiling 246.

Next from my list: test_partition_lifecycle (:92, :203, :497, :77), after #1350 merges, because it uses #1350's refusal() helper. Then test_ttl_expire, test_iceberg_fdw:367 and test_prepared_writes:89.

🤖 Generated with Claude Code

@jdatcmd

jdatcmd commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

@OffgridwithJD, I reviewed f041080 and reproduced the column_extent claim on PG18. PgColumnarExtentPreCommit returns at once, so no extent row is ever written:

  • main: "fifty committing writers leave a bounded number of extent rows" and the TRUNCATE/DROP arms are not among the 18 failures, so they pass on an empty catalog.
  • this head: fifty committing writers …: got [no (0)], before DROP the table has extent rows to remove: got [false], and before expire the extent covers the table: got [none]. Red as you describe.

The tier_partition note is honest: it's an accuracy fix, since main was already red there. The same() empty-answer guard and the cannot_run reason fix both read right.

Needs a rebase before I approve. Your base is d0ae0b1; main is now d926b62 (#1346) at 2321 / 1798. With your four dated rows and three renames that should come to 2325 / 1796. I'll approve and merge on the rebased head with green CI. #1350 is in the same position; whichever of yours lands first, the other restates.

@jdatcmd jdatcmd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving the content at f041080. On PG18 I reproduced the column_extent claim: with PgColumnarExtentPreCommit writing nothing, main's fifty-writers, TRUNCATE and DROP arms pass, and here they are red. The other findings read right, and the tier_partition arm is correctly called an accuracy fix.

Not mergeable yet: check_ledger_budget.txt conflicts with main (74cde39) at 2321 / 1798. With your four dated rows and three renames I expect 2325 / 1796. Rebase, restate from a recount, and I'll check the ledger and merge.

@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

@jdatcmd, rebased onto main 74cde39 (#1346 and #1352 merged). The new head is 3b7c4cd, replacing f041080.

  • Conflict: only check_ledger_budget.txt, restated on top of fix: refuse a build whose PG_CONFIG gives no PGXS, before any probe reads stdin (#1344) #1346's block: 2325 rows / 1796 never (2321 + 4, never 1798 − 2), matching your figure.
  • Patch unchanged: outside the budget, the changed lines match f041080's exactly.
  • Ledger: the tsv auto-merged. It equals main plus my delta: the four new rows, three renames carrying their history, and the two re-datings. Nothing of main's moved, and there are no duplicate keys.
  • Gate: over the five-major collation_change, tier_partition and column_extent logs, --against origin/main, rc=0. The census agrees at 1796 and the ceiling stays 246 → 246.
  • Database-free set: 427 passed.

@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

@jdatcmd, rebased again, onto 95b4112 (#1347 merged). The new head is 1b802ff, replacing 3b7c4cd.

Whichever of this and #1354 lands second restates.

jdatcmd and others added 3 commits October 14, 2026 00:31
…dings in both twins

collation_change (round two, items 2 and 7):
- The pytest twin called cannot_run with "no en_US collation", which is not
  one of UNRUNNABLE_REASONS, so a server without en_US raised VacuityError
  instead of recording the test unrunnable. It is MISSING_DEPENDENCY now.
  Shown with the lookup pointed at a collation that does not exist: main
  raises VacuityError; here, UNRUN MISSING_DEPENDENCY (and the run exits 67,
  as an unexpected unrunnable must).
- same()/same2()/_same said "same" for two empty answers. They now require
  one. With the min/max query pointed at an empty set: main passes 11/11;
  here, "columnar [] heap []" in both twins.
- The extent arm accepts "none", because the fix forgets the extent, so a
  column_extent() that never returns a row passed it. A new arm requires
  the extent to hold C's bound before the change. Under column_extent()
  returning no row: main 11/11 and pytest green; here red in both twins.

tier_partition:150: the other-wrapper refusal also requires that no file
was written. With the wrapper branch removed, main's arm was already red
(HV00D, not 42809), so this is an accuracy fix: the arm now says what a
refusal after the export would leave behind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- :288/:225: TRUNCATE, DROP and "it did move" proved removal or movement of
  an extent nobody showed existed. "Fifty committing writers leave a bounded
  number of extent rows" now also requires at least one, and new arms
  require an extent before expire and rows before DROP. With no extent row
  ever written, main's fifty-writers, TRUNCATE and DROP arms all PASS; here
  each of those three is red.
- :306: the 42501 for a role without SELECT has a control: given SELECT, the
  same role reads the extent. Under column_extent() refused to every
  non-superuser, main is 36/36 green; here the control is red.
- :129/:237: three checks named premise: test product code (parallel_copy,
  expire, compact_rewrite) and are arms (commandprompt#1236), renamed in both twins.
  expire returning 0 and compact_rewrite returning 0 redden two of them.
Clean: 39/39 and pytest 7 passed on each of 15-19.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt fixes (commandprompt#1339)

Five-major clean runs of the three suites, each mutation merged with
--target naming every arm it reddens. Three column_extent rows renamed
(premise: dropped) with their history. Rows 2316 -> 2320, never 1796 -> 1794.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@OffgridwithJD
OffgridwithJD force-pushed the test/1339-collation-tier branch from 1b802ff to 9c1113c Compare October 14, 2026 00:32
@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

@jdatcmd, rebased onto 8af86e8 (#1350 merged). The new head is 9c1113c, replacing 1b802ff.

Ledger: 2340 / 1801, as you expected.

Conflicts.

Test files. Their changed lines match 1b802ff exactly. tier_partition.sh and its twin carry both #1350's arms and mine, auto-merged. My PG17 slot is busy, so this PR's CI is the first run of the merged file.

Checks.

  • Gate: --against origin/main gives rc=0, the census agrees at 1801, and the ceiling stays 246 → 246.
  • Database-free set: 429 passed.

I'll ping when CI is green.

@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

@jdatcmd, CI is green on 9c1113c: 15/15, including the merged tier_partition suite on every major. Ready for your re-approval and merge. Next in your queue: #1353, which I'll rebase as soon as this lands.

@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

A correction to my last comment. I said CI ran the merged tier_partition suite on every major. It doesn't: the suite matrix and the cluster pytest run on PG 17 and 18 only (both PASS tier_partition). I'm running tier_partition and test_tier_partition.py on this head on 15, 16 and 19 myself, and will post the numbers. Treat 'ready' as pending that.

@jdatcmd jdatcmd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-approving 9c1113c.

  • Ledger: a recount gives 2340 / 1801, which agrees with the budget. No duplicate keys, no dated premise: row.
  • Patch: the collation_change and column_extent files are byte-identical to f041080, the head I reviewed. The tier_partition changes are the same patch as before; only the lines #1350 added around them moved.
  • Database-free set: 429 passed on this head.

Merging.

@jdatcmd
jdatcmd merged commit bd99606 into commandprompt:main Oct 14, 2026
15 checks passed
@OffgridwithJD

Copy link
Copy Markdown
Collaborator Author

The promised numbers for the merged head 9c1113c, now on main. They cover the majors CI doesn't run:

major tier_partition.sh test_tier_partition.py
15 72 passed + 1 named SKIP (virtual generated columns, PG18+) 3 passed, 1 UNRUN, UNSUPPORTED_MAJOR
16 72 + 1 named SKIP 3 passed, 1 UNRUN
19 73/73 3 passed

With CI's 17 and 18, the merged file of #1350's arms and mine is green on all five.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants