]> granicus.if.org Git - postgresql/commitdiff
Simplify fetch-slot-xmins logic in recovery TAP tests.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Aug 2017 16:08:54 +0000 (12:08 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Aug 2017 16:08:54 +0000 (12:08 -0400)
Merge wait_slot_xmins() into get_slot_xmins().  At this point the only
place that wasn't doing a wait was the initial-state test, and a wait
there seems pretty harmless.

Michael Paquier

Discussion: https://postgr.es/m/CAB7nPqSp_SLQb2uU7am+sn4V3g1UKv8j3yZU385oAG1cG_BN9Q@mail.gmail.com

src/test/recovery/t/001_stream_rep.pl

index 840af66f7563aae20f6d72657a1512e8dae620fd..23a19c67bf6b66f8047a1296e072988ddec9b772 100644 (file)
@@ -146,35 +146,32 @@ $node_standby_2->append_conf('postgresql.conf',
        "wal_receiver_status_interval = 1");
 $node_standby_2->restart;
 
-# Wait for given condition on slot's pg_replication_slots row --- useful for
-# ensuring we've reached a quiescent condition for reading slot xmins
-sub wait_slot_xmins
+# Fetch xmin columns from slot's pg_replication_slots row, after waiting for
+# given boolean condition to be true to ensure we've reached a quiescent state
+sub get_slot_xmins
 {
-       my ($node, $slot_name, $check_expr) = @_;
+       my ($node, $slotname, $check_expr) = @_;
 
        $node->poll_query_until('postgres', qq[
                SELECT $check_expr
                FROM pg_catalog.pg_replication_slots
-               WHERE slot_name = '$slot_name';
+               WHERE slot_name = '$slotname';
        ])
          or die "Timed out waiting for slot xmins to advance";
-}
 
-# Fetch xmin columns from slot's pg_replication_slots row
-sub get_slot_xmins
-{
-       my ($node, $slotname) = @_;
        my $slotinfo = $node->slot($slotname);
        return ($slotinfo->{'xmin'}, $slotinfo->{'catalog_xmin'});
 }
 
 # There's no hot standby feedback and there are no logical slots on either peer
 # so xmin and catalog_xmin should be null on both slots.
-my ($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1);
+my ($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1,
+                                                               "xmin IS NULL AND catalog_xmin IS NULL");
 is($xmin,         '', 'xmin of non-cascaded slot null with no hs_feedback');
 is($catalog_xmin, '', 'catalog xmin of non-cascaded slot null with no hs_feedback');
 
-($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2);
+($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                               "xmin IS NULL AND catalog_xmin IS NULL");
 is($xmin,         '', 'xmin of cascaded slot null with no hs_feedback');
 is($catalog_xmin, '', 'catalog xmin of cascaded slot null with no hs_feedback');
 
@@ -212,18 +209,14 @@ $node_standby_2->safe_psql('postgres',
 $node_standby_2->reload;
 replay_check();
 
-wait_slot_xmins($node_master, $slotname_1,
-                               "xmin IS NOT NULL AND catalog_xmin IS NULL");
-
-($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1);
+($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1,
+                                                               "xmin IS NOT NULL AND catalog_xmin IS NULL");
 isnt($xmin, '', 'xmin of non-cascaded slot non-null with hs feedback');
 is($catalog_xmin, '',
        'catalog xmin of non-cascaded slot still null with hs_feedback');
 
-wait_slot_xmins($node_standby_1, $slotname_2,
-                               "xmin IS NOT NULL AND catalog_xmin IS NULL");
-
-my ($xmin1, $catalog_xmin1) = get_slot_xmins($node_standby_1, $slotname_2);
+my ($xmin1, $catalog_xmin1) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                               "xmin IS NOT NULL AND catalog_xmin IS NULL");
 isnt($xmin1, '', 'xmin of cascaded slot non-null with hs feedback');
 is($catalog_xmin1, '',
        'catalog xmin of cascaded slot still null with hs_feedback');
@@ -246,17 +239,15 @@ end$$;
 $node_master->safe_psql('postgres', 'VACUUM;');
 $node_master->safe_psql('postgres', 'CHECKPOINT;');
 
-wait_slot_xmins($node_master, $slotname_1, "xmin <> '$xmin'");
-
-my ($xmin2, $catalog_xmin2) = get_slot_xmins($node_master, $slotname_1);
+my ($xmin2, $catalog_xmin2) = get_slot_xmins($node_master, $slotname_1,
+                                                                                        "xmin <> '$xmin'");
 note "master slot's new xmin $xmin2, old xmin $xmin";
 isnt($xmin2, $xmin, 'xmin of non-cascaded slot with hs feedback has changed');
 is($catalog_xmin2, '',
        'catalog xmin of non-cascaded slot still null with hs_feedback unchanged');
 
-wait_slot_xmins($node_standby_1, $slotname_2, "xmin <> '$xmin1'");
-
-($xmin2, $catalog_xmin2) = get_slot_xmins($node_standby_1, $slotname_2);
+($xmin2, $catalog_xmin2) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                                                 "xmin <> '$xmin1'");
 note "standby_1 slot's new xmin $xmin2, old xmin $xmin1";
 isnt($xmin2, $xmin1, 'xmin of cascaded slot with hs feedback has changed');
 is($catalog_xmin2, '',
@@ -273,18 +264,14 @@ $node_standby_2->safe_psql('postgres',
 $node_standby_2->reload;
 replay_check();
 
-wait_slot_xmins($node_master, $slotname_1,
-                                          "xmin IS NULL AND catalog_xmin IS NULL");
-
-($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1);
+($xmin, $catalog_xmin) = get_slot_xmins($node_master, $slotname_1,
+                                                               "xmin IS NULL AND catalog_xmin IS NULL");
 is($xmin, '', 'xmin of non-cascaded slot null with hs feedback reset');
 is($catalog_xmin, '',
    'catalog xmin of non-cascaded slot still null with hs_feedback reset');
 
-wait_slot_xmins($node_standby_1, $slotname_2,
-                                          "xmin IS NULL AND catalog_xmin IS NULL");
-
-($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2);
+($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                               "xmin IS NULL AND catalog_xmin IS NULL");
 is($xmin,         '', 'xmin of cascaded slot null with hs feedback reset');
 is($catalog_xmin, '',
        'catalog xmin of cascaded slot still null with hs_feedback reset');
@@ -301,16 +288,14 @@ $node_standby_2->safe_psql('postgres',
        'ALTER SYSTEM SET hot_standby_feedback = off;');
 $node_standby_2->stop;
 
-wait_slot_xmins($node_standby_1, $slotname_2, "xmin IS NOT NULL");
-
-($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2);
+($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                                               "xmin IS NOT NULL");
 isnt($xmin, '', 'xmin of cascaded slot non-null with postgres shut down');
 
 # Xmin from a previous run should be cleared on startup.
 $node_standby_2->start;
 
-wait_slot_xmins($node_standby_1, $slotname_2, "xmin IS NULL");
-
-($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2);
+($xmin, $catalog_xmin) = get_slot_xmins($node_standby_1, $slotname_2,
+                                                                               "xmin IS NULL");
 is($xmin, '',
        'xmin of cascaded slot reset after startup with hs feedback reset');