From dede9ad2366fb4987af96a8dd4d6a33e9f832676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Mon, 24 Nov 2025 18:46:24 +0100 Subject: [PATCH] Improve test case stability Author: Mihail Nikalayeu --- src/backend/utils/time/snapmgr.c | 1 + .../index-concurrently-upsert-predicate.out | 11 +++++++--- .../expected/index-concurrently-upsert.out | 11 +++++++--- .../index-concurrently-upsert-predicate.spec | 21 ++++++++++++------- .../specs/index-concurrently-upsert.spec | 19 +++++++++++------ 5 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 24f73a49d27..434abbf6b6f 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -459,6 +459,7 @@ InvalidateCatalogSnapshot(void) pairingheap_remove(&RegisteredSnapshots, &CatalogSnapshot->ph_node); CatalogSnapshot = NULL; SnapshotResetXmin(); + INJECTION_POINT("pre-invalidate-catalog-snapshot-end", NULL); INJECTION_POINT("invalidate-catalog-snapshot-end", NULL); } } diff --git a/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate.out b/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate.out index af602bdc048..3d9512c8fc7 100644 --- a/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate.out +++ b/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate.out @@ -1,6 +1,6 @@ -Parsed test spec with 4 sessions +Parsed test spec with 5 sessions -starting permutation: s3_start_create_index s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert s4_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 +starting permutation: s5_noop s3_start_create_index s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert s5_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 injection_points_attach ----------------------- @@ -16,12 +16,16 @@ injection_points_attach (1 row) +step s5_noop: + step s3_start_create_index: CREATE UNIQUE INDEX CONCURRENTLY tbl_pkey_special_duplicate ON test.tbl(abs(i)) WHERE i < 10000; +s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end step s1_start_upsert: INSERT INTO test.tbl VALUES(13,now()) ON CONFLICT (abs(i)) WHERE i < 100 DO UPDATE SET updated_at = now(); +step s5_noop: <... completed> step s4_wakeup_define_index_before_set_valid: SELECT injection_points_detach('define-index-before-set-valid'); SELECT injection_points_wakeup('define-index-before-set-valid'); @@ -39,7 +43,7 @@ injection_points_wakeup step s2_start_upsert: INSERT INTO test.tbl VALUES(13,now()) ON CONFLICT (abs(i)) WHERE i < 100 DO UPDATE SET updated_at = now(); -step s4_wakeup_s1_from_invalidate_catalog_snapshot: +step s5_wakeup_s1_from_invalidate_catalog_snapshot: SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); @@ -81,6 +85,7 @@ injection_points_wakeup (1 row) +s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end step s1_start_upsert: <... completed> step s2_start_upsert: <... completed> step s3_start_create_index: <... completed> diff --git a/src/test/modules/injection_points/expected/index-concurrently-upsert.out b/src/test/modules/injection_points/expected/index-concurrently-upsert.out index eb6fd9592df..a9e8bb5d00e 100644 --- a/src/test/modules/injection_points/expected/index-concurrently-upsert.out +++ b/src/test/modules/injection_points/expected/index-concurrently-upsert.out @@ -1,6 +1,6 @@ -Parsed test spec with 4 sessions +Parsed test spec with 5 sessions -starting permutation: s3_start_create_index s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert s4_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 +starting permutation: s5_noop s3_start_create_index s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert s5_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 injection_points_attach ----------------------- @@ -16,12 +16,16 @@ injection_points_attach (1 row) +step s5_noop: + step s3_start_create_index: CREATE UNIQUE INDEX CONCURRENTLY tbl_pkey_duplicate ON test.tbl(i); +s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end step s1_start_upsert: INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); +step s5_noop: <... completed> step s4_wakeup_define_index_before_set_valid: SELECT injection_points_detach('define-index-before-set-valid'); SELECT injection_points_wakeup('define-index-before-set-valid'); @@ -39,7 +43,7 @@ injection_points_wakeup step s2_start_upsert: INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); -step s4_wakeup_s1_from_invalidate_catalog_snapshot: +step s5_wakeup_s1_from_invalidate_catalog_snapshot: SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); @@ -81,6 +85,7 @@ injection_points_wakeup (1 row) +s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end step s1_start_upsert: <... completed> step s2_start_upsert: <... completed> step s3_start_create_index: <... completed> diff --git a/src/test/modules/injection_points/specs/index-concurrently-upsert-predicate.spec b/src/test/modules/injection_points/specs/index-concurrently-upsert-predicate.spec index 13897d88bce..725f6f22295 100644 --- a/src/test/modules/injection_points/specs/index-concurrently-upsert-predicate.spec +++ b/src/test/modules/injection_points/specs/index-concurrently-upsert-predicate.spec @@ -5,7 +5,7 @@ # - s2: UPSERT the same tuple # - s3: CREATE UNIQUE INDEX CONCURRENTLY (with a predicate) # -# - s4: control concurrency via injection points +# - s4 and s5: control concurrency via injection points setup { @@ -27,6 +27,7 @@ setup { SELECT injection_points_set_local(); SELECT injection_points_attach('check-exclusion-or-unique-constraint-no-conflict', 'wait'); + SELECT injection_points_attach('pre-invalidate-catalog-snapshot-end', 'notice'); SELECT injection_points_attach('invalidate-catalog-snapshot-end', 'wait'); } step s1_start_upsert @@ -62,11 +63,6 @@ step s4_wakeup_s1 SELECT injection_points_detach('check-exclusion-or-unique-constraint-no-conflict'); SELECT injection_points_wakeup('check-exclusion-or-unique-constraint-no-conflict'); } -step s4_wakeup_s1_from_invalidate_catalog_snapshot -{ - SELECT injection_points_detach('invalidate-catalog-snapshot-end'); - SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); -} step s4_wakeup_s2 { SELECT injection_points_detach('exec-insert-before-insert-speculative'); @@ -78,11 +74,22 @@ step s4_wakeup_define_index_before_set_valid SELECT injection_points_wakeup('define-index-before-set-valid'); } +session s5 +step s5_noop +{ +} +step s5_wakeup_s1_from_invalidate_catalog_snapshot +{ + SELECT injection_points_detach('invalidate-catalog-snapshot-end'); + SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); +} + permutation + s5_noop(s1_start_upsert notices 1) s3_start_create_index(s1_start_upsert, s2_start_upsert) s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert(s1_start_upsert) - s4_wakeup_s1_from_invalidate_catalog_snapshot + s5_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 diff --git a/src/test/modules/injection_points/specs/index-concurrently-upsert.spec b/src/test/modules/injection_points/specs/index-concurrently-upsert.spec index b07a6408b3b..4487834aa8e 100644 --- a/src/test/modules/injection_points/specs/index-concurrently-upsert.spec +++ b/src/test/modules/injection_points/specs/index-concurrently-upsert.spec @@ -26,6 +26,7 @@ setup { SELECT injection_points_set_local(); SELECT injection_points_attach('check-exclusion-or-unique-constraint-no-conflict', 'wait'); + SELECT injection_points_attach('pre-invalidate-catalog-snapshot-end', 'notice'); SELECT injection_points_attach('invalidate-catalog-snapshot-end', 'wait'); } step s1_start_upsert @@ -61,11 +62,6 @@ step s4_wakeup_s1 SELECT injection_points_detach('check-exclusion-or-unique-constraint-no-conflict'); SELECT injection_points_wakeup('check-exclusion-or-unique-constraint-no-conflict'); } -step s4_wakeup_s1_from_invalidate_catalog_snapshot -{ - SELECT injection_points_detach('invalidate-catalog-snapshot-end'); - SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); -} step s4_wakeup_s2 { SELECT injection_points_detach('exec-insert-before-insert-speculative'); @@ -77,11 +73,22 @@ step s4_wakeup_define_index_before_set_valid SELECT injection_points_wakeup('define-index-before-set-valid'); } +session s5 +step s5_noop +{ +} +step s5_wakeup_s1_from_invalidate_catalog_snapshot +{ + SELECT injection_points_detach('invalidate-catalog-snapshot-end'); + SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); +} + permutation + s5_noop(s1_start_upsert notices 1) s3_start_create_index(s1_start_upsert, s2_start_upsert) s1_start_upsert s4_wakeup_define_index_before_set_valid s2_start_upsert(s1_start_upsert) - s4_wakeup_s1_from_invalidate_catalog_snapshot + s5_wakeup_s1_from_invalidate_catalog_snapshot s4_wakeup_s2 s4_wakeup_s1 -- 2.47.3