1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-03-19 21:07:53 +02:00

Show backup percent complete in info output.

In the JSON output the percent complete is storage as an integer of the percent complete * 100. So, before display it should be converted to double and divided by 100, or split using integer mod and div.

Note that percent complete will only be displayed on the host where the backup was executed. Remote hosts will show a backup/expire running with no percent complete.
This commit is contained in:
Reid Thompson 2022-05-04 12:52:05 -04:00 committed by GitHub
parent 20782c88bc
commit d9088b2e2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 347 additions and 139 deletions

View File

@ -61,6 +61,18 @@
<p><postgres/> 15 support.</p>
</release-item>
<release-item>
<github-issue id="1490"/>
<github-pull-request id="1621"/>
<release-item-contributor-list>
<release-item-contributor id="reid.thompson"/>
<release-item-reviewer id="david.steele"/>
</release-item-contributor-list>
<p>Show backup percent complete in <cmd>info</cmd> output.</p>
</release-item>
<release-item>
<commit subject="Refactor target type checking for clarity in restore module."/>
<commit subject="Auto-select backup for restore command --type=lsn.">

View File

@ -20,6 +20,7 @@ Backup Command
#include "common/compress/helper.h"
#include "common/debug.h"
#include "common/io/filter/size.h"
#include "common/lock.h"
#include "common/log.h"
#include "common/regExp.h"
#include "common/time.h"
@ -1132,7 +1133,8 @@ Log the results of a job and throw errors
static void
backupJobResult(
Manifest *const manifest, const String *const host, const Storage *const storagePg, StringList *const fileRemove,
ProtocolParallelJob *const job, const bool bundle, const uint64_t sizeTotal, uint64_t *const sizeProgress)
ProtocolParallelJob *const job, const bool bundle, const uint64_t sizeTotal, uint64_t *const sizeProgress,
unsigned int *const currentPercentComplete)
{
FUNCTION_LOG_BEGIN(logLevelDebug);
FUNCTION_LOG_PARAM(MANIFEST, manifest);
@ -1143,6 +1145,7 @@ backupJobResult(
FUNCTION_LOG_PARAM(BOOL, bundle);
FUNCTION_LOG_PARAM(UINT64, sizeTotal);
FUNCTION_LOG_PARAM_P(UINT64, sizeProgress);
FUNCTION_LOG_PARAM_P(UINT, currentPercentComplete);
FUNCTION_LOG_END();
ASSERT(manifest != NULL);
@ -1159,6 +1162,7 @@ backupJobResult(
const uint64_t bundleId = varType(protocolParallelJobKey(job)) == varTypeUInt64 ?
varUInt64(protocolParallelJobKey(job)) : 0;
PackRead *const jobResult = protocolParallelJobResult(job);
unsigned int percentComplete = 0;
while (!pckReadNullP(jobResult))
{
@ -1175,7 +1179,7 @@ backupJobResult(
// Create log file name
const String *const fileName = storagePathP(storagePg, manifestPathPg(file.name));
const String *fileLog = host == NULL ? fileName : strNewFmt("%s:%s", strZ(host), strZ(fileName));
const String *const fileLog = host == NULL ? fileName : strNewFmt("%s:%s", strZ(host), strZ(fileName));
// Format log progress
String *const logProgress = strNew();
@ -1183,9 +1187,11 @@ backupJobResult(
if (bundleId != 0)
strCatFmt(logProgress, "bundle %" PRIu64 "/%" PRIu64 ", ", bundleId, bundleOffset);
// Store percentComplete as an integer
percentComplete = sizeTotal == 0 ? 10000 : (unsigned int)(((double)*sizeProgress / (double)sizeTotal) * 10000);
strCatFmt(
logProgress, "%s, %.2lf%%", strZ(strSizeFormat(copySize)),
sizeTotal == 0 ? 100.00 : (double)*sizeProgress * 100.0 / (double)sizeTotal);
logProgress, "%s, %u.%02u%%", strZ(strSizeFormat(copySize)), percentComplete / 100, percentComplete % 100);
// Format log checksum
const String *const logChecksum = copySize != 0 ? strNewFmt(" checksum %s", strZ(copyChecksum)) : EMPTY_STR;
@ -1308,6 +1314,13 @@ backupJobResult(
bundleId, bundleOffset);
}
}
// Update currentPercentComplete and lock file when the change is significant enough
if (percentComplete - *currentPercentComplete > 10)
{
*currentPercentComplete = percentComplete;
lockWriteDataP(lockTypeBackup, .percentComplete = VARUINT(*currentPercentComplete));
}
}
MEM_CONTEXT_TEMP_END();
@ -1738,7 +1751,9 @@ static ProtocolParallelJob *backupJobCallback(void *data, unsigned int clientIdx
}
static void
backupProcess(BackupData *backupData, Manifest *manifest, const String *lsnStart, const String *cipherPassBackup)
backupProcess(
const BackupData *const backupData, Manifest *const manifest, const String *const lsnStart,
const String *const cipherPassBackup)
{
FUNCTION_LOG_BEGIN(logLevelDebug);
FUNCTION_LOG_PARAM(BACKUP_DATA, backupData);
@ -1857,6 +1872,9 @@ backupProcess(BackupData *backupData, Manifest *manifest, const String *lsnStart
// Process jobs
uint64_t sizeProgress = 0;
// Store current percentage complete - updated as jobs progress
unsigned int currentPercentComplete = 0;
MEM_CONTEXT_TEMP_RESET_BEGIN()
{
do
@ -1871,7 +1889,7 @@ backupProcess(BackupData *backupData, Manifest *manifest, const String *lsnStart
manifest,
backupStandby && protocolParallelJobProcessId(job) > 1 ? backupData->hostStandby : backupData->hostPrimary,
protocolParallelJobProcessId(job) > 1 ? storagePgIdx(pgIdx) : backupData->storagePrimary,
fileRemove, job, jobData.bundle, sizeTotal, &sizeProgress);
fileRemove, job, jobData.bundle, sizeTotal, &sizeProgress, &currentPercentComplete);
}
// A keep-alive is required here for the remote holding open the backup connection

View File

@ -10,6 +10,7 @@ Info Command
#include "command/archive/common.h"
#include "command/info/info.h"
#include "common/crypto/common.h"
#include "common/debug.h"
#include "common/io/fdWrite.h"
#include "common/lock.h"
@ -17,7 +18,6 @@ Info Command
#include "common/memContext.h"
#include "common/type/json.h"
#include "config/config.h"
#include "common/crypto/common.h"
#include "info/info.h"
#include "info/infoArchive.h"
#include "info/infoBackup.h"
@ -71,6 +71,7 @@ VARIANT_STRDEF_STATIC(STATUS_KEY_CODE_VAR, "code");
VARIANT_STRDEF_STATIC(STATUS_KEY_LOCK_VAR, "lock");
VARIANT_STRDEF_STATIC(STATUS_KEY_LOCK_BACKUP_VAR, "backup");
VARIANT_STRDEF_STATIC(STATUS_KEY_LOCK_BACKUP_HELD_VAR, "held");
VARIANT_STRDEF_STATIC(STATUS_KEY_LOCK_BACKUP_PERCENT_COMPLETE_VAR, "pct-cplt");
VARIANT_STRDEF_STATIC(STATUS_KEY_MESSAGE_VAR, "message");
#define INFO_STANZA_STATUS_OK "ok"
@ -129,6 +130,7 @@ typedef struct InfoStanzaRepo
unsigned int currentPgVersion; // Current postgres version for the stanza
bool backupLockChecked; // Has the check for a backup lock already been performed?
bool backupLockHeld; // Is backup lock held on the system where info command is run?
const Variant *percentComplete; // Percentage of backup complete * 100 (when not NULL)
InfoRepoData *repoList; // List of configured repositories
} InfoStanzaRepo;
@ -175,15 +177,16 @@ infoStanzaErrorAdd(InfoRepoData *repoList, const ErrorType *type, const String *
Set the overall error status code and message for the stanza to the code and message passed
***********************************************************************************************************************************/
static void
stanzaStatus(const int code, bool backupLockHeld, Variant *stanzaInfo)
stanzaStatus(const int code, const InfoStanzaRepo *const stanzaData, Variant *stanzaInfo)
{
FUNCTION_TEST_BEGIN();
FUNCTION_TEST_PARAM(INT, code);
FUNCTION_TEST_PARAM(BOOL, backupLockHeld);
FUNCTION_TEST_PARAM(INFO_STANZA_REPO, stanzaData);
FUNCTION_TEST_PARAM(VARIANT, stanzaInfo);
FUNCTION_TEST_END();
ASSERT((code >= 0 && code <= 6) || code == 99);
ASSERT(stanzaData != NULL);
ASSERT(stanzaInfo != NULL);
KeyValue *statusKv = kvPutKv(varKv(stanzaInfo), STANZA_KEY_STATUS_VAR);
@ -228,7 +231,10 @@ stanzaStatus(const int code, bool backupLockHeld, Variant *stanzaInfo)
// Construct a specific lock part
KeyValue *lockKv = kvPutKv(statusKv, STATUS_KEY_LOCK_VAR);
KeyValue *backupLockKv = kvPutKv(lockKv, STATUS_KEY_LOCK_BACKUP_VAR);
kvPut(backupLockKv, STATUS_KEY_LOCK_BACKUP_HELD_VAR, VARBOOL(backupLockHeld));
kvPut(backupLockKv, STATUS_KEY_LOCK_BACKUP_HELD_VAR, VARBOOL(stanzaData->backupLockHeld));
if (stanzaData->percentComplete != NULL && cfgOptionStrId(cfgOptOutput) != CFGOPTVAL_OUTPUT_JSON)
kvPut(backupLockKv, STATUS_KEY_LOCK_BACKUP_PERCENT_COMPLETE_VAR, stanzaData->percentComplete);
FUNCTION_TEST_RETURN_VOID();
}
@ -565,8 +571,8 @@ For each current backup in the backup.info file of the stanza, set the data for
***********************************************************************************************************************************/
static void
backupList(
VariantList *backupSection, InfoStanzaRepo *stanzaData, const String *backupLabel, unsigned int repoIdxMin,
unsigned int repoIdxMax)
VariantList *const backupSection, InfoStanzaRepo *const stanzaData, const String *const backupLabel,
const unsigned int repoIdxMin, const unsigned int repoIdxMax)
{
FUNCTION_TEST_BEGIN();
FUNCTION_TEST_PARAM(VARIANT_LIST, backupSection); // The section to add the backup data to
@ -636,7 +642,7 @@ backupList(
Set the stanza data for each stanza found in the repo
***********************************************************************************************************************************/
static VariantList *
stanzaInfoList(List *stanzaRepoList, const String *backupLabel, unsigned int repoIdxMin, unsigned int repoIdxMax)
stanzaInfoList(List *stanzaRepoList, const String *const backupLabel, const unsigned int repoIdxMin, const unsigned int repoIdxMax)
{
FUNCTION_TEST_BEGIN();
FUNCTION_TEST_PARAM(LIST, stanzaRepoList);
@ -766,7 +772,7 @@ stanzaInfoList(List *stanzaRepoList, const String *backupLabel, unsigned int rep
kvPut(varKv(stanzaInfo), STANZA_KEY_BACKUP_VAR, varNewVarLst(backupSection));
// Set the overall stanza status
stanzaStatus(stanzaStatusCode, stanzaData->backupLockHeld, stanzaInfo);
stanzaStatus(stanzaStatusCode, stanzaData, stanzaInfo);
// Set the overall cipher type
if (stanzaCipherType != INFO_STANZA_STATUS_CODE_MIXED)
@ -1193,6 +1199,12 @@ infoUpdateStanza(
stanzaRepo->backupLockHeld = lockRead(
cfgOptionStr(cfgOptLockPath), stanzaRepo->name, lockTypeBackup).status == lockReadStatusValid;
stanzaRepo->backupLockChecked = true;
if (stanzaRepo->backupLockHeld)
{
stanzaRepo->percentComplete =
lockRead(cfgOptionStr(cfgOptLockPath), stanzaRepo->name, lockTypeBackup).data.percentComplete;
}
}
}
@ -1450,6 +1462,10 @@ infoRender(void)
KeyValue *lockKv = varKv(kvGet(stanzaStatus, STATUS_KEY_LOCK_VAR));
KeyValue *backupLockKv = varKv(kvGet(lockKv, STATUS_KEY_LOCK_BACKUP_VAR));
bool backupLockHeld = varBool(kvGet(backupLockKv, STATUS_KEY_LOCK_BACKUP_HELD_VAR));
const Variant *const percentComplete = kvGet(backupLockKv, STATUS_KEY_LOCK_BACKUP_PERCENT_COMPLETE_VAR);
const String *const percentCompleteStr = percentComplete != NULL ?
strNewFmt(" - %u.%02u%% complete", varUInt(percentComplete) / 100, varUInt(percentComplete) % 100) :
EMPTY_STR;
if (statusCode != INFO_STANZA_STATUS_CODE_OK)
{
@ -1463,7 +1479,9 @@ infoRender(void)
statusCode == INFO_STANZA_STATUS_CODE_MIXED ? INFO_STANZA_MIXED :
strZ(strNewFmt(INFO_STANZA_STATUS_ERROR " (%s)",
strZ(varStr(kvGet(stanzaStatus, STATUS_KEY_MESSAGE_VAR))))),
backupLockHeld == true ? " (" INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP ")" : "");
backupLockHeld == true ?
strZ(strNewFmt(" (" INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP "%s)", strZ(percentCompleteStr))) :
"");
// Output the status per repo
VariantList *repoSection = kvGetList(stanzaInfo, STANZA_KEY_REPO_VAR);
@ -1508,14 +1526,20 @@ infoRender(void)
strCatFmt(
resultStr, "%s (%s%s\n", INFO_STANZA_STATUS_ERROR,
strZ(varStr(kvGet(stanzaStatus, STATUS_KEY_MESSAGE_VAR))),
backupLockHeld == true ? ", " INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP ")" : ")");
backupLockHeld == true ?
strZ(strNewFmt(", " INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP "%s)", strZ(percentCompleteStr))) :
")");
}
}
else
{
// Change displayed status if backup lock is found
if (backupLockHeld)
strCatFmt(resultStr, "%s (%s)\n", INFO_STANZA_STATUS_OK, INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP);
{
strCatFmt(
resultStr, "%s (%s%s)\n", INFO_STANZA_STATUS_OK, INFO_STANZA_STATUS_MESSAGE_LOCK_BACKUP,
strZ(percentCompleteStr));
}
else
strCatFmt(resultStr, "%s\n", INFO_STANZA_STATUS_OK);
}

View File

@ -18,6 +18,7 @@ Lock Handler
#include "common/lock.h"
#include "common/log.h"
#include "common/memContext.h"
#include "common/type/json.h"
#include "common/user.h"
#include "common/wait.h"
#include "storage/helper.h"
@ -31,6 +32,10 @@ Constants
// general system error.
#define LOCK_ON_EXEC_ID -2
#define LOCK_KEY_EXEC_ID STRID6("execId", 0x12e0c56051)
#define LOCK_KEY_PERCENT_COMPLETE STRID6("pctCplt", 0x14310a140d01)
#define LOCK_KEY_PROCESS_ID STRID5("pid", 0x11300)
/***********************************************************************************************************************************
Lock type names
***********************************************************************************************************************************/
@ -104,15 +109,17 @@ lockReadFileData(const String *const lockFile, const int fd)
ioCopyP(ioFdReadNewOpen(lockFile, fd, 0), write);
ioWriteClose(write);
// Parse the file
const StringList *const parse = strLstNewSplitZ(strNewBuf(buffer), LF_Z);
JsonRead *const json = jsonReadNew(strNewBuf(buffer));
jsonReadObjectBegin(json);
MEM_CONTEXT_PRIOR_BEGIN()
{
if (strLstSize(parse) == 3)
result.execId = strDup(strLstGet(parse, 1));
result.execId = jsonReadStr(jsonReadKeyRequireStrId(json, LOCK_KEY_EXEC_ID));
result.processId = cvtZToInt(strZ(strLstGet(parse, 0)));
if (jsonReadKeyExpectStrId(json, LOCK_KEY_PERCENT_COMPLETE))
result.percentComplete = varNewUInt(jsonReadUInt(json));
result.processId = jsonReadInt(jsonReadKeyRequireStrId(json, LOCK_KEY_PROCESS_ID));
}
MEM_CONTEXT_PRIOR_END();
}
@ -217,11 +224,12 @@ lockRead(const String *const lockPath, const String *const stanza, const LockTyp
/***********************************************************************************************************************************
Write contents of lock file
***********************************************************************************************************************************/
static void
lockWriteData(const LockType lockType)
void
lockWriteData(const LockType lockType, const LockWriteDataParam param)
{
FUNCTION_LOG_BEGIN(logLevelTrace);
FUNCTION_LOG_PARAM(ENUM, lockType);
FUNCTION_LOG_PARAM(VARIANT, param.percentComplete);
FUNCTION_LOG_END();
ASSERT(lockType < lockTypeAll);
@ -230,9 +238,36 @@ lockWriteData(const LockType lockType)
MEM_CONTEXT_TEMP_BEGIN()
{
// Build the json object
JsonWrite *json = jsonWriteNewP();
jsonWriteObjectBegin(json);
jsonWriteStr(jsonWriteKeyStrId(json, LOCK_KEY_EXEC_ID), lockLocal.execId);
if (param.percentComplete != NULL)
jsonWriteUInt(jsonWriteKeyStrId(json, LOCK_KEY_PERCENT_COMPLETE), varUInt(param.percentComplete));
jsonWriteInt(jsonWriteKeyStrId(json, LOCK_KEY_PROCESS_ID), getpid());
jsonWriteObjectEnd(json);
if (lockType == lockTypeBackup && lockLocal.held != lockTypeNone)
{
// Seek to beginning of backup lock file
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockType].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockType].name));
// In case the current write is ever shorter than the previous one
THROW_ON_SYS_ERROR_FMT(
ftruncate(lockLocal.file[lockType].fd, 0) == -1, FileWriteError, "unable to truncate '%s'",
strZ(lockLocal.file[lockType].name));
}
// Write lock file data
IoWrite *const write = ioFdWriteNewOpen(lockLocal.file[lockType].name, lockLocal.file[lockType].fd, 0);
ioCopyP(ioBufferReadNewOpen(BUFSTR(strNewFmt("%d" LF_Z "%s" LF_Z, getpid(), strZ(lockLocal.execId)))), write);
ioCopyP(ioBufferReadNewOpen(BUFSTR(strNewFmt("%s" LF_Z, strZ(jsonWriteResult(json))))), write);
ioWriteClose(write);
}
MEM_CONTEXT_TEMP_END();
@ -418,7 +453,7 @@ lockAcquire(
}
// Else write lock data unless we locked an execId match
else if (lockLocal.file[lockIdx].fd != LOCK_ON_EXEC_ID)
lockWriteData(lockIdx);
lockWriteDataP(lockIdx);
}
if (result)

View File

@ -15,13 +15,14 @@ typedef enum
lockTypeNone,
} LockType;
#include "common/type/string.h"
#include "common/type/variant.h"
// Lock data
typedef struct LockData
{
pid_t processId; // Process holding the lock
const String *execId; // Exec id of process holding the lock
Variant *percentComplete; // Percentage of backup complete * 100 (when not NULL)
} LockData;
#include "common/time.h"
@ -45,6 +46,18 @@ bool lockRelease(bool failOnNoLock);
// Build lock file name
String *lockFileName(const String *stanza, LockType lockType);
// Write data to a lock file
typedef struct LockWriteDataParam
{
VAR_PARAM_HEADER;
const Variant *percentComplete; // Percentage of backup complete * 100 (when not NULL)
} LockWriteDataParam;
#define lockWriteDataP(lockType, ...) \
lockWriteData(lockType, (LockWriteDataParam) {VAR_PARAM_INIT, __VA_ARGS__})
void lockWriteData(LockType lockType, LockWriteDataParam param);
// Read a lock file held by another process to get information about what the process is doing. This is a lower-level version to use
// when the lock file name is already known and the lock file may need to be removed.
typedef enum

View File

@ -172,6 +172,9 @@ main(int argListSize, const char *argList[])
cfgLoadLogFile();
cmdBegin();
// Null out any backup percent complete value in the backup lock file
lockWriteDataP(lockTypeBackup);
// Run expire
cmdExpire();
}

View File

@ -62,21 +62,21 @@ full backup - create pg_stat link, pg_clog dir (db-primary host)
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-primary/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --manifest-save-threshold=3 --no-online --pg1-path=[TEST_PATH]/db-primary/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-primary/repo --repo1-type=cifs --stanza=db --start-fast --type=full
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.
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/33001 (64KB, 33.33%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/33001 (64KB, 33.32%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P00 WARN: invalid page checksums found in file [TEST_PATH]/db-primary/db/base/base/32768/33001 at pages 0, 3-5, 7
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.99%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.98%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.65%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.31%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.64%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P00 WARN: invalid page checksum found in file [TEST_PATH]/db-primary/db/base/base/16384/17000 at page 1
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.81%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.98%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.99%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.97%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.98%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_hba.conf (9B, 99.99%) checksum dd4cea0cae348309f9de28ad4ded8ee2cc2e6d5b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_stat/global.stat (5B, 99.99%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/special-!_.*'()&!@;:+,? (0B, 100.00%)
P00 INFO: new backup label = [BACKUP-FULL-1]
@ -305,20 +305,20 @@ P00 DETAIL: remove file '[TEST_PATH]/db-primary/repo/backup/db/[BACKUP-FULL-2]/f
P00 DETAIL: remove file '[TEST_PATH]/db-primary/repo/backup/db/[BACKUP-FULL-2]/pg_data/PG_VERSION' from resumed backup (no checksum in resumed manifest)
P00 DETAIL: remove file '[TEST_PATH]/db-primary/repo/backup/db/[BACKUP-FULL-2]/pg_data/special-!_.*'()&!@;:+,?' from resumed backup (zero size)
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/33001 (64KB, 33.32%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.99%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.65%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.31%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.64%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.81%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.98%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.64%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.30%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.63%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.80%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.97%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.98%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/pg_hba.conf (9B, 99.99%) checksum dd4cea0cae348309f9de28ad4ded8ee2cc2e6d5b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changecontent.txt (7B, 99.99%) checksum 238a131a3e8eb98d1fc5b27d882ca40b7618fd2a
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/pg_hba.conf (9B, 99.98%) checksum dd4cea0cae348309f9de28ad4ded8ee2cc2e6d5b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changecontent.txt (7B, 99.98%) checksum 238a131a3e8eb98d1fc5b27d882ca40b7618fd2a
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/pg_stat/global.stat (5B, 99.99%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changetime.txt (4B, 99.99%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: checksum resumed file [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/PG_VERSION (3B, 100.00%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/zero_from_start (0B, 100.00%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/special-!_.*'()&!@;:+,? (0B, 100.00%)
@ -962,27 +962,27 @@ P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to
P00 WARN: resumable backup [BACKUP-INCR-2] of same type exists -- remove invalid files and resume
P00 DETAIL: remove file '[TEST_PATH]/db-primary/repo/backup/db/[BACKUP-INCR-2]/pg_data/changesize.txt' from resumed backup (mismatched size)
P00 DETAIL: remove file '[TEST_PATH]/db-primary/repo/backup/db/[BACKUP-INCR-2]/pg_data/zerosize.txt' from resumed backup (zero size)
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33001 (64KB, 33.32%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.98%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.64%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.30%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.63%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33001 (64KB, 33.31%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/44000_init (32KB, 49.97%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.63%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.29%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.62%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.79%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.96%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.97%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.95%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.96%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P00 WARN: resumed backup file pg_data/badchecksum.txt does not have expected checksum f927212cd08d11a42a666b2f04235398e9ceeb51. The file will be recopied and backup will continue but this may be an issue unless the resumed backup path in the repository is known to be corrupted.
NOTE: this does not indicate a problem with the PostgreSQL page checksums.
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changesize.txt (9B, 99.98%) checksum 3905d5be2ec8d67f41435dab5e0dcda3ae47455d
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changesize.txt (9B, 99.97%) checksum 3905d5be2ec8d67f41435dab5e0dcda3ae47455d
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/changetime.txt (4B, 99.99%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/zerosize.txt (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt (7B, 100.00%) checksum d85de07d6421d90aa9191c11c889bfde43680f0f
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt (7B, 99.99%) checksum d85de07d6421d90aa9191c11c889bfde43680f0f
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt: file size 7 is not divisible by page size 8192
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt: file size 7 is not divisible by page size 8192
@ -1187,19 +1187,19 @@ P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/327
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000.32767 (32KB, 66.64%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/33000 (32KB, 83.30%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/17000 (16KB, 91.63%) checksum e0101dd8ffb910c9c202ca35b5f828bcb9697bed
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.80%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 95.79%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/1/12000 (8KB, 99.96%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/postgresql.conf (21B, 99.97%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/badchecksum.txt (11B, 99.98%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/changetime.txt (4B, 99.99%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/zerosize.txt (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt (7B, 100.00%) checksum d85de07d6421d90aa9191c11c889bfde43680f0f
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt (7B, 99.99%) checksum d85de07d6421d90aa9191c11c889bfde43680f0f
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base/pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt: file size 7 is not divisible by page size 8192
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt: file size 7 is not divisible by page size 8192
@ -1751,25 +1751,25 @@ P00 WARN: option 'repo1-retention-full' is not set for 'repo1-retention-full-t
P00 INFO: last backup label = [BACKUP-INCR-3], version = [VERSION-1]
P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-INCR-3]
P00 WARN: file 'base/16384/17000' has same timestamp as prior but different size, enabling delta checksum
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.35%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.52%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.34%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.51%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000.32767 (32KB, 72.69%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000 (32KB, 90.86%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.41%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.40%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/12000 (8KB, 99.95%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/postgresql.conf (21B, 99.96%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.96%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/16384/17000 (8B, 99.97%) checksum 9a53d532e27785e681766c98516a5e93f096a501
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/base/16384/17000: file size 8 is not divisible by page size 8192
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.97%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/base2.txt (5B, 99.98%) checksum 09b5e31766be1dba1ec27de82f975c1b6eea2a92
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.99%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2b.txt (8B, 100.00%) checksum e324463005236d83e6e54795dbddd20a74533bf3
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2b.txt (8B, 99.99%) checksum e324463005236d83e6e54795dbddd20a74533bf3
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 DETAIL: reference pg_data/PG_VERSION to [BACKUP-FULL-2]
P00 DETAIL: reference pg_data/badchecksum.txt to [BACKUP-DIFF-1]
@ -1970,26 +1970,26 @@ 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 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1]
P00 WARN: diff backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2]
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.35%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.52%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.34%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.51%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000.32767 (32KB, 72.69%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000 (32KB, 90.86%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.41%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.40%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/12000 (8KB, 99.95%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/postgresql.conf (21B, 99.96%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.96%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/16384/17000 (8B, 99.97%) checksum 9a53d532e27785e681766c98516a5e93f096a501
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/base/16384/17000: file size 8 is not divisible by page size 8192
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.97%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/base2.txt (5B, 99.98%) checksum 09b5e31766be1dba1ec27de82f975c1b6eea2a92
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.99%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zerosize.txt (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2b.txt (8B, 100.00%) checksum e324463005236d83e6e54795dbddd20a74533bf3
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2b.txt (8B, 99.99%) checksum e324463005236d83e6e54795dbddd20a74533bf3
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2b.txt: file size 8 is not divisible by page size 8192
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt: file size 7 is not divisible by page size 8192
@ -2188,23 +2188,23 @@ P00 WARN: option 'repo1-retention-full' is not set for 'repo1-retention-full-t
P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1]
P00 WARN: diff backup cannot alter compress-type option to 'zst', reset to value in [BACKUP-FULL-2]
P00 WARN: diff backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2]
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.35%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.34%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.52%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000.32767 (32KB, 72.70%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000 (32KB, 90.87%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000.32767 (32KB, 72.69%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/33000 (32KB, 90.86%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.41%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/12000 (8KB, 99.96%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/postgresql.conf (21B, 99.97%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/12000 (8KB, 99.95%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/postgresql.conf (21B, 99.96%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.97%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zerosize.txt (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt (12B, 100.00%) checksum dfcb8679956b734706cf87259d50c88f83e80e66
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: match file from prior backup [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zerosize.txt (0B, 99.98%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt (12B, 99.99%) checksum dfcb8679956b734706cf87259d50c88f83e80e66
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt: file size 12 is not divisible by page size 8192
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 WARN: page misalignment in file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt: file size 7 is not divisible by page size 8192
@ -2400,26 +2400,26 @@ full backup - update file (db-primary host)
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=zst --config=[TEST_PATH]/db-primary/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --no-online --pg1-path=[TEST_PATH]/db-primary/db/base-2 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-primary/repo --stanza=db --start-fast --type=full
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.
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.35%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.52%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/33001 (64KB, 36.34%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/44000_init (32KB, 54.51%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/33000.32767 (32KB, 72.69%) checksum 1d11c42e6080e805a7b12bf9f83f4def548d92ac
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/33000 (32KB, 90.86%) checksum 1d73a0052828531770e7c155aeb22338e017e196
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.41%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/global/pg_control (8KB, 95.40%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/1/12000 (8KB, 99.95%) checksum 22c98d248ff548311eda88559e4a8405ed77c003
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/postgresql.conf (21B, 99.96%) checksum 6721d92c9fcdf4248acff1f9a1377127d9064807
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.97%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/badchecksum.txt (11B, 99.96%) checksum f927212cd08d11a42a666b2f04235398e9ceeb51
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/16384/17000 (9B, 99.97%) checksum 7579ada0808d7f98087a0a586d0df9de009cdc33
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.98%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changecontent.txt (7B, 99.97%) checksum a094d94583e209556d03c3c5da33131a065f1689
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_stat/global.stat (5B, 99.98%) checksum e350d5ce0153f3e22d5db21cf2a4eff00f3ee877
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/changetime.txt (4B, 99.98%) checksum 88087292ed82e26f3eb824d0bffc05ccf7a30f8d
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/32768/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.99%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zerosize.txt (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zero_from_start (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/special-!_.*'()&!@;:+,? (0B, 99.99%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt (12B, 100.00%) checksum dfcb8679956b734706cf87259d50c88f83e80e66
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/16384/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/base/1/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/PG_VERSION (3B, 99.98%) checksum 184473f470864e067ee3a22e64b47b0a1c356f29
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zerosize.txt (0B, 99.98%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/zero_from_start (0B, 99.98%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/special-!_.*'()&!@;:+,? (0B, 99.98%)
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt (12B, 99.99%) checksum dfcb8679956b734706cf87259d50c88f83e80e66
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2.txt (7B, 100.00%) checksum dc7f76e43c46101b47acc55ae4d593a9e6983578
P00 INFO: new backup label = [BACKUP-FULL-3]
P00 INFO: full backup size = 176KB, file total = 21

View File

@ -314,8 +314,8 @@ full backup - create first full backup (db-primary host)
> [CONTAINER-EXEC] db-primary [BACKREST-BIN] --config=[TEST_PATH]/db-primary/pgbackrest.conf --repo1-retention-full=2 --no-online --type=full --stanza=db backup
------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=zst --config=[TEST_PATH]/db-primary/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --no-online --pg1-path=[TEST_PATH]/db-primary/db/base --protocol-timeout=60 --repo1-gcs-bucket=gcsbucket --repo1-gcs-endpoint=gcs:4443 --repo1-gcs-key=<redacted> --repo1-gcs-key-type=token --repo1-path=/ --repo1-retention-full=2 --no-repo1-storage-verify-tls --repo1-type=gcs --stanza=db --start-fast --type=full
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.33%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.66%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.32%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.65%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000001 (16MB, 99.98%) checksum f92539dea1f9482e2946c1138eeeecdea29d7f19
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 100.00%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/archive_status/000000010000000100000002.ready (0B, 100.00%)
@ -472,8 +472,8 @@ diff backup - diff changed to full backup (db-primary host)
------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=zst --config=[TEST_PATH]/db-primary/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --no-online --pg1-path=[TEST_PATH]/db-primary/db/base --protocol-timeout=60 --repo1-gcs-bucket=gcsbucket --repo1-gcs-endpoint=gcs:4443 --repo1-gcs-key=<redacted> --repo1-gcs-key-type=token --repo1-path=/ --repo1-retention-full=2 --no-repo1-storage-verify-tls --repo1-type=gcs --stanza=db --start-fast --type=diff
P00 WARN: no prior backup exists, diff backup has been changed to full
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.33%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.66%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.32%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.65%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000001 (16MB, 99.98%) checksum 762dae884fdccb805c5f3283662ea0f8da55f228
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 100.00%) checksum 4969435f3b36bfaa0f5a486bef97f1988a135520
P01 DETAIL: backup file [TEST_PATH]/db-primary/db/base/pg_xlog/archive_status/000000010000000100000002.ready (0B, 100.00%)

View File

@ -316,8 +316,8 @@ full backup - create first full backup (backup host)
> [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --repo1-retention-full=2 --no-online --type=full --stanza=db backup
------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=lz4 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --no-online --pg1-host=db-primary --pg1-host-cert-file=[REPO_PATH]/test/certificate/pgbackrest-test-client.crt --pg1-host-cmd=[BACKREST-BIN] --pg1-host-config=[TEST_PATH]/db-primary/pgbackrest.conf --pg1-host-key-file=[REPO_PATH]/test/certificate/pgbackrest-test-client.key --pg1-host-type=tls --pg1-host-user=[USER-1] --pg1-path=[TEST_PATH]/db-primary/db/base --protocol-timeout=60 --repo1-azure-account=<redacted> --repo1-azure-container=azcontainer --repo1-azure-key=<redacted> --repo1-azure-uri-style=path --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-retention-full=2 --repo1-storage-host=azure --no-repo1-storage-verify-tls --repo1-type=azure --stanza=db --start-fast --type=full
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.33%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.66%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.32%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.65%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000001 (16MB, 99.98%) checksum f92539dea1f9482e2946c1138eeeecdea29d7f19
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 100.00%) checksum 4c77c900f7af0d9ab13fa9982051a42e0b637f6c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/archive_status/000000010000000100000002.ready (0B, 100.00%)
@ -525,8 +525,8 @@ diff backup - diff changed to full backup (backup host)
------------------------------------------------------------------------------------------------------------------------------------
P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=lz4 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --exec-id=[EXEC-ID] --job-retry=0 --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 --no-online --pg1-host=db-primary --pg1-host-cert-file=[REPO_PATH]/test/certificate/pgbackrest-test-client.crt --pg1-host-cmd=[BACKREST-BIN] --pg1-host-config=[TEST_PATH]/db-primary/pgbackrest.conf --pg1-host-key-file=[REPO_PATH]/test/certificate/pgbackrest-test-client.key --pg1-host-type=tls --pg1-host-user=[USER-1] --pg1-path=[TEST_PATH]/db-primary/db/base --protocol-timeout=60 --repo1-azure-account=<redacted> --repo1-azure-container=azcontainer --repo1-azure-key=<redacted> --repo1-azure-uri-style=path --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-retention-full=2 --repo1-storage-host=azure --no-repo1-storage-verify-tls --repo1-type=azure --stanza=db --start-fast --type=diff
P00 WARN: no prior backup exists, diff backup has been changed to full
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.33%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.66%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/RECOVERYXLOG (16MB, 33.32%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000002 (16MB, 66.65%) checksum 51a8525d254c01f5edddda30b7fe697c7e44705c
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/000000010000000100000001 (16MB, 99.98%) checksum 762dae884fdccb805c5f3283662ea0f8da55f228
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/global/pg_control (8KB, 100.00%) checksum 4969435f3b36bfaa0f5a486bef97f1988a135520
P01 DETAIL: backup file db-primary:[TEST_PATH]/db-primary/db/base/pg_xlog/archive_status/000000010000000100000002.ready (0B, 100.00%)

View File

@ -601,6 +601,28 @@ testBackupPqScript(unsigned int pgVersion, time_t backupTimeStart, TestBackupPqS
THROW_FMT(AssertError, "unsupported test version %u", pgVersion); // {uncoverable - no invalid versions in tests}
};
/***********************************************************************************************************************************
Wrap cmdBackup() with lock acquire and release
***********************************************************************************************************************************/
void testCmdBackup(void)
{
FUNCTION_HARNESS_VOID();
lockAcquire(TEST_PATH_STR, cfgOptionStr(cfgOptStanza), cfgOptionStr(cfgOptExecId), lockTypeBackup, 0, true);
TRY_BEGIN()
{
cmdBackup();
}
FINALLY()
{
lockRelease(true);
}
TRY_END();
FUNCTION_HARNESS_RETURN_VOID();
}
/***********************************************************************************************************************************
Test Run
***********************************************************************************************************************************/
@ -1851,8 +1873,11 @@ testRun(void)
ProtocolParallelJob *job = protocolParallelJobNew(VARSTRDEF("key"), protocolCommandNew(strIdFromZ("x")));
protocolParallelJobErrorSet(job, errorTypeCode(&AssertError), STRDEF("error message"));
unsigned int currentPercentComplete = 0;
TEST_ERROR(
backupJobResult((Manifest *)1, NULL, storageTest, strLstNew(), job, false, 0, NULL), AssertError, "error message");
backupJobResult((Manifest *)1, NULL, storageTest, strLstNew(), job, false, 0, NULL, &currentPercentComplete),
AssertError, "error message");
// -------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("report host/100% progress on noop result");
@ -1882,9 +1907,15 @@ testRun(void)
OBJ_NEW_END();
uint64_t sizeProgress = 0;
currentPercentComplete = 4567;
TEST_RESULT_VOID(
backupJobResult(manifest, STRDEF("host"), storageTest, strLstNew(), job, false, 0, &sizeProgress), "log noop result");
lockAcquire(TEST_PATH_STR, cfgOptionStr(cfgOptStanza), cfgOptionStr(cfgOptExecId), lockTypeBackup, 0, true),
"acquire backup lock");
TEST_RESULT_VOID(
backupJobResult(manifest, STRDEF("host"), storageTest, strLstNew(), job, false, 0, &sizeProgress,
&currentPercentComplete), "log noop result");
TEST_RESULT_VOID(lockRelease(true), "release backup lock");
TEST_RESULT_LOG("P00 DETAIL: match file from prior backup host:" TEST_PATH "/test (0B, 100.00%)");
}
@ -1929,7 +1960,7 @@ testRun(void)
HRN_STORAGE_PUT_Z(storagePgWrite(), PG_FILE_POSTMTRPID, "PID");
TEST_ERROR(
cmdBackup(), PgRunningError,
testCmdBackup(), PgRunningError,
"--no-online passed but " PG_FILE_POSTMTRPID " exists - looks like " PG_NAME " is running. Shut down " PG_NAME " and"
" try again, or use --force.");
@ -1950,13 +1981,13 @@ testRun(void)
HRN_STORAGE_PUT_Z(storagePgWrite(), "postgresql.conf", "CONFIGSTUFF");
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG_FMT(
"P00 WARN: no prior backup exists, incr backup has been changed to full\n"
"P00 WARN: --no-online passed and " PG_FILE_POSTMTRPID " exists but --force was passed so backup will continue though"
" it looks like " PG_NAME " is running and the backup will probably not be consistent\n"
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (8KB, 99.87%%) checksum %s\n"
"P01 DETAIL: backup file " TEST_PATH "/pg1/global/pg_control (8KB, 99.86%%) checksum %s\n"
"P01 DETAIL: backup file " TEST_PATH "/pg1/postgresql.conf (11B, 100.00%%) checksum"
" e3db315c260e79211b7b52587123b7aa060f30ab\n"
"P00 INFO: new backup label = [FULL-1]\n"
@ -1981,7 +2012,7 @@ testRun(void)
hrnCfgArgRawStrId(argList, cfgOptType, backupTypeDiff);
HRN_CFG_LOAD(cfgCmdBackup, argList);
TEST_ERROR(cmdBackup(), FileMissingError, "no files have changed since the last backup - this seems unlikely");
TEST_ERROR(testCmdBackup(), FileMissingError, "no files have changed since the last backup - this seems unlikely");
TEST_RESULT_LOG(
"P00 INFO: last backup label = [FULL-1], version = " PROJECT_VERSION "\n"
@ -2003,7 +2034,7 @@ testRun(void)
HRN_STORAGE_PUT_Z(storagePgWrite(), PG_FILE_PGVERSION, "VER");
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: last backup label = [FULL-1], version = " PROJECT_VERSION "\n"
@ -2031,7 +2062,7 @@ testRun(void)
sleepMSec(MSEC_PER_SEC - (timeMSec() % MSEC_PER_SEC));
HRN_STORAGE_PUT_Z(storagePgWrite(), PG_FILE_PGVERSION, "VR2");
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: last backup label = [FULL-1], version = " PROJECT_VERSION "\n"
@ -2065,7 +2096,8 @@ testRun(void)
hrnCfgArgRawStrId(argList, cfgOptType, backupTypeDiff);
HRN_CFG_LOAD(cfgCmdBackup, argList);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG("P00 WARN: no prior backup exists, diff backup has been changed to full");
// -------------------------------------------------------------------------------------------------------------------------
@ -2079,7 +2111,8 @@ testRun(void)
hrnCfgArgKeyRawZ(argList, cfgOptRepoRetentionFull, 1, "1");
HRN_CFG_LOAD(cfgCmdBackup, argList);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: repo option not specified, defaulting to repo1\n"
"P00 INFO: last backup label = [FULL-1], version = " PROJECT_VERSION "\n"
@ -2101,7 +2134,8 @@ testRun(void)
unsigned int backupCount = strLstSize(storageListP(storageRepoIdx(1), strNewFmt(STORAGE_PATH_BACKUP "/test1")));
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: last backup label = [FULL-2], version = " PROJECT_VERSION "\n"
"P01 DETAIL: backup file " TEST_PATH "/pg1/PG_VERSION (3B, 100.00%) checksum c8663c2525f44b6d9c687fbceb4aafc63ed8b451\n"
@ -2210,7 +2244,8 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_95, backupTimeStart, .noArchiveCheck = true, .noWal = true);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: execute exclusive pg_start_backup(): backup begins after the next regular checkpoint completes\n"
@ -2349,7 +2384,7 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_95, backupTimeStart);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
// Enable storage features
((Storage *)storageRepoWrite())->pub.interface.feature |= 1 << storageFeaturePath;
@ -2514,7 +2549,7 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_95, backupTimeStart);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
// Check log
TEST_RESULT_LOG(
@ -2653,7 +2688,7 @@ testRun(void)
testBackupPqScriptP(
PG_VERSION_96, backupTimeStart, .noPriorWal = true, .backupStandby = true, .walCompressType = compressTypeGz);
TEST_ERROR(
cmdBackup(), ArchiveTimeoutError,
testCmdBackup(), ArchiveTimeoutError,
"WAL segment 0000000105DA69BF000000FF was not archived before the 100ms timeout\n"
"HINT: check the archive_command to ensure that all options are correct (especially --stanza).\n"
"HINT: check the PostgreSQL server log for errors.\n"
@ -2663,7 +2698,7 @@ testRun(void)
testBackupPqScriptP(
PG_VERSION_96, backupTimeStart, .noWal = true, .backupStandby = true, .walCompressType = compressTypeGz);
TEST_ERROR(
cmdBackup(), ArchiveTimeoutError,
testCmdBackup(), ArchiveTimeoutError,
"WAL segment 0000000105DA69C000000000 was not archived before the 100ms timeout\n"
"HINT: check the archive_command to ensure that all options are correct (especially --stanza).\n"
"HINT: check the PostgreSQL server log for errors.\n"
@ -2674,7 +2709,7 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_96, backupTimeStart, .backupStandby = true, .walCompressType = compressTypeGz);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
// Set log level back to detail
harnessLogLevelSet(logLevelDetail);
@ -2839,7 +2874,7 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_11, backupTimeStart, .walCompressType = compressTypeGz, .walTotal = 3);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
// Reset storage features
((Storage *)storageRepoWrite())->pub.interface.feature |= 1 << storageFeatureSymLink;
@ -2970,7 +3005,7 @@ testRun(void)
// Run backup
TEST_ERROR(
cmdBackup(), FileMissingError,
testCmdBackup(), FileMissingError,
"pg_control must be present in all online backups\n"
"HINT: is something wrong with the clock or filesystem timestamps?");
@ -3008,7 +3043,7 @@ testRun(void)
// Run backup. Make sure that the timeline selected converts to hexdecimal that can't be interpreted as decimal.
testBackupPqScriptP(PG_VERSION_11, backupTimeStart, .timeline = 0x2C, .walTotal = 2);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: last backup label = 20191027-181320F, version = " PROJECT_VERSION "\n"
@ -3135,7 +3170,7 @@ testRun(void)
// Run backup
testBackupPqScriptP(PG_VERSION_11, backupTimeStart, .walCompressType = compressTypeGz, .walTotal = 2);
TEST_RESULT_VOID(cmdBackup(), "backup");
TEST_RESULT_VOID(testCmdBackup(), "backup");
TEST_RESULT_LOG(
"P00 INFO: execute non-exclusive pg_start_backup(): backup begins after the next regular checkpoint completes\n"

View File

@ -283,7 +283,9 @@ testRun(void)
TEST_TITLE("lock file with another process lock, processId is invalid");
HRN_STORAGE_REMOVE(hrnStorage, "lock/db" STOP_FILE_EXT, .errorOnMissing = true, .comment = "remove stanza stop file");
HRN_STORAGE_PUT_Z(hrnStorage, "lock/db-backup" LOCK_FILE_EXT, "-32768", .comment = "create lock file with invalid PID");
HRN_STORAGE_PUT_Z(
hrnStorage, "lock/db-backup" LOCK_FILE_EXT, "{\"execId\":\"test-1\",\"pid\":-32768}",
.comment = "create lock file with invalid PID");
HRN_FORK_BEGIN()
{

View File

@ -358,7 +358,7 @@ testRun(void)
"text - multi-repo, single stanza, one wal segment");
//--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("coverage for stanzaStatus branches");
TEST_TITLE("coverage for stanzaStatus branches && percent complete null");
// Db1 and Db3 (from above) have same system-id and db-version so consider them the same for WAL reporting
HRN_STORAGE_PUT_EMPTY(
@ -424,6 +424,7 @@ testRun(void)
TEST_RESULT_INT_NE(
lockAcquire(cfgOptionStr(cfgOptLockPath), STRDEF("stanza1"), STRDEF("777-afafafaf"), lockTypeBackup, 0, true),
-1, "create backup/expire lock");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup), "write lock data");
// Notify parent that lock has been acquired
HRN_FORK_CHILD_NOTIFY_PUT();
@ -617,7 +618,7 @@ testRun(void)
// backup.info/archive.info files exist, backups exist, archives exist, multi-repo (mixed) with one stanza existing on both
// repos and the db history is different between the repos
//--------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("mixed multi-repo");
TEST_TITLE("mixed multi-repo, percent complete non-null");
HRN_INFO_PUT(
storageTest, TEST_PATH "/repo/" STORAGE_PATH_ARCHIVE "/stanza1/" INFO_ARCHIVE_FILE,
@ -1015,6 +1016,7 @@ testRun(void)
TEST_RESULT_INT_NE(
lockAcquire(cfgOptionStr(cfgOptLockPath), STRDEF("stanza2"), STRDEF("999-ffffffff"), lockTypeBackup, 0, true),
-1, "create backup/expire lock");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup, .percentComplete = VARUINT(4545)), "write lock data");
// Notify parent that lock has been acquired
HRN_FORK_CHILD_NOTIFY_PUT();
@ -1447,6 +1449,7 @@ testRun(void)
TEST_RESULT_INT_NE(
lockAcquire(cfgOptionStr(cfgOptLockPath), STRDEF("stanza2"), STRDEF("999-ffffffff"), lockTypeBackup, 0, true),
-1, "create backup/expire lock");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup, .percentComplete = VARUINT(5555)), "write lock data");
// Notify parent that lock has been acquired
HRN_FORK_CHILD_NOTIFY_PUT();
@ -1519,7 +1522,7 @@ testRun(void)
" backup reference list: 20201116-155000F\n"
"\n"
"stanza: stanza2\n"
" status: mixed (backup/expire running)\n"
" status: mixed (backup/expire running - 55.55% complete)\n"
" repo1: error (no valid backups)\n"
" repo2: error (missing stanza path)\n"
" cipher: mixed\n"

View File

@ -32,7 +32,7 @@ testRun(void)
lockLocal.file[lockTypeArchive].fd = lockFdTest;
lockLocal.file[lockTypeArchive].name = strDup(archiveLock);
TEST_RESULT_VOID(lockWriteData(lockTypeArchive), "write lock data");
TEST_RESULT_VOID(lockWriteDataP(lockTypeArchive), "write lock data");
lockLocal.execId = STRDEF("2-test");
@ -202,8 +202,8 @@ testRun(void)
strZ(strNewFmt(
"unable to acquire lock on file '%s': Resource temporarily unavailable\n"
"HINT: is another pgBackRest process running?", strZ(backupLockFile))));
TEST_RESULT_VOID(lockReleaseFile(lockFdTest, archiveLockFile), "release lock");
TEST_RESULT_VOID(lockReleaseFile(lockFdTest, backupLockFile), "release lock");
TEST_RESULT_VOID(lockReleaseFile(lockFdTest, archiveLockFile), "release archive lock");
TEST_RESULT_VOID(lockReleaseFile(lockFdTest, backupLockFile), "release backup lock");
// -------------------------------------------------------------------------------------------------------------------------
lockLocal.execId = STRDEF("1-test");
@ -211,6 +211,37 @@ testRun(void)
TEST_RESULT_BOOL(lockAcquire(TEST_PATH_STR, stanza, STRDEF("1-test"), lockTypeAll, 0, true), true, "all lock");
TEST_RESULT_BOOL(storageExistsP(storageTest, archiveLockFile), true, "archive lock file was created");
TEST_RESULT_BOOL(storageExistsP(storageTest, backupLockFile), true, "backup lock file was created");
// Seek to start of file before read
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
TEST_RESULT_STR(
lockReadFileData(backupLockFile, lockLocal.file[lockTypeBackup].fd).execId, STRDEF("1-test"), "verify execId");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup), "write lock data");
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
TEST_RESULT_PTR(
lockReadFileData(backupLockFile, lockLocal.file[lockTypeBackup].fd).percentComplete, NULL, "verify percentComplete");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup, .percentComplete = VARUINT(5555)), "write lock data");
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
TEST_RESULT_UINT(
varUInt(lockReadFileData(backupLockFile, lockLocal.file[lockTypeBackup].fd).percentComplete), 5555,
"verify percentComplete");
TEST_RESULT_VOID(lockWriteDataP(lockTypeBackup, .percentComplete = VARUINT(8888)), "write lock data");
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
TEST_RESULT_UINT(
varUInt(lockReadFileData(backupLockFile, lockLocal.file[lockTypeBackup].fd).percentComplete), 8888,
"verify percentComplete");
TEST_ERROR(
lockAcquire(TEST_PATH_STR, stanza, STRDEF("1-test"), lockTypeAll, 0, false), AssertError,
"assertion 'failOnNoLock || lockType != lockTypeAll' failed");
@ -250,6 +281,38 @@ testRun(void)
TEST_RESULT_UINT(lockReadFileP(STRDEF(TEST_PATH "/unlocked.lock")).status, lockReadStatusUnlocked, "lock read");
TEST_STORAGE_LIST(storageTest, NULL, "unlocked.lock\n", .remove = true);
// -------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("execId && pid valid file");
const String *stanza = STRDEF("1-test");
lockLocal.execId = STRDEF("1-test");
TEST_RESULT_BOOL(lockAcquire(TEST_PATH_STR, stanza, STRDEF("1-test"), lockTypeBackup, 0, true), true, "backup lock");
TEST_RESULT_BOOL(storageExistsP(storageTest, lockLocal.file[lockTypeBackup].name), true, "backup lock file was created");
// Overwrite backup lock file with execId of 1-test and pid of 12345
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
ftruncate(lockLocal.file[lockTypeBackup].fd, 0);
IoWrite *const write = ioFdWriteNewOpen(lockLocal.file[lockTypeBackup].name, lockLocal.file[lockTypeBackup].fd, 0);
ioCopyP(ioBufferReadNewOpen(BUFSTRDEF("{\"execId\":\"1-test\",\"pid\":12345}")), write);
ioWriteClose(write);
// Seek to start of file before read
THROW_ON_SYS_ERROR_FMT(
lseek(lockLocal.file[lockTypeBackup].fd, 0, SEEK_SET) == -1, FileOpenError, STORAGE_ERROR_READ_SEEK, (uint64_t)0,
strZ(lockLocal.file[lockTypeBackup].name));
LockReadResult result = {0};
TEST_ASSIGN(result, lockReadFileP(lockLocal.file[lockTypeBackup].name), "lock read");
TEST_RESULT_STR(result.data.execId, STRDEF("1-test"), "lock read execId 1-test");
TEST_RESULT_UINT((uint64_t)result.data.processId, 12345, "lock read pid 12345");
TEST_RESULT_VOID(lockRelease(true), "release backup lock");
// -------------------------------------------------------------------------------------------------------------------------
TEST_TITLE("invalid locked file");