You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-11-29 22:28:02 +02:00
Fixed an issue that could cause the empty archive directory for an old PostgreSQL version to be left behind after a stanza-upgrade.
Fixed by Cynthia Shang.
This commit is contained in:
committed by
David Steele
parent
ce2b18c5b8
commit
f9bdc092ba
@@ -15,6 +15,7 @@ use English '-no_match_vars';
|
||||
use File::Basename qw(dirname);
|
||||
use Storable qw(dclone);
|
||||
|
||||
use pgBackRest::Archive::Info;
|
||||
use pgBackRest::Backup::Info;
|
||||
use pgBackRest::Common::Exception;
|
||||
use pgBackRest::Common::Lock;
|
||||
@@ -58,6 +59,9 @@ sub initTest
|
||||
|
||||
# Create backup info path
|
||||
$self->{oStorage}->pathCreate(STORAGE_REPO_BACKUP, {bCreateParent => true});
|
||||
|
||||
# Create archive info path
|
||||
$self->{oStorage}->pathCreate(STORAGE_REPO_ARCHIVE, {bCreateParent => true});
|
||||
}
|
||||
|
||||
####################################################################################################################################
|
||||
@@ -67,13 +71,52 @@ sub run
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
# Increment the run, log, and decide whether this unit test should be run
|
||||
my $i93ControlVersion = 937;
|
||||
my $i93CatalogVersion = 201306121;
|
||||
my $i94ControlVersion = 942;
|
||||
my $i94CatalogVersion = 201409291;
|
||||
|
||||
################################################################################################################################
|
||||
if ($self->begin("BackupInfo::confirmDb()"))
|
||||
if ($self->begin("BackupInfo::check() && BackupInfo::confirmDb()"))
|
||||
{
|
||||
my $oBackupInfo = new pgBackRest::Backup::Info($self->{oStorage}->pathGet(STORAGE_REPO_BACKUP), false, false,
|
||||
{bIgnoreMissing => true});
|
||||
$oBackupInfo->create(PG_VERSION_93, WAL_VERSION_93_SYS_ID, '937', '201306121', true);
|
||||
$oBackupInfo->create(PG_VERSION_93, WAL_VERSION_93_SYS_ID, $i93ControlVersion, $i93CatalogVersion, true);
|
||||
|
||||
# All DB section matches
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$self->testResult(sub {$oBackupInfo->check(PG_VERSION_93, $i93ControlVersion, $i93CatalogVersion, WAL_VERSION_93_SYS_ID,
|
||||
false)}, 1, 'db section matches');
|
||||
|
||||
# DB section version mismatch
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$self->testException(sub {$oBackupInfo->check(PG_VERSION_94, $i93ControlVersion, $i93CatalogVersion,
|
||||
WAL_VERSION_93_SYS_ID,)}, ERROR_BACKUP_MISMATCH,
|
||||
"database version = " . &PG_VERSION_94 . ", system-id " . &WAL_VERSION_93_SYS_ID .
|
||||
" does not match backup version = " . &PG_VERSION_93 . ", " . "system-id = " . &WAL_VERSION_93_SYS_ID .
|
||||
"\nHINT: is this the correct stanza?");
|
||||
|
||||
# DB section system-id mismatch
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$self->testException(sub {$oBackupInfo->check(PG_VERSION_93, $i93ControlVersion, $i93CatalogVersion,
|
||||
WAL_VERSION_94_SYS_ID,)}, ERROR_BACKUP_MISMATCH,
|
||||
"database version = " . &PG_VERSION_93 . ", system-id " . &WAL_VERSION_94_SYS_ID .
|
||||
" does not match backup version = " . &PG_VERSION_93 . ", " . "system-id = " . &WAL_VERSION_93_SYS_ID .
|
||||
"\nHINT: is this the correct stanza?");
|
||||
|
||||
# DB section control version mismatch
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$self->testException(sub {$oBackupInfo->check(PG_VERSION_93, 123, $i93CatalogVersion, WAL_VERSION_93_SYS_ID,)},
|
||||
ERROR_BACKUP_MISMATCH, "database control-version = 123, catalog-version $i93CatalogVersion " .
|
||||
"does not match backup control-version = $i93ControlVersion, catalog-version = $i93CatalogVersion" .
|
||||
"\nHINT: this may be a symptom of database or repository corruption!");
|
||||
|
||||
# DB section catalog version mismatch
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$self->testException(sub {$oBackupInfo->check(PG_VERSION_93, $i93ControlVersion, 123456789, WAL_VERSION_93_SYS_ID,)},
|
||||
ERROR_BACKUP_MISMATCH, "database control-version = $i93ControlVersion, catalog-version 123456789 " .
|
||||
"does not match backup control-version = $i93ControlVersion, catalog-version = $i93CatalogVersion" .
|
||||
"\nHINT: this may be a symptom of database or repository corruption!");
|
||||
|
||||
my $strBackupLabel = "20170403-175647F";
|
||||
|
||||
@@ -92,6 +135,57 @@ sub run
|
||||
$self->testResult(sub {$oBackupInfo->confirmDb($strBackupLabel, PG_VERSION_93, WAL_VERSION_94_SYS_ID,)}, false,
|
||||
'backup db wrong system-id');
|
||||
}
|
||||
|
||||
################################################################################################################################
|
||||
if ($self->begin("BackupInfo::backupArchiveDbHistoryId()"))
|
||||
{
|
||||
my $oBackupInfo = new pgBackRest::Backup::Info($self->{oStorage}->pathGet(STORAGE_REPO_BACKUP), false, false,
|
||||
{bIgnoreMissing => true});
|
||||
$oBackupInfo->create(PG_VERSION_93, WAL_VERSION_93_SYS_ID, $i93ControlVersion, $i93CatalogVersion, true);
|
||||
|
||||
my $oArchiveInfo = new pgBackRest::Archive::Info($self->{oStorage}->pathGet(STORAGE_REPO_ARCHIVE), false,
|
||||
{bLoad => false, bIgnoreMissing => true});
|
||||
$oArchiveInfo->create(PG_VERSION_93, WAL_VERSION_93_SYS_ID, true);
|
||||
|
||||
# Map archiveId to Backup history id
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
my $strArchiveId = $oArchiveInfo->archiveId({strDbVersion => PG_VERSION_93, ullDbSysId => WAL_VERSION_93_SYS_ID});
|
||||
$self->testResult(sub {$oBackupInfo->backupArchiveDbHistoryId($strArchiveId,
|
||||
$self->{oStorage}->pathGet(STORAGE_REPO_ARCHIVE))}, 1, 'backupArchiveDbHistoryId found');
|
||||
|
||||
# Unable to map archiveId to Backup history id
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$strArchiveId = &PG_VERSION_94 . "-2";
|
||||
$self->testResult(sub {$oBackupInfo->backupArchiveDbHistoryId($strArchiveId,
|
||||
$self->{oStorage}->pathGet(STORAGE_REPO_ARCHIVE))}, "[undef]", 'backupArchiveDbHistoryId not found');
|
||||
|
||||
# Same version but different ullsystemid so continue looking until find match
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
# Update db section and db history sections
|
||||
my $iHistoryId = $oBackupInfo->dbHistoryIdGet(true)+1;
|
||||
$oBackupInfo->dbSectionSet(PG_VERSION_94, $i94ControlVersion, $i94CatalogVersion, WAL_VERSION_93_SYS_ID, $iHistoryId);
|
||||
$oArchiveInfo->dbSectionSet(PG_VERSION_94, WAL_VERSION_93_SYS_ID, $iHistoryId);
|
||||
|
||||
$oBackupInfo->save();
|
||||
$oArchiveInfo->save();
|
||||
|
||||
$strArchiveId = &PG_VERSION_94 . "-" . $iHistoryId;
|
||||
$self->testResult(sub {$oBackupInfo->backupArchiveDbHistoryId($strArchiveId,
|
||||
$self->{oStorage}->pathGet(STORAGE_REPO_ARCHIVE))}, $iHistoryId, 'same db version but different system-id');
|
||||
|
||||
# Different version but same ullsystemid
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
$iHistoryId = $oBackupInfo->dbHistoryIdGet(false)+1;
|
||||
$oBackupInfo->dbSectionSet(PG_VERSION_94, $i93ControlVersion, $i93CatalogVersion, WAL_VERSION_94_SYS_ID, $iHistoryId);
|
||||
$oArchiveInfo->dbSectionSet(PG_VERSION_94, WAL_VERSION_94_SYS_ID, $iHistoryId);
|
||||
|
||||
$oBackupInfo->save();
|
||||
$oArchiveInfo->save();
|
||||
|
||||
$strArchiveId = &PG_VERSION_93 . "-" . $iHistoryId;
|
||||
$self->testResult(sub {$oBackupInfo->backupArchiveDbHistoryId($strArchiveId,
|
||||
$self->{oStorage}->pathGet(STORAGE_REPO_ARCHIVE))}, "[undef]", 'same db system-id but different version');
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user