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
$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);
}