Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions test/check_ledger.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -2549,6 +2549,32 @@ iceberg_catalog iceberg_catalog malformed JSON is rejected (22P02), backend surv
iceberg_catalog iceberg_catalog resolves the named current snapshot, not snapshots[0] 15;16;17;18;19 2026-10-21 the resolver returns the first snapshot rather than the one named current
iceberg_catalog iceberg_catalog the decoy snapshot is not returned 15;16;17;18;19 2026-10-21 the resolver returns the first snapshot rather than the one named current
iceberg_catalog iceberg_catalog the first snapshot has no parent (NULL) 15;16;17;18;19 never -
iceberg_dv iceberg_dv ...and the refusal names the compressed footer 15;16;17;18;19 2026-10-21 columnar_puffin.c: a compressed Puffin footer (flags bit 0) is not refused
iceberg_dv iceberg_dv ...and the refusal names the format version 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a deletion vector in a format-version 2 table is not refused
iceberg_dv iceberg_dv a DV blob declaring a compression codec is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a deletion-vector blob may declare a compression codec
iceberg_dv iceberg_dv a DV entry without referenced_data_file is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV without referenced_data_file is not refused (a NULL path reaches strcmp and the backend dies)
iceberg_dv iceberg_dv a DV whose offset+size overflows int64 is refused, not read (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a DV's offset and size are not bounded by the blob region (a wild read kills the backend)
iceberg_dv iceberg_dv a DV with run containers and a high-bucket position decodes 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies only when strictly newer than the data (> where the spec says >=)
iceberg_dv iceberg_dv a Puffin path outside the table location is refused (22023) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: ice_open_path does not hold a path under the table location
iceberg_dv iceberg_dv a bitset-container DV decodes 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies only when strictly newer than the data (> where the spec says >=)
iceberg_dv iceberg_dv a compressed Puffin footer is refused (0A000) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a compressed Puffin footer (flags bit 0) is not refused
iceberg_dv iceberg_dv a corrupted DV CRC is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a deletion vector's CRC-32 is not checked
iceberg_dv iceberg_dv a deletion vector at an equal sequence number applies (survivors == oracle) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies only when strictly newer than the data (> where the spec says >=)
iceberg_dv iceberg_dv a deletion vector in a format-version 2 table is refused (0A000) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a deletion vector in a format-version 2 table is not refused
iceberg_dv iceberg_dv a deletion vector older than the data does not apply 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies whatever its sequence number (dv->seq >= d->seq always true)
iceberg_dv iceberg_dv a manifest/footer offset mismatch is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: the Puffin footer's blob need not match the manifest's offset and length (the !found refusal skipped)
iceberg_dv iceberg_dv a record_count that disagrees with the DV cardinality is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a manifest record_count that disagrees with the DV cardinality is not refused
iceberg_dv iceberg_dv a run container overflowing its 16-bit range is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a run container whose start+length passes 0x10000 is not refused
iceberg_dv iceberg_dv a run-optimized DV (cookie 12347) decodes 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies only when strictly newer than the data (> where the spec says >=)
iceberg_dv iceberg_dv a wrong DV blob magic is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_puffin.c: a deletion vector's magic sequence is not checked
iceberg_dv iceberg_dv an aliased duplicate DV (scheme vs no scheme) is refused (XX001) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: the one-DV-per-data-file check compares paths without stripping the file:// scheme
iceberg_dv iceberg_dv an applicable DV supersedes position-delete files for its data file 15;16;17;18;19 2026-10-21 columnar_iceberg.c: position-delete files apply even when a DV applies (no supersede)
iceberg_dv iceberg_dv backend still up after the DV applications 15;16;17;18;19 never -
iceberg_dv iceberg_dv backend still up after the DV refusals 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV without referenced_data_file is not refused (a NULL path reaches strcmp and the backend dies)
iceberg_dv iceberg_dv backend still up after the audit arms 15;16;17;18;19 2026-10-21 columnar_puffin.c: a DV's offset and size are not bounded by the blob region (a wild read kills the backend)
iceberg_dv iceberg_dv supersede is per data file, not global 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies to every data file, not only the one it references
iceberg_dv iceberg_dv two DV blobs in one Puffin file each apply to their own data file 15;16;17;18;19 2026-10-21 columnar_iceberg.c: a DV applies to every data file, not only the one it references
iceberg_dv iceberg_dv two DV entries for one data file are refused (XX001) 15;16;17;18;19 2026-10-21 columnar_iceberg.c: two DVs for one data file are not refused
iceberg_fdw_estimate iceberg_fdw_estimate a filtered scan estimates fewer rows than the whole table (selectivity applied) 15;16;17;18;19 2026-10-21 the Iceberg FDW sets rows directly, so the scan's selectivity never applies
iceberg_fdw_estimate iceberg_fdw_estimate backend alive 15;16;17;18;19 never -
iceberg_fdw_estimate iceberg_fdw_estimate the FDW estimates a positive row count from the manifests 15;16;17;18;19 never -
Expand Down Expand Up @@ -2876,6 +2902,18 @@ local_open_race_free local_open_race_free the partition coordinator never stats
local_open_race_free local_open_race_free the partition coordinator opens O_NONBLOCK (a FIFO cannot block its open) 15;16;17;18;19 2026-10-21 the partition coordinator opens without O_NONBLOCK
local_open_race_free local_open_race_free the race-free opener exists 15;16;17;18;19 never -
local_open_race_free local_open_race_free the racy stat-before-open helper is gone 15;16;17;18;19 2026-10-21 the racy PgColumnarRejectNonRegularFile helper comes back
logical_decoding_source logical_decoding_source 100x the rows does not give 100x the internal records 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source CONTROL: the heap table's 50 inserts ARE decoded 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source CONTROL: the second slot decodes the heap table's 5000 inserts 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source a columnar table emits no decodable change 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source although the rows are there 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source and it too emits no decodable change of its own 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source premise: both tables hold the same 50 rows 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source premise: the 100x table really holds 100x the rows 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source premise: the server is running at wal_level=logical 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source premise: the slot decoded something at all 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source premise: the slot exists and is logical 15;16;17;18;19 never -
logical_decoding_source logical_decoding_source the slot carries pgcolumnar's internal catalog instead 15;16;17;18;19 never -
maintenance_crash maintenance_crash after a crash with compact committed, the index reads the rows the scan reads 15;16;17;18;19 2026-10-16 pgcolumnar_index_fetch_tuple finds no row (columnar_tableam.c)
maintenance_crash maintenance_crash after a crash with compact committed, the table is as compact left it, with the same rows 15;16;17;18;19 never -
maintenance_crash maintenance_crash after a crash with compact uncommitted, the index reads the rows the scan reads 15;16;17;18;19 2026-10-16 pgcolumnar_index_fetch_tuple finds no row (columnar_tableam.c)
Expand Down
42 changes: 40 additions & 2 deletions test/check_ledger_budget.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#
# Adding a check to a suite that is already covered does not move it, which is
# what makes it safe to bound.
suites_not_covered 102
suites_not_covered 100
#
# checks_never_observed_red -- A CENSUS. NOT a ceiling, and it must not become
# one.
Expand Down Expand Up @@ -5439,4 +5439,42 @@ suites_not_covered 102
# never 3883 + 1 = 3884
# dated 2282 + 4 = 2286
# 3884 + 2286 == 6170
checks_never_observed_red 3884
# #1341, iceberg_dv seeded, with its twin (OffgridwithJD): 3884 -> 3885, and
# suites_not_covered 102 -> 101. The suite had no rows. It enters with 26 checks from
# five-major runs (all green on each of 15-19, shell and twin alike), after two fixes.
# "a manifest/footer offset mismatch is refused (XX001)" read the SQLSTATE alone, and
# several guards here raise XX001: with the offset match removed a later XX001 refused
# the same file, and main's shell passed 26/26. Every refusal now reads its own guard's
# message. And the three "backend still up" checks read SELECT 1, which answers again
# after crash recovery: with the referenced_data_file check removed a backend died on
# the arm, and main passed the survival check. They now also read the server log's
# count of killed backends, and each refusal waits for the server first, so a crash
# reddens its own arm and its section's survival check and nothing else. 25 are dated by
# seventeen mutations, each reddening the same names in both twins. 1 arrives never:
# the survival check after the DV applications, which no mutation crashed.
#
# ledger rows 6170 + 26 = 6196
# never 3884 + 1 = 3885
# dated 2286 + 25 = 2311
# 3885 + 2311 == 6196
#
# #1341, logical_decoding_source seeded, with its twin (OffgridwithJD): 3885 -> 3897,
# and suites_not_covered 101 -> 100. The suite had no rows. It enters with its 12
# checks, all green on each of 15-19 in shell and twin alike. The missing-plugin name
# pgc_skip records is now a literal both twins share, but it is a skip, not a check, so
# it has no row: CI has test_decoding and never emits it. After one fix.
# The second slot had no heap control: created after the 5000-row insert, it decoded
# nothing, and "it too emits no decodable change" and "100x the rows does not give 100x
# the internal records" (0 < anything) both passed, 11/11 on main. A heap table now writes
# through that slot in the same window and must decode its 5000 inserts, and the ratio
# check refuses a slot that carried no internal records. Under that harness mutation both
# are red in both twins. No source mutation reddens a check: the claim is that pgcolumnar
# writes nothing logical decoding can read, and a default chunk group of 100 rows still
# keeps the internal records following groups (114 for 50 groups, under the 10x bound).
# 0 are dated. 12 arrive never.
#
# ledger rows 6196 + 12 = 6208
# never 3885 + 12 = 3897
# dated 2311 + 0 = 2311
# 3897 + 2311 == 6208
checks_never_observed_red 3897
Loading
Loading