1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-04-25 12:04:48 +02:00

Improve info command text output and --set handling.

The info command provides total sizes for files in the backup on the database as well as the repository. The text output and associated user documentation has been updated to provide more clarity regarding the sizes being displayed.

In addition, the info command is updated to allow a user to optionally specify the repository when requesting a specific backup set. In this case, the text output will reflect the status of the stanza, the cipher types and archive min/max over all the repositories instead of a single repository when the repo option is specified.
This commit is contained in:
Cynthia Shang 2021-01-25 09:19:05 -05:00 committed by David Steele
parent 8e48308b0b
commit 00fac1c0d1
5 changed files with 119 additions and 113 deletions
doc/xml
src/command
test/src/module/command

@ -1589,7 +1589,9 @@
The '<id>wal start/stop</id>' defines the WAL range that is required to make the database consistent when restoring. The <cmd>backup</cmd> command will ensure that this WAL range is in the archive before completing.
The '<id>database size</id>' is the full uncompressed size of the database while '<id>backup size</id>' is the amount of data actually backed up (these will be the same for full backups). The '<id>repository size</id>' includes all the files from this backup and any referenced backups that are required to restore the database while '<id>repository backup size</id>' includes only the files in this backup (these will also be the same for full backups). Repository sizes reflect compressed file sizes if compression is enabled in <backrest/> or the filesystem.
The '<id>database size</id>' is the full uncompressed size of the database while '<id>database backup size</id>' is the amount of data in the database to actually back up (these will be the same for full backups).
The '<id>repo</id>' indicates in which repository this backup resides. The '<id>backup set size</id>' includes all the files from this backup and any referenced backups in the repository that are required to restore the database from this backup while '<id>backup size</id>' includes only the files in this backup (these will also be the same for full backups). Repository sizes reflect compressed file sizes if compression is enabled in <backrest/> or the filesystem.
The '<id>backup reference list</id>' contains the additional backups that are required to restore this backup.</text>

@ -37,6 +37,9 @@
<release-development-list>
<release-item>
<commit subject="Partial multi-repository implementation."/>
<commit subject="Improve info command text output and --set handling."/>
<release-item-contributor-list>
<release-item-contributor id="cynthia.shang"/>
<release-item-contributor id="david.steele"/>

@ -157,7 +157,7 @@ static const unsigned char helpDataPack[] =
pckTypeStr << 4 | 0x09, 0x23, // Summary
0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E,
0x20, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x2E,
pckTypeStr << 4 | 0x08, 0xCF, 0x11, // Description
pckTypeStr << 4 | 0x08, 0xC0, 0x12, // Description
0x54, 0x68, 0x65, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x61, 0x6E, 0x64, 0x20, 0x6F, 0x70, 0x65,
0x72, 0x61, 0x74, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x73, 0x74,
0x61, 0x6E, 0x7A, 0x61, 0x20, 0x6F, 0x72, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x73, 0x74, 0x61, 0x6E, 0x7A, 0x61, 0x73, 0x2E,
@ -244,30 +244,36 @@ static const unsigned char helpDataPack[] =
0x54, 0x68, 0x65, 0x20, 0x27, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x27, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6C, 0x6C, 0x20, 0x75, 0x6E, 0x63, 0x6F, 0x6D, 0x70, 0x72, 0x65,
0x73, 0x73, 0x65, 0x64, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74,
0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x20, 0x27, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20,
0x73, 0x69, 0x7A, 0x65, 0x27, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x20,
0x6F, 0x66, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x20, 0x62, 0x61, 0x63,
0x6B, 0x65, 0x64, 0x20, 0x75, 0x70, 0x20, 0x28, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x62,
0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6D, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x66, 0x75, 0x6C, 0x6C, 0x20,
0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x29, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x27, 0x72, 0x65, 0x70, 0x6F, 0x73,
0x69, 0x74, 0x6F, 0x72, 0x79, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x27, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73,
0x20, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x61, 0x6E, 0x79, 0x20,
0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x64, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20,
0x72, 0x65, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
0x20, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x20, 0x27, 0x72, 0x65, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x6F, 0x72, 0x79, 0x20, 0x62,
0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x27, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73,
0x20, 0x6F, 0x6E, 0x6C, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74,
0x68, 0x69, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x28, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x77, 0x69,
0x6C, 0x6C, 0x20, 0x61, 0x6C, 0x73, 0x6F, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6D, 0x65, 0x20,
0x66, 0x6F, 0x72, 0x20, 0x66, 0x75, 0x6C, 0x6C, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x29, 0x2E, 0x20, 0x52,
0x65, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x6F, 0x72, 0x79, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x73, 0x20, 0x72, 0x65, 0x66, 0x6C,
0x65, 0x63, 0x74, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20,
0x73, 0x69, 0x7A, 0x65, 0x73, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6F, 0x6E,
0x20, 0x69, 0x73, 0x20, 0x65, 0x6E, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x70, 0x67, 0x42, 0x61, 0x63,
0x6B, 0x52, 0x65, 0x73, 0x74, 0x20, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x79, 0x73,
0x74, 0x65, 0x6D, 0x2E, 0x0A, 0x0A,
0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x20, 0x27, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
0x65, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x27, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x6E, 0x20,
0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x63, 0x74, 0x75,
0x61, 0x6C, 0x6C, 0x79, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x20, 0x75, 0x70, 0x20, 0x28, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20,
0x77, 0x69, 0x6C, 0x6C, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6D, 0x65, 0x20, 0x66, 0x6F, 0x72,
0x20, 0x66, 0x75, 0x6C, 0x6C, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x29, 0x2E, 0x0A, 0x0A,
0x54, 0x68, 0x65, 0x20, 0x27, 0x72, 0x65, 0x70, 0x6F, 0x27, 0x20, 0x69, 0x6E, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73,
0x20, 0x69, 0x6E, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x72, 0x65, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x6F, 0x72, 0x79,
0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x73,
0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x27, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x73, 0x65, 0x74, 0x20, 0x73, 0x69,
0x7A, 0x65, 0x27, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x68, 0x65,
0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x61, 0x63,
0x6B, 0x75, 0x70, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63,
0x65, 0x64, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
0x70, 0x6F, 0x73, 0x69, 0x74, 0x6F, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65,
0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x72, 0x65, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x20, 0x74, 0x68,
0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x74, 0x68, 0x69, 0x73,
0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x20, 0x27, 0x62, 0x61, 0x63, 0x6B, 0x75,
0x70, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x27, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73, 0x20, 0x6F, 0x6E, 0x6C,
0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x28, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x61,
0x6C, 0x73, 0x6F, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6D, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x20,
0x66, 0x75, 0x6C, 0x6C, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x29, 0x2E, 0x20, 0x52, 0x65, 0x70, 0x6F, 0x73,
0x69, 0x74, 0x6F, 0x72, 0x79, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x73, 0x20, 0x72, 0x65, 0x66, 0x6C, 0x65, 0x63, 0x74, 0x20,
0x63, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x73, 0x69, 0x7A, 0x65,
0x73, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x73, 0x20,
0x65, 0x6E, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x70, 0x67, 0x42, 0x61, 0x63, 0x6B, 0x52, 0x65, 0x73,
0x74, 0x20, 0x6F, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E,
0x0A, 0x0A,
0x54, 0x68, 0x65, 0x20, 0x27, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63,
0x65, 0x20, 0x6C, 0x69, 0x73, 0x74, 0x27, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x73, 0x20,

@ -802,14 +802,14 @@ formatTextBackup(const DbGroup *dbGroup, String *resultStr)
KeyValue *info = varKv(kvGet(backupInfo, BACKUP_KEY_INFO_VAR));
strCatFmt(
resultStr, " database size: %s, backup size: %s\n",
resultStr, " database size: %s, database backup size: %s\n",
strZ(strSizeFormat(varUInt64Force(kvGet(info, KEY_SIZE_VAR)))),
strZ(strSizeFormat(varUInt64Force(kvGet(info, KEY_DELTA_VAR)))));
KeyValue *repoInfo = varKv(kvGet(info, INFO_KEY_REPOSITORY_VAR));
strCatFmt(
resultStr, " repo%u: size: %s, backup size: %s\n",
resultStr, " repo%u: backup set size: %s, backup size: %s\n",
varUInt(kvGet(varKv(kvGet(backupInfo, KEY_DATABASE_VAR)), KEY_REPO_KEY_VAR)),
strZ(strSizeFormat(varUInt64Force(kvGet(repoInfo, KEY_SIZE_VAR)))),
strZ(strSizeFormat(varUInt64Force(kvGet(repoInfo, KEY_DELTA_VAR)))));
@ -1165,17 +1165,12 @@ infoRender(void)
// Get the backup label if specified
const String *backupLabel = cfgOptionStrNull(cfgOptSet);
bool backupFound = false;
// Since the --set option depends on the --stanza option, the parser will error before this if the backup label is
// specified but a stanza is not
if (backupLabel != NULL)
{
if (!strEq(cfgOptionStr(cfgOptOutput), CFGOPTVAL_INFO_OUTPUT_TEXT_STR))
THROW(ConfigError, "option '" CFGOPT_SET "' is currently only valid for text output");
if (!(cfgOptionTest(cfgOptRepo)) && cfgOptionGroupIdxTotal(cfgOptGrpRepo) > 1)
THROW(OptionRequiredError, "option '" CFGOPT_REPO "' is required when specifying a backup set");
}
if (backupLabel != NULL && !strEq(cfgOptionStr(cfgOptOutput), CFGOPTVAL_INFO_OUTPUT_TEXT_STR))
THROW(ConfigError, "option '" CFGOPT_SET "' is currently only valid for text output");
// Initialize the repo index
unsigned int repoIdxStart = 0;
@ -1197,12 +1192,8 @@ infoRender(void)
// If a backup set was specified, see if the manifest exists
if (backupLabel != NULL)
{
if (!storageExistsP(storageRepo, strNewFmt(STORAGE_REPO_BACKUP "/%s/" BACKUP_MANIFEST_FILE, strZ(backupLabel))))
{
THROW_FMT(
FileMissingError, "manifest does not exist for backup '%s'\n"
"HINT: is the backup listed when running the info command with --stanza option only?", strZ(backupLabel));
}
if (storageExistsP(storageRepo, strNewFmt(STORAGE_REPO_BACKUP "/%s/" BACKUP_MANIFEST_FILE, strZ(backupLabel))))
backupFound = true;
}
// Get a list of stanzas in the backup directory
@ -1263,6 +1254,14 @@ infoRender(void)
}
}
// If a backup label was requested but it was not found on any repo
if (backupLabel != NULL && !backupFound)
{
THROW_FMT(
FileMissingError, "manifest does not exist for backup '%s'\n"
"HINT: is the backup listed when running the info command with --stanza option only?", strZ(backupLabel));
}
VariantList *infoList = varLstNew();
String *resultStr = strNew("");

@ -560,14 +560,14 @@ testRun(void)
" full backup: 20181116-154756F\n"
" timestamp start/stop: 2018-11-16 15:47:56 / 2018-11-16 15:48:09\n"
" wal start/stop: n/a\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n"
"\n"
" full backup: 20201116-154900F\n"
" timestamp start/stop: 2020-11-16 15:47:56 / 2020-11-16 15:48:00\n"
" wal start/stop: 000000030000000000000001 / 000000030000000000000001\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n",
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n",
"text - single stanza, valid backup, no priors, no archives in latest DB, backup/expire lock detected");
}
HARNESS_FORK_PARENT_END();
@ -1494,21 +1494,21 @@ testRun(void)
" full backup: 20181119-152138F\n"
" timestamp start/stop: 2018-11-19 15:21:38 / 2018-11-19 15:21:39\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000002\n"
" database size: 19.2MB, backup size: 19.2MB\n"
" repo1: size: 2.3MB, backup size: 2.3MB\n"
" database size: 19.2MB, database backup size: 19.2MB\n"
" repo1: backup set size: 2.3MB, backup size: 2.3MB\n"
"\n"
" diff backup: 20181119-152138F_20181119-152152D\n"
" timestamp start/stop: 2018-11-19 15:21:52 / 2018-11-19 15:21:55\n"
" wal start/stop: 000000010000000000000003 / 000000020000000000000003\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F\n"
"\n"
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
"\n"
" db (current)\n"
@ -1517,20 +1517,20 @@ testRun(void)
" full backup: 20201116-155000F\n"
" timestamp start/stop: 2020-11-16 15:50:00 / 2020-11-16 15:50:02\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n"
"\n"
" full backup: 20201116-200000F\n"
" timestamp start/stop: 2020-11-16 20:00:00 / 2020-11-16 20:00:05\n"
" wal start/stop: 000000010000000000000004 / 000000010000000000000004\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n"
"\n"
" incr backup: 20201116-155000F_20201119-152100I\n"
" timestamp start/stop: 2020-11-19 15:21:00 / 2020-11-19 15:21:03\n"
" wal start/stop: 000000010000000000000005 / 000000010000000000000005\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20201116-155000F\n"
"\n"
"stanza: stanza2\n"
@ -1558,8 +1558,8 @@ testRun(void)
" full backup: 20201110-100000F\n"
" timestamp start/stop: 2020-11-10 10:00:00 / 2020-11-10 10:00:02\n"
" wal start/stop: 000000010000000000000001 / 000000010000000000000002\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n",
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n",
"text - multiple stanzas, multi-repo with valid backups, backup lock held on one stanza");
}
HARNESS_FORK_PARENT_END();
@ -1571,11 +1571,6 @@ testRun(void)
argList2 = strLstDup(argListMultiRepo);
strLstAddZ(argList2, "--stanza=stanza1");
strLstAddZ(argList2, "--set=20181119-152138F_20181119-152155I");
harnessCfgLoad(cfgCmdInfo, argList2);
TEST_ERROR_FMT(infoRender(), OptionRequiredError, "option '" CFGOPT_REPO "' is required when specifying a backup set");
// Specify the repo
strLstAddZ(argList2, "--repo=1");
harnessCfgLoad(cfgCmdInfo, argList2);
@ -1591,8 +1586,8 @@ testRun(void)
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
" database list: mail (16456), postgres (12173)\n"
" symlinks:\n"
@ -1604,28 +1599,29 @@ testRun(void)
" page checksum error: base/16384/17000\n",
"text - backup set requested");
// Confirm ability to read encrypted repo manifest
// Confirm ability to read encrypted repo manifest and that the requested database will be found without setting --repo
//--------------------------------------------------------------------------------------------------------------------------
argList2 = strLstDup(argListMultiRepo);
strLstAddZ(argList2, "--stanza=stanza1");
strLstAddZ(argList2, "--set=20201116-200000F");
strLstAddZ(argList2, "--repo=2");
harnessCfgLoad(cfgCmdInfo, argList2);
TEST_RESULT_STR_Z(
infoRender(),
"stanza: stanza1\n"
" status: ok\n"
" cipher: aes-256-cbc\n"
" cipher: mixed\n"
" repo1: none\n"
" repo2: aes-256-cbc\n"
"\n"
" db (current)\n"
" wal archive min/max (9.5): 000000010000000000000003/000000010000000000000004\n"
" wal archive min/max (9.5): 000000010000000000000002/000000010000000000000005\n"
"\n"
" full backup: 20201116-200000F\n"
" timestamp start/stop: 2020-11-16 20:00:00 / 2020-11-16 20:00:05\n"
" wal start/stop: 000000010000000000000004 / 000000010000000000000004\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n"
" database list: mail (16456), postgres (12173)\n"
" symlinks:\n"
" pg_hba.conf => ../pg_config/pg_hba.conf\n"
@ -1634,7 +1630,7 @@ testRun(void)
" ts1 (1) => /tblspc/ts1\n"
" ts12 (12) => /tblspc/ts12\n"
" page checksum error: base/16384/17000\n",
"text - multi-repo, backup set requested, repo2");
"text - multi-repo, backup set requested, found on repo2, report stanza and db over all repos");
//--------------------------------------------------------------------------------------------------------------------------
strLstAddZ(argList2, "--output=json");
@ -1704,8 +1700,8 @@ testRun(void)
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
" database list: mail (16456), postgres (12173)\n"
" page checksum error: base/16384/17000, base/32768/33000\n",
@ -1774,8 +1770,8 @@ testRun(void)
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
" database list: none\n",
"text - backup set requested, no db and no checksum error");
@ -1899,21 +1895,21 @@ testRun(void)
" full backup: 20181119-152138F\n"
" timestamp start/stop: 2018-11-19 15:21:38 / 2018-11-19 15:21:39\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000002\n"
" database size: 19.2MB, backup size: 19.2MB\n"
" repo1: size: 2.3MB, backup size: 2.3MB\n"
" database size: 19.2MB, database backup size: 19.2MB\n"
" repo1: backup set size: 2.3MB, backup size: 2.3MB\n"
"\n"
" diff backup: 20181119-152138F_20181119-152152D\n"
" timestamp start/stop: 2018-11-19 15:21:52 / 2018-11-19 15:21:55\n"
" wal start/stop: 000000010000000000000003 / 000000020000000000000003\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F\n"
"\n"
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
"\n"
" db (current)\n"
@ -1922,14 +1918,14 @@ testRun(void)
" full backup: 20201116-155000F\n"
" timestamp start/stop: 2020-11-16 15:50:00 / 2020-11-16 15:50:02\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n"
"\n"
" incr backup: 20201116-155000F_20201119-152100I\n"
" timestamp start/stop: 2020-11-19 15:21:00 / 2020-11-19 15:21:03\n"
" wal start/stop: 000000010000000000000005 / 000000010000000000000005\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20201116-155000F\n",
"text - multi-repo, valid backups only on repo1");
@ -1957,21 +1953,21 @@ testRun(void)
" full backup: 20181119-152138F\n"
" timestamp start/stop: 2018-11-19 15:21:38 / 2018-11-19 15:21:39\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000002\n"
" database size: 19.2MB, backup size: 19.2MB\n"
" repo1: size: 2.3MB, backup size: 2.3MB\n"
" database size: 19.2MB, database backup size: 19.2MB\n"
" repo1: backup set size: 2.3MB, backup size: 2.3MB\n"
"\n"
" diff backup: 20181119-152138F_20181119-152152D\n"
" timestamp start/stop: 2018-11-19 15:21:52 / 2018-11-19 15:21:55\n"
" wal start/stop: 000000010000000000000003 / 000000020000000000000003\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F\n"
"\n"
" incr backup: 20181119-152138F_20181119-152155I\n"
" timestamp start/stop: 2018-11-19 15:21:55 / 2018-11-19 15:21:57\n"
" wal start/stop: n/a\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20181119-152138F, 20181119-152138F_20181119-152152D\n"
"\n"
" db (current)\n"
@ -1980,14 +1976,14 @@ testRun(void)
" full backup: 20201116-155000F\n"
" timestamp start/stop: 2020-11-16 15:50:00 / 2020-11-16 15:50:02\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n"
"\n"
" incr backup: 20201116-155000F_20201119-152100I\n"
" timestamp start/stop: 2020-11-19 15:21:00 / 2020-11-19 15:21:03\n"
" wal start/stop: 000000010000000000000005 / 000000010000000000000005\n"
" database size: 19.2MB, backup size: 8.2KB\n"
" repo1: size: 2.3MB, backup size: 346B\n"
" database size: 19.2MB, database backup size: 8.2KB\n"
" repo1: backup set size: 2.3MB, backup size: 346B\n"
" backup reference list: 20201116-155000F\n",
"text - multi-repo, prior backup: no archives but backups (code coverage)");
@ -2097,14 +2093,14 @@ testRun(void)
" full backup: 20201110-100000F\n"
" timestamp start/stop: 2020-11-10 10:00:00 / 2020-11-10 10:00:02\n"
" wal start/stop: 000000010000000000000001 / 000000010000000000000002\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n"
"\n"
" full backup: 20201212-192538F\n"
" timestamp start/stop: 2020-12-12 19:25:38 / 2020-12-12 19:25:40\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n"
"\n"
" db (current)\n"
" wal archive min/max (9.5): 000000010000000000000006/000000010000000000000006\n"
@ -2112,8 +2108,8 @@ testRun(void)
" full backup: 20210112-192538F\n"
" timestamp start/stop: 2021-01-12 19:25:38 / 2021-01-12 19:25:40\n"
" wal start/stop: 000000010000000000000006 / 000000010000000000000006\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n",
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n",
"text - multi-repo, database mismatch, repo2 stanza-upgrade needed");
hrnCfgArgRawZ(argList2, cfgOptOutput, "json");
@ -2471,8 +2467,8 @@ testRun(void)
" full backup: 20201116-155010F\n"
" timestamp start/stop: 2020-11-16 15:50:10 / 2020-11-16 15:50:12\n"
" wal start/stop: 000000010000000000000001 / 000000010000000000000002\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n"
"\n"
" db (current)\n"
" wal archive min/max (9.4): 000000010000000000000002/000000010000000000000003\n"
@ -2480,8 +2476,8 @@ testRun(void)
" full backup: 20201116-155000F\n"
" timestamp start/stop: 2020-11-16 15:50:00 / 2020-11-16 15:50:02\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n",
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n",
"text - db mismatch, diff system-id across repos, repo1 considered current db since read first");
//--------------------------------------------------------------------------------------------------------------------------
@ -2548,8 +2544,8 @@ testRun(void)
" full backup: 20201116-155010F\n"
" timestamp start/stop: 2020-11-16 15:50:10 / 2020-11-16 15:50:12\n"
" wal start/stop: 000000010000000000000001 / 000000010000000000000002\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo2: size: 3MB, backup size: 3KB\n"
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo2: backup set size: 3MB, backup size: 3KB\n"
"\n"
" db (current)\n"
" wal archive min/max (9.4): 000000010000000000000002/000000010000000000000003\n"
@ -2557,8 +2553,8 @@ testRun(void)
" full backup: 20201116-155000F\n"
" timestamp start/stop: 2020-11-16 15:50:00 / 2020-11-16 15:50:02\n"
" wal start/stop: 000000010000000000000002 / 000000010000000000000003\n"
" database size: 25.7MB, backup size: 25.7MB\n"
" repo1: size: 3MB, backup size: 3KB\n",
" database size: 25.7MB, database backup size: 25.7MB\n"
" repo1: backup set size: 3MB, backup size: 3KB\n",
"text - db mismatch, diff version across repos, repo1 considered current db since read first");
}
@ -2595,7 +2591,7 @@ testRun(void)
TEST_ERROR_FMT(
harnessCfgLoad(cfgCmdInfo, argList), OptionInvalidError, "option 'set' not valid without option 'stanza'");
// Option --repo not requied when only 1 repo configured
// Option --repo not required when only 1 repo configured
strLstAddZ(argList, "--stanza=stanza1");
harnessCfgLoad(cfgCmdInfo, argList);