aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2021-02-23 10:14:38 +0100
committerPeter Eisentraut <peter@eisentraut.org>2021-02-23 10:27:02 +0100
commit6f6f284c7ee44264eb3e128e2bf54d9276711d11 (patch)
treec861d32584f751b28a065b98c03e1dd1370daa10 /src
parentade89ba5f408e6034db7cc8a2c9b7858f5a214c4 (diff)
downloadpostgresql-6f6f284c7ee44264eb3e128e2bf54d9276711d11.tar.gz
postgresql-6f6f284c7ee44264eb3e128e2bf54d9276711d11.zip
Simplify printing of LSNs
Add a macro LSN_FORMAT_ARGS for use in printf-style printing of LSNs. Convert all applicable code to use it. Reviewed-by: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://www.postgresql.org/message-id/flat/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/rewriteheap.c6
-rw-r--r--src/backend/access/rmgrdesc/replorigindesc.c3
-rw-r--r--src/backend/access/rmgrdesc/xactdesc.c3
-rw-r--r--src/backend/access/rmgrdesc/xlogdesc.c5
-rw-r--r--src/backend/access/transam/timeline.c2
-rw-r--r--src/backend/access/transam/twophase.c6
-rw-r--r--src/backend/access/transam/xlog.c110
-rw-r--r--src/backend/access/transam/xlogreader.c58
-rw-r--r--src/backend/access/transam/xlogutils.c3
-rw-r--r--src/backend/replication/backup_manifest.c4
-rw-r--r--src/backend/replication/basebackup.c2
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c4
-rw-r--r--src/backend/replication/logical/logical.c34
-rw-r--r--src/backend/replication/logical/origin.c3
-rw-r--r--src/backend/replication/logical/reorderbuffer.c3
-rw-r--r--src/backend/replication/logical/snapbuild.c20
-rw-r--r--src/backend/replication/logical/tablesync.c4
-rw-r--r--src/backend/replication/logical/worker.c7
-rw-r--r--src/backend/replication/slot.c3
-rw-r--r--src/backend/replication/slotfuncs.c3
-rw-r--r--src/backend/replication/syncrep.c8
-rw-r--r--src/backend/replication/walreceiver.c20
-rw-r--r--src/backend/replication/walsender.c32
-rw-r--r--src/backend/storage/ipc/standby.c4
-rw-r--r--src/backend/utils/adt/pg_lsn.c8
-rw-r--r--src/bin/pg_basebackup/pg_receivewal.c8
-rw-r--r--src/bin/pg_basebackup/pg_recvlogical.c13
-rw-r--r--src/bin/pg_basebackup/receivelog.c6
-rw-r--r--src/bin/pg_controldata/pg_controldata.c18
-rw-r--r--src/bin/pg_rewind/parsexlog.c14
-rw-r--r--src/bin/pg_rewind/pg_rewind.c13
-rw-r--r--src/bin/pg_verifybackup/pg_verifybackup.c6
-rw-r--r--src/bin/pg_waldump/pg_waldump.c20
-rw-r--r--src/include/access/xlogdefs.h7
34 files changed, 192 insertions, 268 deletions
diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index fcaad9ba0b7..8241ba8f312 100644
--- a/src/backend/access/heap/rewriteheap.c
+++ b/src/backend/access/heap/rewriteheap.c
@@ -997,8 +997,7 @@ logical_rewrite_log_mapping(RewriteState state, TransactionId xid,
snprintf(path, MAXPGPATH,
"pg_logical/mappings/" LOGICAL_REWRITE_FORMAT,
dboid, relid,
- (uint32) (state->rs_begin_lsn >> 32),
- (uint32) state->rs_begin_lsn,
+ LSN_FORMAT_ARGS(state->rs_begin_lsn),
xid, GetCurrentTransactionId());
dlist_init(&src->mappings);
@@ -1120,8 +1119,7 @@ heap_xlog_logical_rewrite(XLogReaderState *r)
snprintf(path, MAXPGPATH,
"pg_logical/mappings/" LOGICAL_REWRITE_FORMAT,
xlrec->mapped_db, xlrec->mapped_rel,
- (uint32) (xlrec->start_lsn >> 32),
- (uint32) xlrec->start_lsn,
+ LSN_FORMAT_ARGS(xlrec->start_lsn),
xlrec->mapped_xid, XLogRecGetXid(r));
fd = OpenTransientFile(path,
diff --git a/src/backend/access/rmgrdesc/replorigindesc.c b/src/backend/access/rmgrdesc/replorigindesc.c
index 2e29ecc6d57..1f314c4771a 100644
--- a/src/backend/access/rmgrdesc/replorigindesc.c
+++ b/src/backend/access/rmgrdesc/replorigindesc.c
@@ -31,8 +31,7 @@ replorigin_desc(StringInfo buf, XLogReaderState *record)
appendStringInfo(buf, "set %u; lsn %X/%X; force: %d",
xlrec->node_id,
- (uint32) (xlrec->remote_lsn >> 32),
- (uint32) xlrec->remote_lsn,
+ LSN_FORMAT_ARGS(xlrec->remote_lsn),
xlrec->force);
break;
}
diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c
index c6fb1ec5727..4b0d10f0735 100644
--- a/src/backend/access/rmgrdesc/xactdesc.c
+++ b/src/backend/access/rmgrdesc/xactdesc.c
@@ -306,8 +306,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId
{
appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
origin_id,
- (uint32) (parsed.origin_lsn >> 32),
- (uint32) parsed.origin_lsn,
+ LSN_FORMAT_ARGS(parsed.origin_lsn),
timestamptz_to_str(parsed.origin_timestamp));
}
}
diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c
index 92cc7ea0735..e6090a9dadb 100644
--- a/src/backend/access/rmgrdesc/xlogdesc.c
+++ b/src/backend/access/rmgrdesc/xlogdesc.c
@@ -49,7 +49,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
"oldest xid %u in DB %u; oldest multi %u in DB %u; "
"oldest/newest commit timestamp xid: %u/%u; "
"oldest running xid %u; %s",
- (uint32) (checkpoint->redo >> 32), (uint32) checkpoint->redo,
+ LSN_FORMAT_ARGS(checkpoint->redo),
checkpoint->ThisTimeLineID,
checkpoint->PrevTimeLineID,
checkpoint->fullPageWrites ? "true" : "false",
@@ -89,8 +89,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
XLogRecPtr startpoint;
memcpy(&startpoint, rec, sizeof(XLogRecPtr));
- appendStringInfo(buf, "%X/%X",
- (uint32) (startpoint >> 32), (uint32) startpoint);
+ appendStringInfo(buf, "%X/%X", LSN_FORMAT_ARGS(startpoint));
}
else if (info == XLOG_PARAMETER_CHANGE)
{
diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c
index 690471ac4ed..8d0903c1756 100644
--- a/src/backend/access/transam/timeline.c
+++ b/src/backend/access/transam/timeline.c
@@ -402,7 +402,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
"%s%u\t%X/%X\t%s\n",
(srcfd < 0) ? "" : "\n",
parentTLI,
- (uint32) (switchpoint >> 32), (uint32) (switchpoint),
+ LSN_FORMAT_ARGS(switchpoint),
reason);
nbytes = strlen(buffer);
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index c9b13062b0d..80d2d20d6cc 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1342,16 +1342,14 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not read two-phase state from WAL at %X/%X",
- (uint32) (lsn >> 32),
- (uint32) lsn)));
+ LSN_FORMAT_ARGS(lsn))));
if (XLogRecGetRmid(xlogreader) != RM_XACT_ID ||
(XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("expected two-phase state data is not present in WAL at %X/%X",
- (uint32) (lsn >> 32),
- (uint32) lsn)));
+ LSN_FORMAT_ARGS(lsn))));
if (len != NULL)
*len = XLogRecGetDataLen(xlogreader);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index e0c37f73f3e..377afb87324 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -1219,8 +1219,7 @@ XLogInsertRecord(XLogRecData *rdata,
oldCxt = MemoryContextSwitchTo(walDebugCxt);
initStringInfo(&buf);
- appendStringInfo(&buf, "INSERT @ %X/%X: ",
- (uint32) (EndPos >> 32), (uint32) EndPos);
+ appendStringInfo(&buf, "INSERT @ %X/%X: ", LSN_FORMAT_ARGS(EndPos));
/*
* We have to piece together the WAL record data from the XLogRecData
@@ -1821,8 +1820,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto)
{
ereport(LOG,
(errmsg("request to flush past end of generated WAL; request %X/%X, current position %X/%X",
- (uint32) (upto >> 32), (uint32) upto,
- (uint32) (reservedUpto >> 32), (uint32) reservedUpto)));
+ LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto))));
upto = reservedUpto;
}
@@ -1973,7 +1971,7 @@ GetXLogBuffer(XLogRecPtr ptr)
if (expectedEndPtr != endptr)
elog(PANIC, "could not find WAL buffer for %X/%X",
- (uint32) (ptr >> 32), (uint32) ptr);
+ LSN_FORMAT_ARGS(ptr));
}
else
{
@@ -2290,7 +2288,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic)
if (XLOG_DEBUG && npages > 0)
{
elog(DEBUG1, "initialized %d pages, up to %X/%X",
- npages, (uint32) (NewPageEndPtr >> 32), (uint32) NewPageEndPtr);
+ npages, LSN_FORMAT_ARGS(NewPageEndPtr));
}
#endif
}
@@ -2471,9 +2469,8 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
if (LogwrtResult.Write >= EndPtr)
elog(PANIC, "xlog write request %X/%X is past end of log %X/%X",
- (uint32) (LogwrtResult.Write >> 32),
- (uint32) LogwrtResult.Write,
- (uint32) (EndPtr >> 32), (uint32) EndPtr);
+ LSN_FORMAT_ARGS(LogwrtResult.Write),
+ LSN_FORMAT_ARGS(EndPtr));
/* Advance LogwrtResult.Write to end of current buffer page */
LogwrtResult.Write = EndPtr;
@@ -2823,9 +2820,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
if (!force && newMinRecoveryPoint < lsn)
elog(WARNING,
"xlog min recovery request %X/%X is past current point %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn,
- (uint32) (newMinRecoveryPoint >> 32),
- (uint32) newMinRecoveryPoint);
+ LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(newMinRecoveryPoint));
/* update control file */
if (ControlFile->minRecoveryPoint < newMinRecoveryPoint)
@@ -2838,8 +2833,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
ereport(DEBUG2,
(errmsg_internal("updated min recovery point to %X/%X on timeline %u",
- (uint32) (minRecoveryPoint >> 32),
- (uint32) minRecoveryPoint,
+ LSN_FORMAT_ARGS(minRecoveryPoint),
newMinRecoveryPointTLI)));
}
}
@@ -2878,9 +2872,9 @@ XLogFlush(XLogRecPtr record)
#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
- (uint32) (record >> 32), (uint32) record,
- (uint32) (LogwrtResult.Write >> 32), (uint32) LogwrtResult.Write,
- (uint32) (LogwrtResult.Flush >> 32), (uint32) LogwrtResult.Flush);
+ LSN_FORMAT_ARGS(record),
+ LSN_FORMAT_ARGS(LogwrtResult.Write),
+ LSN_FORMAT_ARGS(LogwrtResult.Flush));
#endif
START_CRIT_SECTION();
@@ -3013,8 +3007,8 @@ XLogFlush(XLogRecPtr record)
if (LogwrtResult.Flush < record)
elog(ERROR,
"xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
- (uint32) (record >> 32), (uint32) record,
- (uint32) (LogwrtResult.Flush >> 32), (uint32) LogwrtResult.Flush);
+ LSN_FORMAT_ARGS(record),
+ LSN_FORMAT_ARGS(LogwrtResult.Flush));
}
/*
@@ -3129,10 +3123,10 @@ XLogBackgroundFlush(void)
#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X, current is write %X/%X; flush %X/%X",
- (uint32) (WriteRqst.Write >> 32), (uint32) WriteRqst.Write,
- (uint32) (WriteRqst.Flush >> 32), (uint32) WriteRqst.Flush,
- (uint32) (LogwrtResult.Write >> 32), (uint32) LogwrtResult.Write,
- (uint32) (LogwrtResult.Flush >> 32), (uint32) LogwrtResult.Flush);
+ LSN_FORMAT_ARGS(WriteRqst.Write),
+ LSN_FORMAT_ARGS(WriteRqst.Flush),
+ LSN_FORMAT_ARGS(LogwrtResult.Write),
+ LSN_FORMAT_ARGS(LogwrtResult.Flush));
#endif
START_CRIT_SECTION();
@@ -4560,7 +4554,7 @@ rescanLatestTimeLine(void)
(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X",
newtarget,
ThisTimeLineID,
- (uint32) (EndRecPtr >> 32), (uint32) EndRecPtr)));
+ LSN_FORMAT_ARGS(EndRecPtr))));
return false;
}
@@ -5754,8 +5748,7 @@ recoveryStopsBefore(XLogReaderState *record)
recoveryStopName[0] = '\0';
ereport(LOG,
(errmsg("recovery stopping before WAL location (LSN) \"%X/%X\"",
- (uint32) (recoveryStopLSN >> 32),
- (uint32) recoveryStopLSN)));
+ LSN_FORMAT_ARGS(recoveryStopLSN))));
return true;
}
@@ -5918,8 +5911,7 @@ recoveryStopsAfter(XLogReaderState *record)
recoveryStopName[0] = '\0';
ereport(LOG,
(errmsg("recovery stopping after WAL location (LSN) \"%X/%X\"",
- (uint32) (recoveryStopLSN >> 32),
- (uint32) recoveryStopLSN)));
+ LSN_FORMAT_ARGS(recoveryStopLSN))));
return true;
}
@@ -6531,8 +6523,7 @@ StartupXLOG(void)
else if (recoveryTarget == RECOVERY_TARGET_LSN)
ereport(LOG,
(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%X\"",
- (uint32) (recoveryTargetLSN >> 32),
- (uint32) recoveryTargetLSN)));
+ LSN_FORMAT_ARGS(recoveryTargetLSN))));
else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
ereport(LOG,
(errmsg("starting point-in-time recovery to earliest consistent point")));
@@ -6598,7 +6589,7 @@ StartupXLOG(void)
wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN);
ereport(DEBUG1,
(errmsg_internal("checkpoint record is at %X/%X",
- (uint32) (checkPointLoc >> 32), (uint32) checkPointLoc)));
+ LSN_FORMAT_ARGS(checkPointLoc))));
InRecovery = true; /* force recovery even if SHUTDOWNED */
/*
@@ -6731,7 +6722,7 @@ StartupXLOG(void)
{
ereport(DEBUG1,
(errmsg_internal("checkpoint record is at %X/%X",
- (uint32) (checkPointLoc >> 32), (uint32) checkPointLoc)));
+ LSN_FORMAT_ARGS(checkPointLoc))));
}
else
{
@@ -6783,11 +6774,9 @@ StartupXLOG(void)
(errmsg("requested timeline %u is not a child of this server's history",
recoveryTargetTLI),
errdetail("Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.",
- (uint32) (ControlFile->checkPoint >> 32),
- (uint32) ControlFile->checkPoint,
+ LSN_FORMAT_ARGS(ControlFile->checkPoint),
ControlFile->checkPointCopy.ThisTimeLineID,
- (uint32) (switchpoint >> 32),
- (uint32) switchpoint)));
+ LSN_FORMAT_ARGS(switchpoint))));
}
/*
@@ -6800,15 +6789,14 @@ StartupXLOG(void)
ereport(FATAL,
(errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u",
recoveryTargetTLI,
- (uint32) (ControlFile->minRecoveryPoint >> 32),
- (uint32) ControlFile->minRecoveryPoint,
+ LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint),
ControlFile->minRecoveryPointTLI)));
LastRec = RecPtr = checkPointLoc;
ereport(DEBUG1,
(errmsg_internal("redo record is at %X/%X; shutdown %s",
- (uint32) (checkPoint.redo >> 32), (uint32) checkPoint.redo,
+ LSN_FORMAT_ARGS(checkPoint.redo),
wasShutdown ? "true" : "false")));
ereport(DEBUG1,
(errmsg_internal("next transaction ID: " UINT64_FORMAT "; next OID: %u",
@@ -7254,7 +7242,7 @@ StartupXLOG(void)
ereport(LOG,
(errmsg("redo starts at %X/%X",
- (uint32) (ReadRecPtr >> 32), (uint32) ReadRecPtr)));
+ LSN_FORMAT_ARGS(ReadRecPtr))));
/*
* main redo apply loop
@@ -7272,8 +7260,8 @@ StartupXLOG(void)
initStringInfo(&buf);
appendStringInfo(&buf, "REDO @ %X/%X; LSN %X/%X: ",
- (uint32) (ReadRecPtr >> 32), (uint32) ReadRecPtr,
- (uint32) (EndRecPtr >> 32), (uint32) EndRecPtr);
+ LSN_FORMAT_ARGS(ReadRecPtr),
+ LSN_FORMAT_ARGS(EndRecPtr));
xlog_outrec(&buf, xlogreader);
appendStringInfoString(&buf, " - ");
xlog_outdesc(&buf, xlogreader);
@@ -7516,7 +7504,7 @@ StartupXLOG(void)
ereport(LOG,
(errmsg("redo done at %X/%X system usage: %s",
- (uint32) (ReadRecPtr >> 32), (uint32) ReadRecPtr,
+ LSN_FORMAT_ARGS(ReadRecPtr),
pg_rusage_show(&ru0))));
xtime = GetLatestXTime();
if (xtime)
@@ -7684,8 +7672,7 @@ StartupXLOG(void)
snprintf(reason, sizeof(reason),
"%s LSN %X/%X\n",
recoveryStopAfter ? "after" : "before",
- (uint32) (recoveryStopLSN >> 32),
- (uint32) recoveryStopLSN);
+ LSN_FORMAT_ARGS(recoveryStopLSN));
else if (recoveryTarget == RECOVERY_TARGET_NAME)
snprintf(reason, sizeof(reason),
"at restore point \"%s\"",
@@ -8109,8 +8096,7 @@ CheckRecoveryConsistency(void)
reachedConsistency = true;
ereport(LOG,
(errmsg("consistent recovery state reached at %X/%X",
- (uint32) (lastReplayedEndRecPtr >> 32),
- (uint32) lastReplayedEndRecPtr)));
+ LSN_FORMAT_ARGS(lastReplayedEndRecPtr))));
}
/*
@@ -9344,8 +9330,7 @@ RecoveryRestartPoint(const CheckPoint *checkPoint)
elog(trace_recovery(DEBUG2),
"could not record restart point at %X/%X because there "
"are unresolved references to invalid pages",
- (uint32) (checkPoint->redo >> 32),
- (uint32) checkPoint->redo);
+ LSN_FORMAT_ARGS(checkPoint->redo));
return;
}
@@ -9422,8 +9407,7 @@ CreateRestartPoint(int flags)
{
ereport(DEBUG2,
(errmsg_internal("skipping restartpoint, already performed at %X/%X",
- (uint32) (lastCheckPoint.redo >> 32),
- (uint32) lastCheckPoint.redo)));
+ LSN_FORMAT_ARGS(lastCheckPoint.redo))));
UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
if (flags & CHECKPOINT_IS_SHUTDOWN)
@@ -9595,7 +9579,7 @@ CreateRestartPoint(int flags)
xtime = GetLatestXTime();
ereport((log_checkpoints ? LOG : DEBUG2),
(errmsg("recovery restart point at %X/%X",
- (uint32) (lastCheckPoint.redo >> 32), (uint32) lastCheckPoint.redo),
+ LSN_FORMAT_ARGS(lastCheckPoint.redo)),
xtime ? errdetail("Last completed transaction was at log time %s.",
timestamptz_to_str(xtime)) : 0));
@@ -9837,7 +9821,7 @@ XLogRestorePoint(const char *rpName)
ereport(LOG,
(errmsg("restore point \"%s\" created at %X/%X",
- rpName, (uint32) (RecPtr >> 32), (uint32) RecPtr)));
+ rpName, LSN_FORMAT_ARGS(RecPtr))));
return RecPtr;
}
@@ -10008,8 +9992,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI)
ereport(PANIC,
(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u",
newTLI,
- (uint32) (minRecoveryPoint >> 32),
- (uint32) minRecoveryPoint,
+ LSN_FORMAT_ARGS(minRecoveryPoint),
minRecoveryPointTLI)));
/* Looks good */
@@ -10365,8 +10348,7 @@ static void
xlog_outrec(StringInfo buf, XLogReaderState *record)
{
appendStringInfo(buf, "prev %X/%X; xid %u",
- (uint32) (XLogRecGetPrev(record) >> 32),
- (uint32) XLogRecGetPrev(record),
+ LSN_FORMAT_ARGS(XLogRecGetPrev(record)),
XLogRecGetXid(record));
appendStringInfo(buf, "; len %u",
@@ -10952,9 +10934,9 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p,
"%Y-%m-%d %H:%M:%S %Z",
pg_localtime(&stamp_time, log_timezone));
appendStringInfo(labelfile, "START WAL LOCATION: %X/%X (file %s)\n",
- (uint32) (startpoint >> 32), (uint32) startpoint, xlogfilename);
+ LSN_FORMAT_ARGS(startpoint), xlogfilename);
appendStringInfo(labelfile, "CHECKPOINT LOCATION: %X/%X\n",
- (uint32) (checkpointloc >> 32), (uint32) checkpointloc);
+ LSN_FORMAT_ARGS(checkpointloc));
appendStringInfo(labelfile, "BACKUP METHOD: %s\n",
exclusive ? "pg_start_backup" : "streamed");
appendStringInfo(labelfile, "BACKUP FROM: %s\n",
@@ -11440,9 +11422,9 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
errmsg("could not create file \"%s\": %m",
histfilepath)));
fprintf(fp, "START WAL LOCATION: %X/%X (file %s)\n",
- (uint32) (startpoint >> 32), (uint32) startpoint, startxlogfilename);
+ LSN_FORMAT_ARGS(startpoint), startxlogfilename);
fprintf(fp, "STOP WAL LOCATION: %X/%X (file %s)\n",
- (uint32) (stoppoint >> 32), (uint32) stoppoint, stopxlogfilename);
+ LSN_FORMAT_ARGS(stoppoint), stopxlogfilename);
/*
* Transfer remaining lines including label and start timeline to
@@ -11895,8 +11877,7 @@ rm_redo_error_callback(void *arg)
/* translator: %s is a WAL record description */
errcontext("WAL redo at %X/%X for %s",
- (uint32) (record->ReadRecPtr >> 32),
- (uint32) record->ReadRecPtr,
+ LSN_FORMAT_ARGS(record->ReadRecPtr),
buf.data);
pfree(buf.data);
@@ -12494,8 +12475,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
if (curFileTLI > 0 && tli < curFileTLI)
elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
- (uint32) (tliRecPtr >> 32),
- (uint32) tliRecPtr,
+ LSN_FORMAT_ARGS(tliRecPtr),
tli, curFileTLI);
}
curFileTLI = tli;
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index bb95e0e527f..42738eb940c 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -347,7 +347,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
else if (targetRecOff < pageHeaderSize)
{
report_invalid_record(state, "invalid record offset at %X/%X",
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(RecPtr));
goto err;
}
@@ -355,7 +355,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
targetRecOff == pageHeaderSize)
{
report_invalid_record(state, "contrecord is requested by %X/%X",
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(RecPtr));
goto err;
}
@@ -396,7 +396,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
{
report_invalid_record(state,
"invalid record length at %X/%X: wanted %u, got %u",
- (uint32) (RecPtr >> 32), (uint32) RecPtr,
+ LSN_FORMAT_ARGS(RecPtr),
(uint32) SizeOfXLogRecord, total_len);
goto err;
}
@@ -420,8 +420,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
{
/* We treat this as a "bogus data" condition */
report_invalid_record(state, "record length %u at %X/%X too long",
- total_len,
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ total_len, LSN_FORMAT_ARGS(RecPtr));
goto err;
}
@@ -452,7 +451,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
{
report_invalid_record(state,
"there is no contrecord flag at %X/%X",
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(RecPtr));
goto err;
}
@@ -467,7 +466,7 @@ XLogReadRecord(XLogReaderState *state, char **errormsg)
"invalid contrecord length %u (expected %lld) at %X/%X",
pageHeader->xlp_rem_len,
((long long) total_len) - gotlen,
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(RecPtr));
goto err;
}
@@ -694,7 +693,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
{
report_invalid_record(state,
"invalid record length at %X/%X: wanted %u, got %u",
- (uint32) (RecPtr >> 32), (uint32) RecPtr,
+ LSN_FORMAT_ARGS(RecPtr),
(uint32) SizeOfXLogRecord, record->xl_tot_len);
return false;
}
@@ -702,8 +701,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
{
report_invalid_record(state,
"invalid resource manager ID %u at %X/%X",
- record->xl_rmid, (uint32) (RecPtr >> 32),
- (uint32) RecPtr);
+ record->xl_rmid, LSN_FORMAT_ARGS(RecPtr));
return false;
}
if (randAccess)
@@ -716,9 +714,8 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
{
report_invalid_record(state,
"record with incorrect prev-link %X/%X at %X/%X",
- (uint32) (record->xl_prev >> 32),
- (uint32) record->xl_prev,
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(record->xl_prev),
+ LSN_FORMAT_ARGS(RecPtr));
return false;
}
}
@@ -733,9 +730,8 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
{
report_invalid_record(state,
"record with incorrect prev-link %X/%X at %X/%X",
- (uint32) (record->xl_prev >> 32),
- (uint32) record->xl_prev,
- (uint32) (RecPtr >> 32), (uint32) RecPtr);
+ LSN_FORMAT_ARGS(record->xl_prev),
+ LSN_FORMAT_ARGS(RecPtr));
return false;
}
}
@@ -770,7 +766,7 @@ ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr)
{
report_invalid_record(state,
"incorrect resource manager data checksum in record at %X/%X",
- (uint32) (recptr >> 32), (uint32) recptr);
+ LSN_FORMAT_ARGS(recptr));
return false;
}
@@ -881,7 +877,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
report_invalid_record(state,
"unexpected pageaddr %X/%X in log segment %s, offset %u",
- (uint32) (hdr->xlp_pageaddr >> 32), (uint32) hdr->xlp_pageaddr,
+ LSN_FORMAT_ARGS(hdr->xlp_pageaddr),
fname,
offset);
return false;
@@ -1252,8 +1248,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
report_invalid_record(state,
"out-of-order block_id %u at %X/%X",
block_id,
- (uint32) (state->ReadRecPtr >> 32),
- (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
state->max_block_id = block_id;
@@ -1274,7 +1269,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
{
report_invalid_record(state,
"BKPBLOCK_HAS_DATA set, but no data included at %X/%X",
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
if (!blk->has_data && blk->data_len != 0)
@@ -1282,7 +1277,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
report_invalid_record(state,
"BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X",
(unsigned int) blk->data_len,
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
datatotal += blk->data_len;
@@ -1320,7 +1315,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
(unsigned int) blk->hole_offset,
(unsigned int) blk->hole_length,
(unsigned int) blk->bimg_len,
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
@@ -1335,7 +1330,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
"BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X",
(unsigned int) blk->hole_offset,
(unsigned int) blk->hole_length,
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
@@ -1349,7 +1344,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
report_invalid_record(state,
"BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X",
(unsigned int) blk->bimg_len,
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
@@ -1364,7 +1359,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
report_invalid_record(state,
"neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X",
(unsigned int) blk->data_len,
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
}
@@ -1379,7 +1374,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
{
report_invalid_record(state,
"BKPBLOCK_SAME_REL set but no previous rel at %X/%X",
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
@@ -1391,9 +1386,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
{
report_invalid_record(state,
"invalid block_id %u at %X/%X",
- block_id,
- (uint32) (state->ReadRecPtr >> 32),
- (uint32) state->ReadRecPtr);
+ block_id, LSN_FORMAT_ARGS(state->ReadRecPtr));
goto err;
}
}
@@ -1480,7 +1473,7 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
shortdata_err:
report_invalid_record(state,
"record with invalid length at %X/%X",
- (uint32) (state->ReadRecPtr >> 32), (uint32) state->ReadRecPtr);
+ LSN_FORMAT_ARGS(state->ReadRecPtr));
err:
*errormsg = state->errormsg_buf;
@@ -1569,8 +1562,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
BLCKSZ - bkpb->hole_length, true) < 0)
{
report_invalid_record(record, "invalid compressed image at %X/%X, block %d",
- (uint32) (record->ReadRecPtr >> 32),
- (uint32) record->ReadRecPtr,
+ LSN_FORMAT_ARGS(record->ReadRecPtr),
block_id);
return false;
}
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index e7232532975..a7a473de4a6 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -776,8 +776,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage, uint32 wa
elog(DEBUG3, "switched to timeline %u valid until %X/%X",
state->currTLI,
- (uint32) (state->currTLIValidUntil >> 32),
- (uint32) (state->currTLIValidUntil));
+ LSN_FORMAT_ARGS(state->currTLIValidUntil));
}
}
diff --git a/src/backend/replication/backup_manifest.c b/src/backend/replication/backup_manifest.c
index 32bb0efb3da..88824440252 100644
--- a/src/backend/replication/backup_manifest.c
+++ b/src/backend/replication/backup_manifest.c
@@ -277,8 +277,8 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
"%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
first_wal_range ? "" : ",\n",
entry->tli,
- (uint32) (tl_beginptr >> 32), (uint32) tl_beginptr,
- (uint32) (endptr >> 32), (uint32) endptr);
+ LSN_FORMAT_ARGS(tl_beginptr),
+ LSN_FORMAT_ARGS(endptr));
if (starttli == entry->tli)
{
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
index 0f54635550b..240e902d281 100644
--- a/src/backend/replication/basebackup.c
+++ b/src/backend/replication/basebackup.c
@@ -1075,7 +1075,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli)
pq_sendint16(&buf, 2); /* number of columns */
len = snprintf(str, sizeof(str),
- "%X/%X", (uint32) (ptr >> 32), (uint32) ptr);
+ "%X/%X", LSN_FORMAT_ARGS(ptr));
pq_sendint32(&buf, len);
pq_sendbytes(&buf, str, len);
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 77146961408..5272eed9ab8 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -406,9 +406,7 @@ libpqrcv_startstreaming(WalReceiverConn *conn,
if (options->logical)
appendStringInfoString(&cmd, " LOGICAL");
- appendStringInfo(&cmd, " %X/%X",
- (uint32) (options->startpoint >> 32),
- (uint32) options->startpoint);
+ appendStringInfo(&cmd, " %X/%X", LSN_FORMAT_ARGS(options->startpoint));
/*
* Additional options are different depending on if we are doing logical
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index 0977aec711c..baeb45ff43c 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -514,9 +514,8 @@ CreateDecodingContext(XLogRecPtr start_lsn,
* replication.
*/
elog(DEBUG1, "cannot stream from %X/%X, minimum is %X/%X, forwarding",
- (uint32) (start_lsn >> 32), (uint32) start_lsn,
- (uint32) (slot->data.confirmed_flush >> 32),
- (uint32) slot->data.confirmed_flush);
+ LSN_FORMAT_ARGS(start_lsn),
+ LSN_FORMAT_ARGS(slot->data.confirmed_flush));
start_lsn = slot->data.confirmed_flush;
}
@@ -538,10 +537,8 @@ CreateDecodingContext(XLogRecPtr start_lsn,
(errmsg("starting logical decoding for slot \"%s\"",
NameStr(slot->data.name)),
errdetail("Streaming transactions committing after %X/%X, reading WAL from %X/%X.",
- (uint32) (slot->data.confirmed_flush >> 32),
- (uint32) slot->data.confirmed_flush,
- (uint32) (slot->data.restart_lsn >> 32),
- (uint32) slot->data.restart_lsn)));
+ LSN_FORMAT_ARGS(slot->data.confirmed_flush),
+ LSN_FORMAT_ARGS(slot->data.restart_lsn))));
return ctx;
}
@@ -567,8 +564,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
XLogBeginRead(ctx->reader, slot->data.restart_lsn);
elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%X",
- (uint32) (slot->data.restart_lsn >> 32),
- (uint32) slot->data.restart_lsn);
+ LSN_FORMAT_ARGS(slot->data.restart_lsn));
/* Wait for a consistent starting point */
for (;;)
@@ -688,8 +684,7 @@ output_plugin_error_callback(void *arg)
NameStr(state->ctx->slot->data.name),
NameStr(state->ctx->slot->data.plugin),
state->callback_name,
- (uint32) (state->report_location >> 32),
- (uint32) state->report_location);
+ LSN_FORMAT_ARGS(state->report_location));
else
errcontext("slot \"%s\", output plugin \"%s\", in the %s callback",
NameStr(state->ctx->slot->data.name),
@@ -1623,8 +1618,8 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
SpinLockRelease(&slot->mutex);
elog(DEBUG1, "got new restart lsn %X/%X at %X/%X",
- (uint32) (restart_lsn >> 32), (uint32) restart_lsn,
- (uint32) (current_lsn >> 32), (uint32) current_lsn);
+ LSN_FORMAT_ARGS(restart_lsn),
+ LSN_FORMAT_ARGS(current_lsn));
}
else
{
@@ -1638,14 +1633,11 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
SpinLockRelease(&slot->mutex);
elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after %X/%X, current candidate %X/%X, current after %X/%X, flushed up to %X/%X",
- (uint32) (restart_lsn >> 32), (uint32) restart_lsn,
- (uint32) (current_lsn >> 32), (uint32) current_lsn,
- (uint32) (candidate_restart_lsn >> 32),
- (uint32) candidate_restart_lsn,
- (uint32) (candidate_restart_valid >> 32),
- (uint32) candidate_restart_valid,
- (uint32) (confirmed_flush >> 32),
- (uint32) confirmed_flush);
+ LSN_FORMAT_ARGS(restart_lsn),
+ LSN_FORMAT_ARGS(current_lsn),
+ LSN_FORMAT_ARGS(candidate_restart_lsn),
+ LSN_FORMAT_ARGS(candidate_restart_valid),
+ LSN_FORMAT_ARGS(confirmed_flush));
}
/* candidates are already valid with the current flush position, apply */
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 685eaa6134e..39471fddad6 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -789,8 +789,7 @@ StartupReplicationOrigin(void)
ereport(LOG,
(errmsg("recovered replication state of node %u to %X/%X",
disk_state.roident,
- (uint32) (disk_state.remote_lsn >> 32),
- (uint32) disk_state.remote_lsn)));
+ LSN_FORMAT_ARGS(disk_state.remote_lsn))));
}
/* now check checksum */
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 66554ca2d98..c3b963211e8 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -4366,8 +4366,7 @@ ReorderBufferSerializedPath(char *path, ReplicationSlot *slot, TransactionId xid
snprintf(path, MAXPGPATH, "pg_replslot/%s/xid-%u-lsn-%X-%X.spill",
NameStr(MyReplicationSlot->data.name),
- xid,
- (uint32) (recptr >> 32), (uint32) recptr);
+ xid, LSN_FORMAT_ARGS(recptr));
}
/*
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index 752cf2d7dbc..e11788795f1 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -801,7 +801,7 @@ SnapBuildDistributeNewCatalogSnapshot(SnapBuild *builder, XLogRecPtr lsn)
continue;
elog(DEBUG2, "adding a new snapshot to %u at %X/%X",
- txn->xid, (uint32) (lsn >> 32), (uint32) lsn);
+ txn->xid, LSN_FORMAT_ARGS(lsn));
/*
* increase the snapshot's refcount for the transaction we are handing
@@ -1191,7 +1191,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
{
ereport(DEBUG1,
(errmsg_internal("skipping snapshot at %X/%X while building logical decoding snapshot, xmin horizon too low",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail_internal("initial xmin horizon of %u vs the snapshot's %u",
builder->initial_xmin_horizon, running->oldestRunningXid)));
@@ -1230,7 +1230,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
ereport(LOG,
(errmsg("logical decoding found consistent point at %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail("There are no running transactions.")));
return false;
@@ -1274,7 +1274,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
ereport(LOG,
(errmsg("logical decoding found initial starting point at %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail("Waiting for transactions (approximately %d) older than %u to end.",
running->xcnt, running->nextXid)));
@@ -1298,7 +1298,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
ereport(LOG,
(errmsg("logical decoding found initial consistent point at %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail("Waiting for transactions (approximately %d) older than %u to end.",
running->xcnt, running->nextXid)));
@@ -1323,7 +1323,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
ereport(LOG,
(errmsg("logical decoding found consistent point at %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail("There are no old transactions anymore.")));
}
@@ -1477,7 +1477,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
* no hope continuing to decode anyway.
*/
sprintf(path, "pg_logical/snapshots/%X-%X.snap",
- (uint32) (lsn >> 32), (uint32) lsn);
+ LSN_FORMAT_ARGS(lsn));
/*
* first check whether some other backend already has written the snapshot
@@ -1520,7 +1520,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
/* to make sure only we will write to this tempfile, include pid */
sprintf(tmppath, "pg_logical/snapshots/%X-%X.snap.%u.tmp",
- (uint32) (lsn >> 32), (uint32) lsn, MyProcPid);
+ LSN_FORMAT_ARGS(lsn), MyProcPid);
/*
* Unlink temporary file if it already exists, needs to have been before a
@@ -1670,7 +1670,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
return false;
sprintf(path, "pg_logical/snapshots/%X-%X.snap",
- (uint32) (lsn >> 32), (uint32) lsn);
+ LSN_FORMAT_ARGS(lsn));
fd = OpenTransientFile(path, O_RDONLY | PG_BINARY);
@@ -1854,7 +1854,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
ereport(LOG,
(errmsg("logical decoding found consistent point at %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn),
+ LSN_FORMAT_ARGS(lsn)),
errdetail("Logical decoding will begin using saved snapshot.")));
return true;
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index 24a6ce5d8ed..feb634e7ac0 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1120,9 +1120,7 @@ copy_table_done:
elog(DEBUG1,
"LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%X",
- originname,
- (uint32) (*origin_startpos >> 32),
- (uint32) *origin_startpos);
+ originname, LSN_FORMAT_ARGS(*origin_startpos));
/*
* We are done with the initial data synchronization, update the state.
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index cfc924cd893..18d05286b65 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -2359,10 +2359,9 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X",
force,
- (uint32) (recvpos >> 32), (uint32) recvpos,
- (uint32) (writepos >> 32), (uint32) writepos,
- (uint32) (flushpos >> 32), (uint32) flushpos
- );
+ LSN_FORMAT_ARGS(recvpos),
+ LSN_FORMAT_ARGS(writepos),
+ LSN_FORMAT_ARGS(flushpos));
walrcv_send(wrconn, reply_message->data, reply_message->len);
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index e00c7ffc013..fb4af2ef52d 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1242,8 +1242,7 @@ restart:
ereport(LOG,
(errmsg("invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size",
NameStr(slotname),
- (uint32) (restart_lsn >> 32),
- (uint32) restart_lsn)));
+ LSN_FORMAT_ARGS(restart_lsn))));
SpinLockAcquire(&s->mutex);
s->data.invalidated_at = s->data.restart_lsn;
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 057f41046dd..d24bb5b0b5f 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -659,8 +659,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot advance replication slot to %X/%X, minimum is %X/%X",
- (uint32) (moveto >> 32), (uint32) moveto,
- (uint32) (minlsn >> 32), (uint32) minlsn)));
+ LSN_FORMAT_ARGS(moveto), LSN_FORMAT_ARGS(minlsn))));
/* Do the actual slot update, depending on the slot type */
if (OidIsValid(MyReplicationSlot->data.database))
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index f765002e0dc..7fa1a87cd82 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -222,7 +222,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
new_status = (char *) palloc(len + 32 + 1);
memcpy(new_status, old_status, len);
sprintf(new_status + len, " waiting for %X/%X",
- (uint32) (lsn >> 32), (uint32) lsn);
+ LSN_FORMAT_ARGS(lsn));
set_ps_display(new_status);
new_status[len] = '\0'; /* truncate off " waiting ..." */
}
@@ -534,9 +534,9 @@ SyncRepReleaseWaiters(void)
LWLockRelease(SyncRepLock);
elog(DEBUG3, "released %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X",
- numwrite, (uint32) (writePtr >> 32), (uint32) writePtr,
- numflush, (uint32) (flushPtr >> 32), (uint32) flushPtr,
- numapply, (uint32) (applyPtr >> 32), (uint32) applyPtr);
+ numwrite, LSN_FORMAT_ARGS(writePtr),
+ numflush, LSN_FORMAT_ARGS(flushPtr),
+ numapply, LSN_FORMAT_ARGS(applyPtr));
}
/*
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 9ec71238c48..e5f8a06fea0 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -392,13 +392,11 @@ WalReceiverMain(void)
if (first_stream)
ereport(LOG,
(errmsg("started streaming WAL from primary at %X/%X on timeline %u",
- (uint32) (startpoint >> 32), (uint32) startpoint,
- startpointTLI)));
+ LSN_FORMAT_ARGS(startpoint), startpointTLI)));
else
ereport(LOG,
(errmsg("restarted WAL streaming at %X/%X on timeline %u",
- (uint32) (startpoint >> 32), (uint32) startpoint,
- startpointTLI)));
+ LSN_FORMAT_ARGS(startpoint), startpointTLI)));
first_stream = false;
/* Initialize LogstreamResult and buffers for processing messages */
@@ -465,7 +463,7 @@ WalReceiverMain(void)
(errmsg("replication terminated by primary server"),
errdetail("End of WAL reached on timeline %u at %X/%X.",
startpointTLI,
- (uint32) (LogstreamResult.Write >> 32), (uint32) LogstreamResult.Write)));
+ LSN_FORMAT_ARGS(LogstreamResult.Write))));
endofwal = true;
break;
}
@@ -699,8 +697,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI)
char activitymsg[50];
snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%X",
- (uint32) (*startpoint >> 32),
- (uint32) *startpoint);
+ LSN_FORMAT_ARGS(*startpoint));
set_ps_display(activitymsg);
}
}
@@ -1002,8 +999,7 @@ XLogWalRcvFlush(bool dying)
char activitymsg[50];
snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
- (uint32) (LogstreamResult.Write >> 32),
- (uint32) LogstreamResult.Write);
+ LSN_FORMAT_ARGS(LogstreamResult.Write));
set_ps_display(activitymsg);
}
@@ -1080,9 +1076,9 @@ XLogWalRcvSendReply(bool force, bool requestReply)
/* Send it */
elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X%s",
- (uint32) (writePtr >> 32), (uint32) writePtr,
- (uint32) (flushPtr >> 32), (uint32) flushPtr,
- (uint32) (applyPtr >> 32), (uint32) applyPtr,
+ LSN_FORMAT_ARGS(writePtr),
+ LSN_FORMAT_ARGS(flushPtr),
+ LSN_FORMAT_ARGS(applyPtr),
requestReply ? " (reply requested)" : "");
walrcv_send(wrconn, reply_message.data, reply_message.len);
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 64167fe3a67..81244541e2b 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -402,7 +402,7 @@ IdentifySystem(void)
else
logptr = GetFlushRecPtr();
- snprintf(xloc, sizeof(xloc), "%X/%X", (uint32) (logptr >> 32), (uint32) logptr);
+ snprintf(xloc, sizeof(xloc), "%X/%X", LSN_FORMAT_ARGS(logptr));
if (MyDatabaseId != InvalidOid)
{
@@ -674,13 +674,11 @@ StartReplication(StartReplicationCmd *cmd)
{
ereport(ERROR,
(errmsg("requested starting point %X/%X on timeline %u is not in this server's history",
- (uint32) (cmd->startpoint >> 32),
- (uint32) (cmd->startpoint),
+ LSN_FORMAT_ARGS(cmd->startpoint),
cmd->timeline),
errdetail("This server's history forked from timeline %u at %X/%X.",
cmd->timeline,
- (uint32) (switchpoint >> 32),
- (uint32) (switchpoint))));
+ LSN_FORMAT_ARGS(switchpoint))));
}
sendTimeLineValidUpto = switchpoint;
}
@@ -723,10 +721,8 @@ StartReplication(StartReplicationCmd *cmd)
{
ereport(ERROR,
(errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X",
- (uint32) (cmd->startpoint >> 32),
- (uint32) (cmd->startpoint),
- (uint32) (FlushPtr >> 32),
- (uint32) (FlushPtr))));
+ LSN_FORMAT_ARGS(cmd->startpoint),
+ LSN_FORMAT_ARGS(FlushPtr))));
}
/* Start streaming from the requested point */
@@ -769,8 +765,7 @@ StartReplication(StartReplicationCmd *cmd)
bool nulls[2];
snprintf(startpos_str, sizeof(startpos_str), "%X/%X",
- (uint32) (sendTimeLineValidUpto >> 32),
- (uint32) sendTimeLineValidUpto);
+ LSN_FORMAT_ARGS(sendTimeLineValidUpto));
dest = CreateDestReceiver(DestRemoteSimple);
MemSet(nulls, false, sizeof(nulls));
@@ -1063,8 +1058,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
}
snprintf(xloc, sizeof(xloc), "%X/%X",
- (uint32) (MyReplicationSlot->data.confirmed_flush >> 32),
- (uint32) MyReplicationSlot->data.confirmed_flush);
+ LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush));
dest = CreateDestReceiver(DestRemoteSimple);
MemSet(nulls, false, sizeof(nulls));
@@ -1900,9 +1894,9 @@ ProcessStandbyReplyMessage(void)
replyTimeStr = pstrdup(timestamptz_to_str(replyTime));
elog(DEBUG2, "write %X/%X flush %X/%X apply %X/%X%s reply_time %s",
- (uint32) (writePtr >> 32), (uint32) writePtr,
- (uint32) (flushPtr >> 32), (uint32) flushPtr,
- (uint32) (applyPtr >> 32), (uint32) applyPtr,
+ LSN_FORMAT_ARGS(writePtr),
+ LSN_FORMAT_ARGS(flushPtr),
+ LSN_FORMAT_ARGS(applyPtr),
replyRequested ? " (reply requested)" : "",
replyTimeStr);
@@ -2694,8 +2688,8 @@ XLogSendPhysical(void)
WalSndCaughtUp = true;
elog(DEBUG1, "walsender reached end of timeline at %X/%X (sent up to %X/%X)",
- (uint32) (sendTimeLineValidUpto >> 32), (uint32) sendTimeLineValidUpto,
- (uint32) (sentPtr >> 32), (uint32) sentPtr);
+ LSN_FORMAT_ARGS(sendTimeLineValidUpto),
+ LSN_FORMAT_ARGS(sentPtr));
return;
}
@@ -2826,7 +2820,7 @@ retry:
char activitymsg[50];
snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
- (uint32) (sentPtr >> 32), (uint32) sentPtr);
+ LSN_FORMAT_ARGS(sentPtr));
set_ps_display(activitymsg);
}
}
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 5877a60715f..a3ee652030c 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -1262,7 +1262,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
elog(trace_recovery(DEBUG2),
"snapshot of %u running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
CurrRunningXacts->xcnt,
- (uint32) (recptr >> 32), (uint32) recptr,
+ LSN_FORMAT_ARGS(recptr),
CurrRunningXacts->oldestRunningXid,
CurrRunningXacts->latestCompletedXid,
CurrRunningXacts->nextXid);
@@ -1270,7 +1270,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
elog(trace_recovery(DEBUG2),
"snapshot of %u+%u running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt,
- (uint32) (recptr >> 32), (uint32) recptr,
+ LSN_FORMAT_ARGS(recptr),
CurrRunningXacts->oldestRunningXid,
CurrRunningXacts->latestCompletedXid,
CurrRunningXacts->nextXid);
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index 12ad0c4c31e..b41dfe9eb0b 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -83,14 +83,8 @@ pg_lsn_out(PG_FUNCTION_ARGS)
XLogRecPtr lsn = PG_GETARG_LSN(0);
char buf[MAXPG_LSNLEN + 1];
char *result;
- uint32 id,
- off;
-
- /* Decode ID and offset */
- id = (uint32) (lsn >> 32);
- off = (uint32) lsn;
- snprintf(buf, sizeof buf, "%X/%X", id, off);
+ snprintf(buf, sizeof buf, "%X/%X", LSN_FORMAT_ARGS(lsn));
result = pstrdup(buf);
PG_RETURN_CSTRING(result);
}
diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c
index 4122d840941..0d15012c295 100644
--- a/src/bin/pg_basebackup/pg_receivewal.c
+++ b/src/bin/pg_basebackup/pg_receivewal.c
@@ -115,14 +115,14 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
/* we assume that we get called once at the end of each segment */
if (verbose && segment_finished)
pg_log_info("finished segment at %X/%X (timeline %u)",
- (uint32) (xlogpos >> 32), (uint32) xlogpos,
+ LSN_FORMAT_ARGS(xlogpos),
timeline);
if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos)
{
if (verbose)
pg_log_info("stopped log streaming at %X/%X (timeline %u)",
- (uint32) (xlogpos >> 32), (uint32) xlogpos,
+ LSN_FORMAT_ARGS(xlogpos),
timeline);
time_to_stop = true;
return true;
@@ -139,7 +139,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
if (verbose && prevtimeline != 0 && prevtimeline != timeline)
pg_log_info("switched to timeline %u at %X/%X",
timeline,
- (uint32) (prevpos >> 32), (uint32) prevpos);
+ LSN_FORMAT_ARGS(prevpos));
prevtimeline = timeline;
prevpos = xlogpos;
@@ -420,7 +420,7 @@ StreamLog(void)
*/
if (verbose)
pg_log_info("starting log streaming at %X/%X (timeline %u)",
- (uint32) (stream.startpos >> 32), (uint32) stream.startpos,
+ LSN_FORMAT_ARGS(stream.startpos),
stream.timeline);
stream.stream_stop = stop_streaming;
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index 553ba7b8f4d..bf0246c4266 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -131,8 +131,8 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested)
if (verbose)
pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)",
- (uint32) (output_written_lsn >> 32), (uint32) output_written_lsn,
- (uint32) (output_fsync_lsn >> 32), (uint32) output_fsync_lsn,
+ LSN_FORMAT_ARGS(output_written_lsn),
+ LSN_FORMAT_ARGS(output_fsync_lsn),
replication_slot);
replybuf[len] = 'r';
@@ -228,12 +228,12 @@ StreamLogicalLog(void)
*/
if (verbose)
pg_log_info("starting log streaming at %X/%X (slot %s)",
- (uint32) (startpos >> 32), (uint32) startpos,
+ LSN_FORMAT_ARGS(startpos),
replication_slot);
/* Initiate the replication stream at specified location */
appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X",
- replication_slot, (uint32) (startpos >> 32), (uint32) startpos);
+ replication_slot, LSN_FORMAT_ARGS(startpos));
/* print options if there are any */
if (noptions)
@@ -1045,10 +1045,9 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, bool keepalive, XLogRecPtr l
{
if (keepalive)
pg_log_info("end position %X/%X reached by keepalive",
- (uint32) (endpos >> 32), (uint32) endpos);
+ LSN_FORMAT_ARGS(endpos));
else
pg_log_info("end position %X/%X reached by WAL record at %X/%X",
- (uint32) (endpos >> 32), (uint32) (endpos),
- (uint32) (lsn >> 32), (uint32) lsn);
+ LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn));
}
}
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 4fc050f3a1c..7a2148fd05a 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -560,7 +560,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
/* Initiate the replication stream at specified location */
snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X TIMELINE %u",
slotcmd,
- (uint32) (stream->startpos >> 32), (uint32) stream->startpos,
+ LSN_FORMAT_ARGS(stream->startpos),
stream->timeline);
res = PQexec(conn, query);
if (PQresultStatus(res) != PGRES_COPY_BOTH)
@@ -616,8 +616,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
if (stream->startpos > stoppos)
{
pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X",
- stream->timeline, (uint32) (stoppos >> 32), (uint32) stoppos,
- newtimeline, (uint32) (stream->startpos >> 32), (uint32) stream->startpos);
+ stream->timeline, LSN_FORMAT_ARGS(stoppos),
+ newtimeline, LSN_FORMAT_ARGS(stream->startpos));
goto error;
}
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index 3e00ac0f701..f911f98d946 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -236,11 +236,9 @@ main(int argc, char *argv[])
printf(_("pg_control last modified: %s\n"),
pgctime_str);
printf(_("Latest checkpoint location: %X/%X\n"),
- (uint32) (ControlFile->checkPoint >> 32),
- (uint32) ControlFile->checkPoint);
+ LSN_FORMAT_ARGS(ControlFile->checkPoint));
printf(_("Latest checkpoint's REDO location: %X/%X\n"),
- (uint32) (ControlFile->checkPointCopy.redo >> 32),
- (uint32) ControlFile->checkPointCopy.redo);
+ LSN_FORMAT_ARGS(ControlFile->checkPointCopy.redo));
printf(_("Latest checkpoint's REDO WAL file: %s\n"),
xlogfilename);
printf(_("Latest checkpoint's TimeLineID: %u\n"),
@@ -275,19 +273,15 @@ main(int argc, char *argv[])
printf(_("Time of latest checkpoint: %s\n"),
ckpttime_str);
printf(_("Fake LSN counter for unlogged rels: %X/%X\n"),
- (uint32) (ControlFile->unloggedLSN >> 32),
- (uint32) ControlFile->unloggedLSN);
+ LSN_FORMAT_ARGS(ControlFile->unloggedLSN));
printf(_("Minimum recovery ending location: %X/%X\n"),
- (uint32) (ControlFile->minRecoveryPoint >> 32),
- (uint32) ControlFile->minRecoveryPoint);
+ LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint));
printf(_("Min recovery ending loc's timeline: %u\n"),
ControlFile->minRecoveryPointTLI);
printf(_("Backup start location: %X/%X\n"),
- (uint32) (ControlFile->backupStartPoint >> 32),
- (uint32) ControlFile->backupStartPoint);
+ LSN_FORMAT_ARGS(ControlFile->backupStartPoint));
printf(_("Backup end location: %X/%X\n"),
- (uint32) (ControlFile->backupEndPoint >> 32),
- (uint32) ControlFile->backupEndPoint);
+ LSN_FORMAT_ARGS(ControlFile->backupEndPoint));
printf(_("End-of-backup record required: %s\n"),
ControlFile->backupEndRequired ? _("yes") : _("no"));
printf(_("wal_level setting: %s\n"),
diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c
index 7117ae52297..59ebac7d6aa 100644
--- a/src/bin/pg_rewind/parsexlog.c
+++ b/src/bin/pg_rewind/parsexlog.c
@@ -87,11 +87,11 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
if (errormsg)
pg_fatal("could not read WAL record at %X/%X: %s",
- (uint32) (errptr >> 32), (uint32) (errptr),
+ LSN_FORMAT_ARGS(errptr),
errormsg);
else
pg_fatal("could not read WAL record at %X/%X",
- (uint32) (errptr >> 32), (uint32) (errptr));
+ LSN_FORMAT_ARGS(errptr));
}
extractPageInfo(xlogreader);
@@ -140,10 +140,10 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex,
{
if (errormsg)
pg_fatal("could not read WAL record at %X/%X: %s",
- (uint32) (ptr >> 32), (uint32) (ptr), errormsg);
+ LSN_FORMAT_ARGS(ptr), errormsg);
else
pg_fatal("could not read WAL record at %X/%X",
- (uint32) (ptr >> 32), (uint32) (ptr));
+ LSN_FORMAT_ARGS(ptr));
}
endptr = xlogreader->EndRecPtr;
@@ -206,11 +206,11 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex,
{
if (errormsg)
pg_fatal("could not find previous WAL record at %X/%X: %s",
- (uint32) (searchptr >> 32), (uint32) (searchptr),
+ LSN_FORMAT_ARGS(searchptr),
errormsg);
else
pg_fatal("could not find previous WAL record at %X/%X",
- (uint32) (searchptr >> 32), (uint32) (searchptr));
+ LSN_FORMAT_ARGS(searchptr));
}
/*
@@ -428,7 +428,7 @@ extractPageInfo(XLogReaderState *record)
*/
pg_fatal("WAL record modifies a relation, but record type is not recognized: "
"lsn: %X/%X, rmgr: %s, info: %02X",
- (uint32) (record->ReadRecPtr >> 32), (uint32) (record->ReadRecPtr),
+ LSN_FORMAT_ARGS(record->ReadRecPtr),
RmgrNames[rmid], info);
}
diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c
index 359a6a587cb..9df08ab2b08 100644
--- a/src/bin/pg_rewind/pg_rewind.c
+++ b/src/bin/pg_rewind/pg_rewind.c
@@ -344,7 +344,7 @@ main(int argc, char **argv)
findCommonAncestorTimeline(&divergerec, &lastcommontliIndex);
pg_log_info("servers diverged at WAL location %X/%X on timeline %u",
- (uint32) (divergerec >> 32), (uint32) divergerec,
+ LSN_FORMAT_ARGS(divergerec),
targetHistory[lastcommontliIndex].tli);
/*
@@ -401,8 +401,7 @@ main(int argc, char **argv)
findLastCheckpoint(datadir_target, divergerec, lastcommontliIndex,
&chkptrec, &chkpttli, &chkptredo, restore_command);
pg_log_info("rewinding from last common checkpoint at %X/%X on timeline %u",
- (uint32) (chkptrec >> 32), (uint32) chkptrec,
- chkpttli);
+ LSN_FORMAT_ARGS(chkptrec), chkpttli);
/* Initialize the hash table to track the status of each file */
filehash_init();
@@ -859,8 +858,8 @@ getTimelineHistory(ControlFileData *controlFile, int *nentries)
entry = &history[i];
pg_log_debug("%d: %X/%X - %X/%X", entry->tli,
- (uint32) (entry->begin >> 32), (uint32) (entry->begin),
- (uint32) (entry->end >> 32), (uint32) (entry->end));
+ LSN_FORMAT_ARGS(entry->begin),
+ LSN_FORMAT_ARGS(entry->end));
}
}
@@ -954,8 +953,8 @@ createBackupLabel(XLogRecPtr startpoint, TimeLineID starttli, XLogRecPtr checkpo
"BACKUP FROM: standby\n"
"START TIME: %s\n",
/* omit LABEL: line */
- (uint32) (startpoint >> 32), (uint32) startpoint, xlogfilename,
- (uint32) (checkpointloc >> 32), (uint32) checkpointloc,
+ LSN_FORMAT_ARGS(startpoint), xlogfilename,
+ LSN_FORMAT_ARGS(checkpointloc),
strfbuf);
if (len >= sizeof(buf))
pg_fatal("backup label buffer too small"); /* shouldn't happen */
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index bb3f2783d0c..f5ebd57a47f 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -816,10 +816,8 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%X --end=%X/%X\n",
pg_waldump_path, wal_directory, this_wal_range->tli,
- (uint32) (this_wal_range->start_lsn >> 32),
- (uint32) this_wal_range->start_lsn,
- (uint32) (this_wal_range->end_lsn >> 32),
- (uint32) this_wal_range->end_lsn);
+ LSN_FORMAT_ARGS(this_wal_range->start_lsn),
+ LSN_FORMAT_ARGS(this_wal_range->end_lsn));
if (system(pg_waldump_cmd) != 0)
report_backup_error(context,
"WAL parsing failed for timeline %u",
diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 164868d16ef..610f65e471c 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -467,8 +467,8 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record)
desc->rm_name,
rec_len, XLogRecGetTotalLen(record),
XLogRecGetXid(record),
- (uint32) (record->ReadRecPtr >> 32), (uint32) record->ReadRecPtr,
- (uint32) (xl_prev >> 32), (uint32) xl_prev);
+ LSN_FORMAT_ARGS(record->ReadRecPtr),
+ LSN_FORMAT_ARGS(xl_prev));
id = desc->rm_identify(info);
if (id == NULL)
@@ -972,8 +972,7 @@ main(int argc, char **argv)
else if (!XLByteInSeg(private.startptr, segno, WalSegSz))
{
pg_log_error("start WAL location %X/%X is not inside file \"%s\"",
- (uint32) (private.startptr >> 32),
- (uint32) private.startptr,
+ LSN_FORMAT_ARGS(private.startptr),
fname);
goto bad_argument;
}
@@ -1015,8 +1014,7 @@ main(int argc, char **argv)
private.endptr != (segno + 1) * WalSegSz)
{
pg_log_error("end WAL location %X/%X is not inside file \"%s\"",
- (uint32) (private.endptr >> 32),
- (uint32) private.endptr,
+ LSN_FORMAT_ARGS(private.endptr),
argv[argc - 1]);
goto bad_argument;
}
@@ -1048,8 +1046,7 @@ main(int argc, char **argv)
if (first_record == InvalidXLogRecPtr)
fatal_error("could not find a valid record after %X/%X",
- (uint32) (private.startptr >> 32),
- (uint32) private.startptr);
+ LSN_FORMAT_ARGS(private.startptr));
/*
* Display a message that we're skipping data if `from` wasn't a pointer
@@ -1061,8 +1058,8 @@ main(int argc, char **argv)
printf(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte\n",
"first record is after %X/%X, at %X/%X, skipping over %u bytes\n",
(first_record - private.startptr)),
- (uint32) (private.startptr >> 32), (uint32) private.startptr,
- (uint32) (first_record >> 32), (uint32) first_record,
+ LSN_FORMAT_ARGS(private.startptr),
+ LSN_FORMAT_ARGS(first_record),
(uint32) (first_record - private.startptr));
for (;;)
@@ -1110,8 +1107,7 @@ main(int argc, char **argv)
if (errormsg)
fatal_error("error in WAL record at %X/%X: %s",
- (uint32) (xlogreader_state->ReadRecPtr >> 32),
- (uint32) xlogreader_state->ReadRecPtr,
+ LSN_FORMAT_ARGS(xlogreader_state->ReadRecPtr),
errormsg);
XLogReaderFree(xlogreader_state);
diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h
index 65836d5bc65..0940b64ca6b 100644
--- a/src/include/access/xlogdefs.h
+++ b/src/include/access/xlogdefs.h
@@ -36,6 +36,13 @@ typedef uint64 XLogRecPtr;
#define FirstNormalUnloggedLSN ((XLogRecPtr) 1000)
/*
+ * Handy macro for printing XLogRecPtr in conventional format, e.g.,
+ *
+ * printf("%X/%X", LSN_FORMAT_ARGS(lsn));
+ */
+#define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
+
+/*
* XLogSegNo - physical log file sequence number.
*/
typedef uint64 XLogSegNo;