mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-04-13 11:30:40 +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:
parent
e14036bf57
commit
e28f6f11e9
@ -97,6 +97,9 @@ service: 101
|
||||
# An error while attempting to execute a binary
|
||||
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
|
||||
runtime: 122
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
<release-development-list>
|
||||
<release-item>
|
||||
<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 id="cynthia.shang"/>
|
||||
|
@ -1548,7 +1548,7 @@
|
||||
<execute user="postgres" output="y">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=full
|
||||
--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-list>
|
||||
|
||||
@ -1593,7 +1593,7 @@
|
||||
<execute user="postgres" output="y">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} --type=diff
|
||||
--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-list>
|
||||
</section>
|
||||
|
@ -121,8 +121,7 @@ expireAdhocBackup(InfoBackup *infoBackup, const String *backupLabel, unsigned in
|
||||
{
|
||||
THROW_FMT(
|
||||
BackupSetInvalidError,
|
||||
"full backup repo%u: %s cannot be expired until another full backup has been created on this repo",
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(backupLabel));
|
||||
"full backup %s cannot be expired until another full backup has been created on this repo", 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 with retention-diff.
|
||||
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.",
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(latestBackup),
|
||||
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_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, ", ")));
|
||||
}
|
||||
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_INFO_FMT(
|
||||
"expire diff backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""),
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", ")));
|
||||
"repo%u: expire diff backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
|
||||
(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_INFO_FMT(
|
||||
"expire full backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""),
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", ")));
|
||||
"repo%u: expire full backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
|
||||
(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_INFO_FMT(
|
||||
"expire time-based backup %srepo%u: %s", (strLstSize(backupExpired) > 1 ? "set " : ""),
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(strLstJoin(backupExpired, ", ")));
|
||||
"repo%u: expire time-based backup %s%s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
|
||||
(strLstSize(backupExpired) > 1 ? "set " : ""), strZ(strLstJoin(backupExpired, ", ")));
|
||||
}
|
||||
|
||||
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
|
||||
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));
|
||||
|
||||
archiveExpire->start = NULL;
|
||||
@ -397,7 +396,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
|
||||
else
|
||||
{
|
||||
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));
|
||||
}
|
||||
}
|
||||
@ -470,9 +469,8 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
|
||||
archiveInfoPgHistory.systemId != backupInfoPgHistory.systemId ||
|
||||
archiveInfoPgHistory.version != backupInfoPgHistory.version)
|
||||
{
|
||||
THROW_FMT(
|
||||
FormatError, "archive expiration cannot continue for repo%u - archive and backup history lists do not"
|
||||
" match", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx));
|
||||
THROW(
|
||||
FormatError, "archive expiration cannot continue - archive and backup history lists do not match");
|
||||
}
|
||||
}
|
||||
|
||||
@ -526,7 +524,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
|
||||
storageRepoIdx(repoIdx), strNewFmt(STORAGE_REPO_ARCHIVE "/%s", strZ(archiveId)));
|
||||
|
||||
LOG_INFO_FMT(
|
||||
"remove archive path repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
|
||||
"repo%u: remove archive path %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx),
|
||||
strZ(fullPath));
|
||||
|
||||
// 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);
|
||||
|
||||
LOG_DETAIL_FMT(
|
||||
"archive retention on backup %s repo%u: %s, start = %s%s", strZ(backupData->backupLabel),
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId), strZ(archiveRange.start),
|
||||
"repo%u: %s archive retention on backup %s, start = %s%s",
|
||||
cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), strZ(archiveId),
|
||||
strZ(backupData->backupLabel), strZ(archiveRange.start),
|
||||
archiveRange.stop != NULL ? strZ(strNewFmt(", stop = %s", strZ(archiveRange.stop))) : "");
|
||||
|
||||
// Add the archive range to the list
|
||||
@ -732,7 +731,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
|
||||
if (archiveExpire.total == 0)
|
||||
{
|
||||
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));
|
||||
}
|
||||
// Log if there is more to log
|
||||
@ -766,7 +765,7 @@ removeExpiredArchive(InfoBackup *infoBackup, bool timeBasedFullRetention, unsign
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
@ -845,7 +844,7 @@ removeExpiredBackup(InfoBackup *infoBackup, const String *adhocBackupLabel, unsi
|
||||
if (!strLstExists(currentBackupList, strLstGet(backupList, backupIdx)))
|
||||
{
|
||||
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)));
|
||||
|
||||
// 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));
|
||||
}
|
||||
|
||||
// Track any errors that may occur
|
||||
unsigned int errorTotal = 0;
|
||||
|
||||
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
|
||||
const Storage *storageRepo = storageRepoIdx(repoIdx);
|
||||
|
||||
// Load the backup.info
|
||||
InfoBackup *infoBackup = infoBackupLoadFileReconstruct(
|
||||
storageRepo, INFO_BACKUP_PATH_FILE_STR, cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)),
|
||||
cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
|
||||
InfoBackup *infoBackup = NULL;
|
||||
|
||||
bool timeBasedFullRetention = strEqZ(
|
||||
cfgOptionIdxStr(cfgOptRepoRetentionFullType, repoIdx), CFGOPTVAL_TMP_REPO_RETENTION_FULL_TYPE_TIME);
|
||||
|
||||
// If a backupLabel was set, then attempt to expire the requested backup
|
||||
if (adhocBackupLabel != NULL)
|
||||
TRY_BEGIN()
|
||||
{
|
||||
if (infoBackupDataByLabel(infoBackup, adhocBackupLabel) != NULL)
|
||||
{
|
||||
adhocBackupFound = true;
|
||||
expireAdhocBackup(infoBackup, adhocBackupLabel, repoIdx);
|
||||
}
|
||||
// Load the backup.info
|
||||
infoBackup = infoBackupLoadFileReconstruct(
|
||||
storageRepo, INFO_BACKUP_PATH_FILE_STR, cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, 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
|
||||
// the expiration based on retention
|
||||
if (!adhocBackupFound && repoIdx == repoIdxMax)
|
||||
// If a backupLabel was set, then attempt to expire the requested backup
|
||||
if (adhocBackupLabel != NULL)
|
||||
{
|
||||
LOG_WARN_FMT(
|
||||
"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))
|
||||
if (infoBackupDataByLabel(infoBackup, adhocBackupLabel) != NULL)
|
||||
{
|
||||
expireTimeBasedBackup(
|
||||
infoBackup, time(NULL) - (time_t)(cfgOptionUInt(cfgOptRepoRetentionFull) * SEC_PER_DAY), repoIdx);
|
||||
adhocBackupFound = true;
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
// Store the new backup info only if the dry-run mode is disabled
|
||||
if (!cfgOptionValid(cfgOptDryRun) || !cfgOptionBool(cfgOptDryRun))
|
||||
CATCH_ANY()
|
||||
{
|
||||
infoBackupSaveFile(
|
||||
infoBackup, storageRepoIdxWrite(repoIdx), INFO_BACKUP_PATH_FILE_STR,
|
||||
cipherType(cfgOptionIdxStr(cfgOptRepoCipherType, repoIdx)), cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
|
||||
LOG_ERROR_FMT(
|
||||
errorTypeCode(errorType()), "repo%u: %s", cfgOptionGroupIdxToKey(cfgOptGrpRepo, repoIdx), errorMessage());
|
||||
errorTotal++;;
|
||||
}
|
||||
|
||||
// Remove all files on disk that are now expired
|
||||
removeExpiredBackup(infoBackup, adhocBackupLabel, repoIdx);
|
||||
removeExpiredArchive(infoBackup, timeBasedFullRetention, repoIdx);
|
||||
TRY_END();
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
||||
|
@ -83,6 +83,7 @@ ERROR_DEFINE( 99, JsonFormatError, RuntimeError);
|
||||
ERROR_DEFINE(100, KernelError, RuntimeError);
|
||||
ERROR_DEFINE(101, ServiceError, RuntimeError);
|
||||
ERROR_DEFINE(102, ExecuteError, RuntimeError);
|
||||
ERROR_DEFINE(104, CommandError, RuntimeError);
|
||||
ERROR_DEFINE(122, RuntimeError, RuntimeError);
|
||||
ERROR_DEFINE(123, InvalidError, RuntimeError);
|
||||
ERROR_DEFINE(124, UnhandledError, RuntimeError);
|
||||
@ -169,6 +170,7 @@ static const ErrorType *errorTypeList[] =
|
||||
&KernelError,
|
||||
&ServiceError,
|
||||
&ExecuteError,
|
||||
&CommandError,
|
||||
&RuntimeError,
|
||||
&InvalidError,
|
||||
&UnhandledError,
|
||||
|
@ -85,6 +85,7 @@ ERROR_DECLARE(JsonFormatError);
|
||||
ERROR_DECLARE(KernelError);
|
||||
ERROR_DECLARE(ServiceError);
|
||||
ERROR_DECLARE(ExecuteError);
|
||||
ERROR_DECLARE(CommandError);
|
||||
ERROR_DECLARE(RuntimeError);
|
||||
ERROR_DECLARE(InvalidError);
|
||||
ERROR_DECLARE(UnhandledError);
|
||||
|
@ -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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-DIFF-3]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-INCR-4]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-INCR-3]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-1]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-INCR-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2]
|
||||
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: repo1: remove expired backup [BACKUP-DIFF-3]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-4]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-3]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
diff backup - add file (db-primary host)
|
||||
|
@ -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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: no archive to remove for repo1: 9.2-1
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-1], start = 000000010000000000000000
|
||||
P00 DETAIL: repo1: 9.2-1 no archive to remove
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-INCR-1]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-1]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 000000010000000100000000
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 0000000100000000, stop = 0000000100000000
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-1], [BACKUP-INCR-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-1]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 000000010000000100000000
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 0000000100000000, stop = 0000000100000000
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-DIFF-1]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 000000010000000100000000
|
||||
P00 DETAIL: no archive to remove for repo1: 9.2-1
|
||||
P00 INFO: repo1: expire diff backup [BACKUP-DIFF-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 000000010000000100000000
|
||||
P00 DETAIL: repo1: 9.2-1 no archive to remove
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-DIFF-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000012
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-3] repo1: 9.2-1, start = 000000010000000200000016
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 0000000100000001, stop = 00000001000000020000000F
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000013, stop = 000000010000000200000015
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-2], [BACKUP-DIFF-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-3], start = 000000010000000200000016
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 0000000100000001, stop = 00000001000000020000000F
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000013, stop = 000000010000000200000015
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-INCR-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-3]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000012
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-4] repo1: 9.2-1, start = 00000001000000020000001E
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000016, stop = 00000001000000020000001D
|
||||
P00 INFO: repo1: expire diff backup set [BACKUP-DIFF-3], [BACKUP-INCR-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-3]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-4], start = 00000001000000020000001E
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000016, stop = 00000001000000020000001D
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: archive retention on backup [BACKUP-DIFF-4] repo1: 9.2-1, start = 00000001000000020000001E, stop = 000000010000000200000020
|
||||
P00 DETAIL: archive retention on backup [BACKUP-INCR-3] repo1: 9.2-1, start = 000000010000000200000024
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000021, stop = 000000010000000200000023
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-3], start = 000000010000000200000010, stop = 000000010000000200000012
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-4], start = 00000001000000020000001E, stop = 000000010000000200000020
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-INCR-3], start = 000000010000000200000024
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000021, stop = 000000010000000200000023
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: expire diff backup repo1: [BACKUP-DIFF-5]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-5]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-INCR-3]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-4]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-3]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000010, stop = 000000010000000200000029
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000002D, stop = 000000010000000200000035
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-3], [BACKUP-DIFF-4], [BACKUP-INCR-3]
|
||||
P00 INFO: repo1: expire diff backup [BACKUP-DIFF-5]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-5]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-3]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-4]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-3]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000010, stop = 000000010000000200000029
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000002D, stop = 000000010000000200000035
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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.
|
||||
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.
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036, stop = 000000010000000200000038
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 9.2-1, start = 00000001000000020000003C, stop = 00000001000000020000003E
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-6] repo1: 9.2-1, start = 000000010000000200000042, stop = 000000010000000200000044
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-7] repo1: 9.2-1, start = 000000010000000200000048
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000039, stop = 00000001000000020000003B
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000003F, stop = 000000010000000200000041
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000045, stop = 000000010000000200000047
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036, stop = 000000010000000200000038
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-6], start = 00000001000000020000003C, stop = 00000001000000020000003E
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-6], start = 000000010000000200000042, stop = 000000010000000200000044
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-7], start = 000000010000000200000048
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000039, stop = 00000001000000020000003B
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000003F, stop = 000000010000000200000041
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000045, stop = 000000010000000200000047
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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 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.
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.2-1, start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 9.2-1, start = 000000010000000200000036, stop = 000000010000000200000038
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 9.2-1, start = 00000001000000020000003C, stop = 00000001000000020000003E
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-6] repo1: 9.2-1, start = 000000010000000200000042, stop = 000000010000000200000044
|
||||
P00 DETAIL: archive retention on backup [BACKUP-DIFF-7] repo1: 9.2-1, start = 000000010000000200000048, stop = 00000001000000020000004A
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-7] repo1: 9.2-1, start = 00000001000000020000004E, stop = 000000010000000200000050
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-8] repo1: 9.2-1, start = 000000010000000200000054
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 00000001000000020000004B, stop = 00000001000000020000004D
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000200000051, stop = 000000010000000200000053
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-4], start = 00000001000000020000002A, stop = 00000001000000020000002C
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-5], start = 000000010000000200000036, stop = 000000010000000200000038
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-6], start = 00000001000000020000003C, stop = 00000001000000020000003E
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-6], start = 000000010000000200000042, stop = 000000010000000200000044
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-DIFF-7], start = 000000010000000200000048, stop = 00000001000000020000004A
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-7], start = 00000001000000020000004E, stop = 000000010000000200000050
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-8], start = 000000010000000200000054
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 00000001000000020000004B, stop = 00000001000000020000004D
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000200000051, stop = 000000010000000200000053
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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 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: expire full backup repo1: [BACKUP-FULL-5]
|
||||
P00 INFO: expire full backup set repo1: [BACKUP-FULL-6], [BACKUP-DIFF-6], [BACKUP-DIFF-7]
|
||||
P00 INFO: expire full backup repo1: [BACKUP-FULL-7]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-7]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-7]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-DIFF-6]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-6]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-5]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-4]
|
||||
P00 INFO: repo1: expire full backup [BACKUP-FULL-4]
|
||||
P00 INFO: repo1: expire full backup [BACKUP-FULL-5]
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-6], [BACKUP-DIFF-6], [BACKUP-DIFF-7]
|
||||
P00 INFO: repo1: expire full backup [BACKUP-FULL-7]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-7]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-7]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-6]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-6]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-5]
|
||||
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: expire command end: completed successfully
|
||||
|
||||
|
@ -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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-INCR-1]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-1]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-2] repo1: 9.2-1, start = 00000001000000000000000C
|
||||
P00 DETAIL: remove archive repo1: 9.2-1, start = 000000010000000000000000, stop = 00000001000000000000000B
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-3] repo1: 9.3-2, start = 000000010000000000000000
|
||||
P00 DETAIL: no archive to remove for repo1: 9.3-2
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-1], [BACKUP-INCR-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-1]
|
||||
P00 DETAIL: repo1: 9.2-1 archive retention on backup [BACKUP-FULL-2], start = 00000001000000000000000C
|
||||
P00 DETAIL: repo1: 9.2-1 remove archive, start = 000000010000000000000000, stop = 00000001000000000000000B
|
||||
P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-3], start = 000000010000000000000000
|
||||
P00 DETAIL: repo1: 9.3-2 no archive to remove
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: expire full backup set repo1: [BACKUP-FULL-3], [BACKUP-INCR-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-INCR-2]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-3]
|
||||
P00 INFO: remove expired backup repo1: [BACKUP-FULL-2]
|
||||
P00 INFO: remove archive path repo1: [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: remove archive repo1: 9.3-2, start = 000000010000000000000000, stop = 0000000100000000000000FE
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 10-3, start = 000000010000000000000000
|
||||
P00 DETAIL: no archive to remove for repo1: 10-3
|
||||
P00 INFO: repo1: expire full backup [BACKUP-FULL-2]
|
||||
P00 INFO: repo1: expire full backup set [BACKUP-FULL-3], [BACKUP-INCR-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-INCR-2]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-3]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-2]
|
||||
P00 INFO: repo1: remove archive path [TEST_PATH]/db-primary/repo/archive/db/9.2-1
|
||||
P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-4], start = 0000000100000000000000FF
|
||||
P00 DETAIL: repo1: 9.3-2 remove archive, start = 000000010000000000000000, stop = 0000000100000000000000FE
|
||||
P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000
|
||||
P00 DETAIL: repo1: 10-3 no archive to remove
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-DIFF-1]
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-4] repo1: 9.3-2, start = 0000000100000000000000FF
|
||||
P00 DETAIL: no archive to remove for repo1: 9.3-2
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-5] repo1: 10-3, start = 000000010000000000000000, stop = 000000010000000000000002
|
||||
P00 DETAIL: archive retention on backup [BACKUP-FULL-6] repo1: 10-3, start = 000000010000000000000006
|
||||
P00 DETAIL: remove archive repo1: 10-3, start = 000000010000000000000003, stop = 000000010000000000000005
|
||||
P00 INFO: repo1: expire diff backup [BACKUP-DIFF-1]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-DIFF-1]
|
||||
P00 DETAIL: repo1: 9.3-2 archive retention on backup [BACKUP-FULL-4], start = 0000000100000000000000FF
|
||||
P00 DETAIL: repo1: 9.3-2 no archive to remove
|
||||
P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000, stop = 000000010000000000000002
|
||||
P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-6], start = 000000010000000000000006
|
||||
P00 DETAIL: repo1: 10-3 remove archive, start = 000000010000000000000003, stop = 000000010000000000000005
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ 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
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
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: remove expired backup repo1: [BACKUP-FULL-4]
|
||||
P00 INFO: remove archive path repo1: [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: no archive to remove for repo1: 10-3
|
||||
P00 INFO: repo1: expire full backup [BACKUP-FULL-4]
|
||||
P00 INFO: repo1: remove expired backup [BACKUP-FULL-4]
|
||||
P00 INFO: repo1: remove archive path [TEST_PATH]/db-primary/repo/archive/db/9.3-2
|
||||
P00 DETAIL: repo1: 10-3 archive retention on backup [BACKUP-FULL-5], start = 000000010000000000000000
|
||||
P00 DETAIL: repo1: 10-3 no archive to remove
|
||||
P00 INFO: expire command end: completed successfully
|
||||
|
||||
+ supplemental file: [TEST_PATH]/db-primary/repo/backup/db/backup.info
|
||||
|
@ -461,7 +461,7 @@ P00 INFO: full backup size = 48MB
|
||||
P00 INFO: new backup label = [BACKUP-FULL-2]
|
||||
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: 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
|
||||
|
||||
+ supplemental file: [TEST_PATH]/db-primary/pgbackrest.conf
|
||||
|
@ -524,7 +524,7 @@ P00 INFO: new backup label = [BACKUP-FULL-2]
|
||||
P00 DETAIL: statistics: STATISTICS
|
||||
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: 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 INFO: expire command end: completed successfully
|
||||
|
||||
|
@ -237,7 +237,7 @@ testRun(void)
|
||||
"20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n20181119-152900F\n"
|
||||
"20181119-152900F_20181119-152600D\n",
|
||||
"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");
|
||||
@ -252,7 +252,7 @@ testRun(void)
|
||||
infoBackupDataLabelList(infoBackup, NULL), "20181119-152900F\n20181119-152900F_20181119-152600D\n",
|
||||
"remaining backups correct");
|
||||
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");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
@ -305,7 +305,7 @@ testRun(void)
|
||||
"20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n",
|
||||
"remaining backups correct");
|
||||
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(infoBackupDataTotal(infoBackup), 4, "current backups not reduced");
|
||||
@ -322,7 +322,7 @@ testRun(void)
|
||||
"20181119-152138F\n20181119-152800F\n20181119-152900F\n20181119-152900F_20181119-152600D\n",
|
||||
" remaining backups correct");
|
||||
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");
|
||||
@ -381,7 +381,7 @@ testRun(void)
|
||||
infoBackupDataLabelList(infoBackup, NULL), "20181119-152800F\n20181119-152800F_20181119-152155D\n",
|
||||
"remaining backups correct");
|
||||
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");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152100F_20181119-152152D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152100F");
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152100F_20181119-152152D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152100F");
|
||||
|
||||
TEST_RESULT_STRLST_Z(
|
||||
strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc),
|
||||
@ -475,7 +475,7 @@ testRun(void)
|
||||
|
||||
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(
|
||||
strLstSort(storageListP(storageTest, backupStanzaPath), sortOrderAsc),
|
||||
"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");
|
||||
|
||||
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");
|
||||
@ -846,8 +846,8 @@ testRun(void)
|
||||
storageExistsP(storageTest, strNewFmt("%s/20181119-152138F/" BACKUP_MANIFEST_FILE, strZ(backupStanzaPath))), true,
|
||||
"backup not removed");
|
||||
harnessLogResult(
|
||||
"P00 INFO: [DRY-RUN] expire full backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F");
|
||||
"P00 INFO: [DRY-RUN] repo1: expire full backup 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire via backup command");
|
||||
@ -890,8 +890,8 @@ testRun(void)
|
||||
TEST_RESULT_BOOL(strLstExists(infoBackupDataLabelList(infoBackup, NULL), backupLabel), true, "backup exists repo1");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire full backup repo2: 20181119-152138F\n"
|
||||
"P00 INFO: remove expired backup repo2: 20181119-152138F");
|
||||
"P00 INFO: repo2: expire full backup 20181119-152138F\n"
|
||||
"P00 INFO: repo2: remove expired backup 20181119-152138F");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
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,
|
||||
"archive sub path removed");
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire full backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152138F");
|
||||
"P00 INFO: repo1: expire full backup 20181119-152138F\n"
|
||||
"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);
|
||||
strLstAddZ(argList, "--repo1-retention-archive=1");
|
||||
@ -925,6 +925,102 @@ testRun(void)
|
||||
|
||||
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_BOOL(
|
||||
storagePathExistsP(storageTest, strNewFmt("%s/%s", strZ(archiveStanzaPath), "9.4-1")), true,
|
||||
@ -940,27 +1036,27 @@ testRun(void)
|
||||
true, "backup not removed");
|
||||
|
||||
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"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152800F\n"
|
||||
"P00 INFO: [DRY-RUN] remove archive path repo1: %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] no archive to remove for repo1: 10-2\n"
|
||||
"P00 INFO: [DRY-RUN] expire diff backup set repo2: 20181119-152800F_20181119-152152D,"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152800F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove archive path %s/%s/9.4-1\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 10-2 no archive to remove\n"
|
||||
"P00 INFO: [DRY-RUN] repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
|
||||
" 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo2: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo2: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo2: 9.4-1, start = 000000020000000000000002,"
|
||||
"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] 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"
|
||||
"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"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo2: 10-2, 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 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo2: 10-2 no archive to remove", testPath(), strZ(archiveStanzaPath))));
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire command - multi-repo, archive and backups removed");
|
||||
@ -974,27 +1070,26 @@ testRun(void)
|
||||
false, "archive path removed");
|
||||
|
||||
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"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F\n"
|
||||
"P00 INFO: remove archive path repo1: %s/%s/9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 10-2\n"
|
||||
"P00 INFO: expire diff backup set repo2: 20181119-152800F_20181119-152152D,"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F\n"
|
||||
"P00 INFO: repo1: remove archive path %s/%s/9.4-1\n"
|
||||
"P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: repo1: 10-2 no archive to remove\n"
|
||||
"P00 INFO: repo2: expire diff backup set 20181119-152800F_20181119-152152D,"
|
||||
" 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo2: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo2: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152800F repo2: 9.4-1, start = 000000020000000000000002,"
|
||||
"P00 INFO: repo2: remove expired backup 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: repo2: remove expired backup 20181119-152800F_20181119-152152D\n"
|
||||
"P00 DETAIL: repo2: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002,"
|
||||
" 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"
|
||||
"P00 DETAIL: remove archive repo2: 9.4-1, start = 000000020000000000000004,"
|
||||
" stop = 000000020000000000000007\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo2: 10-2, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: no archive to remove for repo2: 10-2", testPath(), strZ(archiveStanzaPath))));
|
||||
"P00 DETAIL: repo2: 9.4-1 remove archive, start = 000000020000000000000004, stop = 000000020000000000000007\n"
|
||||
"P00 DETAIL: repo2: 10-2 archive retention on backup 20181119-152900F, start = 000000010000000000000003\n"
|
||||
"P00 DETAIL: repo2: 10-2 no archive to remove", testPath(), strZ(archiveStanzaPath))));
|
||||
|
||||
TEST_ASSIGN(infoBackup, infoBackupLoadFile(storageTest, backupInfoFileName, cipherTypeNone, NULL), "get backup.info");
|
||||
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");
|
||||
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"
|
||||
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type' (even in prior"
|
||||
" 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] remove expired backup repo1: 20181119-152900F_20181119-152500I");
|
||||
"P00 INFO: [DRY-RUN] repo1: expire adhoc backup 20181119-152900F_20181119-152500I\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152900F_20181119-152500I");
|
||||
|
||||
// Incorrect backup label format provided
|
||||
argList = strLstDup(argListAvoidWarn);
|
||||
@ -1059,7 +1154,7 @@ testRun(void)
|
||||
|
||||
TEST_RESULT_VOID(cmdExpire(), "expire remove archive path");
|
||||
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),
|
||||
@ -1133,11 +1228,11 @@ testRun(void)
|
||||
TEST_RESULT_VOID(
|
||||
removeExpiredArchive(infoBackup, false, 0), "backup earlier than selected for retention does not have archive-start");
|
||||
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"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000001\n"
|
||||
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000003, stop = 000000010000000000000003");
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000001\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000003, stop = 000000010000000000000003");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire history files - dry run");
|
||||
@ -1223,11 +1318,11 @@ testRun(void)
|
||||
"history file not removed");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: [DRY-RUN] no archive to remove for repo1: 9.4-1\n"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: [DRY-RUN] no archive to remove for repo1: 10-2\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove history file repo1: 10-2, file = 00000002.history");
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 no archive to remove\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 10-2 no archive to remove\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 10-2 remove history file 00000002.history");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire history files - no dry run");
|
||||
@ -1246,11 +1341,11 @@ testRun(void)
|
||||
"00000003.history file not removed");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 10-2\n"
|
||||
"P00 DETAIL: remove history file repo1: 10-2, file = 00000002.history");
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: repo1: 10-2 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 10-2 remove history file 00000002.history");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire history files via backup command");
|
||||
@ -1273,11 +1368,11 @@ testRun(void)
|
||||
"00000003.history file not removed");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 10-2, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 10-2\n"
|
||||
"P00 DETAIL: remove history file repo1: 10-2, file = 00000002.history");
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 10-2 archive retention on backup 20181119-152900F, start = 000000030000000000000006\n"
|
||||
"P00 DETAIL: repo1: 10-2 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 10-2 remove history file 00000002.history");
|
||||
|
||||
harnessLogLevelReset();
|
||||
}
|
||||
@ -1363,11 +1458,12 @@ testRun(void)
|
||||
archiveGenerate(storageTest, archiveStanzaPath, 1, 7, "10-2", "0000000100000000");
|
||||
|
||||
TEST_ERROR(
|
||||
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not"
|
||||
" match");
|
||||
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire full backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152138F");
|
||||
"P00 INFO: repo1: expire full backup 20181119-152138F\n"
|
||||
"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(
|
||||
strLstSort(storageListP(
|
||||
storageTest, strNewFmt("%s/%s/%s", strZ(archiveStanzaPath), "10-1", "0000000100000000")), sortOrderAsc),
|
||||
@ -1393,8 +1489,9 @@ testRun(void)
|
||||
"2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}"));
|
||||
|
||||
TEST_ERROR(
|
||||
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not"
|
||||
" match");
|
||||
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
|
||||
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");
|
||||
@ -1412,8 +1509,9 @@ testRun(void)
|
||||
"2={\"db-id\":6626363367545678089,\"db-version\":\"10\"}"));
|
||||
|
||||
TEST_ERROR(
|
||||
cmdExpire(), FormatError, "archive expiration cannot continue for repo1 - archive and backup history lists do not"
|
||||
" match");
|
||||
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
|
||||
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");
|
||||
@ -1492,10 +1590,10 @@ testRun(void)
|
||||
TEST_RESULT_VOID(cmdExpire(), "Expire archive that archive.info is aware of");
|
||||
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire full backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: expire full backup repo1: 20181119-152800F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152138F");
|
||||
"P00 INFO: repo1: expire full backup 20181119-152138F\n"
|
||||
"P00 INFO: repo1: expire full backup 20181119-152800F\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152138F");
|
||||
TEST_RESULT_STRLST_STR(
|
||||
strLstSort(storageListP(
|
||||
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,
|
||||
STRDEF("20181119-152900F"), "latest link not updated");
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire adhoc backup set repo1: 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152138F repo1: 9.4-1, start = 000000020000000000000001,"
|
||||
"P00 INFO: repo1: expire adhoc backup set 20181119-152800F_20181119-152152D, 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152138F, start = 000000020000000000000001,"
|
||||
" stop = 000000020000000000000001\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002,"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002,"
|
||||
" stop = 000000010000000000000004\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 12-2, start = 000000010000000000000006\n"
|
||||
"P00 DETAIL: remove archive repo1: 12-2, start = 000000010000000000000001, stop = 000000010000000000000001\n"
|
||||
"P00 DETAIL: remove archive repo1: 12-2, start = 000000010000000000000005, stop = 000000010000000000000005");
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152900F, start = 000000010000000000000006\n"
|
||||
"P00 DETAIL: repo1: 12-2 remove archive, start = 000000010000000000000001, stop = 000000010000000000000001\n"
|
||||
"P00 DETAIL: repo1: 12-2 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
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)))),
|
||||
true, "only adhoc full removed");
|
||||
harnessLogResult(
|
||||
"P00 INFO: expire adhoc backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152138F\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000020000000000000001, stop = 000000020000000000000001\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002,"
|
||||
"P00 INFO: repo1: expire adhoc backup 20181119-152138F\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152138F\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000020000000000000001, stop = 000000020000000000000001\n"
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002,"
|
||||
" stop = 000000010000000000000004\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 12-2, start = 000000010000000000000006\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 12-2");
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152900F, start = 000000010000000000000006\n"
|
||||
"P00 DETAIL: repo1: 12-2 no archive to remove");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire latest and resumable");
|
||||
@ -1789,17 +1887,17 @@ testRun(void)
|
||||
strZ(backupStanzaPath)))),
|
||||
true, "latest and resumable removed");
|
||||
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"
|
||||
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
|
||||
" (even in prior expires) can cause gaps in the WAL.\n"
|
||||
"P00 INFO: expire adhoc backup repo1: 20181119-152900F\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152900F_20181119-153000I\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152900F\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 12-2");
|
||||
"P00 INFO: repo1: expire adhoc backup 20181119-152900F\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152900F_20181119-153000I\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152900F\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000020000000000000002\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 no archive to remove\n"
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo1: 12-2 no archive to remove");
|
||||
TEST_RESULT_STR(storageInfoP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination,
|
||||
STRDEF("20181119-152850F"), "latest link updated");
|
||||
TEST_RESULT_STRLST_STR(
|
||||
@ -1816,8 +1914,10 @@ testRun(void)
|
||||
harnessCfgLoad(cfgCmdExpire, argList);
|
||||
|
||||
TEST_ERROR(
|
||||
cmdExpire(), BackupSetInvalidError,
|
||||
"full backup repo1: 20181119-152850F cannot be expired until another full backup has been created on this repo");
|
||||
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
|
||||
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");
|
||||
@ -1836,12 +1936,12 @@ testRun(void)
|
||||
true, "only last prior backup removed");
|
||||
harnessLogResult(
|
||||
strZ(strNewFmt(
|
||||
"P00 INFO: expire adhoc backup set repo1: 20181119-152800F, 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F\n"
|
||||
"P00 INFO: remove archive path repo1: %s/repo/archive/db/9.4-1\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 12-2", testPath())));
|
||||
"P00 INFO: repo1: expire adhoc backup set 20181119-152800F, 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152252D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F\n"
|
||||
"P00 INFO: repo1: remove archive path %s/repo/archive/db/9.4-1\n"
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo1: 12-2 no archive to remove", testPath())));
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("error on expire last full backup on disk");
|
||||
@ -1851,8 +1951,10 @@ testRun(void)
|
||||
harnessCfgLoad(cfgCmdExpire, argList);
|
||||
|
||||
TEST_ERROR(
|
||||
cmdExpire(), BackupSetInvalidError,
|
||||
"full backup repo1: 20181119-152850F cannot be expired until another full backup has been created on this repo");
|
||||
cmdExpire(), CommandError, CFGCMD_EXPIRE " command encountered 1 error(s), check the log file for details");
|
||||
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");
|
||||
@ -1911,12 +2013,12 @@ testRun(void)
|
||||
TEST_RESULT_VOID(
|
||||
removeExpiredBackup(infoBackup, adhocBackupLabel, 0), "code coverage: removeExpireBackup with no manifests");
|
||||
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"
|
||||
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
|
||||
" (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] remove expired backup repo1: 20181119-152850F_20181119-152252D");
|
||||
"P00 INFO: [DRY-RUN] repo1: expire adhoc backup 20181119-152850F_20181119-152252D\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152850F_20181119-152252D");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
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");
|
||||
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"
|
||||
" HINT: non-default settings for 'repo1-retention-archive'/'repo1-retention-archive-type'"
|
||||
" (even in prior expires) can cause gaps in the WAL.\n"
|
||||
"P00 INFO: expire adhoc backup repo1: 20181119-152850F_20181119-152252D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152850F_20181119-152252D\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo1: 12-2, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo1: 12-2\n"
|
||||
"P00 WARN: expiring latest backup repo2: 20181119-152850F_20181119-152252D - the ability to perform"
|
||||
"P00 INFO: repo1: expire adhoc backup 20181119-152850F_20181119-152252D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152850F_20181119-152252D\n"
|
||||
"P00 DETAIL: repo1: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo1: 12-2 no archive to remove\n"
|
||||
"P00 WARN: repo2: expiring latest backup 20181119-152850F_20181119-152252D - the ability to perform"
|
||||
" point-in-time-recovery (PITR) may be affected\n"
|
||||
" HINT: non-default settings for 'repo2-retention-archive'/'repo2-retention-archive-type'"
|
||||
" (even in prior expires) can cause gaps in the WAL.\n"
|
||||
"P00 INFO: expire adhoc backup repo2: 20181119-152850F_20181119-152252D\n"
|
||||
"P00 INFO: remove expired backup repo2: 20181119-152850F_20181119-152252D\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152850F repo2: 12-2, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: no archive to remove for repo2: 12-2");
|
||||
"P00 INFO: repo2: expire adhoc backup 20181119-152850F_20181119-152252D\n"
|
||||
"P00 INFO: repo2: remove expired backup 20181119-152850F_20181119-152252D\n"
|
||||
"P00 DETAIL: repo2: 12-2 archive retention on backup 20181119-152850F, start = 000000010000000000000002\n"
|
||||
"P00 DETAIL: repo2: 12-2 no archive to remove");
|
||||
|
||||
TEST_RESULT_STR(storageInfoP(storageRepoIdx(1), STRDEF(STORAGE_REPO_BACKUP "/latest")).linkDestination,
|
||||
STRDEF("20181119-152850F"), "latest link updated, repo2");
|
||||
@ -2190,7 +2292,7 @@ testRun(void)
|
||||
" of space\n"
|
||||
" HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the"
|
||||
" 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
|
||||
TEST_RESULT_UINT(
|
||||
@ -2215,7 +2317,7 @@ testRun(void)
|
||||
infoBackupDataLabelList(infoBackup, NULL),
|
||||
"20181119-152138F\n20181119-152800F\n20181119-152800F_20181119-152152D\n20181119-152800F_20181119-152155I\n"
|
||||
"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");
|
||||
@ -2226,18 +2328,17 @@ testRun(void)
|
||||
harnessCfgLoad(cfgCmdExpire, argList);
|
||||
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run");
|
||||
harnessLogResult(
|
||||
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001,"
|
||||
" stop = 000000010000000000000003");
|
||||
"P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003");
|
||||
|
||||
strLstAddZ(argList, "--repo1-retention-archive=9999999");
|
||||
harnessCfgLoad(cfgCmdExpire, argList);
|
||||
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired - dry-run, retention-archive set to max, no archives expired");
|
||||
harnessLogResult(
|
||||
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F");
|
||||
"P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F");
|
||||
|
||||
argList = strLstDup(argListTime);
|
||||
strLstAddZ(argList, "--repo1-retention-full=30");
|
||||
@ -2246,18 +2347,18 @@ testRun(void)
|
||||
harnessCfgLoad(cfgCmdExpire, argList);
|
||||
TEST_RESULT_VOID(cmdExpire(), "only oldest backup expired but retention archive set lower - dry-run");
|
||||
harnessLogResult(
|
||||
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004,"
|
||||
"P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004,"
|
||||
" 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"
|
||||
"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"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000009\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, 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 archive retention on backup 20181119-152900F, start = 000000010000000000000009\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000008, stop = 000000010000000000000008");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
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"
|
||||
" HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff'"
|
||||
" to the maximum.\n"
|
||||
"P00 INFO: [DRY-RUN] expire time-based backup repo1: 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] remove expired backup repo1: 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004,"
|
||||
"P00 INFO: [DRY-RUN] repo1: expire time-based backup 20181119-152138F\n"
|
||||
"P00 INFO: [DRY-RUN] repo1: remove expired backup 20181119-152138F\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004,"
|
||||
" 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"
|
||||
"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"
|
||||
"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"
|
||||
"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"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, start = 000000010000000000000005, stop = 000000010000000000000005\n"
|
||||
"P00 DETAIL: [DRY-RUN] remove archive repo1: 9.4-1, 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 = 000000010000000000000001, stop = 000000010000000000000003\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000005, stop = 000000010000000000000005\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000008, stop = 000000010000000000000008\n"
|
||||
"P00 DETAIL: [DRY-RUN] repo1: 9.4-1 remove archive, start = 000000010000000000000010, stop = 000000010000000000000010");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("expire oldest full");
|
||||
@ -2303,12 +2404,12 @@ testRun(void)
|
||||
TEST_RESULT_VOID(
|
||||
infoBackupSaveFile(infoBackup, storageTest, backupInfoFileName, cipherTypeNone, NULL),
|
||||
"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");
|
||||
harnessLogResult(
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152138F\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152800F repo1: 9.4-1, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000001, stop = 000000010000000000000003");
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152138F\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152800F, start = 000000010000000000000004\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000001, stop = 000000010000000000000003");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("newest backup - retention met but must keep one");
|
||||
@ -2319,13 +2420,13 @@ testRun(void)
|
||||
|
||||
TEST_RESULT_VOID(cmdExpire(), "expire all but newest");
|
||||
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"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: remove expired backup repo1: 20181119-152800F\n"
|
||||
"P00 DETAIL: archive retention on backup 20181119-152900F repo1: 9.4-1, start = 000000010000000000000009\n"
|
||||
"P00 DETAIL: remove archive repo1: 9.4-1, start = 000000010000000000000004, stop = 000000010000000000000008");
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152155I\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F_20181119-152152D\n"
|
||||
"P00 INFO: repo1: remove expired backup 20181119-152800F\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 archive retention on backup 20181119-152900F, start = 000000010000000000000009\n"
|
||||
"P00 DETAIL: repo1: 9.4-1 remove archive, start = 000000010000000000000004, stop = 000000010000000000000008");
|
||||
|
||||
harnessLogLevelReset();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user