From a09dcb5f2a0fb5801f205d4f5e0448ddbe064d38 Mon Sep 17 00:00:00 2001 From: Mikhail Nikalayeu Date: Mon, 1 Dec 2025 12:14:13 +0100 Subject: [PATCH v16 3/3] Refactor test to avoid any additional injection points and notice. --- src/backend/utils/time/snapmgr.c | 1 - .../index-concurrently-upsert-predicate.out | 8 +- .../index-concurrently-upsert-predicate_1.out | 116 ------------------ .../expected/index-concurrently-upsert.out | 14 +-- .../expected/index-concurrently-upsert_1.out | 116 ------------------ .../index-concurrently-upsert-predicate.spec | 31 ++++- .../specs/index-concurrently-upsert.spec | 36 +++++- 7 files changed, 64 insertions(+), 258 deletions(-) delete mode 100644 src/test/modules/injection_points/expected/index-concurrently-upsert-predicate_1.out delete mode 100644 src/test/modules/injection_points/expected/index-concurrently-upsert_1.out diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 434abbf6b6f..24f73a49d27 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -459,7 +459,6 @@ 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 5a57cd5fa40..11b23e8721f 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 5 sessions -starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 +starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 ----------------------- @@ -37,16 +37,12 @@ case (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'); @@ -65,6 +61,7 @@ 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 s5_wakeup_s1_from_invalidate_catalog_snapshot: + CALL test.wait_for_injection_point(); SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); @@ -106,7 +103,6 @@ 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-predicate_1.out b/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate_1.out deleted file mode 100644 index d453dd62617..00000000000 --- a/src/test/modules/injection_points/expected/index-concurrently-upsert-predicate_1.out +++ /dev/null @@ -1,116 +0,0 @@ -Parsed test spec with 5 sessions - -starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -injection_points_attach ------------------------ - -(1 row) - -injection_points_attach ------------------------ - -(1 row) - -injection_points_attach ------------------------ - -(1 row) - -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -step s1_attach_invalidate_catalog_snapshot: - SELECT injection_points_attach('invalidate-catalog-snapshot-end', 'wait'); - -step s4_wakeup_s1_setup: - SELECT CASE WHEN - (SELECT pid FROM pg_stat_activity - WHERE wait_event_type = 'InjectionPoint' AND - wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL - THEN injection_points_wakeup('invalidate-catalog-snapshot-end') - END; - -case ----- - -(1 row) - -step s1_attach_invalidate_catalog_snapshot: <... completed> -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'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -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 s5_wakeup_s1_from_invalidate_catalog_snapshot: - SELECT injection_points_detach('invalidate-catalog-snapshot-end'); - SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -step s4_wakeup_s2: - SELECT injection_points_detach('exec-insert-before-insert-speculative'); - SELECT injection_points_wakeup('exec-insert-before-insert-speculative'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -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'); - -injection_points_detach ------------------------ - -(1 row) - -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 97386a35bed..7bcf8d34053 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 5 sessions -starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 +starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 ----------------------- @@ -27,8 +27,8 @@ injection_points_attach step s4_wakeup_s1_setup: SELECT CASE WHEN (SELECT pid FROM pg_stat_activity - WHERE wait_event_type = 'InjectionPoint' AND - wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL + WHERE wait_event_type = 'InjectionPoint' AND + wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL THEN injection_points_wakeup('invalidate-catalog-snapshot-end') END; @@ -37,16 +37,12 @@ case (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(); + 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'); @@ -65,6 +61,7 @@ step s2_start_upsert: INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); step s5_wakeup_s1_from_invalidate_catalog_snapshot: + CALL test.wait_for_injection_point(); SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); @@ -106,7 +103,6 @@ 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_1.out b/src/test/modules/injection_points/expected/index-concurrently-upsert_1.out deleted file mode 100644 index 4bd51b2b511..00000000000 --- a/src/test/modules/injection_points/expected/index-concurrently-upsert_1.out +++ /dev/null @@ -1,116 +0,0 @@ -Parsed test spec with 5 sessions - -starting permutation: s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup 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 -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -injection_points_attach ------------------------ - -(1 row) - -injection_points_attach ------------------------ - -(1 row) - -injection_points_attach ------------------------ - -(1 row) - -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -s1: NOTICE: notice triggered for injection point pre-invalidate-catalog-snapshot-end -step s1_attach_invalidate_catalog_snapshot: - SELECT injection_points_attach('invalidate-catalog-snapshot-end', 'wait'); - -step s4_wakeup_s1_setup: - SELECT CASE WHEN - (SELECT pid FROM pg_stat_activity - WHERE wait_event_type = 'InjectionPoint' AND - wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL - THEN injection_points_wakeup('invalidate-catalog-snapshot-end') - END; - -case ----- - -(1 row) - -step s1_attach_invalidate_catalog_snapshot: <... completed> -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'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -step s2_start_upsert: - INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); - -step s5_wakeup_s1_from_invalidate_catalog_snapshot: - SELECT injection_points_detach('invalidate-catalog-snapshot-end'); - SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -step s4_wakeup_s2: - SELECT injection_points_detach('exec-insert-before-insert-speculative'); - SELECT injection_points_wakeup('exec-insert-before-insert-speculative'); - -injection_points_detach ------------------------ - -(1 row) - -injection_points_wakeup ------------------------ - -(1 row) - -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'); - -injection_points_detach ------------------------ - -(1 row) - -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 1cbcaa6963f..34016b93bb0 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 @@ -27,7 +27,6 @@ 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'); } step s1_attach_invalidate_catalog_snapshot { @@ -91,19 +90,43 @@ step s4_wakeup_define_index_before_set_valid } session s5 -step s5_noop -{ +setup { + CREATE OR REPLACE PROCEDURE test.wait_for_injection_point() + LANGUAGE plpgsql + AS $$ + DECLARE + v_waiting_pid INTEGER; + BEGIN + SELECT pid INTO v_waiting_pid + FROM pg_stat_activity + WHERE wait_event_type = 'InjectionPoint' + AND wait_event = 'invalidate-catalog-snapshot-end' + LIMIT 1; + + IF v_waiting_pid IS NOT NULL THEN + RETURN; + END IF; + + PERFORM pg_sleep(100); + + CALL test.wait_for_injection_point(); + END; + $$; } step s5_wakeup_s1_from_invalidate_catalog_snapshot { + CALL test.wait_for_injection_point(); SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); } +teardown +{ + DROP PROCEDURE test.wait_for_injection_point; +} permutation s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup - 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 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 2a6d888dcea..92fc0933e91 100644 --- a/src/test/modules/injection_points/specs/index-concurrently-upsert.spec +++ b/src/test/modules/injection_points/specs/index-concurrently-upsert.spec @@ -26,7 +26,6 @@ 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'); } step s1_attach_invalidate_catalog_snapshot { @@ -34,7 +33,7 @@ step s1_attach_invalidate_catalog_snapshot } step s1_start_upsert { - INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); + INSERT INTO test.tbl VALUES (13,now()) ON CONFLICT (i) DO UPDATE SET updated_at = now(); } session s2 @@ -68,8 +67,8 @@ step s4_wakeup_s1_setup { SELECT CASE WHEN (SELECT pid FROM pg_stat_activity - WHERE wait_event_type = 'InjectionPoint' AND - wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL + WHERE wait_event_type = 'InjectionPoint' AND + wait_event = 'invalidate-catalog-snapshot-end') IS NOT NULL THEN injection_points_wakeup('invalidate-catalog-snapshot-end') END; } @@ -90,19 +89,44 @@ step s4_wakeup_define_index_before_set_valid } session s5 -step s5_noop +setup { + CREATE OR REPLACE PROCEDURE test.wait_for_injection_point() + LANGUAGE plpgsql + AS $$ + DECLARE + v_waiting_pid INTEGER; + BEGIN + SELECT pid INTO v_waiting_pid + FROM pg_stat_activity + WHERE wait_event_type = 'InjectionPoint' + AND wait_event = 'invalidate-catalog-snapshot-end' + LIMIT 1; + + IF v_waiting_pid IS NOT NULL THEN + RETURN; + END IF; + + PERFORM pg_sleep(100); + + CALL test.wait_for_injection_point(); + END; + $$; } step s5_wakeup_s1_from_invalidate_catalog_snapshot { + CALL test.wait_for_injection_point(); SELECT injection_points_detach('invalidate-catalog-snapshot-end'); SELECT injection_points_wakeup('invalidate-catalog-snapshot-end'); } +teardown +{ + DROP PROCEDURE test.wait_for_injection_point; +} permutation s1_attach_invalidate_catalog_snapshot s4_wakeup_s1_setup - 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 -- 2.43.0