You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-06-14 23:44:58 +02:00
Add Perl interface to C storage layer.
Maintaining the storage layer/drivers in two languages is burdensome. Since the integration tests require the Perl storage layer/drivers we'll need them even after the core code is migrated to C. Create an interface layer so the Perl code can be removed and new storage drivers/features introduced without adding Perl equivalents. The goal is to move the integration tests to C so this interface will eventually be removed. That being the case, the interface was designed for maximum compatibility to ease the transition. The result looks a bit hacky but we'll improve it as needed until it can be retired.
This commit is contained in:
@ -163,10 +163,9 @@ sub run
|
||||
MANIFEST_SUBKEY_CHECKSUM, $strPgControlHash)}, true, "manifest updated for pg_control");
|
||||
|
||||
# Neither backup.manifest nor backup.manifest.copy written because size threshold not met
|
||||
$self->testException(sub {storageRepo()->openRead("$strBackupPath/" . FILE_MANIFEST . INI_COPY_EXT)}, ERROR_FILE_MISSING,
|
||||
"unable to open '$strBackupPath/" . FILE_MANIFEST . INI_COPY_EXT . "': No such file or directory");
|
||||
$self->testException(sub {storageRepo()->openRead("$strBackupPath/" . FILE_MANIFEST)}, ERROR_FILE_MISSING,
|
||||
"unable to open '$strBackupPath/" . FILE_MANIFEST . "': No such file or directory");
|
||||
$self->testResult(sub {storageRepo()->exists("$strBackupPath/" . FILE_MANIFEST)}, false, "backup.manifest missing");
|
||||
$self->testResult(
|
||||
sub {storageRepo()->exists("$strBackupPath/" . FILE_MANIFEST . INI_COPY_EXT)}, false, "backup.manifest.copy missing");
|
||||
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
# No prior checksum, no compression, no page checksum, no extra, no delta, no hasReference
|
||||
@ -180,8 +179,7 @@ sub run
|
||||
$lResultCopySize == $lFileSize && $lResultRepoSize == $lFileSize), true,
|
||||
'file copied to repo successfully');
|
||||
|
||||
$self->testException(sub {storageRepo()->openRead("$strFileRepo.gz")}, ERROR_FILE_MISSING,
|
||||
"unable to open '$strFileRepo.gz': No such file or directory");
|
||||
$self->testResult(sub {storageRepo()->exists("${strFileRepo}.gz")}, false, "${strFileRepo}.gz missing");
|
||||
|
||||
($lSizeCurrent, $lManifestSaveCurrent) = backupManifestUpdate(
|
||||
$oBackupManifest,
|
||||
@ -212,18 +210,13 @@ sub run
|
||||
# Backup.manifest not written but backup.manifest.copy written because size threshold met
|
||||
$self->testResult(sub {storageTest()->exists("$strBackupPath/" . FILE_MANIFEST . INI_COPY_EXT)}, true,
|
||||
'backup.manifest.copy exists in repo');
|
||||
$self->testException(sub {storageRepo()->openRead("$strBackupPath/" . FILE_MANIFEST)}, ERROR_FILE_MISSING,
|
||||
"unable to open '$strBackupPath/" . FILE_MANIFEST . "': No such file or directory");
|
||||
$self->testResult(
|
||||
sub {storageRepo()->exists("$strBackupPath/" . FILE_MANIFEST)}, false, 'backup.manifest.copy missing in repo');
|
||||
|
||||
storageTest()->remove($strFileRepo);
|
||||
storageTest()->remove($strPgControlRepo);
|
||||
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
# No prior checksum, yes compression, yes page checksum, no extra, no delta, no hasReference
|
||||
$self->testException(sub {backupFile($strFileDb, $strRepoFile, $lFileSize, undef, true,
|
||||
$strBackupLabel, true, cfgOption(CFGOPT_COMPRESS_LEVEL), $lFileTime, true, undef, false, false, undef)}, ERROR_ASSERT,
|
||||
"iWalId is required in Backup::Filter::PageChecksum->new");
|
||||
|
||||
# Build the lsn start parameter to pass to the extra function
|
||||
my $hStartLsnParam =
|
||||
{
|
||||
@ -231,7 +224,6 @@ sub run
|
||||
iWalOffset => 0xFFFF,
|
||||
};
|
||||
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
# No prior checksum, yes compression, yes page checksum, yes extra, no delta, no hasReference
|
||||
($iResultCopyResult, $lResultCopySize, $lResultRepoSize, $strResultCopyChecksum, $rResultExtra) =
|
||||
backupFile($strFileDb, $strRepoFile, $lFileSize, undef, true, $strBackupLabel, true,
|
||||
@ -243,8 +235,7 @@ sub run
|
||||
$lResultRepoSize == $lRepoFileCompressSize && $rResultExtra->{bValid}), true, 'file copied to repo successfully');
|
||||
|
||||
# Only the compressed version of the file exists
|
||||
$self->testException(sub {storageRepo()->openRead("$strFileRepo")}, ERROR_FILE_MISSING,
|
||||
"unable to open '$strFileRepo': No such file or directory");
|
||||
$self->testResult(sub {storageRepo()->exists("$strFileRepo")}, false, "only compressed version exists");
|
||||
|
||||
($lSizeCurrent, $lManifestSaveCurrent) = backupManifestUpdate(
|
||||
$oBackupManifest,
|
||||
@ -368,7 +359,7 @@ sub run
|
||||
# do not ignoreMissing
|
||||
$self->testException(sub {backupFile("$strFileDb.1", "$strRepoFile.1", $lFileSize, $strFileHash,
|
||||
false, $strBackupLabel, false, cfgOption(CFGOPT_COMPRESS_LEVEL), $lFileTime, false, undef, true, false, undef)},
|
||||
ERROR_FILE_MISSING, "unable to open '$strFileDb.1': No such file or directory");
|
||||
ERROR_FILE_MISSING, "unable to open missing file '${strFileDb}.1' for read");
|
||||
|
||||
#---------------------------------------------------------------------------------------------------------------------------
|
||||
# Restore the compressed file
|
||||
@ -518,7 +509,7 @@ sub run
|
||||
|
||||
$self->testException(sub {backupFile($strFileDb, $strRepoFile, $lFileSize, $strFileHash,
|
||||
false, $strBackupLabel, false, cfgOption(CFGOPT_COMPRESS_LEVEL), $lFileTime, true, undef, true, false, undef)},
|
||||
ERROR_FILE_MISSING, "unable to open '$strFileRepo': No such file or directory");
|
||||
ERROR_FILE_MISSING, "unable to open missing file '${strFileRepo}' for read");
|
||||
}
|
||||
|
||||
################################################################################################################################
|
||||
|
Reference in New Issue
Block a user