From e0f633ca6bc6a2ace3e6c0e79157c3bf0edddfbe Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 5 Oct 2026 11:11:08 +0900 Subject: [PATCH] Skip isolation tests that terminate other backends on Windows On Windows, a backend exiting resets its connection, and the client discards any data not yet read, including the FATAL message of a terminated backend. isolationtester polls one connection at a time, so when it waits on a different session the message can get lost, failing the permutation and the tests that run after it. wait_cleanup in injection_points (down to v17) and slot_creation_error in test_decoding (down to v15) have this pattern, and have been failing randomly in the buildfarm. Let's skip them on Windows. The cause of the instabilities is proving to be tricky to deal with, pointing for example at 29992a6a509b. This will be tackled later, perhaps with a backpatch (or perhaps with a HEAD-only solution), but it is difficult to be sure at this stage of the work. In theory, a8458f508a7 should make a revert of 29992a6a509b (revert of a revert!) safe on WIN32. Note that 278cdea6b9d2, that has introduced the isolation test slot_creation_error in test_decoding, has mentioned the potential output instability. Author: Zsolt Parragi Author: Michael Paquier Discussion: https://postgr.es/m/CAN4CZFOoiKa9E4Gnh_OzLk3S5Z6RFyg_oY1e_WddCVYhkpTVow@mail.gmail.com Backpatch-through: 15 --- contrib/test_decoding/Makefile | 8 +++- contrib/test_decoding/meson.build | 40 +++++++++------- src/test/modules/injection_points/Makefile | 7 ++- src/test/modules/injection_points/meson.build | 46 +++++++++++-------- 4 files changed, 64 insertions(+), 37 deletions(-) diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefile index 0111124399a..a7f7b7ae789 100644 --- a/contrib/test_decoding/Makefile +++ b/contrib/test_decoding/Makefile @@ -6,9 +6,15 @@ PGFILEDESC = "test_decoding - example of a logical decoding output plugin" REGRESS = ddl xact rewrite toast permissions decoding_in_xact \ decoding_into_rel binary prepared replorigin time messages \ repack spill slot truncate stream stats twophase twophase_stream + +# slot_creation_error terminates another backend, whose FATAL message can be +# lost on Windows, making the test unstable there. +# See https://postgr.es/m/088AB35D-0860-494A-A9CF-8B301543AA51@yandex-team.ru +SLOT_CREATION_TST = $(if $(filter win32,$(PORTNAME)),,slot_creation_error) + ISOLATION = mxact delayed_startup ondisk_startup concurrent_ddl_dml \ oldest_xmin snapshot_transfer subxact_without_top concurrent_stream \ - twophase_snapshot slot_creation_error catalog_change_snapshot \ + twophase_snapshot $(SLOT_CREATION_TST) catalog_change_snapshot \ skip_snapshot_restore invalidation_distribution parallel_session_origin REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf diff --git a/contrib/test_decoding/meson.build b/contrib/test_decoding/meson.build index ac655853d26..dbc0ef0f63e 100644 --- a/contrib/test_decoding/meson.build +++ b/contrib/test_decoding/meson.build @@ -16,6 +16,29 @@ test_decoding = shared_module('test_decoding', ) contrib_targets += test_decoding +test_decoding_isolation = [ + 'mxact', + 'delayed_startup', + 'ondisk_startup', + 'catalog_change_snapshot', + 'concurrent_ddl_dml', + 'oldest_xmin', + 'snapshot_transfer', + 'subxact_without_top', + 'concurrent_stream', + 'twophase_snapshot', + 'skip_snapshot_restore', + 'invalidation_distribution', + 'parallel_session_origin', +] + +# slot_creation_error terminates another backend, whose FATAL message can be +# lost on Windows, making the test unstable there. +# See https://postgr.es/m/088AB35D-0860-494A-A9CF-8B301543AA51@yandex-team.ru +if host_system != 'windows' + test_decoding_isolation += 'slot_creation_error' +endif + tests += { 'name': 'test_decoding', 'sd': meson.current_source_dir(), @@ -51,22 +74,7 @@ tests += { 'runningcheck': false, }, 'isolation': { - 'specs': [ - 'mxact', - 'delayed_startup', - 'ondisk_startup', - 'catalog_change_snapshot', - 'concurrent_ddl_dml', - 'oldest_xmin', - 'snapshot_transfer', - 'subxact_without_top', - 'concurrent_stream', - 'twophase_snapshot', - 'slot_creation_error', - 'skip_snapshot_restore', - 'invalidation_distribution', - 'parallel_session_origin', - ], + 'specs': test_decoding_isolation, 'regress_args': [ '--temp-config', files('logical.conf'), ], diff --git a/src/test/modules/injection_points/Makefile b/src/test/modules/injection_points/Makefile index 136f0f77951..1d7d4d66d11 100644 --- a/src/test/modules/injection_points/Makefile +++ b/src/test/modules/injection_points/Makefile @@ -14,6 +14,11 @@ EXTRA_INSTALL = contrib/test_decoding REGRESS = injection_points hashagg reindex_conc vacuum REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress +# wait_cleanup terminates another backend, whose FATAL message can be lost +# on Windows, making the test unstable there. +# See https://postgr.es/m/088AB35D-0860-494A-A9CF-8B301543AA51@yandex-team.ru +WAIT_CLEANUP_TST = $(if $(filter win32,$(PORTNAME)),,wait_cleanup) + ISOLATION = basic \ inplace \ reindex_concurrently_deferred \ @@ -27,7 +32,7 @@ ISOLATION = basic \ ri_fastpath_reindex \ ri_fastpath_snapshot \ syscache-update-pruned \ - wait_cleanup \ + $(WAIT_CLEANUP_TST) \ heap_lock_update \ on_conflict_probe_window diff --git a/src/test/modules/injection_points/meson.build b/src/test/modules/injection_points/meson.build index b74ea0f0ca1..b4a0079484b 100644 --- a/src/test/modules/injection_points/meson.build +++ b/src/test/modules/injection_points/meson.build @@ -26,6 +26,32 @@ test_install_data += files( 'injection_points--1.0.sql', ) +injection_points_isolation = [ + 'basic', + 'inplace', + 'reindex_concurrently_deferred', + 'repack', + 'repack_commit_race', + 'repack_decode', + 'repack_dropped', + 'repack_missingval', + 'repack_temporal', + 'repack_temporal_multirange', + 'repack_toast', + 'ri_fastpath_reindex', + 'ri_fastpath_snapshot', + 'syscache-update-pruned', + 'heap_lock_update', + 'on_conflict_probe_window', +] + +# wait_cleanup terminates another backend, whose FATAL message can be lost +# on Windows, making the test unstable there. +# See https://postgr.es/m/088AB35D-0860-494A-A9CF-8B301543AA51@yandex-team.ru +if host_system != 'windows' + injection_points_isolation += 'wait_cleanup' +endif + tests += { 'name': 'injection_points', 'sd': meson.current_source_dir(), @@ -42,25 +68,7 @@ tests += { 'runningcheck': false, }, 'isolation': { - 'specs': [ - 'basic', - 'inplace', - 'reindex_concurrently_deferred', - 'repack', - 'repack_commit_race', - 'repack_decode', - 'repack_dropped', - 'repack_missingval', - 'repack_temporal', - 'repack_temporal_multirange', - 'repack_toast', - 'ri_fastpath_reindex', - 'ri_fastpath_snapshot', - 'syscache-update-pruned', - 'wait_cleanup', - 'heap_lock_update', - 'on_conflict_probe_window', - ], + 'specs': injection_points_isolation, 'runningcheck': false, # see syscache-update-pruned # Some tests wait for all snapshots, so avoid parallel execution 'runningcheck-parallel': false,