From 950a2a19276bc41034eb0d0121234c02a1431f58 Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Thu, 1 Oct 2026 05:52:18 -0700 Subject: [PATCH] Stabilize repack_decode isolation test. Commit 7164dcb66532 added the repack_decode isolation test, whose s1_decode step counts every change decoded from the slot. A concurrent autovacuum transaction that modifies only system catalogs is decoded as an empty BEGIN/COMMIT pair, so the count could come out larger than expected. Fix by passing skip-empty-xacts to test_decoding. We pass it, along with include-xids=0, to s1_decode_updates as well so that both steps use the same options for consistency, though that step shows only UPDATE lines and wasn't affected. Per buildfarm animal skink. Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/d704cde4-b1f2-48dc-8c5e-659d1128d286@gmail.com Backpatch-through: 19 --- .../modules/injection_points/expected/repack_decode.out | 8 +++++--- .../modules/injection_points/specs/repack_decode.spec | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/test/modules/injection_points/expected/repack_decode.out b/src/test/modules/injection_points/expected/repack_decode.out index b766ed544fe..f6c3d862457 100644 --- a/src/test/modules/injection_points/expected/repack_decode.out +++ b/src/test/modules/injection_points/expected/repack_decode.out @@ -22,11 +22,12 @@ injection_points_wakeup step s1_wait_before_lock: <... completed> step s1_decode: - SELECT count(*) FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1'); + SELECT count(*) FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1', + 'skip-empty-xacts', '1', 'include-xids', '0'); count ----- - 8 + 6 (1 row) injection_points_detach @@ -62,7 +63,8 @@ injection_points_wakeup step s1_wait_before_lock: <... completed> step s1_decode_updates: - SELECT data FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1') + SELECT data FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1', + 'skip-empty-xacts', '1', 'include-xids', '0') WHERE data LIKE '%UPDATE%'; data diff --git a/src/test/modules/injection_points/specs/repack_decode.spec b/src/test/modules/injection_points/specs/repack_decode.spec index c3efd9987b3..04f0df83a0a 100644 --- a/src/test/modules/injection_points/specs/repack_decode.spec +++ b/src/test/modules/injection_points/specs/repack_decode.spec @@ -40,13 +40,15 @@ step s1_wait_before_lock } step s1_decode { - SELECT count(*) FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1'); + SELECT count(*) FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1', + 'skip-empty-xacts', '1', 'include-xids', '0'); } # Show the decoded updates. The row loaded by setup carries a random TOAST # value, so only the updates are stable enough to display. step s1_decode_updates { - SELECT data FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1') + SELECT data FROM pg_logical_slot_peek_changes('s', NULL, NULL, 'include-rewrites', '1', + 'skip-empty-xacts', '1', 'include-xids', '0') WHERE data LIKE '%UPDATE%'; } teardown