Fix recently added incorrect assertion

Commit df3737a651 added an incorrect assertion about the preconditions
for invoking the backup cleanup callback: it misfires at session end in
case a backup completes successfully.  Fix it, using coding from Michaël
Paquier.  Also add some tests for the various cases.

Reported by Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/20221021.161038.1277961198945653224.horikyota.ntt@gmail.com
This commit is contained in:
Alvaro Herrera 2022-10-24 12:02:33 +02:00
parent 2e0d80c5bb
commit 8328a15f8f
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
2 changed files with 16 additions and 3 deletions

View File

@ -8841,9 +8841,8 @@ do_pg_abort_backup(int code, Datum arg)
{
bool during_backup_start = DatumGetBool(arg);
/* Only one of these conditions can be true */
Assert(during_backup_start ^
(sessionBackupState == SESSION_BACKUP_RUNNING));
/* If called during backup start, there shouldn't be one already running */
Assert(!during_backup_start || sessionBackupState == SESSION_BACKUP_NONE);
if (during_backup_start || sessionBackupState != SESSION_BACKUP_NONE)
{

View File

@ -248,4 +248,18 @@ my $logfile = slurp_file($standby2->logfile, $log_location);
ok( $logfile =~ qr/archiver process shutting down/,
'check shutdown callback of shell archive module');
# Test that we can enter and leave backup mode without crashes
my ($stderr, $cmdret);
$cmdret = $primary->psql(
'postgres',
"SELECT pg_backup_start('onebackup'); "
. "SELECT pg_backup_stop();"
. "SELECT pg_backup_start(repeat('x', 1026))",
stderr => \$stderr);
is($cmdret, 3, "psql fails correctly");
like($stderr, qr/backup label too long/, "pg_backup_start fails gracefully");
$primary->safe_psql('postgres',
"SELECT pg_backup_start('onebackup'); SELECT pg_backup_stop();");
$primary->safe_psql('postgres', "SELECT pg_backup_start('twobackup')");
done_testing();