Add tests for pg_wal_replay_wait() errors
Improve test coverage for pg_wal_replay_wait() procedure by adding test cases when it errors out.
This commit is contained in:
parent
3ac3ec580c
commit
0868d7ae70
@ -77,8 +77,46 @@ $node_standby1->psql(
|
|||||||
ok( $stderr =~ /timed out while waiting for target LSN/,
|
ok( $stderr =~ /timed out while waiting for target LSN/,
|
||||||
"get timeout on waiting for unreachable LSN");
|
"get timeout on waiting for unreachable LSN");
|
||||||
|
|
||||||
|
# 4. Check that pg_wal_replay_wait() triggers an error if called on primary,
|
||||||
|
# within another function, or inside a transaction with an isolation level
|
||||||
|
# higher than READ COMMITTED.
|
||||||
|
|
||||||
# 4. Also, check the scenario of multiple LSN waiters. We make 5 background
|
$node_primary->psql(
|
||||||
|
'postgres',
|
||||||
|
"CALL pg_wal_replay_wait('${lsn3}');",
|
||||||
|
stderr => \$stderr);
|
||||||
|
ok( $stderr =~ /recovery is not in progress/,
|
||||||
|
"get an error when running on the primary");
|
||||||
|
|
||||||
|
$node_standby1->psql(
|
||||||
|
'postgres',
|
||||||
|
"BEGIN ISOLATION LEVEL REPEATABLE READ; CALL pg_wal_replay_wait('${lsn3}');",
|
||||||
|
stderr => \$stderr);
|
||||||
|
ok( $stderr =~
|
||||||
|
/pg_wal_replay_wait\(\) must be only called without an active or registered snapshot/,
|
||||||
|
"get an error when running in a transaction with an isolation level higher than REPEATABLE READ"
|
||||||
|
);
|
||||||
|
|
||||||
|
$node_primary->safe_psql(
|
||||||
|
'postgres', qq[
|
||||||
|
CREATE FUNCTION pg_wal_replay_wait_wrap(target_lsn pg_lsn) RETURNS void AS \$\$
|
||||||
|
BEGIN
|
||||||
|
CALL pg_wal_replay_wait(target_lsn);
|
||||||
|
END
|
||||||
|
\$\$
|
||||||
|
LANGUAGE plpgsql;
|
||||||
|
]);
|
||||||
|
|
||||||
|
$node_primary->wait_for_catchup($node_standby1);
|
||||||
|
$node_standby1->psql(
|
||||||
|
'postgres',
|
||||||
|
"SELECT pg_wal_replay_wait_wrap('${lsn3}');",
|
||||||
|
stderr => \$stderr);
|
||||||
|
ok( $stderr =~
|
||||||
|
/pg_wal_replay_wait\(\) must be only called without an active or registered snapshot/,
|
||||||
|
"get an error when running within another function");
|
||||||
|
|
||||||
|
# 5. Also, check the scenario of multiple LSN waiters. We make 5 background
|
||||||
# psql sessions each waiting for a corresponding insertion. When waiting is
|
# psql sessions each waiting for a corresponding insertion. When waiting is
|
||||||
# finished, stored procedures logs if there are visible as many rows as
|
# finished, stored procedures logs if there are visible as many rows as
|
||||||
# should be.
|
# should be.
|
||||||
@ -124,7 +162,7 @@ for (my $i = 0; $i < 5; $i++)
|
|||||||
|
|
||||||
ok(1, 'multiple LSN waiters reported consistent data');
|
ok(1, 'multiple LSN waiters reported consistent data');
|
||||||
|
|
||||||
# 5. Check that the standby promotion terminates the wait on LSN. Start
|
# 6. Check that the standby promotion terminates the wait on LSN. Start
|
||||||
# waiting for an unreachable LSN then promote. Check the log for the relevant
|
# waiting for an unreachable LSN then promote. Check the log for the relevant
|
||||||
# error message. Also, check that waiting for already replayed LSN doesn't
|
# error message. Also, check that waiting for already replayed LSN doesn't
|
||||||
# cause an error even after promotion.
|
# cause an error even after promotion.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user