]> granicus.if.org Git - postgresql/commitdiff
Make regression test for multiple synchronous standbys more stable.
authorFujii Masao <fujii@postgresql.org>
Fri, 15 Apr 2016 04:58:14 +0000 (13:58 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 15 Apr 2016 04:58:14 +0000 (13:58 +0900)
The regression test checks whether the output of pg_stat_replication is
expected or not after changing synchronous_standby_names and reloading
the configuration file. Regarding this test logic, previously there was
a timing issue which made the test result unstable. That is,
pg_stat_replication could return unexpected result during small window
after the configuration file was reloaded before new setting value
took effect, and which made the test fail.

This commit changes the test logic so that it uses a loop with a timeout
to give some room for the test to pass. Now the test fails only when
pg_stat_replication keeps returning unexpected result for 30 seconds.

Michael Paquier

src/test/recovery/t/007_sync_rep.pl

index c257b6ea166635de44e481bca08bc77d7817acef..d551954bcbb75517543be6aa1ece9c8800105b30 100644 (file)
@@ -22,7 +22,23 @@ sub test_sync_state
                $self->reload;
        }
 
-       my $result = $self->safe_psql('postgres', $check_sql);
+       my $timeout_max = 30;
+       my $timeout = 0;
+       my $result;
+
+       # A reload may take some time to take effect on busy machines,
+       # hence use a loop with a timeout to give some room for the test
+       # to pass.
+       while ($timeout < $timeout_max)
+       {
+               $result = $self->safe_psql('postgres', $check_sql);
+
+               last if ($result eq $expected);
+
+               $timeout++;
+               sleep 1;
+       }
+
        is($result, $expected, $msg);
 }