From 91d831518c8a71b010bdc835caacaedb20ffb896 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 18 Feb 2021 13:02:08 +0100 Subject: [PATCH v2] Simplify printing of LSNs Add a macro LSN_FORMAT_ARGS for use in printf-style printing of LSNs. Discussion: https://www.postgresql.org/message-id/flat/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com --- contrib/amcheck/verify_nbtree.c | 57 +++------ contrib/pageinspect/rawpage.c | 3 +- src/backend/access/heap/rewriteheap.c | 6 +- src/backend/access/rmgrdesc/replorigindesc.c | 3 +- src/backend/access/rmgrdesc/xactdesc.c | 3 +- src/backend/access/rmgrdesc/xlogdesc.c | 5 +- src/backend/access/transam/timeline.c | 2 +- src/backend/access/transam/twophase.c | 6 +- src/backend/access/transam/xlog.c | 110 +++++++----------- src/backend/access/transam/xlogreader.c | 58 ++++----- src/backend/access/transam/xlogutils.c | 3 +- src/backend/replication/backup_manifest.c | 4 +- src/backend/replication/basebackup.c | 2 +- .../libpqwalreceiver/libpqwalreceiver.c | 4 +- src/backend/replication/logical/logical.c | 34 +++--- src/backend/replication/logical/origin.c | 3 +- .../replication/logical/reorderbuffer.c | 3 +- src/backend/replication/logical/snapbuild.c | 20 ++-- src/backend/replication/logical/tablesync.c | 4 +- src/backend/replication/logical/worker.c | 7 +- src/backend/replication/slot.c | 3 +- src/backend/replication/slotfuncs.c | 3 +- src/backend/replication/syncrep.c | 8 +- src/backend/replication/walreceiver.c | 20 ++-- src/backend/replication/walsender.c | 32 +++-- src/backend/storage/ipc/standby.c | 4 +- src/backend/utils/adt/pg_lsn.c | 8 +- src/bin/pg_basebackup/pg_receivewal.c | 8 +- src/bin/pg_basebackup/pg_recvlogical.c | 13 +-- src/bin/pg_basebackup/receivelog.c | 6 +- src/bin/pg_controldata/pg_controldata.c | 18 +-- src/bin/pg_rewind/parsexlog.c | 14 +-- src/bin/pg_rewind/pg_rewind.c | 13 +-- src/bin/pg_verifybackup/pg_verifybackup.c | 6 +- src/bin/pg_waldump/pg_waldump.c | 20 ++-- src/include/access/xlogdefs.h | 7 ++ 36 files changed, 212 insertions(+), 308 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index 4db1a64d51..a5a7627839 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -1078,8 +1078,7 @@ bt_target_page_check(BtreeCheckState *state) state->targetblock, BTreeTupleGetNAtts(itup, state->rel), P_ISLEAF(topaque) ? "heap" : "index", - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } } @@ -1120,8 +1119,7 @@ bt_target_page_check(BtreeCheckState *state) errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.", state->targetblock, offset, tupsize, ItemIdGetLength(itemid), - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn), + LSN_FORMAT_ARGS(state->targetlsn)), errhint("This could be a torn page problem."))); /* Check the number of index tuple attributes */ @@ -1147,8 +1145,7 @@ bt_target_page_check(BtreeCheckState *state) BTreeTupleGetNAtts(itup, state->rel), P_ISLEAF(topaque) ? "heap" : "index", htid, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } /* @@ -1195,8 +1192,7 @@ bt_target_page_check(BtreeCheckState *state) RelationGetRelationName(state->rel)), errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.", itid, htid, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } /* @@ -1225,8 +1221,7 @@ bt_target_page_check(BtreeCheckState *state) RelationGetRelationName(state->rel)), errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.", itid, i, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } ItemPointerCopy(current, &last); @@ -1282,8 +1277,7 @@ bt_target_page_check(BtreeCheckState *state) itid, P_ISLEAF(topaque) ? "heap" : "index", htid, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } /* Fingerprint leaf page tuples (those that point to the heap) */ @@ -1390,8 +1384,7 @@ bt_target_page_check(BtreeCheckState *state) itid, P_ISLEAF(topaque) ? "heap" : "index", htid, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } /* Reset, in case scantid was set to (itup) posting tuple's max TID */ skey->scantid = scantid; @@ -1442,8 +1435,7 @@ bt_target_page_check(BtreeCheckState *state) nitid, P_ISLEAF(topaque) ? "heap" : "index", nhtid, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } /* @@ -1500,8 +1492,7 @@ bt_target_page_check(BtreeCheckState *state) RelationGetRelationName(state->rel)), errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.", state->targetblock, offset, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } } @@ -1907,8 +1898,7 @@ bt_child_highkey_check(BtreeCheckState *state, RelationGetRelationName(state->rel)), errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", state->targetblock, blkno, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); /* Check level for non-ignorable page */ if (!P_IGNORE(opaque) && opaque->btpo.level != target_level - 1) @@ -1993,8 +1983,7 @@ bt_child_highkey_check(BtreeCheckState *state, RelationGetRelationName(state->rel)), errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", state->targetblock, blkno, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); pivotkey_offset = P_HIKEY; } itemid = PageGetItemIdCareful(state, state->targetblock, @@ -2024,8 +2013,7 @@ bt_child_highkey_check(BtreeCheckState *state, RelationGetRelationName(state->rel)), errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", state->targetblock, blkno, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); itup = state->lowkey; } @@ -2037,8 +2025,7 @@ bt_child_highkey_check(BtreeCheckState *state, RelationGetRelationName(state->rel)), errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.", state->targetblock, blkno, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } } @@ -2178,8 +2165,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey, RelationGetRelationName(state->rel)), errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.", state->targetblock, childblock, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); for (offset = P_FIRSTDATAKEY(copaque); offset <= maxoffset; @@ -2220,8 +2206,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey, RelationGetRelationName(state->rel)), errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.", state->targetblock, childblock, offset, - (uint32) (state->targetlsn >> 32), - (uint32) state->targetlsn))); + LSN_FORMAT_ARGS(state->targetlsn)))); } pfree(child); @@ -2292,8 +2277,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.", blkno, opaque->btpo.level, opaque->btpo_prev, - (uint32) (pagelsn >> 32), - (uint32) pagelsn))); + LSN_FORMAT_ARGS(pagelsn)))); return; } @@ -2314,8 +2298,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, RelationGetRelationName(state->rel)), errdetail_internal("Block=%u page lsn=%X/%X.", blkno, - (uint32) (pagelsn >> 32), - (uint32) pagelsn))); + LSN_FORMAT_ARGS(pagelsn)))); /* Descend from the given page, which is an internal page */ elog(DEBUG1, "checking for interrupted multi-level deletion due to missing downlink in index \"%s\"", @@ -2381,8 +2364,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, RelationGetRelationName(state->rel)), errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.", blkno, childblk, - (uint32) (pagelsn >> 32), - (uint32) pagelsn))); + LSN_FORMAT_ARGS(pagelsn)))); /* * Iff leaf page is half-dead, its high key top parent link should point @@ -2408,8 +2390,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit, RelationGetRelationName(state->rel)), errdetail_internal("Block=%u level=%u page lsn=%X/%X.", blkno, opaque->btpo.level, - (uint32) (pagelsn >> 32), - (uint32) pagelsn))); + LSN_FORMAT_ARGS(pagelsn)))); } /* diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index 9e9ee8a493..7272b21016 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -309,8 +309,7 @@ page_header(PG_FUNCTION_ARGS) { char lsnchar[64]; - snprintf(lsnchar, sizeof(lsnchar), "%X/%X", - (uint32) (lsn >> 32), (uint32) lsn); + snprintf(lsnchar, sizeof(lsnchar), "%X/%X", LSN_FORMAT_ARGS(lsn)); values[0] = CStringGetTextDatum(lsnchar); } else diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index fcaad9ba0b..8241ba8f31 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 2e29ecc6d5..1f314c4771 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 c6fb1ec572..4b0d10f073 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 92cc7ea073..e6090a9dad 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 690471ac4e..8d0903c175 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 70d22577ce..0cae9486f6 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1348,16 +1348,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 e0c37f73f3..377afb8732 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 bb95e0e527..42738eb940 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 e723253297..a7a473de4a 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 32bb0efb3d..8882444025 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 0f54635550..240e902d28 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 7714696140..5272eed9ab 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 0977aec711..baeb45ff43 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 685eaa6134..39471fddad 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 5a62ab8bbc..c742e1d970 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 752cf2d7db..e11788795f 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 24a6ce5d8e..feb634e7ac 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -1120,9 +1120,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) 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 cfc924cd89..18d05286b6 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 e00c7ffc01..fb4af2ef52 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -1242,8 +1242,7 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno) 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 057f41046d..d24bb5b0b5 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 f765002e0d..7fa1a87cd8 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 723f513d8b..208611056a 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 64167fe3a6..81244541e2 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 @@ XLogSendPhysical(void) 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 5877a60715..a3ee652030 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 12ad0c4c31..b41dfe9eb0 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 4122d84094..0d15012c29 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 553ba7b8f4..bf0246c426 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 4fc050f3a1..7a2148fd05 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 3e00ac0f70..f911f98d94 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 7117ae5229..59ebac7d6a 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 359a6a587c..9df08ab2b0 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 bb3f2783d0..f5ebd57a47 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 164868d16e..610f65e471 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 65836d5bc6..b7ccd10a39 100644 --- a/src/include/access/xlogdefs.h +++ b/src/include/access/xlogdefs.h @@ -35,6 +35,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), (unsigned) ((lsn) >> 32)), ((unsigned) (lsn)) + /* * XLogSegNo - physical log file sequence number. */ -- 2.30.1