Close race condition in slot_creation_error.spec.
authorNoah Misch
Sat, 19 Mar 2022 01:18:00 +0000 (18:18 -0700)
committerNoah Misch
Sat, 19 Mar 2022 01:18:00 +0000 (18:18 -0700)
Use the pattern from detach-partition-concurrently-3.spec.  Per
buildfarm member wrasse.

Reviewed by Kyotaro Horiguchi and Andres Freund.

Discussion: https://postgr.es/m/20220318072837[email protected]

contrib/test_decoding/expected/slot_creation_error.out
contrib/test_decoding/specs/slot_creation_error.spec

index 043bdae0a289b476768f77e1142e63474e42e90b..25883b508fbe6e9fd2345bd5303a2275876ab9c2 100644 (file)
@@ -23,14 +23,15 @@ step s1_cancel_s2:
     SELECT pg_cancel_backend(pid)
     FROM pg_stat_activity
     WHERE application_name = 'isolation/slot_creation_error/s2';
-
+step s2_init: <... completed>
+ERROR:  canceling statement due to user request
+step s1_cancel_s2: <... completed>
 pg_cancel_backend
 -----------------
 t                
 (1 row)
 
-step s2_init: <... completed>
-ERROR:  canceling statement due to user request
 step s1_view_slot: 
     SELECT slot_name, slot_type, active FROM pg_replication_slots WHERE slot_name = 'slot_creation_error'
 
@@ -90,18 +91,19 @@ step s1_terminate_s2:
     SELECT pg_terminate_backend(pid)
     FROM pg_stat_activity
     WHERE application_name = 'isolation/slot_creation_error/s2';
-
-pg_terminate_backend
---------------------
-t                   
-(1 row)
-
 step s2_init: <... completed>
 FATAL:  terminating connection due to administrator command
 server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
 
+step s1_terminate_s2: <... completed>
+pg_terminate_backend
+--------------------
+t                   
+(1 row)
+
 step s1_c: COMMIT;
 step s1_view_slot: 
     SELECT slot_name, slot_type, active FROM pg_replication_slots WHERE slot_name = 'slot_creation_error'
index 6816696b9d16696c3be9cc65f670ae0ae4f3aefa..d1e35bf58b5ac994fab6dbc8a9ba7109d53e8ebb 100644 (file)
@@ -35,7 +35,7 @@ step s2_init {
 # The tests first start a transaction with an xid assigned in s1, then create
 # a slot in s2. The slot creation waits for s1's transaction to end. Instead
 # we cancel / terminate s2.
-permutation s1_b s1_xid s2_init s1_view_slot s1_cancel_s2 s1_view_slot s1_c
+permutation s1_b s1_xid s2_init s1_view_slot s1_cancel_s2(s2_init) s1_view_slot s1_c
 permutation s1_b s1_xid s2_init s1_c s1_view_slot s1_drop_slot # check slot creation still works
-permutation s1_b s1_xid s2_init s1_terminate_s2 s1_c s1_view_slot
+permutation s1_b s1_xid s2_init s1_terminate_s2(s2_init) s1_c s1_view_slot
 # can't run tests after this, due to s2's connection failure