diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 4d730ea17..80df876d8 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -40,6 +40,14 @@

Add iniSectionList() to Ini object and remove dead code.

+ + + + + + +

Require catalog version when instantiating a Manifest object (and not loading it from disk).

+
diff --git a/lib/pgBackRest/Backup/Backup.pm b/lib/pgBackRest/Backup/Backup.pm index 71893ada1..4c4e60945 100644 --- a/lib/pgBackRest/Backup/Backup.pm +++ b/lib/pgBackRest/Backup/Backup.pm @@ -667,7 +667,7 @@ sub process # Instead just instantiate it. Pass the passphrases to open the manifest and one to encrypt the backup files if the repo is # encrypted (undefined if not). my $oBackupManifest = new pgBackRest::Manifest("$strBackupPath/" . FILE_MANIFEST, - {bLoad => false, strDbVersion => $strDbVersion, + {bLoad => false, strDbVersion => $strDbVersion, iDbCatalogVersion => $iCatalogVersion, strCipherPass => defined($strCipherPassManifest) ? $strCipherPassManifest : undef, strCipherPassSub => defined($strCipherPassManifest) ? $strCipherPassBackupSet : undef}); @@ -687,7 +687,6 @@ sub process # Database settings $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_ID, undef, $iDbHistoryId); $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CONTROL, undef, $iControlVersion); - $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iCatalogVersion); $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_SYSTEM_ID, undef, $ullDbSysId); # Backup from standby can only be used on PostgreSQL >= 9.1 diff --git a/lib/pgBackRest/Check/Check.pm b/lib/pgBackRest/Check/Check.pm index bfe57f455..44d4dae96 100644 --- a/lib/pgBackRest/Check/Check.pm +++ b/lib/pgBackRest/Check/Check.pm @@ -87,14 +87,12 @@ sub process # Passing file location dev/null so that the save will fail if it is ever attempted. Pass a miscellaneus value for # encryption key since the file will not be saved. my $oBackupManifest = new pgBackRest::Manifest("/dev/null/manifest.chk", - {bLoad => false, strDbVersion => $strDbVersion, - strCipherPass => 'x', - strCipherPassSub => 'x'}); + {bLoad => false, strDbVersion => $strDbVersion, iDbCatalogVersion => $iCatalogVersion, + strCipherPass => 'x', strCipherPassSub => 'x'}); # Set required settings not set during manifest instantiation $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_ID, undef, 1); $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CONTROL, undef, $iControlVersion); - $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iCatalogVersion); $oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_SYSTEM_ID, undef, $ullDbSysId); $oBackupManifest->build(storageDb({iRemoteIdx => $iRemoteIdx}), diff --git a/lib/pgBackRest/Manifest.pm b/lib/pgBackRest/Manifest.pm index 8447b1928..4468a4db2 100644 --- a/lib/pgBackRest/Manifest.pm +++ b/lib/pgBackRest/Manifest.pm @@ -284,6 +284,7 @@ sub new $bLoad, $oStorage, $strDbVersion, + $iDbCatalogVersion, $strCipherPass, # Passphrase to open the manifest if encrypted $strCipherPassSub, # Passphrase to encrypt the backup files ) = @@ -294,6 +295,7 @@ sub new {name => 'bLoad', optional => true, default => true, trace => true}, {name => 'oStorage', optional => true, default => storageRepo(), trace => true}, {name => 'strDbVersion', optional => true, trace => true}, + {name => 'iDbCatalogVersion', optional => true, trace => true}, {name => 'strCipherPass', optional => true, redact => true}, {name => 'strCipherPassSub', optional => true, redact => true}, ); @@ -302,15 +304,16 @@ sub new my $self = $class->SUPER::new($strFileName, {bLoad => $bLoad, oStorage => $oStorage, strCipherPass => $strCipherPass, strCipherPassSub => $strCipherPassSub}); - # If manifest not loaded from a file then the db version must be set + # If manifest not loaded from a file then the db version and catalog version must be set if (!$bLoad) { - if (!defined($strDbVersion)) + if (!(defined($strDbVersion) && defined($iDbCatalogVersion))) { - confess &log(ASSERT, 'strDbVersion must be provided with bLoad = false'); + confess &log(ASSERT, 'strDbVersion and iDbCatalogVersion must be provided with bLoad = false'); } $self->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, $strDbVersion); + $self->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion); } # Return from function and log return values if any diff --git a/src/perl/embed.auto.c b/src/perl/embed.auto.c index 31d708686..14ae7625b 100644 --- a/src/perl/embed.auto.c +++ b/src/perl/embed.auto.c @@ -3037,7 +3037,7 @@ static const EmbeddedModule embeddedModule[] = "\n" "\n" "my $oBackupManifest = new pgBackRest::Manifest(\"$strBackupPath/\" . FILE_MANIFEST,\n" - "{bLoad => false, strDbVersion => $strDbVersion,\n" + "{bLoad => false, strDbVersion => $strDbVersion, iDbCatalogVersion => $iCatalogVersion,\n" "strCipherPass => defined($strCipherPassManifest) ? $strCipherPassManifest : undef,\n" "strCipherPassSub => defined($strCipherPassManifest) ? $strCipherPassBackupSet : undef});\n" "\n" @@ -3057,7 +3057,6 @@ static const EmbeddedModule embeddedModule[] = "\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_ID, undef, $iDbHistoryId);\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CONTROL, undef, $iControlVersion);\n" - "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iCatalogVersion);\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_SYSTEM_ID, undef, $ullDbSysId);\n" "\n" "\n" @@ -5356,14 +5355,12 @@ static const EmbeddedModule embeddedModule[] = "\n" "\n" "my $oBackupManifest = new pgBackRest::Manifest(\"/dev/null/manifest.chk\",\n" - "{bLoad => false, strDbVersion => $strDbVersion,\n" - "strCipherPass => 'x',\n" - "strCipherPassSub => 'x'});\n" + "{bLoad => false, strDbVersion => $strDbVersion, iDbCatalogVersion => $iCatalogVersion,\n" + "strCipherPass => 'x', strCipherPassSub => 'x'});\n" "\n" "\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_ID, undef, 1);\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CONTROL, undef, $iControlVersion);\n" - "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iCatalogVersion);\n" "$oBackupManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_SYSTEM_ID, undef, $ullDbSysId);\n" "\n" "$oBackupManifest->build(storageDb({iRemoteIdx => $iRemoteIdx}),\n" @@ -13891,6 +13888,7 @@ static const EmbeddedModule embeddedModule[] = "$bLoad,\n" "$oStorage,\n" "$strDbVersion,\n" + "$iDbCatalogVersion,\n" "$strCipherPass,\n" "$strCipherPassSub,\n" ") =\n" @@ -13901,6 +13899,7 @@ static const EmbeddedModule embeddedModule[] = "{name => 'bLoad', optional => true, default => true, trace => true},\n" "{name => 'oStorage', optional => true, default => storageRepo(), trace => true},\n" "{name => 'strDbVersion', optional => true, trace => true},\n" + "{name => 'iDbCatalogVersion', optional => true, trace => true},\n" "{name => 'strCipherPass', optional => true, redact => true},\n" "{name => 'strCipherPassSub', optional => true, redact => true},\n" ");\n" @@ -13912,12 +13911,13 @@ static const EmbeddedModule embeddedModule[] = "\n" "if (!$bLoad)\n" "{\n" - "if (!defined($strDbVersion))\n" + "if (!(defined($strDbVersion) && defined($iDbCatalogVersion)))\n" "{\n" - "confess &log(ASSERT, 'strDbVersion must be provided with bLoad = false');\n" + "confess &log(ASSERT, 'strDbVersion and iDbCatalogVersion must be provided with bLoad = false');\n" "}\n" "\n" "$self->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, $strDbVersion);\n" + "$self->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion);\n" "}\n" "\n" "\n" diff --git a/test/expect/mock-all-001.log b/test/expect/mock-all-001.log index f8a7f4a11..dcef1514c 100644 --- a/test/expect/mock-all-001.log +++ b/test/expect/mock-all-001.log @@ -127,7 +127,7 @@ P00 DEBUG: Storage::Local->list(): bIgnoreMissing = , strExpression P00 DEBUG: Storage::Local->list=>: stryFileList = () P00 DEBUG: Storage::Local->list(): bIgnoreMissing = true, strExpression = ^[BACKUP-FULL-1], strPathExp = /backup.history/[YEAR-1], strSortOrder = P00 DEBUG: Storage::Local->list=>: stryFileList = () -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-1]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-1]/backup.manifest P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Storage::Local->exists=>: bExists = false P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], oLastManifest = [undef], oStorageDbMaster = [object], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base @@ -559,7 +559,7 @@ P00 DEBUG: Storage::Local->list(): bIgnoreMissing = , strExpression P00 DEBUG: Storage::Local->list=>: stryFileList = () P00 DEBUG: Storage::Local->list(): bIgnoreMissing = true, strExpression = ^[BACKUP-FULL-2], strPathExp = /backup.history/[YEAR-1], strSortOrder = P00 DEBUG: Storage::Local->list=>: stryFileList = () -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Storage::Local->exists=>: bExists = false P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], oLastManifest = [undef], oStorageDbMaster = [object], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base @@ -790,7 +790,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FUL P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -803,7 +803,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Storage::Local->exists=>: bExists = true P00 WARN: --no-online passed and postmaster.pid exists but --force was passed so backup will continue though it looks like the postmaster is running and the backup will probably not be consistent @@ -1175,7 +1175,7 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = , rhyFilter = [undef], strCipherPass = [undef], xFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Base->copy(): xDestinationFile = [TEST_PATH]/db-master/db/base/backup.manifest, xSourceFile = [object] P00 DEBUG: Storage::Local->openWrite(): bAtomic = , bPathCreate = , lTimestamp = [undef], rhyFilter = [undef], strCipherPass = [undef], strGroup = [undef], strMode = <0640>, strUser = [undef], xFileExp = [TEST_PATH]/db-master/db/base/backup.manifest -P00 DEBUG: Manifest->new(): bLoad = , oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/db/base/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -1877,7 +1877,7 @@ P00 DEBUG: Backup::Info->list=>: stryBackup = ([BACKUP-FULL-2]) P00 DEBUG: Backup::Info->last=>: strBackup = [BACKUP-FULL-2] P00 DEBUG: Backup::Info->dbHistoryList=>: hDbHash = [hash] P00 DEBUG: Backup::Info->confirmDb=>: bConfirmDb = true -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -1897,7 +1897,7 @@ P00 DEBUG: Storage::Local->list(): bIgnoreMissing = , strExpression P00 DEBUG: Storage::Local->list=>: stryFileList = () P00 DEBUG: Storage::Local->list(): bIgnoreMissing = true, strExpression = [BACKUP-EXPR](D|I)\.manifest\.gz$, strPathExp = /backup.history/[YEAR-1], strSortOrder = P00 DEBUG: Storage::Local->list=>: stryFileList = () -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-1]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-1]/backup.manifest P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Storage::Local->exists=>: bExists = false P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] @@ -2273,7 +2273,7 @@ P00 DEBUG: Backup::Info->list=>: stryBackup = ([BACKUP-FULL-2]) P00 DEBUG: Backup::Info->last=>: strBackup = [BACKUP-FULL-2] P00 DEBUG: Backup::Info->dbHistoryList=>: hDbHash = [hash] P00 DEBUG: Backup::Info->confirmDb=>: bConfirmDb = true -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -2289,7 +2289,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-INC P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -2302,7 +2302,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Storage::Local->exists=>: bExists = false P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] @@ -3041,7 +3041,7 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = , rhyFilter = [undef], strCipherPass = [undef], xFileExp = /[BACKUP-DIFF-2]/backup.manifest P00 DEBUG: Storage::Base->copy(): xDestinationFile = [TEST_PATH]/db-master/db/base-2/backup.manifest, xSourceFile = [object] P00 DEBUG: Storage::Local->openWrite(): bAtomic = , bPathCreate = , lTimestamp = [undef], rhyFilter = [undef], strCipherPass = [undef], strGroup = [undef], strMode = <0640>, strUser = [undef], xFileExp = [TEST_PATH]/db-master/db/base-2/backup.manifest -P00 DEBUG: Manifest->new(): bLoad = , oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base-2/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base-2/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/db/base-2/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false diff --git a/test/expect/mock-all-002.log b/test/expect/mock-all-002.log index 0d006c7a2..6ce7c5534 100644 --- a/test/expect/mock-all-002.log +++ b/test/expect/mock-all-002.log @@ -122,7 +122,7 @@ P00 DEBUG: Storage::Local->list(): bIgnoreMissing = , strExpression P00 DEBUG: Storage::Local->list=>: stryFileList = () P00 DEBUG: Storage::Local->list(): bIgnoreMissing = true, strExpression = ^[BACKUP-FULL-1], strPathExp = /backup.history/[YEAR-1], strSortOrder = P00 DEBUG: Storage::Local->list=>: stryFileList = () -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], oLastManifest = [undef], oStorageDbMaster = [object], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base @@ -576,7 +576,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FUL P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -589,7 +589,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], oLastManifest = [undef], oStorageDbMaster = [object], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base @@ -925,7 +925,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FUL P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -938,7 +938,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], oLastManifest = [undef], oStorageDbMaster = [object], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base @@ -1075,7 +1075,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FUL P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -1088,7 +1088,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = true P00 WARN: --no-online passed and postmaster.pid exists but --force was passed so backup will continue though it looks like the postmaster is running and the backup will probably not be consistent @@ -1475,7 +1475,7 @@ P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = true P00 DEBUG: Protocol::Storage::Remote->openRead(): rhParam = [hash], strFileExp = /[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Base->copy(): xDestinationFile = [TEST_PATH]/db-master/db/base/backup.manifest, xSourceFile = [object] P00 DEBUG: Storage::Local->openWrite(): bAtomic = , bPathCreate = , lTimestamp = [undef], rhyFilter = [undef], strCipherPass = [undef], strGroup = [undef], strMode = <0640>, strUser = [undef], xFileExp = [TEST_PATH]/db-master/db/base/backup.manifest -P00 DEBUG: Manifest->new(): bLoad = , oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = [object], strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/db-master/db/base/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/db-master/db/base/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -1950,7 +1950,7 @@ P00 DEBUG: Backup::Info->list=>: stryBackup = ([BACKUP-FULL-2]) P00 DEBUG: Backup::Info->last=>: strBackup = [BACKUP-FULL-2] P00 DEBUG: Backup::Info->dbHistoryList=>: hDbHash = [hash] P00 DEBUG: Backup::Info->confirmDb=>: bConfirmDb = true -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -1970,7 +1970,7 @@ P00 DEBUG: Storage::Local->list(): bIgnoreMissing = , strExpression P00 DEBUG: Storage::Local->list=>: stryFileList = () P00 DEBUG: Storage::Local->list(): bIgnoreMissing = true, strExpression = [BACKUP-EXPR](D|I)\.manifest\.gz$, strPathExp = /backup.history/[YEAR-1], strSortOrder = P00 DEBUG: Storage::Local->list=>: stryFileList = () -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-1]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-1]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] @@ -2363,7 +2363,7 @@ P00 DEBUG: Backup::Info->list=>: stryBackup = ([BACKUP-FULL-2]) P00 DEBUG: Backup::Info->last=>: strBackup = [BACKUP-FULL-2] P00 DEBUG: Backup::Info->dbHistoryList=>: hDbHash = [hash] P00 DEBUG: Backup::Info->confirmDb=>: bConfirmDb = true -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -2379,7 +2379,7 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-INC P00 DEBUG: Storage::Local->exists=>: bExists = true P00 DEBUG: Storage::Local->exists(): strFileExp = /[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->exists=>: bExists = false -P00 DEBUG: Manifest->new(): bLoad = , oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = , iDbCatalogVersion = [undef], oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = [undef], strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted(): bIgnoreMissing = true, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Storage::Local->encrypted=>: bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false @@ -2392,7 +2392,7 @@ P00 DEBUG: Storage::Local->encryptionValid(): bEncrypted = false P00 DEBUG: Storage::Local->encryptionValid=>: bValid = true P00 DEBUG: Storage::Local->openRead(): bIgnoreMissing = true, rhyFilter = [undef], strCipherPass = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest.copy P00 DEBUG: Storage::Base->get(): strCipherPass = [undef], xFile = [object] -P00 DEBUG: Manifest->new(): bLoad = false, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest +P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, oStorage = <[object]>, strCipherPass = [undef], strCipherPassSub = [undef], strDbVersion = 9.4, strFileName = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]/backup.manifest P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db-master/db/base/postmaster.pid P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] diff --git a/test/lib/pgBackRestTest/Env/ExpireEnvTest.pm b/test/lib/pgBackRestTest/Env/ExpireEnvTest.pm index 151cdccbc..301dd63d0 100644 --- a/test/lib/pgBackRestTest/Env/ExpireEnvTest.pm +++ b/test/lib/pgBackRestTest/Env/ExpireEnvTest.pm @@ -281,6 +281,7 @@ sub backupCreate my $strManifestFile = "$$oStanza{strBackupClusterPath}/${strBackupLabel}/" . FILE_MANIFEST; my $oManifest = new pgBackRest::Manifest($strManifestFile, {bLoad => false, strDbVersion => PG_VERSION_93, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_93), strCipherPass => $strCipherPassManifest, strCipherPassSub => $strCipherPassBackupSet}); # Store information about the backup into the backup section diff --git a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm index 5bef873c9..bb3af6493 100644 --- a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm +++ b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm @@ -1811,15 +1811,9 @@ sub restoreCompare my $oActualManifest = new pgBackRest::Manifest( "${strTestPath}/" . FILE_MANIFEST, {bLoad => false, strDbVersion => $oExpectedManifestRef->{&MANIFEST_SECTION_BACKUP_DB}{&MANIFEST_KEY_DB_VERSION}, + iDbCatalogVersion => $oExpectedManifestRef->{&MANIFEST_SECTION_BACKUP_DB}{&MANIFEST_KEY_CATALOG}, oStorage => storageTest()}); - $oActualManifest->set( - MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, - $$oExpectedManifestRef{&MANIFEST_SECTION_BACKUP_DB}{&MANIFEST_KEY_DB_VERSION}); - $oActualManifest->numericSet( - MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, - $$oExpectedManifestRef{&MANIFEST_SECTION_BACKUP_DB}{&MANIFEST_KEY_CATALOG}); - $oActualManifest->build(storageTest(), $strDbClusterPath, $oLastManifest, false, $oTablespaceMap); my $strSectionPath = $oActualManifest->get(MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA, MANIFEST_SUBKEY_PATH); diff --git a/test/lib/pgBackRestTest/Env/HostEnvTest.pm b/test/lib/pgBackRestTest/Env/HostEnvTest.pm index d098a49c1..66e4dc650 100644 --- a/test/lib/pgBackRestTest/Env/HostEnvTest.pm +++ b/test/lib/pgBackRestTest/Env/HostEnvTest.pm @@ -244,6 +244,7 @@ sub dbCatalogVersion &PG_VERSION_95 => 201510051, &PG_VERSION_96 => 201608131, &PG_VERSION_10 => 201707211, + &PG_VERSION_11 => 201806231, }; if (!defined($hCatalogVersion->{$strPgVersion})) diff --git a/test/lib/pgBackRestTest/Module/Manifest/ManifestAllPerlTest.pm b/test/lib/pgBackRestTest/Module/Manifest/ManifestAllPerlTest.pm index e8f0c6757..c430d774a 100644 --- a/test/lib/pgBackRestTest/Module/Manifest/ManifestAllPerlTest.pm +++ b/test/lib/pgBackRestTest/Module/Manifest/ManifestAllPerlTest.pm @@ -142,7 +142,6 @@ sub run my $strBackupLabel = backupLabelFormat(CFGOPTVAL_BACKUP_TYPE_FULL, undef, 1482000000); my $strBackupPath = storageRepo->pathGet(STORAGE_REPO_BACKUP . "/${strBackupLabel}"); my $strBackupManifestFile = "$strBackupPath/" . FILE_MANIFEST; - my $iDbCatalogVersion = 201409291; my $lTime = time() - 10000; my $strTest = 'test'; @@ -151,6 +150,7 @@ sub run # Section: backup:db $oManifestBase->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_94); + $oManifestBase->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $self->dbCatalogVersion(PG_VERSION_94)); # Section: target:path my $hDefault = {}; $oManifestBase->set(MANIFEST_SECTION_TARGET_PATH, MANIFEST_TARGET_PGDATA, undef, $hDefault); @@ -166,15 +166,28 @@ sub run ################################################################################################################################ if ($self->begin('new()')) { - # Missing DB version + # Missing DB and DB Catalog version #--------------------------------------------------------------------------------------------------------------------------- $self->testException(sub {(new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false}))}, ERROR_ASSERT, - 'strDbVersion must be provided with bLoad = false'); + 'strDbVersion and iDbCatalogVersion must be provided with bLoad = false'); + + # Missing DB version + #--------------------------------------------------------------------------------------------------------------------------- + $self->testException(sub {(new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}))}, ERROR_ASSERT, + 'strDbVersion and iDbCatalogVersion must be provided with bLoad = false'); + + # Missing DB Catalog version + #--------------------------------------------------------------------------------------------------------------------------- + $self->testException(sub {(new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, + strDbVersion => PG_VERSION_94}))}, ERROR_ASSERT, + 'strDbVersion and iDbCatalogVersion must be provided with bLoad = false'); # Successfully instantiate #--------------------------------------------------------------------------------------------------------------------------- my $oManifest = $self->testResult(sub {(new pgBackRest::Manifest($strBackupManifestFile, - {bLoad => false, strDbVersion => PG_VERSION_94}))}, "[object]", 'manifest instantiated'); + {bLoad => false, strDbVersion => PG_VERSION_94, iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}))}, + "[object]", 'manifest instantiated'); # Initialize #--------------------------------------------------------------------------------------------------------------------------- @@ -207,7 +220,8 @@ sub run ################################################################################################################################ if ($self->begin('build()')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # Build error if offline = true and no tablespace path #--------------------------------------------------------------------------------------------------------------------------- @@ -391,8 +405,11 @@ sub run my $oManifestExpectedUnskip = dclone($oManifestExpected); # Change DB version to 93 - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_93}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_93, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_93)}); $oManifestExpectedUnskip->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_93); + $oManifestExpectedUnskip->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_93)); # Update expected manifest $oManifestExpectedUnskip->set(MANIFEST_SECTION_TARGET_FILE . ":default", MANIFEST_SUBKEY_MODE, undef, MODE_0600); @@ -413,8 +430,11 @@ sub run $self->testResult(sub {$self->manifestCompare($oManifestExpectedUnskip, $oManifest)}, "", 'unskip 94 directories'); # Change DB version to 91 - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_91}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_91, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_91)}); $oManifestExpectedUnskip->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_91); + $oManifestExpectedUnskip->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_91)); $oManifestExpectedUnskip->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_PATH_PGSNAPSHOTS . '/' . BOGUS, MANIFEST_SUBKEY_SIZE, 0); @@ -425,8 +445,11 @@ sub run $self->testResult(sub {$self->manifestCompare($oManifestExpectedUnskip, $oManifest)}, "", 'unskip 92 directories'); # Change DB version to 90 - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_90}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_90, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_90)}); $oManifestExpectedUnskip->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_90); + $oManifestExpectedUnskip->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_90)); $oManifestExpectedUnskip->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_PATH_PGSERIAL . '/' . BOGUS, MANIFEST_SUBKEY_SIZE, 0); @@ -437,8 +460,11 @@ sub run $self->testResult(sub {$self->manifestCompare($oManifestExpectedUnskip, $oManifest)}, "", 'unskip 91 directories'); # Change DB version to 84 - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_84}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_84, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_84)}); $oManifestExpectedUnskip->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_84); + $oManifestExpectedUnskip->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_84)); $oManifestExpectedUnskip->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_PATH_PGNOTIFY . '/' . BOGUS, MANIFEST_SUBKEY_SIZE, 0); @@ -449,8 +475,11 @@ sub run $self->testResult(sub {$self->manifestCompare($oManifestExpectedUnskip, $oManifest)}, "", 'unskip 90 directories'); # Change DB version to 83 - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_83}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_83, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_83)}); $oManifestExpectedUnskip->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_83); + $oManifestExpectedUnskip->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_83)); $oManifestExpectedUnskip->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_PATH_PGSTATTMP . '/' . BOGUS, MANIFEST_SUBKEY_SIZE, 0); @@ -461,7 +490,8 @@ sub run $self->testResult(sub {$self->manifestCompare($oManifestExpectedUnskip, $oManifest)}, "", 'unskip 84 directories'); # Reset Manifest for next tests - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); $oManifest->build(storageDb(), $self->{strDbPath}, undef, true); $self->testResult(sub {$self->manifestCompare($oManifestExpected, $oManifest)}, "", 'manifest reset'); @@ -498,9 +528,6 @@ sub run 'tablespace symlink ../base destination must not be in $PGDATA'); testFileRemove("${strTblSpcPath}/${strTblspcId}"); - # Create the catalog key for the tablespace construction - $oManifest->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion); - # Invalid absolute tablespace is $self->{strDbPath} . /base # INVESTIGATE: But this should fail because the link points to a directory in pg_data but instead it passes the # index($hManifest->{$strName}{link_destination}, '/') != 0 and then fails later. It WILL fail "destination must not be in @@ -536,11 +563,8 @@ sub run testFileRemove("${strTblSpcPath}/${strTblspcId}"); # Reload the manifest otherwise it will contain invalid data from the above exception tests - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); - - # Set the required db catalog version for tablespaces - $oManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion); - $oManifestExpected->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # Create a valid symlink pg_tblspc/1 to tablespace/ts1/1 directory my $strTablespaceOid = '1'; @@ -594,11 +618,13 @@ sub run # Reload the manifest with version < 9.0 #--------------------------------------------------------------------------------------------------------------------------- - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_84}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_84, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_84)}); # Catalog not stored in < 9.0 - $oManifestExpected->remove(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG); $oManifestExpected->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_84); + $oManifestExpected->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, + $self->dbCatalogVersion(PG_VERSION_84)); # Add unskip directories $oManifestExpected->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_PATH_PGDYNSHMEM . '/' . BOGUS, @@ -647,7 +673,8 @@ sub run ################################################################################################################################ if ($self->begin('get/set')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # SubKey required but has not been set #--------------------------------------------------------------------------------------------------------------------------- @@ -715,17 +742,15 @@ sub run # repoPathGet - fully qualified tablespace target #--------------------------------------------------------------------------------------------------------------------------- - # Set the catalog for the DB since that is what is expected to be returned - $oManifest->numericSet(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_CATALOG, undef, $iDbCatalogVersion); - $self->testResult(sub {$oManifest->tablespacePathGet()}, "PG_" . PG_VERSION_94 . "_" . $iDbCatalogVersion, - 'tablespacePathGet()'); + $self->testResult(sub {$oManifest->tablespacePathGet()}, "PG_" . PG_VERSION_94 . "_" . + $self->dbCatalogVersion(PG_VERSION_94), 'tablespacePathGet()'); $oManifest->set(MANIFEST_SECTION_BACKUP_TARGET, $strTablespace, MANIFEST_SUBKEY_TABLESPACE_ID, $strTablespaceId); $oManifest->set(MANIFEST_SECTION_BACKUP_TARGET, $strTablespace, MANIFEST_SUBKEY_TABLESPACE_NAME, $strTablespaceName); $oManifest->set(MANIFEST_SECTION_BACKUP_TARGET, $strTablespace, MANIFEST_SUBKEY_TYPE, MANIFEST_VALUE_LINK); $self->testResult(sub {$oManifest->repoPathGet($strTablespace, BOGUS)}, $strTablespace . "/PG_" . PG_VERSION_94 . "_" . - $iDbCatalogVersion . "/" . BOGUS, 'repoPathGet() - tablespace valid with subpath'); + $self->dbCatalogVersion(PG_VERSION_94) . "/" . BOGUS, 'repoPathGet() - tablespace valid with subpath'); # Set the DB version to < 9.0 - there is no special sudirectory in earlier PG versions $oManifest->set(MANIFEST_SECTION_BACKUP_DB, MANIFEST_KEY_DB_VERSION, undef, PG_VERSION_84); @@ -749,7 +774,8 @@ sub run ################################################################################################################################ if ($self->begin('isTarget - exceptions')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # Target not defined #--------------------------------------------------------------------------------------------------------------------------- @@ -770,7 +796,8 @@ sub run { # dbVersion, xactPath and walPath - PG < 10 #--------------------------------------------------------------------------------------------------------------------------- - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); $self->testResult(sub {$oManifest->dbVersion()}, PG_VERSION_94, 'dbVersion < 10'); $self->testResult(sub {$oManifest->xactPath()}, 'pg_clog', ' xactPath - pg_clog'); @@ -778,7 +805,8 @@ sub run # dbVersion, xactPath and walPath - PG >= 10 #--------------------------------------------------------------------------------------------------------------------------- - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_10}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_10, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_10)}); $self->testResult(sub {$oManifest->dbVersion()}, PG_VERSION_10, 'dbVersion >= 10'); $self->testResult(sub {$oManifest->xactPath()}, 'pg_xact', ' xactPath - pg_xact'); @@ -788,7 +816,8 @@ sub run ################################################################################################################################ if ($self->begin('validate()')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # Set a target:file with only a timestamp - fail size not set #--------------------------------------------------------------------------------------------------------------------------- @@ -816,7 +845,8 @@ sub run ################################################################################################################################ if ($self->begin('future file and last manifest')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); # Create expected manifest from base my $oManifestExpected = dclone($oManifestBase); @@ -861,7 +891,8 @@ sub run $lTime); # Create a new manifest - $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); $self->testResult(sub {$oManifest->build(storageDb(), $self->{strDbPath}, $oLastManifest, true)}, "[undef]", 'last manifest future timestamp warning', {strLogExpect => @@ -957,7 +988,8 @@ sub run ################################################################################################################################ if ($self->begin('fileAdd()')) { - my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); my $oManifestExpected = dclone($oManifestBase); $oManifest->build(storageDb(), $self->{strDbPath}, undef, true); diff --git a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm index 341d24169..544ad4580 100644 --- a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm +++ b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm @@ -119,6 +119,7 @@ sub run # Create a manifest with the pg version to get version-specific paths my $oManifest = new pgBackRest::Manifest(BOGUS, {bLoad => false, strDbVersion => $self->pgVersion(), + iDbCatalogVersion => $self->dbCatalogVersion($self->pgVersion()), strCipherPass => $strCipherPass, strCipherPassSub => $bRepoEncrypt ? ENCRYPTION_KEY_BACKUPSET : undef}); # Static backup parameters diff --git a/test/lib/pgBackRestTest/Module/Stanza/StanzaAllPerlTest.pm b/test/lib/pgBackRestTest/Module/Stanza/StanzaAllPerlTest.pm index c81105a3d..78dfc5b05 100644 --- a/test/lib/pgBackRestTest/Module/Stanza/StanzaAllPerlTest.pm +++ b/test/lib/pgBackRestTest/Module/Stanza/StanzaAllPerlTest.pm @@ -272,7 +272,8 @@ sub run my $strBackupPath = storageRepo->pathGet(STORAGE_REPO_BACKUP . "/${strBackupLabel}"); my $strBackupManifestFile = "$strBackupPath/" . FILE_MANIFEST; - my $oBackupManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94}); + my $oBackupManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)}); storageRepo()->pathCreate($strBackupPath); $oBackupManifest->save(); @@ -338,12 +339,13 @@ sub run #--------------------------------------------------------------------------------------------------------------------------- # Try to create a manifest without a passphrase in an encrypted storage $self->testException(sub {new pgBackRest::Manifest($strBackupManifestFile, - {bLoad => false, strDbVersion => PG_VERSION_94})}, ERROR_CIPHER, - 'passphrase is required when storage is encrypted'); + {bLoad => false, strDbVersion => PG_VERSION_94, iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)})}, + ERROR_CIPHER, 'passphrase is required when storage is encrypted'); # Get the encryption passphrase and create the new manifest my $oBackupInfo = new pgBackRest::Backup::Info($self->{strBackupPath}); $oBackupManifest = new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94), strCipherPass => $oBackupInfo->cipherPassSub(), strCipherPassSub => cipherPassGen()}); $oBackupManifest->set(MANIFEST_SECTION_BACKUP, MANIFEST_KEY_LABEL, undef, $strBackupLabel); @@ -797,6 +799,7 @@ sub run my $oBackupInfo = new pgBackRest::Backup::Info($self->{strBackupPath}); $self->testResult(sub {(new pgBackRest::Manifest($strBackupManifestFile, {bLoad => false, strDbVersion => PG_VERSION_94, + iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94), strCipherPass => $oBackupInfo->cipherPassSub(), strCipherPassSub => 'x'}))->save()}, "[undef]", ' manifest saved');