1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-04-19 11:52:32 +02:00

Expire continues if an error occurs processing a repository.

Errors are logged to the log file rather than thrown. If, after processing all repos, one or more errors occurred, then a single error error will be thrown to indicate there were errors and the log file should be inspected.

Also update log messages to be more consistent with new patterns.
This commit is contained in:
Cynthia Shang 2021-02-23 12:20:02 -05:00 committed by David Steele
parent e14036bf57
commit e28f6f11e9
12 changed files with 466 additions and 340 deletions

View File

@ -97,6 +97,9 @@ service: 101
# An error while attempting to execute a binary # An error while attempting to execute a binary
execute: 102 execute: 102
# The command encountered one or more errors
command: 104
# This error should not be thrown directly -- it serves as a parent for the C errors # This error should not be thrown directly -- it serves as a parent for the C errors
runtime: 122 runtime: 122

View File

@ -39,6 +39,7 @@
<release-development-list> <release-development-list>
<release-item> <release-item>
<commit subject="Enhance expire command multi-repo support."/> <commit subject="Enhance expire command multi-repo support."/>
<commit subject="Expire continues if an error occurs processing a repository."/>
<release-item-contributor-list> <release-item-contributor-list>
<release-item-contributor id="cynthia.shang"/> <release-item-contributor id="cynthia.shang"/>

View File

@ -1548,7 +1548,7 @@
<execute user="postgres" output="y"> <execute user="postgres" output="y">
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=full <exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=full
--log-level-console=info backup</exe-cmd> --log-level-console=info backup</exe-cmd>
<exe-highlight>expire full backup set repo1\: {[backup-full-first]}|archive retention on backup {[backup-full-second]}|remove archive</exe-highlight> <exe-highlight>expire full backup set {[backup-full-first]}|archive retention on backup {[backup-full-second]}|remove archive</exe-highlight>
</execute> </execute>
</execute-list> </execute-list>
@ -1593,7 +1593,7 @@
<execute user="postgres" output="y"> <execute user="postgres" output="y">
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=diff <exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=diff
--log-level-console=info backup</exe-cmd> --log-level-console=info backup</exe-cmd>
<exe-highlight>expire diff backup set repo1: {[backup-diff-second]}</exe-highlight> <exe-highlight>expire diff backup set {[backup-diff-second]}</exe-highlight>
</execute> </execute>
</execute-list> </execute-list>
</section> </section>

View File

@ -121,8 +121,7 @@ expireAdhocBackup(InfoBackup *infoBackup, const String *backupLabel, unsigned in
{ {
THROW_FMT( THROW_FMT(
BackupSetInvalidError, BackupSetInvalidError,
"full backup repo%u: %s cannot be expired until another full backup has been created on this repo", "full backup %s cannot be expired until another full backup has been created on this repo", strZ(backupLabel));
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(backupLabel));
} }
} }
@ -144,7 +143,7 @@ expireAdhocBackup(InfoBackup *infoBackup, const String *backupLabel, unsigned in
// backups that can be recovered through PITR until the next full backup is created. Same problem for differential // backups that can be recovered through PITR until the next full backup is created. Same problem for differential
// backups with retention-diff. // backups with retention-diff.
LOG_WARN_FMT( LOG_WARN_FMT(
"expiring latest backup repo%u: %s - the ability to perform point-in-time-recovery (PITR) may be affected\n" "repo%u: expiring latest backup %s - the ability to perform point-in-time-recovery (PITR) may be affected\n"
"HINT: non-default settings for '%s'/'%s' (even in prior expires) can cause gaps in the WAL.", "HINT: non-default settings for '%s'/'%s' (even in prior expires) can cause gaps in the WAL.",
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(latestBackup), cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(latestBackup),
cfgOptionIdxName(cfgOptRepoRetentionArchive, repoIdx), cfgOptionIdxName(cfgOptRepoRetentionArchiveType, repoIdx)); cfgOptionIdxName(cfgOptRepoRetentionArchive, repoIdx), cfgOptionIdxName(cfgOptRepoRetentionArchiveType, repoIdx));
@ -158,7 +157,7 @@ expireAdhocBackup(InfoBackup *infoBackup, const String *backupLabel, unsigned in
// Log the expired backup list (prepend "set:" if there were any dependents that were also expired) // Log the expired backup list (prepend "set:" if there were any dependents that were also expired)
LOG_INFO_FMT( LOG_INFO_FMT(
"expire adhoc backup %srepo%u: %s", (result > 1 ? "set " : ""), cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: expire adhoc backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), (result > 1 ? "set " : ""),
strZ(strLstJoin(backupExpired, ", "))); strZ(strLstJoin(backupExpired, ", ")));
} }
MEM_CONTEXT_TEMP_END(); MEM_CONTEXT_TEMP_END();
@ -210,8 +209,8 @@ expireDiffBackup(InfoBackup *infoBackup, unsigned int repoIdx)
// Log the expired backups. If there is more than one backup, then prepend "set:" // Log the expired backups. If there is more than one backup, then prepend "set:"
LOG_INFO_FMT( LOG_INFO_FMT(
"expire diff backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""), "repo%u: expire diff backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", "))); (strLstSize(backupExpired) > 1 ? "set " : ""), strZ(strLstJoin(backupExpired, ", ")));
} }
} }
} }
@ -260,8 +259,8 @@ expireFullBackup(InfoBackup *infoBackup, unsigned int repoIdx)
// Log the expired backups. If there is more than one backup, then prepend "set:" // Log the expired backups. If there is more than one backup, then prepend "set:"
LOG_INFO_FMT( LOG_INFO_FMT(
"expire full backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""), "repo%u: expire full backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", "))); (strLstSize(backupExpired) > 1 ? "set " : ""), strZ(strLstJoin(backupExpired, ", ")));
} }
} }
} }
@ -329,8 +328,8 @@ expireTimeBasedBackup(InfoBackup *infoBackup, const time_t minTimestamp, unsigne
// Log the expired backups. If there is more than one backup, then prepend "set:" // Log the expired backups. If there is more than one backup, then prepend "set:"
LOG_INFO_FMT( LOG_INFO_FMT(
"expire time-based backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""), "repo%u: expire time-based backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", "))); (strLstSize(backupExpired) > 1 ? "set " : ""), strZ(strLstJoin(backupExpired, ", ")));
} }
if (strEqZ(cfgOptionIdxStr(cfgOptRepoRetentionArchiveType, repoIdx), CFGOPTVAL_TMP_REPO_RETENTION_ARCHIVE_TYPE_FULL) && if (strEqZ(cfgOptionIdxStr(cfgOptRepoRetentionArchiveType, repoIdx), CFGOPTVAL_TMP_REPO_RETENTION_ARCHIVE_TYPE_FULL) &&
@ -357,7 +356,7 @@ logExpire(ArchiveExpired *archiveExpire, String *archiveId, unsigned int repoIdx
{ {
// Force out any remaining message // Force out any remaining message
LOG_DETAIL_FMT( LOG_DETAIL_FMT(
"remove archive repo%u: %s, start = %s, stop = %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId), "repo%u: %s remove archive, start = %s, stop = %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId),
strZ(archiveExpire->start), strZ(archiveExpire->stop)); strZ(archiveExpire->start), strZ(archiveExpire->stop));
archiveExpire->start = NULL; archiveExpire->start = NULL;
@ -397,7 +396,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
else else
{ {
LOG_INFO_FMT( LOG_INFO_FMT(
"time-based archive retention not met for repo%u %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: time-based archive retention not met %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
strZ(msg)); strZ(msg));
} }
} }
@ -470,9 +469,8 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
archiveInfoPgHistory.systemId != backupInfoPgHistory.systemId || archiveInfoPgHistory.systemId != backupInfoPgHistory.systemId ||
archiveInfoPgHistory.version != backupInfoPgHistory.version) archiveInfoPgHistory.version != backupInfoPgHistory.version)
{ {
THROW_FMT( THROW(
FormatError, "archive expiration cannot continue for repo%u - archive and backup history lists do not" FormatError, "archive expiration cannot continue - archive and backup history lists do not match");
" match", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx));
} }
} }
@ -526,7 +524,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
storageRepoIdx(repoIdx), strNewFmt(STORAGE_REPO_ARCHIVE "/%s", strZ(archiveId))); storageRepoIdx(repoIdx), strNewFmt(STORAGE_REPO_ARCHIVE "/%s", strZ(archiveId)));
LOG_INFO_FMT( LOG_INFO_FMT(
"remove archive path repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: remove archive path %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
strZ(fullPath)); strZ(fullPath));
// Execute the real expiration and deletion only if the dry-run option is disabled // Execute the real expiration and deletion only if the dry-run option is disabled
@ -619,8 +617,9 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
archiveExpireMax = strDup(archiveRange.start); archiveExpireMax = strDup(archiveRange.start);
LOG_DETAIL_FMT( LOG_DETAIL_FMT(
"archive retention on backup %s repo%u: %s, start = %s%s", strZ(backupData->backupLabel), "repo%u: %s archive retention on backup %s, start = %s%s",
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId), strZ(archiveRange.start), cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId),
strZ(backupData->backupLabel), strZ(archiveRange.start),
archiveRange.stop != NULL ? strZ(strNewFmt(", stop = %s", strZ(archiveRange.stop))) : ""); archiveRange.stop != NULL ? strZ(strNewFmt(", stop = %s", strZ(archiveRange.stop))) : "");
// Add the archive range to the list // Add the archive range to the list
@ -732,7 +731,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
if (archiveExpire.total == 0) if (archiveExpire.total == 0)
{ {
LOG_DETAIL_FMT( LOG_DETAIL_FMT(
"no archive to remove for repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: %s no archive to remove", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
strZ(archiveId)); strZ(archiveId));
} }
// Log if there is more to log // Log if there is more to log
@ -766,7 +765,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
} }
LOG_DETAIL_FMT( LOG_DETAIL_FMT(
"remove history file repo%u: %s, file = %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: %s remove history file %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
strZ(archiveId), strZ(historyFile)); strZ(archiveId), strZ(historyFile));
} }
} }
@ -845,7 +844,7 @@ removeExpiredBackup(InfoBackup *infoBackup, const String *adhocBackupLabel, unsi
if (!strLstExists(currentBackupList, strLstGet(backupList, backupIdx))) if (!strLstExists(currentBackupList, strLstGet(backupList, backupIdx)))
{ {
LOG_INFO_FMT( LOG_INFO_FMT(
"remove expired backup repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), "repo%u: remove expired backup %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
strZ(strLstGet(backupList, backupIdx))); strZ(strLstGet(backupList, backupIdx)));
// Execute the real expiration and deletion only if the dry-run mode is disabled // Execute the real expiration and deletion only if the dry-run mode is disabled
@ -900,68 +899,87 @@ cmdExpire(void)
THROW_FMT(OptionInvalidValueError, "'%s' is not a valid backup label format", strZ(adhocBackupLabel)); THROW_FMT(OptionInvalidValueError, "'%s' is not a valid backup label format", strZ(adhocBackupLabel));
} }
// Track any errors that may occur
unsigned int errorTotal = 0;
for (unsigned int repoIdx = repoIdxMin; repoIdx <= repoIdxMax; repoIdx++) for (unsigned int repoIdx = repoIdxMin; repoIdx <= repoIdxMax; repoIdx++)
{ {
// Get the repo storage in case it is remote and encryption settings need to be pulled down // Get the repo storage in case it is remote and encryption settings need to be pulled down
const Storage *storageRepo = storageRepoIdx(repoIdx); const Storage *storageRepo = storageRepoIdx(repoIdx);
InfoBackup *infoBackup = NULL;
// Load the backup.info
InfoBackup *infoBackup = infoBackupLoadFileReconstruct(
storageRepo, INFO_BACKUP_PATH_FILE_STR, cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)),
cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
bool timeBasedFullRetention = strEqZ( bool timeBasedFullRetention = strEqZ(
cfgOptionIdxStr(cfgOptRepoRetentionFullType, repoIdx), CFGOPTVAL_TMP_REPO_RETENTION_FULL_TYPE_TIME); cfgOptionIdxStr(cfgOptRepoRetentionFullType, repoIdx), CFGOPTVAL_TMP_REPO_RETENTION_FULL_TYPE_TIME);
// If a backupLabel was set, then attempt to expire the requested backup TRY_BEGIN()
if (adhocBackupLabel != NULL)
{ {
if (infoBackupDataByLabel(infoBackup, adhocBackupLabel) != NULL) // Load the backup.info
{ infoBackup = infoBackupLoadFileReconstruct(
adhocBackupFound = true; storageRepo, INFO_BACKUP_PATH_FILE_STR, cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)),
expireAdhocBackup(infoBackup, adhocBackupLabel, repoIdx); cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
}
// If the adhoc backup was not found and this was the last repo to check, then log a warning but continue to process // If a backupLabel was set, then attempt to expire the requested backup
// the expiration based on retention if (adhocBackupLabel != NULL)
if (!adhocBackupFound && repoIdx == repoIdxMax)
{ {
LOG_WARN_FMT( if (infoBackupDataByLabel(infoBackup, adhocBackupLabel) != NULL)
"backup %s does not exist\nHINT: run the info command and confirm the backup is listed",
strZ(adhocBackupLabel));
}
}
else
{
// If time-based retention for full backups is set, then expire based on time period
if (timeBasedFullRetention)
{
// If a time period was provided then run time-based expiration otherwise do nothing (the user has already been
// warned by the config system that retention-full was not set)
if (cfgOptionIdxTest(cfgOptRepoRetentionFull, repoIdx))
{ {
expireTimeBasedBackup( adhocBackupFound = true;
infoBackup, time(NULL) - (time_t)(cfgOptionUInt(cfgOptRepoRetentionFull) * SEC_PER_DAY), repoIdx); expireAdhocBackup(infoBackup, adhocBackupLabel, repoIdx);
}
// If the adhoc backup was not found and this was the last repo to check, then log a warning but continue to
// process the expiration based on retention
if (!adhocBackupFound && repoIdx == repoIdxMax)
{
LOG_WARN_FMT(
"backup %s does not exist\nHINT: run the info command and confirm the backup is listed",
strZ(adhocBackupLabel));
} }
} }
else else
expireFullBackup(infoBackup, repoIdx); {
// If time-based retention for full backups is set, then expire based on time period
if (timeBasedFullRetention)
{
// If a time period was provided then run time-based expiration otherwise do nothing (the user has already
// been warned by the config system that retention-full was not set)
if (cfgOptionIdxTest(cfgOptRepoRetentionFull, repoIdx))
{
expireTimeBasedBackup(
infoBackup, time(NULL) - (time_t)(cfgOptionUInt(cfgOptRepoRetentionFull) * SEC_PER_DAY), repoIdx);
}
}
else
expireFullBackup(infoBackup, repoIdx);
expireDiffBackup(infoBackup, repoIdx); expireDiffBackup(infoBackup, repoIdx);
}
// Store the new backup info only if the dry-run mode is disabled
if (!cfgOptionValid(cfgOptDryRun) || !cfgOptionBool(cfgOptDryRun))
{
infoBackupSaveFile(
infoBackup, storageRepoIdxWrite(repoIdx), INFO_BACKUP_PATH_FILE_STR,
cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)),
cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
}
// Remove all files on disk that are now expired
removeExpiredBackup(infoBackup, adhocBackupLabel, repoIdx);
removeExpiredArchive(infoBackup, timeBasedFullRetention, repoIdx);
} }
CATCH_ANY()
// Store the new backup info only if the dry-run mode is disabled
if (!cfgOptionValid(cfgOptDryRun) || !cfgOptionBool(cfgOptDryRun))
{ {
infoBackupSaveFile( LOG_ERROR_FMT(
infoBackup, storageRepoIdxWrite(repoIdx), INFO_BACKUP_PATH_FILE_STR, errorTypeCode(errorType()), "repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), errorMessage());
cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)), cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx)); errorTotal++;;
} }
TRY_END();
// Remove all files on disk that are now expired
removeExpiredBackup(infoBackup, adhocBackupLabel, repoIdx);
removeExpiredArchive(infoBackup, timeBasedFullRetention, repoIdx);
} }
// Error if any errors encountered on one or more repos
if (errorTotal > 0)
THROW_FMT(CommandError, CFGCMD_EXPIRE " command encountered %u error(s), check the log file for details", errorTotal);
} }
MEM_CONTEXT_TEMP_END(); MEM_CONTEXT_TEMP_END();

View File

@ -83,6 +83,7 @@ ERROR_DEFINE( 99, JsonFormatError, RuntimeError);
ERROR_DEFINE(100, KernelError, RuntimeError); ERROR_DEFINE(100, KernelError, RuntimeError);
ERROR_DEFINE(101, ServiceError, RuntimeError); ERROR_DEFINE(101, ServiceError, RuntimeError);
ERROR_DEFINE(102, ExecuteError, RuntimeError); ERROR_DEFINE(102, ExecuteError, RuntimeError);
ERROR_DEFINE(104, CommandError, RuntimeError);
ERROR_DEFINE(122, RuntimeError, RuntimeError); ERROR_DEFINE(122, RuntimeError, RuntimeError);
ERROR_DEFINE(123, InvalidError, RuntimeError); ERROR_DEFINE(123, InvalidError, RuntimeError);
ERROR_DEFINE(124, UnhandledError, RuntimeError); ERROR_DEFINE(124, UnhandledError, RuntimeError);
@ -169,6 +170,7 @@ static const ErrorType *errorTypeList[] =
&KernelError, &KernelError,
&ServiceError, &ServiceError,
&ExecuteError, &ExecuteError,
&CommandError,
&RuntimeError, &RuntimeError,
&InvalidError, &InvalidError,
&UnhandledError, &UnhandledError,

View File

@ -85,6 +85,7 @@ ERROR_DECLARE(JsonFormatError);
ERROR_DECLARE(KernelError); ERROR_DECLARE(KernelError);
ERROR_DECLARE(ServiceError); ERROR_DECLARE(ServiceError);
ERROR_DECLARE(ExecuteError); ERROR_DECLARE(ExecuteError);
ERROR_DECLARE(CommandError);
ERROR_DECLARE(RuntimeError); ERROR_DECLARE(RuntimeError);
ERROR_DECLARE(InvalidError); ERROR_DECLARE(InvalidError);
ERROR_DECLARE(UnhandledError); ERROR_DECLARE(UnhandledError);

View File

@ -2603,14 +2603,14 @@ expire full=1 (db-primary host)
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config=[TEST_PATH]/db-primary/pgbackrest.conf --repo1-retention-full=1 --repo=1 --stanza=db expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config=[TEST_PATH]/db-primary/pgbackrest.conf --repo1-retention-full=1 --repo=1 --stanza=db expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo=1 --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo=1 --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-full=1 --stanza=db
P00 INFO: expire full backup set repo1: [BACKUP-FULL-2], [BACKUP-INCR-2], [BACKUP-DIFF-1], [BACKUP-INCR-3], [BACKUP-INCR-4], [BACKUP-DIFF-2], [BACKUP-DIFF-3] P00 INFO: repo1: expire full backup set [BACKUP-FULL-2], [BACKUP-INCR-2], [BACKUP-DIFF-1], [BACKUP-INCR-3], [BACKUP-INCR-4], [BACKUP-DIFF-2], [BACKUP-DIFF-3]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-3] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-3]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-2] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-2]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-4] P00 INFO: repo1: remove expired backup [BACKUP-INCR-4]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-3] P00 INFO: repo1: remove expired backup [BACKUP-INCR-3]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-1] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-2] P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2] P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
diff backup - add file (db-primary host) diff backup - add file (db-primary host)

View File

@ -300,8 +300,8 @@ Nothing to expire
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 DETAIL: archive retention on backup [BACKUP-FULL-1] repo1: 9.2-1, start = 000000010000000000000000 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-1], start = 000000010000000000000000
P00 DETAIL: no archive to remove for repo1: 9.2-1 P00 DETAIL: repo1: 9.2-1 no archive to remove
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -903,11 +903,11 @@ Expire oldest full backup, archive expire falls on segment major boundary
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 INFO: expire full backup set repo1: [BACKUP-FULL-1], [BACKUP-INCR-1] P00 INFO: repo1: expire full backup set [BACKUP-FULL-1], [BACKUP-INCR-1]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-1] P00 INFO: repo1: remove expired backup [BACKUP-INCR-1]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-1] P00 INFO: repo1: remove expired backup [BACKUP-FULL-1]
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 000000010000000100000000 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 000000010000000100000000
P00 DETAIL: remove archive repo1: 9.2-1, start = 0000000100000000, stop = 0000000100000000 P00 DETAIL: repo1: 9.2-1 remove archive, start = 0000000100000000, stop = 0000000100000000
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -1269,10 +1269,10 @@ Expire oldest full backup
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=full --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 INFO: expire diff backup repo1: [BACKUP-DIFF-1] P00 INFO: repo1: expire diff backup [BACKUP-DIFF-1]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-1] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 000000010000000100000000 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 000000010000000100000000
P00 DETAIL: no archive to remove for repo1: 9.2-1 P00 DETAIL: repo1: 9.2-1 no archive to remove
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -1922,13 +1922,13 @@ Expire oldest diff backup, archive expire does not fall on major segment boundar
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 INFO: expire full backup set repo1: [BACKUP-FULL-2], [BACKUP-DIFF-2] P00 INFO: repo1: expire full backup set [BACKUP-FULL-2], [BACKUP-DIFF-2]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-2] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-2]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2] P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000012 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
P00 DETAIL: archive retention on backup [BACKUP-DIFF-3] repo1: 9.2-1, start = 000000010000000200000016 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-3], start = 000000010000000200000016
P00 DETAIL: remove archive repo1: 9.2-1, start = 0000000100000001, stop = 00000001000000020000000F P00 DETAIL: repo1: 9.2-1 remove archive, start = 0000000100000001, stop = 00000001000000020000000F
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000013, stop = 000000010000000200000015 P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000013, stop = 000000010000000200000015
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2044,12 +2044,12 @@ Expire oldest diff backup (cascade to incr)
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 INFO: expire diff backup set repo1: [BACKUP-DIFF-3], [BACKUP-INCR-2] P00 INFO: repo1: expire diff backup set [BACKUP-DIFF-3], [BACKUP-INCR-2]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-2] P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-3] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-3]
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000012 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
P00 DETAIL: archive retention on backup [BACKUP-DIFF-4] repo1: 9.2-1, start = 00000001000000020000001E P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-4], start = 00000001000000020000001E
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000016, stop = 00000001000000020000001D P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000016, stop = 00000001000000020000001D
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2157,10 +2157,10 @@ Expire archive based on newest incr backup
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=incr --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=1 --repo1-retention-diff=1 --repo1-retention-archive-type=incr --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=incr --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=incr --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000012 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
P00 DETAIL: archive retention on backup [BACKUP-DIFF-4] repo1: 9.2-1, start = 00000001000000020000001E, stop = 000000010000000200000020 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-4], start = 00000001000000020000001E, stop = 000000010000000200000020
P00 DETAIL: archive retention on backup [BACKUP-INCR-3] repo1: 9.2-1, start = 000000010000000200000024 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-INCR-3], start = 000000010000000200000024
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000021, stop = 000000010000000200000023 P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000021, stop = 000000010000000200000023
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2296,16 +2296,16 @@ Expire diff treating full as diff
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=db
P00 INFO: expire full backup set repo1: [BACKUP-FULL-3], [BACKUP-DIFF-4], [BACKUP-INCR-3] P00 INFO: repo1: expire full backup set [BACKUP-FULL-3], [BACKUP-DIFF-4], [BACKUP-INCR-3]
P00 INFO: expire diff backup repo1: [BACKUP-DIFF-5] P00 INFO: repo1: expire diff backup [BACKUP-DIFF-5]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-5] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-5]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-3] P00 INFO: repo1: remove expired backup [BACKUP-INCR-3]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-4] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-4]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-3] P00 INFO: repo1: remove expired backup [BACKUP-FULL-3]
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000029 P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000010, stop = 000000010000000200000029
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000002D, stop = 000000010000000200000035 P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000002D, stop = 000000010000000200000035
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2435,14 +2435,14 @@ P00 WARN: option 'repo1-retention-full' is not set for 'repo1-retention-full-t
HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum.
P00 WARN: option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff' P00 WARN: option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff'
HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff' to the maximum. HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff' to the maximum.
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036, stop = 000000010000000200000038 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036, stop = 000000010000000200000038
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 9.2-1, start = 00000001000000020000003C, stop = 00000001000000020000003E P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-6], start = 00000001000000020000003C, stop = 00000001000000020000003E
P00 DETAIL: archive retention on backup [BACKUP-DIFF-6] repo1: 9.2-1, start = 000000010000000200000042, stop = 000000010000000200000044 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-6], start = 000000010000000200000042, stop = 000000010000000200000044
P00 DETAIL: archive retention on backup [BACKUP-DIFF-7] repo1: 9.2-1, start = 000000010000000200000048 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-7], start = 000000010000000200000048
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000039, stop = 00000001000000020000003B P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000039, stop = 00000001000000020000003B
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000003F, stop = 000000010000000200000041 P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000003F, stop = 000000010000000200000041
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000045, stop = 000000010000000200000047 P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000045, stop = 000000010000000200000047
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2591,15 +2591,15 @@ Expire full with repo-retention-archive with warning repo-retention-full not set
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=full --stanza=db
P00 WARN: option 'repo1-retention-full' is not set for 'repo1-retention-full-type=count', the repository may run out of space P00 WARN: option 'repo1-retention-full' is not set for 'repo1-retention-full-type=count', the repository may run out of space
HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum.
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036, stop = 000000010000000200000038 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036, stop = 000000010000000200000038
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 9.2-1, start = 00000001000000020000003C, stop = 00000001000000020000003E P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-6], start = 00000001000000020000003C, stop = 00000001000000020000003E
P00 DETAIL: archive retention on backup [BACKUP-DIFF-6] repo1: 9.2-1, start = 000000010000000200000042, stop = 000000010000000200000044 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-6], start = 000000010000000200000042, stop = 000000010000000200000044
P00 DETAIL: archive retention on backup [BACKUP-DIFF-7] repo1: 9.2-1, start = 000000010000000200000048, stop = 00000001000000020000004A P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-7], start = 000000010000000200000048, stop = 00000001000000020000004A
P00 DETAIL: archive retention on backup [BACKUP-FULL-7] repo1: 9.2-1, start = 00000001000000020000004E, stop = 000000010000000200000050 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-7], start = 00000001000000020000004E, stop = 000000010000000200000050
P00 DETAIL: archive retention on backup [BACKUP-FULL-8] repo1: 9.2-1, start = 000000010000000200000054 P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-8], start = 000000010000000200000054
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000004B, stop = 00000001000000020000004D P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000004B, stop = 00000001000000020000004D
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000051, stop = 000000010000000200000053 P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000051, stop = 000000010000000200000053
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -2758,16 +2758,16 @@ Expire no archive with warning since repo-retention-archive not set for INCR
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=incr --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=incr --repo1-retention-diff=1 --repo1-retention-full=1 --stanza=db
P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=incr' but option 'repo1-retention-archive' is not set P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=incr' but option 'repo1-retention-archive' is not set
P00 INFO: expire full backup repo1: [BACKUP-FULL-4] P00 INFO: repo1: expire full backup [BACKUP-FULL-4]
P00 INFO: expire full backup repo1: [BACKUP-FULL-5] P00 INFO: repo1: expire full backup [BACKUP-FULL-5]
P00 INFO: expire full backup set repo1: [BACKUP-FULL-6], [BACKUP-DIFF-6], [BACKUP-DIFF-7] P00 INFO: repo1: expire full backup set [BACKUP-FULL-6], [BACKUP-DIFF-6], [BACKUP-DIFF-7]
P00 INFO: expire full backup repo1: [BACKUP-FULL-7] P00 INFO: repo1: expire full backup [BACKUP-FULL-7]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-7] P00 INFO: repo1: remove expired backup [BACKUP-FULL-7]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-7] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-7]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-6] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-6]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-6] P00 INFO: repo1: remove expired backup [BACKUP-FULL-6]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-5] P00 INFO: repo1: remove expired backup [BACKUP-FULL-5]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-4] P00 INFO: repo1: remove expired backup [BACKUP-FULL-4]
P00 INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired P00 INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully

View File

@ -476,13 +476,13 @@ Upgrade stanza and expire only earliest db backup and archive
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=3 --repo1-retention-archive-type=full expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=3 --repo1-retention-archive-type=full expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=3 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=3 --stanza=db
P00 INFO: expire full backup set repo1: [BACKUP-FULL-1], [BACKUP-INCR-1] P00 INFO: repo1: expire full backup set [BACKUP-FULL-1], [BACKUP-INCR-1]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-1] P00 INFO: repo1: remove expired backup [BACKUP-INCR-1]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-1] P00 INFO: repo1: remove expired backup [BACKUP-FULL-1]
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 00000001000000000000000C P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 00000001000000000000000C
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000000000000, stop = 00000001000000000000000B P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000000000000, stop = 00000001000000000000000B
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.3-2, start = 000000010000000000000000 P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-3], start = 000000010000000000000000
P00 DETAIL: no archive to remove for repo1: 9.3-2 P00 DETAIL: repo1: 9.3-2 no archive to remove
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -1149,16 +1149,16 @@ Upgrade the stanza, create full back - earliest db orphaned archive removed and
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-archive-type=full expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-archive-type=full expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=2 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=2 --stanza=db
P00 INFO: expire full backup repo1: [BACKUP-FULL-2] P00 INFO: repo1: expire full backup [BACKUP-FULL-2]
P00 INFO: expire full backup set repo1: [BACKUP-FULL-3], [BACKUP-INCR-2] P00 INFO: repo1: expire full backup set [BACKUP-FULL-3], [BACKUP-INCR-2]
P00 INFO: remove expired backup repo1: [BACKUP-INCR-2] P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-3] P00 INFO: repo1: remove expired backup [BACKUP-FULL-3]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2] P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
P00 INFO: remove archive path repo1: [TEST_PATH]/db-primary/repo/archive/db/9.2-1 P00 INFO: repo1: remove archive path [TEST_PATH]/db-primary/repo/archive/db/9.2-1
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.3-2, start = 0000000100000000000000FF P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-4], start = 0000000100000000000000FF
P00 DETAIL: remove archive repo1: 9.3-2, start = 000000010000000000000000, stop = 0000000100000000000000FE P00 DETAIL: repo1: 9.3-2 remove archive, start = 000000010000000000000000, stop = 0000000100000000000000FE
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 10-3, start = 000000010000000000000000 P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000
P00 DETAIL: no archive to remove for repo1: 10-3 P00 DETAIL: repo1: 10-3 no archive to remove
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -1304,13 +1304,13 @@ Expire all archive last full backup through pitr
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=3 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=3 --repo1-retention-diff=1 --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=3 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=1 --repo1-retention-full=3 --stanza=db
P00 INFO: expire diff backup repo1: [BACKUP-DIFF-1] P00 INFO: repo1: expire diff backup [BACKUP-DIFF-1]
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-1] P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.3-2, start = 0000000100000000000000FF P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-4], start = 0000000100000000000000FF
P00 DETAIL: no archive to remove for repo1: 9.3-2 P00 DETAIL: repo1: 9.3-2 no archive to remove
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 10-3, start = 000000010000000000000000, stop = 000000010000000000000002 P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000, stop = 000000010000000000000002
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 10-3, start = 000000010000000000000006 P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-6], start = 000000010000000000000006
P00 DETAIL: remove archive repo1: 10-3, start = 000000010000000000000003, stop = 000000010000000000000005 P00 DETAIL: repo1: 10-3 remove archive, start = 000000010000000000000003, stop = 000000010000000000000005
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
@ -1451,11 +1451,11 @@ Expire all archive except for the current database
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-archive-type=full expire > [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config="[TEST_PATH]/db-primary/pgbackrest.conf" --stanza=db --log-level-console=detail --repo1-retention-full=2 --repo1-retention-archive-type=full expire
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=2 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-archive-type=full --repo1-retention-full=2 --stanza=db
P00 INFO: expire full backup repo1: [BACKUP-FULL-4] P00 INFO: repo1: expire full backup [BACKUP-FULL-4]
P00 INFO: remove expired backup repo1: [BACKUP-FULL-4] P00 INFO: repo1: remove expired backup [BACKUP-FULL-4]
P00 INFO: remove archive path repo1: [TEST_PATH]/db-primary/repo/archive/db/9.3-2 P00 INFO: repo1: remove archive path [TEST_PATH]/db-primary/repo/archive/db/9.3-2
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 10-3, start = 000000010000000000000000 P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000
P00 DETAIL: no archive to remove for repo1: 10-3 P00 DETAIL: repo1: 10-3 no archive to remove
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info + supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info

View File

@ -461,7 +461,7 @@ P00 INFO: full backup size = 48MB
P00 INFO: new backup label = [BACKUP-FULL-2] P00 INFO: new backup label = [BACKUP-FULL-2]
P00 INFO: backup command end: completed successfully P00 INFO: backup command end: completed successfully
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo=1 --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-full=2 --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/db-primary/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/db-primary/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-primary/log --no-log-timestamp --repo=1 --repo1-path=[TEST_PATH]/db-primary/repo --repo1-retention-full=2 --stanza=db
P00 INFO: remove archive path repo1: [TEST_PATH]/db-primary/repo/archive/db/9.3-1 P00 INFO: repo1: remove archive path [TEST_PATH]/db-primary/repo/archive/db/9.3-1
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully
+ supplemental file: [TEST_PATH]/db-primary/pgbackrest.conf + supplemental file: [TEST_PATH]/db-primary/pgbackrest.conf

View File

@ -524,7 +524,7 @@ P00 INFO: new backup label = [BACKUP-FULL-2]
P00 DETAIL: statistics: STATISTICS P00 DETAIL: statistics: STATISTICS
P00 INFO: backup command end: completed successfully P00 INFO: backup command end: completed successfully
P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/backup/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-log-timestamp --repo=1 --repo1-azure-account=<redacted> --repo1-azure-container=azContainer --repo1-azure-host=azure --repo1-azure-key=<redacted> --no-repo1-azure-verify-tls --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-retention-full=2 --repo1-type=azure --stanza=db P00 INFO: expire command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --config=[TEST_PATH]/backup/pgbackrest.conf --exec-id=[EXEC-ID] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-log-timestamp --repo=1 --repo1-azure-account=<redacted> --repo1-azure-container=azContainer --repo1-azure-host=azure --repo1-azure-key=<redacted> --no-repo1-azure-verify-tls --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-retention-full=2 --repo1-type=azure --stanza=db
P00 INFO: remove archive path repo1: /archive/db/9.3-1 P00 INFO: repo1: remove archive path /archive/db/9.3-1
P00 DETAIL: statistics: STATISTICS P00 DETAIL: statistics: STATISTICS
P00 INFO: expire command end: completed successfully P00 INFO: expire command end: completed successfully

View File

@ -237,7 +237,7 @@ testRun(void)
"20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n20181119-152900F\n" "20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n20181119-152900F\n"
"20181119-152900F_20181119-152600D\n", "20181119-152900F_20181119-152600D\n",
"remaining backups correct"); "remaining backups correct");
harnessLogResult("P00 INFO: expire full backup repo1: 20181119-152138F"); harnessLogResult("P00 INFO: repo1: expire full backup 20181119-152138F");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("retention-full set - full backup with dependencies expired"); TEST_TITLE("retention-full set - full backup with dependencies expired");
@ -252,7 +252,7 @@ testRun(void)
infoBackupDataLabelList(infoBackup, NULL), "20181119-152900F\n20181119-152900F_20181119-152600D\n", infoBackupDataLabelList(infoBackup, NULL), "20181119-152900F\n20181119-152900F_20181119-152600D\n",
"remaining backups correct"); "remaining backups correct");
harnessLogResult( harnessLogResult(
"P00 INFO: expire full backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152152D, " "P00 INFO: repo1: expire full backup set 20181119-152800F, 20181119-152800F_20181119-152152D, "
"20181119-152800F_20181119-152155I"); "20181119-152800F_20181119-152155I");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
@ -305,7 +305,7 @@ testRun(void)
"20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n", "20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n",
"remaining backups correct"); "remaining backups correct");
harnessLogResult( harnessLogResult(
"P00 INFO: expire diff backup set repo1: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I"); "P00 INFO: repo1: expire diff backup set 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I");
TEST_RESULT_UINT(expireDiffBackup(infoBackup, 0), 0, "retention-diff=2 but no more to expire"); TEST_RESULT_UINT(expireDiffBackup(infoBackup, 0), 0, "retention-diff=2 but no more to expire");
TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "current backups not reduced"); TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 4, "current backups not reduced");
@ -322,7 +322,7 @@ testRun(void)
"20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n", "20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n",
" remaining backups correct"); " remaining backups correct");
harnessLogResult( harnessLogResult(
"P00 INFO: expire diff backup set repo1: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I"); "P00 INFO: repo1: expire diff backup set 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("retention-diff set - diff with no dependents expired"); TEST_TITLE("retention-diff set - diff with no dependents expired");
@ -381,7 +381,7 @@ testRun(void)
infoBackupDataLabelList(infoBackup, NULL), "20181119-152800F\n20181119-152800F_20181119-152155D\n", infoBackupDataLabelList(infoBackup, NULL), "20181119-152800F\n20181119-152800F_20181119-152155D\n",
"remaining backups correct"); "remaining backups correct");
harnessLogResult( harnessLogResult(
"P00 INFO: expire diff backup repo1: 20181119-152800F_20181119-152152D"); "P00 INFO: repo1: expire diff backup 20181119-152800F_20181119-152152D");
} }
// ***************************************************************************************************************************** // *****************************************************************************************************************************
@ -445,8 +445,8 @@ testRun(void)
TEST_RESULT_VOID(removeExpiredBackup(infoBackup, NULL, 0), "remove backups not in backup.info current"); TEST_RESULT_VOID(removeExpiredBackup(infoBackup, NULL, 0), "remove backups not in backup.info current");
harnessLogResult( harnessLogResult(
"P00 INFO: remove expired backup repo1: 20181119-152100F_20181119-152152D\n" "P00 INFO: repo1: remove expired backup 20181119-152100F_20181119-152152D\n"
"P00 INFO: remove expired backup repo1: 20181119-152100F"); "P00 INFO: repo1: remove expired backup 20181119-152100F");
TEST_RESULT_STRLST_Z( TEST_RESULT_STRLST_Z(
strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc),
@ -475,7 +475,7 @@ testRun(void)
TEST_RESULT_VOID(removeExpiredBackup(infoBackup, NULL, 0), "remove backups - backup.info current empty"); TEST_RESULT_VOID(removeExpiredBackup(infoBackup, NULL, 0), "remove backups - backup.info current empty");
harnessLogResult("P00 INFO: remove expired backup repo1: 20181119-152138F"); harnessLogResult("P00 INFO: repo1: remove expired backup 20181119-152138F");
TEST_RESULT_STRLST_Z( TEST_RESULT_STRLST_Z(
strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc), strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc),
"20181118-152100F_20181119-152152D.save\nbackup.info\nbogus\n", "remaining file/directories correct"); "20181118-152100F_20181119-152152D.save\nbackup.info\nbogus\n", "remaining file/directories correct");
@ -545,7 +545,7 @@ testRun(void)
"P00 INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired"); "P00 INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired");
TEST_RESULT_VOID(removeExpiredArchive(infoBackup, true, 0), "archive retention not set - retention-full-type=time"); TEST_RESULT_VOID(removeExpiredArchive(infoBackup, true, 0), "archive retention not set - retention-full-type=time");
harnessLogResult("P00 INFO: time-based archive retention not met for repo1 - archive logs will not be expired"); harnessLogResult("P00 INFO: repo1: time-based archive retention not met - archive logs will not be expired");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("retention-archive set - no current backups"); TEST_TITLE("retention-archive set - no current backups");
@ -846,8 +846,8 @@ testRun(void)
storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strZ(backupStanzaPath))), true, storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strZ(backupStanzaPath))), true,
"backup not removed"); "backup not removed");
harnessLogResult( harnessLogResult(
"P00 INFO: [DRY-RUN] expire full backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: expire full backup 20181119-152138F\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F"); "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire via backup command"); TEST_TITLE("expire via backup command");
@ -890,8 +890,8 @@ testRun(void)
TEST_RESULT_BOOL(strLstExists(infoBackupDataLabelList(infoBackup, NULL), backupLabel), true, "backup exists repo1"); TEST_RESULT_BOOL(strLstExists(infoBackupDataLabelList(infoBackup, NULL), backupLabel), true, "backup exists repo1");
harnessLogResult( harnessLogResult(
"P00 INFO: expire full backup repo2: 20181119-152138F\n" "P00 INFO: repo2: expire full backup 20181119-152138F\n"
"P00 INFO: remove expired backup repo2: 20181119-152138F"); "P00 INFO: repo2: remove expired backup 20181119-152138F");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire command - no dry run"); TEST_TITLE("expire command - no dry run");
@ -905,11 +905,11 @@ testRun(void)
storagePathExistsP(storageTest, strNewFmt("%s/%s", strZ(archiveStanzaPath), "9.4-1/0000000100000000")), false, storagePathExistsP(storageTest, strNewFmt("%s/%s", strZ(archiveStanzaPath), "9.4-1/0000000100000000")), false,
"archive sub path removed"); "archive sub path removed");
harnessLogResult( harnessLogResult(
"P00 INFO: expire full backup repo1: 20181119-152138F\n" "P00 INFO: repo1: expire full backup 20181119-152138F\n"
"P00 INFO: remove expired backup repo1: 20181119-152138F"); "P00 INFO: repo1: remove expired backup 20181119-152138F");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire command - multi-repo, dry run: archive and backups not removed"); TEST_TITLE("expire command - multi-repo errors, continue to next repo after error");
argList = strLstDup(argListAvoidWarn); argList = strLstDup(argListAvoidWarn);
strLstAddZ(argList, "--repo1-retention-archive=1"); strLstAddZ(argList, "--repo1-retention-archive=1");
@ -925,6 +925,102 @@ testRun(void)
harnessLogLevelSet(logLevelDetail); harnessLogLevelSet(logLevelDetail);
// Rename backup.info files on repo1 to cause error
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, backupInfoFileName),
storageNewWriteP(storageTest, strNewFmt("%s.save", strZ(backupInfoFileName)))),
"repo1: backup.info moved to backup.info.save");
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName))),
storageNewWriteP(storageTest, strNewFmt("%s" INFO_COPY_EXT ".save", strZ(backupInfoFileName)))),
"repo1: backup.info.copy moved to backup.info.copy.save");
// Rename archive.info file on repo2 to cause error
String *archiveInfoFileNameRepo2 = strNew("repo2/archive/db/archive.info");
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, archiveInfoFileNameRepo2),
storageNewWriteP(storageTest, strNewFmt("%s.save", strZ(archiveInfoFileNameRepo2)))),
"repo2: archive.info moved to archive.info.save");
TEST_ERROR(
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 2 error(s), check the log file for details");
harnessLogResult(
strZ(strNewFmt(
"P00 ERROR: [055]: [DRY-RUN] repo1: unable to load info file '%s/%s' or '%s/%s':\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" HINT: backup.info cannot be opened and is required to perform a backup.\n"
" HINT: has a stanza-create been performed?\n"
"P00 INFO: [DRY-RUN] repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
" 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 ERROR: [055]: [DRY-RUN] repo2: unable to load info file '%s/%s' or '%s/%s':\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" HINT: archive.info cannot be opened but is required to push/get WAL segments.\n"
" HINT: is archive_command configured correctly in postgresql.conf?\n"
" HINT: has a stanza-create been performed?\n"
" HINT: use --no-archive-check to disable archive checks during backup if you have an alternate"
" archiving scheme.",
testPath(), strZ(backupInfoFileName), testPath(), strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName))),
testPath(), strZ(backupInfoFileName), testPath(), strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName))),
testPath(), strZ(archiveInfoFileNameRepo2), testPath(),
strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(archiveInfoFileNameRepo2))), testPath(), strZ(archiveInfoFileNameRepo2),
testPath(), strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(archiveInfoFileNameRepo2))))));
// Restore saved archive.info file
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, strNewFmt("%s.save", strZ(archiveInfoFileNameRepo2))),
storageNewWriteP(storageTest, archiveInfoFileNameRepo2)),
"repo2: archive.info.save moved to archive.info");
//--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire command - multi-repo, continue to next repo after error");
TEST_ERROR(
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
harnessLogResult(
strZ(strNewFmt(
"P00 ERROR: [055]: [DRY-RUN] repo1: unable to load info file '%s/%s' or '%s/%s':\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" FileMissingError: unable to open missing file '%s/%s' for read\n"
" HINT: backup.info cannot be opened and is required to perform a backup.\n"
" HINT: has a stanza-create been performed?\n"
"P00 INFO: [DRY-RUN] repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
" 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 DETAIL: [DRY-RUN] repo2: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002,"
" stop = 000000020000000000000002\n"
"P00 DETAIL: [DRY-RUN] repo2: 9.4-1 archive retention on backup 20181119-152800F_20181119-152252D,"
" start = 000000020000000000000009\n"
"P00 DETAIL: [DRY-RUN] repo2: 9.4-1 remove archive, start = 000000020000000000000004,"
" stop = 000000020000000000000007\n"
"P00 DETAIL: [DRY-RUN] repo2: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
"P00 DETAIL: [DRY-RUN] repo2: 10-2 no archive to remove",
testPath(), strZ(backupInfoFileName), testPath(), strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName))),
testPath(), strZ(backupInfoFileName), testPath(), strZ(strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName))))));
// Restore saved backup.info files
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, strNewFmt("%s.save", strZ(backupInfoFileName))),
storageNewWriteP(storageTest, backupInfoFileName)),
"repo1: backup.info.save moved to backup.info");
TEST_RESULT_VOID(
storageMoveP(storageTest,
storageNewReadP(storageTest, strNewFmt("%s" INFO_COPY_EXT ".save", strZ(backupInfoFileName))),
storageNewWriteP(storageTest, strNewFmt("%s" INFO_COPY_EXT, strZ(backupInfoFileName)))),
"repo1: backup.info.copy.save moved to backup.info.copy");
//--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire command - multi-repo, dry run: archive and backups not removed");
TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) - log expired backups and archive path to remove"); TEST_RESULT_VOID(cmdExpire(), "expire (dry-run) - log expired backups and archive path to remove");
TEST_RESULT_BOOL( TEST_RESULT_BOOL(
storagePathExistsP(storageTest, strNewFmt("%s/%s", strZ(archiveStanzaPath), "9.4-1")), true, storagePathExistsP(storageTest, strNewFmt("%s/%s", strZ(archiveStanzaPath), "9.4-1")), true,
@ -940,27 +1036,27 @@ testRun(void)
true, "backup not removed"); true, "backup not removed");
harnessLogResult(strZ(strNewFmt( harnessLogResult(strZ(strNewFmt(
"P00 INFO: [DRY-RUN] expire full backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152152D, " "P00 INFO: [DRY-RUN] repo1: expire full backup set 20181119-152800F, 20181119-152800F_20181119-152152D, "
"20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n" "20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152252D\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152155I\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152152D\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F\n"
"P00 INFO: [DRY-RUN] remove archive path repo1: %s/%s/9.4-1\n" "P00 INFO: [DRY-RUN] repo1: remove archive path %s/%s/9.4-1\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 10-2, start = 000000010000000000000003\n" "P00 DETAIL: [DRY-RUN] repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
"P00 DETAIL: [DRY-RUN] no archive to remove for repo1: 10-2\n" "P00 DETAIL: [DRY-RUN] repo1: 10-2 no archive to remove\n"
"P00 INFO: [DRY-RUN] expire diff backup set repo2: 20181119-152800F_20181119-152152D," "P00 INFO: [DRY-RUN] repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
" 20181119-152800F_20181119-152155I\n" " 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] remove expired backup repo2: 20181119-152800F_20181119-152155I\n" "P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: [DRY-RUN] remove expired backup repo2: 20181119-152800F_20181119-152152D\n" "P00 INFO: [DRY-RUN] repo2: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo2: 9.4-1, start = 000000020000000000000002," "P00 DETAIL: [DRY-RUN] repo2: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002,"
" stop = 000000020000000000000002\n" " stop = 000000020000000000000002\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F_20181119-152252D repo2: 9.4-1," "P00 DETAIL: [DRY-RUN] repo2: 9.4-1 archive retention on backup 20181119-152800F_20181119-152252D,"
" start = 000000020000000000000009\n" " start = 000000020000000000000009\n"
"P00 DETAIL: [DRY-RUN] remove archive repo2: 9.4-1, start = 000000020000000000000004," "P00 DETAIL: [DRY-RUN] repo2: 9.4-1 remove archive, start = 000000020000000000000004,"
" stop = 000000020000000000000007\n" " stop = 000000020000000000000007\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo2: 10-2, start = 000000010000000000000003\n" "P00 DETAIL: [DRY-RUN] repo2: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
"P00 DETAIL: [DRY-RUN] no archive to remove for repo2: 10-2", testPath(), strZ(archiveStanzaPath)))); "P00 DETAIL: [DRY-RUN] repo2: 10-2 no archive to remove", testPath(), strZ(archiveStanzaPath))));
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire command - multi-repo, archive and backups removed"); TEST_TITLE("expire command - multi-repo, archive and backups removed");
@ -974,27 +1070,26 @@ testRun(void)
false, "archive path removed"); false, "archive path removed");
harnessLogResult(strZ(strNewFmt( harnessLogResult(strZ(strNewFmt(
"P00 INFO: expire full backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152152D, " "P00 INFO: repo1: expire full backup set 20181119-152800F, 20181119-152800F_20181119-152152D, "
"20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n" "20181119-152800F_20181119-152155I, 20181119-152800F_20181119-152252D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152252D\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F\n" "P00 INFO: repo1: remove expired backup 20181119-152800F\n"
"P00 INFO: remove archive path repo1: %s/%s/9.4-1\n" "P00 INFO: repo1: remove archive path %s/%s/9.4-1\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000010000000000000003\n" "P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
"P00 DETAIL: no archive to remove for repo1: 10-2\n" "P00 DETAIL: repo1: 10-2 no archive to remove\n"
"P00 INFO: expire diff backup set repo2: 20181119-152800F_20181119-152152D," "P00 INFO: repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
" 20181119-152800F_20181119-152155I\n" " 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo2: 20181119-152800F_20181119-152155I\n" "P00 INFO: repo2: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo2: 20181119-152800F_20181119-152152D\n" "P00 INFO: repo2: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 DETAIL: archive retention on backup 20181119-152800F repo2: 9.4-1, start = 000000020000000000000002," "P00 DETAIL: repo2: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002,"
" stop = 000000020000000000000002\n" " stop = 000000020000000000000002\n"
"P00 DETAIL: archive retention on backup 20181119-152800F_20181119-152252D repo2: 9.4-1," "P00 DETAIL: repo2: 9.4-1 archive retention on backup 20181119-152800F_20181119-152252D,"
" start = 000000020000000000000009\n" " start = 000000020000000000000009\n"
"P00 DETAIL: remove archive repo2: 9.4-1, start = 000000020000000000000004," "P00 DETAIL: repo2: 9.4-1 remove archive, start = 000000020000000000000004, stop = 000000020000000000000007\n"
" stop = 000000020000000000000007\n" "P00 DETAIL: repo2: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo2: 10-2, start = 000000010000000000000003\n" "P00 DETAIL: repo2: 10-2 no archive to remove", testPath(), strZ(archiveStanzaPath))));
"P00 DETAIL: no archive to remove for repo2: 10-2", testPath(), strZ(archiveStanzaPath))));
TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info"); TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info");
TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "backup.info updated on disk"); TEST_RESULT_UINT(infoBackupDataTotal(infoBackup), 2, "backup.info updated on disk");
@ -1034,12 +1129,12 @@ testRun(void)
TEST_RESULT_VOID(cmdExpire(), "label format OK and expired on specified repo"); TEST_RESULT_VOID(cmdExpire(), "label format OK and expired on specified repo");
harnessLogResult( harnessLogResult(
"P00 WARN: [DRY-RUN] expiring latest backup repo1: 20181119-152900F_20181119-152500I - the ability to perform" "P00 WARN: [DRY-RUN] repo1: expiring latest backup 20181119-152900F_20181119-152500I - the ability to perform"
" point-in-time-recovery (PITR) may be affected\n" " point-in-time-recovery (PITR) may be affected\n"
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type' (even in prior" " HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type' (even in prior"
" expires) can cause gaps in the WAL.\n" " expires) can cause gaps in the WAL.\n"
"P00 INFO: [DRY-RUN] expire adhoc backup repo1: 20181119-152900F_20181119-152500I\n" "P00 INFO: [DRY-RUN] repo1: expire adhoc backup 20181119-152900F_20181119-152500I\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152900F_20181119-152500I"); "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152900F_20181119-152500I");
// Incorrect backup label format provided // Incorrect backup label format provided
argList = strLstDup(argListAvoidWarn); argList = strLstDup(argListAvoidWarn);
@ -1059,7 +1154,7 @@ testRun(void)
TEST_RESULT_VOID(cmdExpire(), "expire remove archive path"); TEST_RESULT_VOID(cmdExpire(), "expire remove archive path");
harnessLogResult( harnessLogResult(
strZ(strNewFmt("P00 INFO: remove archive path repo1: %s/%s/9.4-1", testPath(), strZ(archiveStanzaPath)))); strZ(strNewFmt("P00 INFO: repo1: remove archive path %s/%s/9.4-1", testPath(), strZ(archiveStanzaPath))));
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
storagePutP(storageNewWriteP(storageTest, backupInfoFileName), storagePutP(storageNewWriteP(storageTest, backupInfoFileName),
@ -1133,11 +1228,11 @@ testRun(void)
TEST_RESULT_VOID( TEST_RESULT_VOID(
removeExpiredArchive(infoBackup, false, 0), "backup earlier than selected for retention does not have archive-start"); removeExpiredArchive(infoBackup, false, 0), "backup earlier than selected for retention does not have archive-start");
harnessLogResult( harnessLogResult(
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002," "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002,"
" stop = 000000010000000000000002\n" " stop = 000000010000000000000002\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000004\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000004\n"
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000001\n" "P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000001\n"
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000003, stop = 000000010000000000000003"); "P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000003, stop = 000000010000000000000003");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire history files - dry run"); TEST_TITLE("expire history files - dry run");
@ -1223,11 +1318,11 @@ testRun(void)
"history file not removed"); "history file not removed");
harnessLogResult( harnessLogResult(
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
"P00 DETAIL: [DRY-RUN] no archive to remove for repo1: 9.4-1\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 no archive to remove\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n" "P00 DETAIL: [DRY-RUN] repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
"P00 DETAIL: [DRY-RUN] no archive to remove for repo1: 10-2\n" "P00 DETAIL: [DRY-RUN] repo1: 10-2 no archive to remove\n"
"P00 DETAIL: [DRY-RUN] remove history file repo1: 10-2, file = 00000002.history"); "P00 DETAIL: [DRY-RUN] repo1: 10-2 remove history file 00000002.history");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire history files - no dry run"); TEST_TITLE("expire history files - no dry run");
@ -1246,11 +1341,11 @@ testRun(void)
"00000003.history file not removed"); "00000003.history file not removed");
harnessLogResult( harnessLogResult(
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n" "P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n" "P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
"P00 DETAIL: no archive to remove for repo1: 10-2\n" "P00 DETAIL: repo1: 10-2 no archive to remove\n"
"P00 DETAIL: remove history file repo1: 10-2, file = 00000002.history"); "P00 DETAIL: repo1: 10-2 remove history file 00000002.history");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire history files via backup command"); TEST_TITLE("expire history files via backup command");
@ -1273,11 +1368,11 @@ testRun(void)
"00000003.history file not removed"); "00000003.history file not removed");
harnessLogResult( harnessLogResult(
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n" "P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n" "P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
"P00 DETAIL: no archive to remove for repo1: 10-2\n" "P00 DETAIL: repo1: 10-2 no archive to remove\n"
"P00 DETAIL: remove history file repo1: 10-2, file = 00000002.history"); "P00 DETAIL: repo1: 10-2 remove history file 00000002.history");
harnessLogLevelReset(); harnessLogLevelReset();
} }
@ -1363,11 +1458,12 @@ testRun(void)
archiveGenerate(storageTest, archiveStanzaPath, 1, 7, "10-2", "0000000100000000"); archiveGenerate(storageTest, archiveStanzaPath, 1, 7, "10-2", "0000000100000000");
TEST_ERROR( TEST_ERROR(
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not" cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
" match");
harnessLogResult( harnessLogResult(
"P00 INFO: expire full backup repo1: 20181119-152138F\n" "P00 INFO: repo1: expire full backup 20181119-152138F\n"
"P00 INFO: remove expired backup repo1: 20181119-152138F"); "P00 INFO: repo1: remove expired backup 20181119-152138F\n"
"P00 ERROR: [029]: repo1: archive expiration cannot continue - archive and backup history lists do not"
" match");
TEST_RESULT_STRLST_STR( TEST_RESULT_STRLST_STR(
strLstSort(storageListP( strLstSort(storageListP(
storageTest, strNewFmt("%s/%s/%s", strZ(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), storageTest, strNewFmt("%s/%s/%s", strZ(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc),
@ -1393,8 +1489,9 @@ testRun(void)
"2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}")); "2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}"));
TEST_ERROR( TEST_ERROR(
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not" cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
" match"); harnessLogResult(
"P00 ERROR: [029]: repo1: archive expiration cannot continue - archive and backup history lists do not match");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("archive.info old history db version not the same as backup.info"); TEST_TITLE("archive.info old history db version not the same as backup.info");
@ -1412,8 +1509,9 @@ testRun(void)
"2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}")); "2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}"));
TEST_ERROR( TEST_ERROR(
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not" cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
" match"); harnessLogResult(
"P00 ERROR: [029]: repo1: archive expiration cannot continue - archive and backup history lists do not match");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("archive.info has only current db with same db history id as backup.info"); TEST_TITLE("archive.info has only current db with same db history id as backup.info");
@ -1492,10 +1590,10 @@ testRun(void)
TEST_RESULT_VOID(cmdExpire(), "Expire archive that archive.info is aware of"); TEST_RESULT_VOID(cmdExpire(), "Expire archive that archive.info is aware of");
harnessLogResult( harnessLogResult(
"P00 INFO: expire full backup repo1: 20181119-152138F\n" "P00 INFO: repo1: expire full backup 20181119-152138F\n"
"P00 INFO: expire full backup repo1: 20181119-152800F\n" "P00 INFO: repo1: expire full backup 20181119-152800F\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F\n" "P00 INFO: repo1: remove expired backup 20181119-152800F\n"
"P00 INFO: remove expired backup repo1: 20181119-152138F"); "P00 INFO: repo1: remove expired backup 20181119-152138F");
TEST_RESULT_STRLST_STR( TEST_RESULT_STRLST_STR(
strLstSort(storageListP( strLstSort(storageListP(
storageTest, strNewFmt("%s/%s/%s", strZ(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc), storageTest, strNewFmt("%s/%s/%s", strZ(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc),
@ -1719,18 +1817,18 @@ testRun(void)
TEST_RESULT_STR(storageInfoP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination, TEST_RESULT_STR(storageInfoP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination,
STRDEF("20181119-152900F"), "latest link not updated"); STRDEF("20181119-152900F"), "latest link not updated");
harnessLogResult( harnessLogResult(
"P00 INFO: expire adhoc backup set repo1: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I\n" "P00 INFO: repo1: expire adhoc backup set 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000020000000000000001," "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000020000000000000001,"
" stop = 000000020000000000000001\n" " stop = 000000020000000000000001\n"
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n" "P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002," "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002,"
" stop = 000000010000000000000004\n" " stop = 000000010000000000000004\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 12-2, start = 000000010000000000000006\n" "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152900F, start = 000000010000000000000006\n"
"P00 DETAIL: remove archive repo1: 12-2, start = 000000010000000000000001, stop = 000000010000000000000001\n" "P00 DETAIL: repo1: 12-2 remove archive, start = 000000010000000000000001, stop = 000000010000000000000001\n"
"P00 DETAIL: remove archive repo1: 12-2, start = 000000010000000000000005, stop = 000000010000000000000005"); "P00 DETAIL: repo1: 12-2 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire full and archive (no dependents)"); TEST_TITLE("expire full and archive (no dependents)");
@ -1755,14 +1853,14 @@ testRun(void)
!storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strZ(backupStanzaPath)))), !storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strZ(backupStanzaPath)))),
true, "only adhoc full removed"); true, "only adhoc full removed");
harnessLogResult( harnessLogResult(
"P00 INFO: expire adhoc backup repo1: 20181119-152138F\n" "P00 INFO: repo1: expire adhoc backup 20181119-152138F\n"
"P00 INFO: remove expired backup repo1: 20181119-152138F\n" "P00 INFO: repo1: remove expired backup 20181119-152138F\n"
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000020000000000000001, stop = 000000020000000000000001\n" "P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000020000000000000001, stop = 000000020000000000000001\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002," "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002,"
" stop = 000000010000000000000004\n" " stop = 000000010000000000000004\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 12-2, start = 000000010000000000000006\n" "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152900F, start = 000000010000000000000006\n"
"P00 DETAIL: no archive to remove for repo1: 12-2"); "P00 DETAIL: repo1: 12-2 no archive to remove");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire latest and resumable"); TEST_TITLE("expire latest and resumable");
@ -1789,17 +1887,17 @@ testRun(void)
strZ(backupStanzaPath)))), strZ(backupStanzaPath)))),
true, "latest and resumable removed"); true, "latest and resumable removed");
harnessLogResult( harnessLogResult(
"P00 WARN: expiring latest backup repo1: 20181119-152900F - the ability to perform point-in-time-recovery (PITR) may" "P00 WARN: repo1: expiring latest backup 20181119-152900F - the ability to perform point-in-time-recovery (PITR) may"
" be affected\n" " be affected\n"
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'" " HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
" (even in prior expires) can cause gaps in the WAL.\n" " (even in prior expires) can cause gaps in the WAL.\n"
"P00 INFO: expire adhoc backup repo1: 20181119-152900F\n" "P00 INFO: repo1: expire adhoc backup 20181119-152900F\n"
"P00 INFO: remove expired backup repo1: 20181119-152900F_20181119-153000I\n" "P00 INFO: repo1: remove expired backup 20181119-152900F_20181119-153000I\n"
"P00 INFO: remove expired backup repo1: 20181119-152900F\n" "P00 INFO: repo1: remove expired backup 20181119-152900F\n"
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n" "P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n" "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 12-2"); "P00 DETAIL: repo1: 12-2 no archive to remove");
TEST_RESULT_STR(storageInfoP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination, TEST_RESULT_STR(storageInfoP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination,
STRDEF("20181119-152850F"), "latest link updated"); STRDEF("20181119-152850F"), "latest link updated");
TEST_RESULT_STRLST_STR( TEST_RESULT_STRLST_STR(
@ -1816,8 +1914,10 @@ testRun(void)
harnessCfgLoad(cfgCmdExpire, argList); harnessCfgLoad(cfgCmdExpire, argList);
TEST_ERROR( TEST_ERROR(
cmdExpire(), BackupSetInvalidError, cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
"full backup repo1: 20181119-152850F cannot be expired until another full backup has been created on this repo"); harnessLogResult(
"P00 ERROR: [075]: repo1: full backup 20181119-152850F cannot be expired until another full backup has been created on"
" this repo");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("allow adhoc expire on last full backup in prior db-id"); TEST_TITLE("allow adhoc expire on last full backup in prior db-id");
@ -1836,12 +1936,12 @@ testRun(void)
true, "only last prior backup removed"); true, "only last prior backup removed");
harnessLogResult( harnessLogResult(
strZ(strNewFmt( strZ(strNewFmt(
"P00 INFO: expire adhoc backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152252D\n" "P00 INFO: repo1: expire adhoc backup set 20181119-152800F, 20181119-152800F_20181119-152252D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152252D\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F\n" "P00 INFO: repo1: remove expired backup 20181119-152800F\n"
"P00 INFO: remove archive path repo1: %s/repo/archive/db/9.4-1\n" "P00 INFO: repo1: remove archive path %s/repo/archive/db/9.4-1\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n" "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 12-2", testPath()))); "P00 DETAIL: repo1: 12-2 no archive to remove", testPath())));
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("error on expire last full backup on disk"); TEST_TITLE("error on expire last full backup on disk");
@ -1851,8 +1951,10 @@ testRun(void)
harnessCfgLoad(cfgCmdExpire, argList); harnessCfgLoad(cfgCmdExpire, argList);
TEST_ERROR( TEST_ERROR(
cmdExpire(), BackupSetInvalidError, cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
"full backup repo1: 20181119-152850F cannot be expired until another full backup has been created on this repo"); harnessLogResult(
"P00 ERROR: [075]: repo1: full backup 20181119-152850F cannot be expired until another full backup has been created on"
" this repo");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("adhoc dry-run"); TEST_TITLE("adhoc dry-run");
@ -1911,12 +2013,12 @@ testRun(void)
TEST_RESULT_VOID( TEST_RESULT_VOID(
removeExpiredBackup(infoBackup, adhocBackupLabel, 0), "code coverage: removeExpireBackup with no manifests"); removeExpiredBackup(infoBackup, adhocBackupLabel, 0), "code coverage: removeExpireBackup with no manifests");
harnessLogResult( harnessLogResult(
"P00 WARN: [DRY-RUN] expiring latest backup repo1: 20181119-152850F_20181119-152252D - the ability to perform" "P00 WARN: [DRY-RUN] repo1: expiring latest backup 20181119-152850F_20181119-152252D - the ability to perform"
" point-in-time-recovery (PITR) may be affected\n" " point-in-time-recovery (PITR) may be affected\n"
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'" " HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
" (even in prior expires) can cause gaps in the WAL.\n" " (even in prior expires) can cause gaps in the WAL.\n"
"P00 INFO: [DRY-RUN] expire adhoc backup repo1: 20181119-152850F_20181119-152252D\n" "P00 INFO: [DRY-RUN] repo1: expire adhoc backup 20181119-152850F_20181119-152252D\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152850F_20181119-152252D"); "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152850F_20181119-152252D");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("resumable possibly based on adhoc expire backup, multi-repo, encryption"); TEST_TITLE("resumable possibly based on adhoc expire backup, multi-repo, encryption");
@ -2087,22 +2189,22 @@ testRun(void)
TEST_RESULT_VOID(cmdExpire(), "adhoc expire latest with resumable possibly based on it"); TEST_RESULT_VOID(cmdExpire(), "adhoc expire latest with resumable possibly based on it");
harnessLogResult( harnessLogResult(
"P00 WARN: expiring latest backup repo1: 20181119-152850F_20181119-152252D - the ability to perform" "P00 WARN: repo1: expiring latest backup 20181119-152850F_20181119-152252D - the ability to perform"
" point-in-time-recovery (PITR) may be affected\n" " point-in-time-recovery (PITR) may be affected\n"
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'" " HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
" (even in prior expires) can cause gaps in the WAL.\n" " (even in prior expires) can cause gaps in the WAL.\n"
"P00 INFO: expire adhoc backup repo1: 20181119-152850F_20181119-152252D\n" "P00 INFO: repo1: expire adhoc backup 20181119-152850F_20181119-152252D\n"
"P00 INFO: remove expired backup repo1: 20181119-152850F_20181119-152252D\n" "P00 INFO: repo1: remove expired backup 20181119-152850F_20181119-152252D\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n" "P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo1: 12-2\n" "P00 DETAIL: repo1: 12-2 no archive to remove\n"
"P00 WARN: expiring latest backup repo2: 20181119-152850F_20181119-152252D - the ability to perform" "P00 WARN: repo2: expiring latest backup 20181119-152850F_20181119-152252D - the ability to perform"
" point-in-time-recovery (PITR) may be affected\n" " point-in-time-recovery (PITR) may be affected\n"
" HINT: non-default settings for 'repo2-retention-archive'/'repo2-retention-archive-type'" " HINT: non-default settings for 'repo2-retention-archive'/'repo2-retention-archive-type'"
" (even in prior expires) can cause gaps in the WAL.\n" " (even in prior expires) can cause gaps in the WAL.\n"
"P00 INFO: expire adhoc backup repo2: 20181119-152850F_20181119-152252D\n" "P00 INFO: repo2: expire adhoc backup 20181119-152850F_20181119-152252D\n"
"P00 INFO: remove expired backup repo2: 20181119-152850F_20181119-152252D\n" "P00 INFO: repo2: remove expired backup 20181119-152850F_20181119-152252D\n"
"P00 DETAIL: archive retention on backup 20181119-152850F repo2: 12-2, start = 000000010000000000000002\n" "P00 DETAIL: repo2: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
"P00 DETAIL: no archive to remove for repo2: 12-2"); "P00 DETAIL: repo2: 12-2 no archive to remove");
TEST_RESULT_STR(storageInfoP(storageRepoIdx(1), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination, TEST_RESULT_STR(storageInfoP(storageRepoIdx(1), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination,
STRDEF("20181119-152850F"), "latest link updated, repo2"); STRDEF("20181119-152850F"), "latest link updated, repo2");
@ -2190,7 +2292,7 @@ testRun(void)
" of space\n" " of space\n"
" HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the" " HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the"
" maximum.\n" " maximum.\n"
"P00 INFO: time-based archive retention not met for repo1 - archive logs will not be expired"); "P00 INFO: repo1: time-based archive retention not met - archive logs will not be expired");
// Stop time equals retention time // Stop time equals retention time
TEST_RESULT_UINT( TEST_RESULT_UINT(
@ -2215,7 +2317,7 @@ testRun(void)
infoBackupDataLabelList(infoBackup, NULL), infoBackupDataLabelList(infoBackup, NULL),
"20181119-152138F\n20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n" "20181119-152138F\n20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n"
"20181119-152900F\n20181119-152900F_20181119-152600D\n", "no backups expired"); "20181119-152900F\n20181119-152900F_20181119-152600D\n", "no backups expired");
harnessLogResult("P00 INFO: time-based archive retention not met for repo1 - archive logs will not be expired"); harnessLogResult("P00 INFO: repo1: time-based archive retention not met - archive logs will not be expired");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("oldest backup expired"); TEST_TITLE("oldest backup expired");
@ -2226,18 +2328,17 @@ testRun(void)
harnessCfgLoad(cfgCmdExpire, argList); harnessCfgLoad(cfgCmdExpire, argList);
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run"); TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run");
harnessLogResult( harnessLogResult(
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003");
" stop = 000000010000000000000003");
strLstAddZ(argList, "--repo1-retention-archive=9999999"); strLstAddZ(argList, "--repo1-retention-archive=9999999");
harnessCfgLoad(cfgCmdExpire, argList); harnessCfgLoad(cfgCmdExpire, argList);
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run, retention-archive set to max, no archives expired"); TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run, retention-archive set to max, no archives expired");
harnessLogResult( harnessLogResult(
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F"); "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F");
argList = strLstDup(argListTime); argList = strLstDup(argListTime);
strLstAddZ(argList, "--repo1-retention-full=30"); strLstAddZ(argList, "--repo1-retention-full=30");
@ -2246,18 +2347,18 @@ testRun(void)
harnessCfgLoad(cfgCmdExpire, argList); harnessCfgLoad(cfgCmdExpire, argList);
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired but retention archive set lower - dry-run"); TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired but retention archive set lower - dry-run");
harnessLogResult( harnessLogResult(
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004,"
" stop = 000000010000000000000004\n" " stop = 000000010000000000000004\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F_20181119-152152D repo1: 9.4-1," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F_20181119-152152D,"
" start = 000000010000000000000006, stop = 000000010000000000000006\n" " start = 000000010000000000000006, stop = 000000010000000000000006\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F_20181119-152155I repo1: 9.4-1," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F_20181119-152155I,"
" start = 000000010000000000000007, stop = 000000010000000000000007\n" " start = 000000010000000000000007, stop = 000000010000000000000007\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000009\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000009\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000005, stop = 000000010000000000000005\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000008, stop = 000000010000000000000008"); "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000008, stop = 000000010000000000000008");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("repo1-retention-archive-type=diff"); TEST_TITLE("repo1-retention-archive-type=diff");
@ -2274,22 +2375,22 @@ testRun(void)
"P00 WARN: [DRY-RUN] option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff'\n" "P00 WARN: [DRY-RUN] option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff'\n"
" HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff'" " HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff'"
" to the maximum.\n" " to the maximum.\n"
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n" "P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004,"
" stop = 000000010000000000000004\n" " stop = 000000010000000000000004\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F_20181119-152152D repo1: 9.4-1," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F_20181119-152152D,"
" start = 000000010000000000000006, stop = 000000010000000000000006\n" " start = 000000010000000000000006, stop = 000000010000000000000006\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F_20181119-152155I repo1: 9.4-1," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F_20181119-152155I,"
" start = 000000010000000000000007, stop = 000000010000000000000007\n" " start = 000000010000000000000007, stop = 000000010000000000000007\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000009," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000009,"
" stop = 000000010000000000000009\n" " stop = 000000010000000000000009\n"
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F_20181119-152600D repo1: 9.4-1," "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152900F_20181119-152600D,"
" start = 000000010000000000000011\n" " start = 000000010000000000000011\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000005, stop = 000000010000000000000005\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000008, stop = 000000010000000000000008\n" "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000008, stop = 000000010000000000000008\n"
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000010, stop = 000000010000000000000010"); "P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000010, stop = 000000010000000000000010");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("expire oldest full"); TEST_TITLE("expire oldest full");
@ -2303,12 +2404,12 @@ testRun(void)
TEST_RESULT_VOID( TEST_RESULT_VOID(
infoBackupSaveFile(infoBackup, storageTest, backupInfoFileName, cipherTypeNone, NULL), infoBackupSaveFile(infoBackup, storageTest, backupInfoFileName, cipherTypeNone, NULL),
"save backup.info without oldest"); "save backup.info without oldest");
harnessLogResult("P00 INFO: expire time-based backup repo1: 20181119-152138F"); harnessLogResult("P00 INFO: repo1: expire time-based backup 20181119-152138F");
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired"); TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired");
harnessLogResult( harnessLogResult(
"P00 INFO: remove expired backup repo1: 20181119-152138F\n" "P00 INFO: repo1: remove expired backup 20181119-152138F\n"
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004\n"
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003"); "P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003");
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("newest backup - retention met but must keep one"); TEST_TITLE("newest backup - retention met but must keep one");
@ -2319,13 +2420,13 @@ testRun(void)
TEST_RESULT_VOID(cmdExpire(), "expire all but newest"); TEST_RESULT_VOID(cmdExpire(), "expire all but newest");
harnessLogResult( harnessLogResult(
"P00 INFO: expire time-based backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152152D," "P00 INFO: repo1: expire time-based backup set 20181119-152800F, 20181119-152800F_20181119-152152D,"
" 20181119-152800F_20181119-152155I\n" " 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n" "P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
"P00 INFO: remove expired backup repo1: 20181119-152800F\n" "P00 INFO: repo1: remove expired backup 20181119-152800F\n"
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000009\n" "P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000009\n"
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000004, stop = 000000010000000000000008"); "P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000004, stop = 000000010000000000000008");
harnessLogLevelReset(); harnessLogLevelReset();
} }