@@ -146,35 +146,32 @@ sub test_target_session_attrs
146146 " wal_receiver_status_interval = 1" );
147147$node_standby_2 -> restart;
148148
149- # Wait for given condition on slot's pg_replication_slots row --- useful for
150- # ensuring we've reached a quiescent condition for reading slot xmins
151- sub wait_slot_xmins
149+ # Fetch xmin columns from slot's pg_replication_slots row, after waiting for
150+ # given boolean condition to be true to ensure we've reached a quiescent state
151+ sub get_slot_xmins
152152{
153- my ($node , $slot_name , $check_expr ) = @_ ;
153+ my ($node , $slotname , $check_expr ) = @_ ;
154154
155155 $node -> poll_query_until(' postgres' , qq[
156156 SELECT $check_expr
157157 FROM pg_catalog.pg_replication_slots
158- WHERE slot_name = '$slot_name ';
158+ WHERE slot_name = '$slotname ';
159159 ] )
160160 or die " Timed out waiting for slot xmins to advance" ;
161- }
162161
163- # Fetch xmin columns from slot's pg_replication_slots row
164- sub get_slot_xmins
165- {
166- my ($node , $slotname ) = @_ ;
167162 my $slotinfo = $node -> slot($slotname );
168163 return ($slotinfo -> {' xmin' }, $slotinfo -> {' catalog_xmin' });
169164}
170165
171166# There's no hot standby feedback and there are no logical slots on either peer
172167# so xmin and catalog_xmin should be null on both slots.
173- my ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 );
168+ my ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 ,
169+ " xmin IS NULL AND catalog_xmin IS NULL" );
174170is($xmin , ' ' , ' xmin of non-cascaded slot null with no hs_feedback' );
175171is($catalog_xmin , ' ' , ' catalog xmin of non-cascaded slot null with no hs_feedback' );
176172
177- ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 );
173+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
174+ " xmin IS NULL AND catalog_xmin IS NULL" );
178175is($xmin , ' ' , ' xmin of cascaded slot null with no hs_feedback' );
179176is($catalog_xmin , ' ' , ' catalog xmin of cascaded slot null with no hs_feedback' );
180177
@@ -212,18 +209,14 @@ sub replay_check
212209$node_standby_2 -> reload;
213210replay_check();
214211
215- wait_slot_xmins($node_master , $slotname_1 ,
216- " xmin IS NOT NULL AND catalog_xmin IS NULL" );
217-
218- ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 );
212+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 ,
213+ " xmin IS NOT NULL AND catalog_xmin IS NULL" );
219214isnt($xmin , ' ' , ' xmin of non-cascaded slot non-null with hs feedback' );
220215is($catalog_xmin , ' ' ,
221216 ' catalog xmin of non-cascaded slot still null with hs_feedback' );
222217
223- wait_slot_xmins($node_standby_1 , $slotname_2 ,
224- " xmin IS NOT NULL AND catalog_xmin IS NULL" );
225-
226- my ($xmin1 , $catalog_xmin1 ) = get_slot_xmins($node_standby_1 , $slotname_2 );
218+ my ($xmin1 , $catalog_xmin1 ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
219+ " xmin IS NOT NULL AND catalog_xmin IS NULL" );
227220isnt($xmin1 , ' ' , ' xmin of cascaded slot non-null with hs feedback' );
228221is($catalog_xmin1 , ' ' ,
229222 ' catalog xmin of cascaded slot still null with hs_feedback' );
@@ -246,17 +239,15 @@ sub replay_check
246239$node_master -> safe_psql(' postgres' , ' VACUUM;' );
247240$node_master -> safe_psql(' postgres' , ' CHECKPOINT;' );
248241
249- wait_slot_xmins($node_master , $slotname_1 , " xmin <> '$xmin '" );
250-
251- my ($xmin2 , $catalog_xmin2 ) = get_slot_xmins($node_master , $slotname_1 );
242+ my ($xmin2 , $catalog_xmin2 ) = get_slot_xmins($node_master , $slotname_1 ,
243+ " xmin <> '$xmin '" );
252244note " master slot's new xmin $xmin2 , old xmin $xmin " ;
253245isnt($xmin2 , $xmin , ' xmin of non-cascaded slot with hs feedback has changed' );
254246is($catalog_xmin2 , ' ' ,
255247 ' catalog xmin of non-cascaded slot still null with hs_feedback unchanged' );
256248
257- wait_slot_xmins($node_standby_1 , $slotname_2 , " xmin <> '$xmin1 '" );
258-
259- ($xmin2 , $catalog_xmin2 ) = get_slot_xmins($node_standby_1 , $slotname_2 );
249+ ($xmin2 , $catalog_xmin2 ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
250+ " xmin <> '$xmin1 '" );
260251note " standby_1 slot's new xmin $xmin2 , old xmin $xmin1 " ;
261252isnt($xmin2 , $xmin1 , ' xmin of cascaded slot with hs feedback has changed' );
262253is($catalog_xmin2 , ' ' ,
@@ -273,18 +264,14 @@ sub replay_check
273264$node_standby_2 -> reload;
274265replay_check();
275266
276- wait_slot_xmins($node_master , $slotname_1 ,
277- " xmin IS NULL AND catalog_xmin IS NULL" );
278-
279- ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 );
267+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_master , $slotname_1 ,
268+ " xmin IS NULL AND catalog_xmin IS NULL" );
280269is($xmin , ' ' , ' xmin of non-cascaded slot null with hs feedback reset' );
281270is($catalog_xmin , ' ' ,
282271 ' catalog xmin of non-cascaded slot still null with hs_feedback reset' );
283272
284- wait_slot_xmins($node_standby_1 , $slotname_2 ,
285- " xmin IS NULL AND catalog_xmin IS NULL" );
286-
287- ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 );
273+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
274+ " xmin IS NULL AND catalog_xmin IS NULL" );
288275is($xmin , ' ' , ' xmin of cascaded slot null with hs feedback reset' );
289276is($catalog_xmin , ' ' ,
290277 ' catalog xmin of cascaded slot still null with hs_feedback reset' );
@@ -301,16 +288,14 @@ sub replay_check
301288 ' ALTER SYSTEM SET hot_standby_feedback = off;' );
302289$node_standby_2 -> stop;
303290
304- wait_slot_xmins($node_standby_1 , $slotname_2 , " xmin IS NOT NULL" );
305-
306- ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 );
291+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
292+ " xmin IS NOT NULL" );
307293isnt($xmin , ' ' , ' xmin of cascaded slot non-null with postgres shut down' );
308294
309295# Xmin from a previous run should be cleared on startup.
310296$node_standby_2 -> start;
311297
312- wait_slot_xmins($node_standby_1 , $slotname_2 , " xmin IS NULL" );
313-
314- ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 );
298+ ($xmin , $catalog_xmin ) = get_slot_xmins($node_standby_1 , $slotname_2 ,
299+ " xmin IS NULL" );
315300is($xmin , ' ' ,
316301 ' xmin of cascaded slot reset after startup with hs feedback reset' );
0 commit comments