1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-09 06:21:09 +03:00

Use XLogRecPtrIsValid() in various places

Now that commit 06edbed478 has introduced XLogRecPtrIsValid(), we can
use that instead of:

- XLogRecPtrIsInvalid()
- direct comparisons with InvalidXLogRecPtr
- direct comparisons with literal 0

This makes the code more consistent.

Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/aQB7EvGqrbZXrMlg@ip-10-97-1-34.eu-west-3.compute.internal
This commit is contained in:
Álvaro Herrera
2025-11-06 20:33:57 +01:00
parent 06edbed478
commit a2b02293bc
46 changed files with 239 additions and 238 deletions

View File

@@ -83,7 +83,7 @@ GetCurrentLSN(void)
else else
curr_lsn = GetXLogReplayRecPtr(NULL); curr_lsn = GetXLogReplayRecPtr(NULL);
Assert(!XLogRecPtrIsInvalid(curr_lsn)); Assert(XLogRecPtrIsValid(curr_lsn));
return curr_lsn; return curr_lsn;
} }
@@ -127,7 +127,7 @@ InitXLogReaderState(XLogRecPtr lsn)
/* first find a valid recptr to start from */ /* first find a valid recptr to start from */
first_valid_record = XLogFindNextRecord(xlogreader, lsn); first_valid_record = XLogFindNextRecord(xlogreader, lsn);
if (XLogRecPtrIsInvalid(first_valid_record)) if (!XLogRecPtrIsValid(first_valid_record))
ereport(ERROR, ereport(ERROR,
errmsg("could not find a valid record after %X/%08X", errmsg("could not find a valid record after %X/%08X",
LSN_FORMAT_ARGS(lsn))); LSN_FORMAT_ARGS(lsn)));

View File

@@ -682,7 +682,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace,
state.stack = stack = stack->parent; state.stack = stack = stack->parent;
} }
if (XLogRecPtrIsInvalid(stack->lsn)) if (!XLogRecPtrIsValid(stack->lsn))
stack->buffer = ReadBuffer(state.r, stack->blkno); stack->buffer = ReadBuffer(state.r, stack->blkno);
/* /*
@@ -698,7 +698,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace,
stack->page = BufferGetPage(stack->buffer); stack->page = BufferGetPage(stack->buffer);
stack->lsn = xlocked ? stack->lsn = xlocked ?
PageGetLSN(stack->page) : BufferGetLSNAtomic(stack->buffer); PageGetLSN(stack->page) : BufferGetLSNAtomic(stack->buffer);
Assert(!RelationNeedsWAL(state.r) || !XLogRecPtrIsInvalid(stack->lsn)); Assert(!RelationNeedsWAL(state.r) || XLogRecPtrIsValid(stack->lsn));
/* /*
* If this page was split but the downlink was never inserted to the * If this page was split but the downlink was never inserted to the

View File

@@ -46,7 +46,7 @@ gistkillitems(IndexScanDesc scan)
bool killedsomething = false; bool killedsomething = false;
Assert(so->curBlkno != InvalidBlockNumber); Assert(so->curBlkno != InvalidBlockNumber);
Assert(!XLogRecPtrIsInvalid(so->curPageLSN)); Assert(XLogRecPtrIsValid(so->curPageLSN));
Assert(so->killedItems != NULL); Assert(so->killedItems != NULL);
buffer = ReadBuffer(scan->indexRelation, so->curBlkno); buffer = ReadBuffer(scan->indexRelation, so->curBlkno);
@@ -353,7 +353,7 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem,
* parentlsn < nsn), or if the system crashed after a page split but * parentlsn < nsn), or if the system crashed after a page split but
* before the downlink was inserted into the parent. * before the downlink was inserted into the parent.
*/ */
if (!XLogRecPtrIsInvalid(pageItem->data.parentlsn) && if (XLogRecPtrIsValid(pageItem->data.parentlsn) &&
(GistFollowRight(page) || (GistFollowRight(page) ||
pageItem->data.parentlsn < GistPageGetNSN(page)) && pageItem->data.parentlsn < GistPageGetNSN(page)) &&
opaque->rightlink != InvalidBlockNumber /* sanity check */ ) opaque->rightlink != InvalidBlockNumber /* sanity check */ )

View File

@@ -1040,7 +1040,7 @@ gistGetFakeLSN(Relation rel)
Assert(!RelationNeedsWAL(rel)); Assert(!RelationNeedsWAL(rel));
/* No need for an actual record if we already have a distinct LSN */ /* No need for an actual record if we already have a distinct LSN */
if (!XLogRecPtrIsInvalid(lastlsn) && lastlsn == currlsn) if (XLogRecPtrIsValid(lastlsn) && lastlsn == currlsn)
currlsn = gistXLogAssignLSN(); currlsn = gistXLogAssignLSN();
lastlsn = currlsn; lastlsn = currlsn;

View File

@@ -1169,7 +1169,7 @@ CheckPointLogicalRewriteHeap(void)
cutoff = ReplicationSlotsComputeLogicalRestartLSN(); cutoff = ReplicationSlotsComputeLogicalRestartLSN();
/* don't start earlier than the restart lsn */ /* don't start earlier than the restart lsn */
if (cutoff != InvalidXLogRecPtr && redo < cutoff) if (XLogRecPtrIsValid(cutoff) && redo < cutoff)
cutoff = redo; cutoff = redo;
mappings_dir = AllocateDir(PG_LOGICAL_MAPPINGS_DIR); mappings_dir = AllocateDir(PG_LOGICAL_MAPPINGS_DIR);
@@ -1204,7 +1204,7 @@ CheckPointLogicalRewriteHeap(void)
lsn = ((uint64) hi) << 32 | lo; lsn = ((uint64) hi) << 32 | lo;
if (lsn < cutoff || cutoff == InvalidXLogRecPtr) if (lsn < cutoff || !XLogRecPtrIsValid(cutoff))
{ {
elog(DEBUG1, "removing logical rewrite file \"%s\"", path); elog(DEBUG1, "removing logical rewrite file \"%s\"", path);
if (unlink(path) < 0) if (unlink(path) < 0)

View File

@@ -1901,7 +1901,7 @@ lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf, BlockNumber blkno,
* WAL-logged, and if not, do that now. * WAL-logged, and if not, do that now.
*/ */
if (RelationNeedsWAL(vacrel->rel) && if (RelationNeedsWAL(vacrel->rel) &&
PageGetLSN(page) == InvalidXLogRecPtr) !XLogRecPtrIsValid(PageGetLSN(page)))
log_newpage_buffer(buf, true); log_newpage_buffer(buf, true);
PageSetAllVisible(page); PageSetAllVisible(page);

View File

@@ -260,7 +260,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
flags, RelationGetRelationName(rel), heapBlk); flags, RelationGetRelationName(rel), heapBlk);
#endif #endif
Assert(InRecovery || XLogRecPtrIsInvalid(recptr)); Assert(InRecovery || !XLogRecPtrIsValid(recptr));
Assert(InRecovery || PageIsAllVisible(BufferGetPage(heapBuf))); Assert(InRecovery || PageIsAllVisible(BufferGetPage(heapBuf)));
Assert((flags & VISIBILITYMAP_VALID_BITS) == flags); Assert((flags & VISIBILITYMAP_VALID_BITS) == flags);
@@ -292,7 +292,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
if (RelationNeedsWAL(rel)) if (RelationNeedsWAL(rel))
{ {
if (XLogRecPtrIsInvalid(recptr)) if (!XLogRecPtrIsValid(recptr))
{ {
Assert(!InRecovery); Assert(!InRecovery);
recptr = log_heap_visible(rel, heapBuf, vmBuf, cutoff_xid, flags); recptr = log_heap_visible(rel, heapBuf, vmBuf, cutoff_xid, flags);

View File

@@ -381,7 +381,8 @@ TransactionIdSetPageStatusInternal(TransactionId xid, int nsubxids,
* write-busy, since we don't care if the update reaches disk sooner than * write-busy, since we don't care if the update reaches disk sooner than
* we think. * we think.
*/ */
slotno = SimpleLruReadPage(XactCtl, pageno, XLogRecPtrIsInvalid(lsn), xid); slotno = SimpleLruReadPage(XactCtl, pageno, !XLogRecPtrIsValid(lsn),
xid);
/* /*
* Set the main transaction id, if any. * Set the main transaction id, if any.
@@ -705,7 +706,7 @@ TransactionIdSetStatusBit(TransactionId xid, XidStatus status, XLogRecPtr lsn, i
* recovery. After recovery completes the next clog change will set the * recovery. After recovery completes the next clog change will set the
* LSN correctly. * LSN correctly.
*/ */
if (!XLogRecPtrIsInvalid(lsn)) if (XLogRecPtrIsValid(lsn))
{ {
int lsnindex = GetLSNIndex(slotno, xid); int lsnindex = GetLSNIndex(slotno, xid);

View File

@@ -937,7 +937,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int64 pageno, int slotno, SlruWriteAll fdata)
max_lsn = this_lsn; max_lsn = this_lsn;
} }
if (!XLogRecPtrIsInvalid(max_lsn)) if (XLogRecPtrIsValid(max_lsn))
{ {
/* /*
* As noted above, elog(ERROR) is not acceptable here, so if * As noted above, elog(ERROR) is not acceptable here, so if

View File

@@ -549,8 +549,8 @@ tliOfPointInHistory(XLogRecPtr ptr, List *history)
{ {
TimeLineHistoryEntry *tle = (TimeLineHistoryEntry *) lfirst(cell); TimeLineHistoryEntry *tle = (TimeLineHistoryEntry *) lfirst(cell);
if ((XLogRecPtrIsInvalid(tle->begin) || tle->begin <= ptr) && if ((!XLogRecPtrIsValid(tle->begin) || tle->begin <= ptr) &&
(XLogRecPtrIsInvalid(tle->end) || ptr < tle->end)) (!XLogRecPtrIsValid(tle->end) || ptr < tle->end))
{ {
/* found it */ /* found it */
return tle->tli; return tle->tli;

View File

@@ -2198,7 +2198,7 @@ ProcessTwoPhaseBuffer(FullTransactionId fxid,
Assert(LWLockHeldByMeInMode(TwoPhaseStateLock, LW_EXCLUSIVE)); Assert(LWLockHeldByMeInMode(TwoPhaseStateLock, LW_EXCLUSIVE));
if (!fromdisk) if (!fromdisk)
Assert(prepare_start_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(prepare_start_lsn));
/* Already processed? */ /* Already processed? */
if (TransactionIdDidCommit(XidFromFullTransactionId(fxid)) || if (TransactionIdDidCommit(XidFromFullTransactionId(fxid)) ||
@@ -2547,7 +2547,7 @@ PrepareRedoAdd(FullTransactionId fxid, char *buf,
* the record is added to TwoPhaseState and it should have no * the record is added to TwoPhaseState and it should have no
* corresponding file in pg_twophase. * corresponding file in pg_twophase.
*/ */
if (!XLogRecPtrIsInvalid(start_lsn)) if (XLogRecPtrIsValid(start_lsn))
{ {
char path[MAXPGPATH]; char path[MAXPGPATH];
@@ -2587,7 +2587,7 @@ PrepareRedoAdd(FullTransactionId fxid, char *buf,
gxact->owner = hdr->owner; gxact->owner = hdr->owner;
gxact->locking_backend = INVALID_PROC_NUMBER; gxact->locking_backend = INVALID_PROC_NUMBER;
gxact->valid = false; gxact->valid = false;
gxact->ondisk = XLogRecPtrIsInvalid(start_lsn); gxact->ondisk = !XLogRecPtrIsValid(start_lsn);
gxact->inredo = true; /* yes, added in redo */ gxact->inredo = true; /* yes, added in redo */
strcpy(gxact->gid, gid); strcpy(gxact->gid, gid);

View File

@@ -849,7 +849,7 @@ XLogInsertRecord(XLogRecData *rdata,
if (doPageWrites && if (doPageWrites &&
(!prevDoPageWrites || (!prevDoPageWrites ||
(fpw_lsn != InvalidXLogRecPtr && fpw_lsn <= RedoRecPtr))) (XLogRecPtrIsValid(fpw_lsn) && fpw_lsn <= RedoRecPtr)))
{ {
/* /*
* Oops, some buffer now needs to be backed up that the caller * Oops, some buffer now needs to be backed up that the caller
@@ -883,7 +883,7 @@ XLogInsertRecord(XLogRecData *rdata,
* Those checks are only needed for records that can contain buffer * Those checks are only needed for records that can contain buffer
* references, and an XLOG_SWITCH record never does. * references, and an XLOG_SWITCH record never does.
*/ */
Assert(fpw_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(fpw_lsn));
WALInsertLockAcquireExclusive(); WALInsertLockAcquireExclusive();
inserted = ReserveXLogSwitch(&StartPos, &EndPos, &rechdr->xl_prev); inserted = ReserveXLogSwitch(&StartPos, &EndPos, &rechdr->xl_prev);
} }
@@ -898,7 +898,7 @@ XLogInsertRecord(XLogRecData *rdata,
* not check RedoRecPtr before inserting the record; we just need to * not check RedoRecPtr before inserting the record; we just need to
* update it afterwards. * update it afterwards.
*/ */
Assert(fpw_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(fpw_lsn));
WALInsertLockAcquireExclusive(); WALInsertLockAcquireExclusive();
ReserveXLogInsertLocation(rechdr->xl_tot_len, &StartPos, &EndPos, ReserveXLogInsertLocation(rechdr->xl_tot_len, &StartPos, &EndPos,
&rechdr->xl_prev); &rechdr->xl_prev);
@@ -1603,7 +1603,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto)
*/ */
} while (insertingat < upto); } while (insertingat < upto);
if (insertingat != InvalidXLogRecPtr && insertingat < finishedUpto) if (XLogRecPtrIsValid(insertingat) && insertingat < finishedUpto)
finishedUpto = insertingat; finishedUpto = insertingat;
} }
@@ -1762,7 +1762,7 @@ WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count,
if (RecoveryInProgress() || tli != GetWALInsertionTimeLine()) if (RecoveryInProgress() || tli != GetWALInsertionTimeLine())
return 0; return 0;
Assert(!XLogRecPtrIsInvalid(startptr)); Assert(XLogRecPtrIsValid(startptr));
/* /*
* Caller should ensure that the requested data has been inserted into WAL * Caller should ensure that the requested data has been inserted into WAL
@@ -2717,7 +2717,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
* available is replayed in this case. This also saves from extra locks * available is replayed in this case. This also saves from extra locks
* taken on the control file from the startup process. * taken on the control file from the startup process.
*/ */
if (XLogRecPtrIsInvalid(LocalMinRecoveryPoint) && InRecovery) if (!XLogRecPtrIsValid(LocalMinRecoveryPoint) && InRecovery)
{ {
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
return; return;
@@ -2729,7 +2729,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
LocalMinRecoveryPoint = ControlFile->minRecoveryPoint; LocalMinRecoveryPoint = ControlFile->minRecoveryPoint;
LocalMinRecoveryPointTLI = ControlFile->minRecoveryPointTLI; LocalMinRecoveryPointTLI = ControlFile->minRecoveryPointTLI;
if (XLogRecPtrIsInvalid(LocalMinRecoveryPoint)) if (!XLogRecPtrIsValid(LocalMinRecoveryPoint))
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
else if (force || LocalMinRecoveryPoint < lsn) else if (force || LocalMinRecoveryPoint < lsn)
{ {
@@ -3149,7 +3149,7 @@ XLogNeedsFlush(XLogRecPtr record)
* which cannot update its local copy of minRecoveryPoint as long as * which cannot update its local copy of minRecoveryPoint as long as
* it has not replayed all WAL available when doing crash recovery. * it has not replayed all WAL available when doing crash recovery.
*/ */
if (XLogRecPtrIsInvalid(LocalMinRecoveryPoint) && InRecovery) if (!XLogRecPtrIsValid(LocalMinRecoveryPoint) && InRecovery)
{ {
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
return false; return false;
@@ -3170,7 +3170,7 @@ XLogNeedsFlush(XLogRecPtr record)
* process doing crash recovery, which should not update the control * process doing crash recovery, which should not update the control
* file value if crash recovery is still running. * file value if crash recovery is still running.
*/ */
if (XLogRecPtrIsInvalid(LocalMinRecoveryPoint)) if (!XLogRecPtrIsValid(LocalMinRecoveryPoint))
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
/* check again */ /* check again */
@@ -5935,7 +5935,7 @@ StartupXLOG(void)
*/ */
if (InRecovery && if (InRecovery &&
(EndOfLog < LocalMinRecoveryPoint || (EndOfLog < LocalMinRecoveryPoint ||
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))) XLogRecPtrIsValid(ControlFile->backupStartPoint)))
{ {
/* /*
* Ran off end of WAL before reaching end-of-backup WAL record, or * Ran off end of WAL before reaching end-of-backup WAL record, or
@@ -5945,7 +5945,7 @@ StartupXLOG(void)
*/ */
if (ArchiveRecoveryRequested || ControlFile->backupEndRequired) if (ArchiveRecoveryRequested || ControlFile->backupEndRequired)
{ {
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint) || ControlFile->backupEndRequired) if (XLogRecPtrIsValid(ControlFile->backupStartPoint) || ControlFile->backupEndRequired)
ereport(FATAL, ereport(FATAL,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("WAL ends before end of online backup"), errmsg("WAL ends before end of online backup"),
@@ -6047,7 +6047,7 @@ StartupXLOG(void)
* (It's critical to first write an OVERWRITE_CONTRECORD message, which * (It's critical to first write an OVERWRITE_CONTRECORD message, which
* we'll do as soon as we're open for writing new WAL.) * we'll do as soon as we're open for writing new WAL.)
*/ */
if (!XLogRecPtrIsInvalid(missingContrecPtr)) if (XLogRecPtrIsValid(missingContrecPtr))
{ {
/* /*
* We should only have a missingContrecPtr if we're not switching to a * We should only have a missingContrecPtr if we're not switching to a
@@ -6057,7 +6057,7 @@ StartupXLOG(void)
* disregard. * disregard.
*/ */
Assert(newTLI == endOfRecoveryInfo->lastRecTLI); Assert(newTLI == endOfRecoveryInfo->lastRecTLI);
Assert(!XLogRecPtrIsInvalid(abortedRecPtr)); Assert(XLogRecPtrIsValid(abortedRecPtr));
EndOfLog = missingContrecPtr; EndOfLog = missingContrecPtr;
} }
@@ -6161,9 +6161,9 @@ StartupXLOG(void)
LocalSetXLogInsertAllowed(); LocalSetXLogInsertAllowed();
/* If necessary, write overwrite-contrecord before doing anything else */ /* If necessary, write overwrite-contrecord before doing anything else */
if (!XLogRecPtrIsInvalid(abortedRecPtr)) if (XLogRecPtrIsValid(abortedRecPtr))
{ {
Assert(!XLogRecPtrIsInvalid(missingContrecPtr)); Assert(XLogRecPtrIsValid(missingContrecPtr));
CreateOverwriteContrecordRecord(abortedRecPtr, missingContrecPtr, newTLI); CreateOverwriteContrecordRecord(abortedRecPtr, missingContrecPtr, newTLI);
} }
@@ -7363,7 +7363,7 @@ CreateCheckPoint(int flags)
* Update the average distance between checkpoints if the prior checkpoint * Update the average distance between checkpoints if the prior checkpoint
* exists. * exists.
*/ */
if (PriorRedoPtr != InvalidXLogRecPtr) if (XLogRecPtrIsValid(PriorRedoPtr))
UpdateCheckPointDistanceEstimate(RedoRecPtr - PriorRedoPtr); UpdateCheckPointDistanceEstimate(RedoRecPtr - PriorRedoPtr);
INJECTION_POINT("checkpoint-before-old-wal-removal", NULL); INJECTION_POINT("checkpoint-before-old-wal-removal", NULL);
@@ -7693,7 +7693,7 @@ CreateRestartPoint(int flags)
* restartpoint. It's assumed that flushing the buffers will do that as a * restartpoint. It's assumed that flushing the buffers will do that as a
* side-effect. * side-effect.
*/ */
if (XLogRecPtrIsInvalid(lastCheckPointRecPtr) || if (!XLogRecPtrIsValid(lastCheckPointRecPtr) ||
lastCheckPoint.redo <= ControlFile->checkPointCopy.redo) lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
{ {
ereport(DEBUG2, ereport(DEBUG2,
@@ -7811,7 +7811,7 @@ CreateRestartPoint(int flags)
* Update the average distance between checkpoints/restartpoints if the * Update the average distance between checkpoints/restartpoints if the
* prior checkpoint exists. * prior checkpoint exists.
*/ */
if (PriorRedoPtr != InvalidXLogRecPtr) if (XLogRecPtrIsValid(PriorRedoPtr))
UpdateCheckPointDistanceEstimate(RedoRecPtr - PriorRedoPtr); UpdateCheckPointDistanceEstimate(RedoRecPtr - PriorRedoPtr);
/* /*
@@ -7936,7 +7936,7 @@ GetWALAvailability(XLogRecPtr targetLSN)
/* /*
* slot does not reserve WAL. Either deactivated, or has never been active * slot does not reserve WAL. Either deactivated, or has never been active
*/ */
if (XLogRecPtrIsInvalid(targetLSN)) if (!XLogRecPtrIsValid(targetLSN))
return WALAVAIL_INVALID_LSN; return WALAVAIL_INVALID_LSN;
/* /*
@@ -8018,7 +8018,7 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo)
/* Calculate how many segments are kept by slots. */ /* Calculate how many segments are kept by slots. */
keep = XLogGetReplicationSlotMinimumLSN(); keep = XLogGetReplicationSlotMinimumLSN();
if (keep != InvalidXLogRecPtr && keep < recptr) if (XLogRecPtrIsValid(keep) && keep < recptr)
{ {
XLByteToSeg(keep, segno, wal_segment_size); XLByteToSeg(keep, segno, wal_segment_size);
@@ -8045,7 +8045,7 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo)
* summarized. * summarized.
*/ */
keep = GetOldestUnsummarizedLSN(NULL, NULL); keep = GetOldestUnsummarizedLSN(NULL, NULL);
if (keep != InvalidXLogRecPtr) if (XLogRecPtrIsValid(keep))
{ {
XLogSegNo unsummarized_segno; XLogSegNo unsummarized_segno;
@@ -8352,8 +8352,8 @@ xlog_redo(XLogReaderState *record)
* never arrive. * never arrive.
*/ */
if (ArchiveRecoveryRequested && if (ArchiveRecoveryRequested &&
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint) && XLogRecPtrIsValid(ControlFile->backupStartPoint) &&
XLogRecPtrIsInvalid(ControlFile->backupEndPoint)) !XLogRecPtrIsValid(ControlFile->backupEndPoint))
ereport(PANIC, ereport(PANIC,
(errmsg("online backup was canceled, recovery cannot continue"))); (errmsg("online backup was canceled, recovery cannot continue")));
@@ -8603,7 +8603,7 @@ xlog_redo(XLogReaderState *record)
LocalMinRecoveryPoint = ControlFile->minRecoveryPoint; LocalMinRecoveryPoint = ControlFile->minRecoveryPoint;
LocalMinRecoveryPointTLI = ControlFile->minRecoveryPointTLI; LocalMinRecoveryPointTLI = ControlFile->minRecoveryPointTLI;
} }
if (LocalMinRecoveryPoint != InvalidXLogRecPtr && LocalMinRecoveryPoint < lsn) if (XLogRecPtrIsValid(LocalMinRecoveryPoint) && LocalMinRecoveryPoint < lsn)
{ {
TimeLineID replayTLI; TimeLineID replayTLI;

View File

@@ -79,8 +79,8 @@ build_backup_content(BackupState *state, bool ishistoryfile)
} }
/* either both istartpoint and istarttli should be set, or neither */ /* either both istartpoint and istarttli should be set, or neither */
Assert(XLogRecPtrIsInvalid(state->istartpoint) == (state->istarttli == 0)); Assert(XLogRecPtrIsValid(state->istartpoint) == (state->istarttli != 0));
if (!XLogRecPtrIsInvalid(state->istartpoint)) if (XLogRecPtrIsValid(state->istartpoint))
{ {
appendStringInfo(&result, "INCREMENTAL FROM LSN: %X/%08X\n", appendStringInfo(&result, "INCREMENTAL FROM LSN: %X/%08X\n",
LSN_FORMAT_ARGS(state->istartpoint)); LSN_FORMAT_ARGS(state->istartpoint));

View File

@@ -341,7 +341,7 @@ pg_last_wal_receive_lsn(PG_FUNCTION_ARGS)
recptr = GetWalRcvFlushRecPtr(NULL, NULL); recptr = GetWalRcvFlushRecPtr(NULL, NULL);
if (recptr == 0) if (!XLogRecPtrIsValid(recptr))
PG_RETURN_NULL(); PG_RETURN_NULL();
PG_RETURN_LSN(recptr); PG_RETURN_LSN(recptr);
@@ -360,7 +360,7 @@ pg_last_wal_replay_lsn(PG_FUNCTION_ARGS)
recptr = GetXLogReplayRecPtr(NULL); recptr = GetXLogReplayRecPtr(NULL);
if (recptr == 0) if (!XLogRecPtrIsValid(recptr))
PG_RETURN_NULL(); PG_RETURN_NULL();
PG_RETURN_LSN(recptr); PG_RETURN_LSN(recptr);

View File

@@ -528,7 +528,7 @@ XLogInsert(RmgrId rmid, uint8 info)
EndPos = XLogInsertRecord(rdt, fpw_lsn, curinsert_flags, num_fpi, EndPos = XLogInsertRecord(rdt, fpw_lsn, curinsert_flags, num_fpi,
fpi_bytes, topxid_included); fpi_bytes, topxid_included);
} while (EndPos == InvalidXLogRecPtr); } while (!XLogRecPtrIsValid(EndPos));
XLogResetInsertion(); XLogResetInsertion();
@@ -639,7 +639,7 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
needs_backup = (page_lsn <= RedoRecPtr); needs_backup = (page_lsn <= RedoRecPtr);
if (!needs_backup) if (!needs_backup)
{ {
if (*fpw_lsn == InvalidXLogRecPtr || page_lsn < *fpw_lsn) if (!XLogRecPtrIsValid(*fpw_lsn) || page_lsn < *fpw_lsn)
*fpw_lsn = page_lsn; *fpw_lsn = page_lsn;
} }
} }

View File

@@ -231,7 +231,7 @@ WALOpenSegmentInit(WALOpenSegment *seg, WALSegmentContext *segcxt,
void void
XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr) XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr)
{ {
Assert(!XLogRecPtrIsInvalid(RecPtr)); Assert(XLogRecPtrIsValid(RecPtr));
ResetDecoder(state); ResetDecoder(state);
@@ -343,7 +343,7 @@ XLogNextRecord(XLogReaderState *state, char **errormsg)
* XLogBeginRead() or XLogNextRecord(), and is the location of the * XLogBeginRead() or XLogNextRecord(), and is the location of the
* error. * error.
*/ */
Assert(!XLogRecPtrIsInvalid(state->EndRecPtr)); Assert(XLogRecPtrIsValid(state->EndRecPtr));
return NULL; return NULL;
} }
@@ -558,7 +558,7 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking)
RecPtr = state->NextRecPtr; RecPtr = state->NextRecPtr;
if (state->DecodeRecPtr != InvalidXLogRecPtr) if (XLogRecPtrIsValid(state->DecodeRecPtr))
{ {
/* read the record after the one we just read */ /* read the record after the one we just read */
@@ -1398,7 +1398,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr)
XLogPageHeader header; XLogPageHeader header;
char *errormsg; char *errormsg;
Assert(!XLogRecPtrIsInvalid(RecPtr)); Assert(XLogRecPtrIsValid(RecPtr));
/* Make sure ReadPageInternal() can't return XLREAD_WOULDBLOCK. */ /* Make sure ReadPageInternal() can't return XLREAD_WOULDBLOCK. */
state->nonblocking = false; state->nonblocking = false;

View File

@@ -758,9 +758,9 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
* end-of-backup record), and we can enter archive recovery directly. * end-of-backup record), and we can enter archive recovery directly.
*/ */
if (ArchiveRecoveryRequested && if (ArchiveRecoveryRequested &&
(ControlFile->minRecoveryPoint != InvalidXLogRecPtr || (XLogRecPtrIsValid(ControlFile->minRecoveryPoint) ||
ControlFile->backupEndRequired || ControlFile->backupEndRequired ||
ControlFile->backupEndPoint != InvalidXLogRecPtr || XLogRecPtrIsValid(ControlFile->backupEndPoint) ||
ControlFile->state == DB_SHUTDOWNED)) ControlFile->state == DB_SHUTDOWNED))
{ {
InArchiveRecovery = true; InArchiveRecovery = true;
@@ -773,7 +773,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
* emit a log message when we continue initializing from a base * emit a log message when we continue initializing from a base
* backup. * backup.
*/ */
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint)) if (XLogRecPtrIsValid(ControlFile->backupStartPoint))
ereport(LOG, ereport(LOG,
errmsg("restarting backup recovery with redo LSN %X/%08X", errmsg("restarting backup recovery with redo LSN %X/%08X",
LSN_FORMAT_ARGS(ControlFile->backupStartPoint))); LSN_FORMAT_ARGS(ControlFile->backupStartPoint)));
@@ -868,7 +868,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
* The min recovery point should be part of the requested timeline's * The min recovery point should be part of the requested timeline's
* history, too. * history, too.
*/ */
if (!XLogRecPtrIsInvalid(ControlFile->minRecoveryPoint) && if (XLogRecPtrIsValid(ControlFile->minRecoveryPoint) &&
tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) != tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) !=
ControlFile->minRecoveryPointTLI) ControlFile->minRecoveryPointTLI)
ereport(FATAL, ereport(FATAL,
@@ -2204,7 +2204,7 @@ CheckRecoveryConsistency(void)
* During crash recovery, we don't reach a consistent state until we've * During crash recovery, we don't reach a consistent state until we've
* replayed all the WAL. * replayed all the WAL.
*/ */
if (XLogRecPtrIsInvalid(minRecoveryPoint)) if (!XLogRecPtrIsValid(minRecoveryPoint))
return; return;
Assert(InArchiveRecovery); Assert(InArchiveRecovery);
@@ -2219,7 +2219,7 @@ CheckRecoveryConsistency(void)
/* /*
* Have we reached the point where our base backup was completed? * Have we reached the point where our base backup was completed?
*/ */
if (!XLogRecPtrIsInvalid(backupEndPoint) && if (XLogRecPtrIsValid(backupEndPoint) &&
backupEndPoint <= lastReplayedEndRecPtr) backupEndPoint <= lastReplayedEndRecPtr)
{ {
XLogRecPtr saveBackupStartPoint = backupStartPoint; XLogRecPtr saveBackupStartPoint = backupStartPoint;
@@ -2425,7 +2425,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI,
* branched before the timeline the min recovery point is on, and you * branched before the timeline the min recovery point is on, and you
* attempt to do PITR to the new timeline. * attempt to do PITR to the new timeline.
*/ */
if (!XLogRecPtrIsInvalid(minRecoveryPoint) && if (XLogRecPtrIsValid(minRecoveryPoint) &&
lsn < minRecoveryPoint && lsn < minRecoveryPoint &&
newTLI > minRecoveryPointTLI) newTLI > minRecoveryPointTLI)
ereport(PANIC, ereport(PANIC,
@@ -3164,7 +3164,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
/* Pass through parameters to XLogPageRead */ /* Pass through parameters to XLogPageRead */
private->fetching_ckpt = fetching_ckpt; private->fetching_ckpt = fetching_ckpt;
private->emode = emode; private->emode = emode;
private->randAccess = (xlogreader->ReadRecPtr == InvalidXLogRecPtr); private->randAccess = !XLogRecPtrIsValid(xlogreader->ReadRecPtr);
private->replayTLI = replayTLI; private->replayTLI = replayTLI;
/* This is the first attempt to read this page. */ /* This is the first attempt to read this page. */
@@ -3190,7 +3190,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
* overwrite contrecord in the wrong place, breaking everything. * overwrite contrecord in the wrong place, breaking everything.
*/ */
if (!ArchiveRecoveryRequested && if (!ArchiveRecoveryRequested &&
!XLogRecPtrIsInvalid(xlogreader->abortedRecPtr)) XLogRecPtrIsValid(xlogreader->abortedRecPtr))
{ {
abortedRecPtr = xlogreader->abortedRecPtr; abortedRecPtr = xlogreader->abortedRecPtr;
missingContrecPtr = xlogreader->missingContrecPtr; missingContrecPtr = xlogreader->missingContrecPtr;
@@ -4370,7 +4370,7 @@ XLogFileReadAnyTLI(XLogSegNo segno, XLogSource source)
* Skip scanning the timeline ID that the logfile segment to read * Skip scanning the timeline ID that the logfile segment to read
* doesn't belong to * doesn't belong to
*/ */
if (hent->begin != InvalidXLogRecPtr) if (XLogRecPtrIsValid(hent->begin))
{ {
XLogSegNo beginseg = 0; XLogSegNo beginseg = 0;

View File

@@ -710,7 +710,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
const XLogRecPtr lastReadPage = (state->seg.ws_segno * const XLogRecPtr lastReadPage = (state->seg.ws_segno *
state->segcxt.ws_segsize + state->segoff); state->segcxt.ws_segsize + state->segoff);
Assert(wantPage != InvalidXLogRecPtr && wantPage % XLOG_BLCKSZ == 0); Assert(XLogRecPtrIsValid(wantPage) && wantPage % XLOG_BLCKSZ == 0);
Assert(wantLength <= XLOG_BLCKSZ); Assert(wantLength <= XLOG_BLCKSZ);
Assert(state->readLen == 0 || state->readLen <= XLOG_BLCKSZ); Assert(state->readLen == 0 || state->readLen <= XLOG_BLCKSZ);
Assert(currTLI != 0); Assert(currTLI != 0);
@@ -741,7 +741,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
*/ */
if (state->currTLI == currTLI && wantPage >= lastReadPage) if (state->currTLI == currTLI && wantPage >= lastReadPage)
{ {
Assert(state->currTLIValidUntil == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(state->currTLIValidUntil));
return; return;
} }
@@ -750,7 +750,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
* timeline and the timeline we're reading from is valid until the end of * timeline and the timeline we're reading from is valid until the end of
* the current segment we can just keep reading. * the current segment we can just keep reading.
*/ */
if (state->currTLIValidUntil != InvalidXLogRecPtr && if (XLogRecPtrIsValid(state->currTLIValidUntil) &&
state->currTLI != currTLI && state->currTLI != currTLI &&
state->currTLI != 0 && state->currTLI != 0 &&
((wantPage + wantLength) / state->segcxt.ws_segsize) < ((wantPage + wantLength) / state->segcxt.ws_segsize) <
@@ -790,7 +790,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
state->currTLIValidUntil = tliSwitchPoint(state->currTLI, timelineHistory, state->currTLIValidUntil = tliSwitchPoint(state->currTLI, timelineHistory,
&state->nextTLI); &state->nextTLI);
Assert(state->currTLIValidUntil == InvalidXLogRecPtr || Assert(!XLogRecPtrIsValid(state->currTLIValidUntil) ||
wantPage + wantLength < state->currTLIValidUntil); wantPage + wantLength < state->currTLIValidUntil);
list_free_deep(timelineHistory); list_free_deep(timelineHistory);

View File

@@ -230,7 +230,7 @@ wakeupWaiters(WaitLSNType lsnType, XLogRecPtr currentLSN)
/* Get procInfo using appropriate heap node */ /* Get procInfo using appropriate heap node */
procInfo = pairingheap_container(WaitLSNProcInfo, heapNode[i], node); procInfo = pairingheap_container(WaitLSNProcInfo, heapNode[i], node);
if (!XLogRecPtrIsInvalid(currentLSN) && procInfo->waitLSN > currentLSN) if (XLogRecPtrIsValid(currentLSN) && procInfo->waitLSN > currentLSN)
break; break;
Assert(numWakeUpProcs < WAKEUP_PROC_STATIC_ARRAY_SIZE); Assert(numWakeUpProcs < WAKEUP_PROC_STATIC_ARRAY_SIZE);

View File

@@ -242,7 +242,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
* entry->end is InvalidXLogRecPtr, it means that the timeline has not * entry->end is InvalidXLogRecPtr, it means that the timeline has not
* yet ended.) * yet ended.)
*/ */
if (!XLogRecPtrIsInvalid(entry->end) && entry->end < startptr) if (XLogRecPtrIsValid(entry->end) && entry->end < startptr)
continue; continue;
/* /*
@@ -274,7 +274,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
* better have arrived at the expected starting TLI. If not, * better have arrived at the expected starting TLI. If not,
* something's gone horribly wrong. * something's gone horribly wrong.
*/ */
if (XLogRecPtrIsInvalid(entry->begin)) if (!XLogRecPtrIsValid(entry->begin))
ereport(ERROR, ereport(ERROR,
errmsg("expected start timeline %u but found timeline %u", errmsg("expected start timeline %u but found timeline %u",
starttli, entry->tli)); starttli, entry->tli));

View File

@@ -519,7 +519,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
if (!WalSummariesAreComplete(tli_wslist, tli_start_lsn, tli_end_lsn, if (!WalSummariesAreComplete(tli_wslist, tli_start_lsn, tli_end_lsn,
&tli_missing_lsn)) &tli_missing_lsn))
{ {
if (XLogRecPtrIsInvalid(tli_missing_lsn)) if (!XLogRecPtrIsValid(tli_missing_lsn))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist", errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist",

View File

@@ -67,9 +67,9 @@ GetWalSummaries(TimeLineID tli, XLogRecPtr start_lsn, XLogRecPtr end_lsn)
/* Skip if it doesn't match the filter criteria. */ /* Skip if it doesn't match the filter criteria. */
if (tli != 0 && tli != file_tli) if (tli != 0 && tli != file_tli)
continue; continue;
if (!XLogRecPtrIsInvalid(start_lsn) && start_lsn >= file_end_lsn) if (XLogRecPtrIsValid(start_lsn) && start_lsn >= file_end_lsn)
continue; continue;
if (!XLogRecPtrIsInvalid(end_lsn) && end_lsn <= file_start_lsn) if (XLogRecPtrIsValid(end_lsn) && end_lsn <= file_start_lsn)
continue; continue;
/* Add it to the list. */ /* Add it to the list. */
@@ -111,9 +111,9 @@ FilterWalSummaries(List *wslist, TimeLineID tli,
/* Skip if it doesn't match the filter criteria. */ /* Skip if it doesn't match the filter criteria. */
if (tli != 0 && tli != ws->tli) if (tli != 0 && tli != ws->tli)
continue; continue;
if (!XLogRecPtrIsInvalid(start_lsn) && start_lsn > ws->end_lsn) if (XLogRecPtrIsValid(start_lsn) && start_lsn > ws->end_lsn)
continue; continue;
if (!XLogRecPtrIsInvalid(end_lsn) && end_lsn < ws->start_lsn) if (XLogRecPtrIsValid(end_lsn) && end_lsn < ws->start_lsn)
continue; continue;
/* Add it to the result list. */ /* Add it to the result list. */

View File

@@ -293,7 +293,7 @@ AddSubscriptionRelState(Oid subid, Oid relid, char state,
values[Anum_pg_subscription_rel_srsubid - 1] = ObjectIdGetDatum(subid); values[Anum_pg_subscription_rel_srsubid - 1] = ObjectIdGetDatum(subid);
values[Anum_pg_subscription_rel_srrelid - 1] = ObjectIdGetDatum(relid); values[Anum_pg_subscription_rel_srrelid - 1] = ObjectIdGetDatum(relid);
values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state); values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state);
if (sublsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(sublsn))
values[Anum_pg_subscription_rel_srsublsn - 1] = LSNGetDatum(sublsn); values[Anum_pg_subscription_rel_srsublsn - 1] = LSNGetDatum(sublsn);
else else
nulls[Anum_pg_subscription_rel_srsublsn - 1] = true; nulls[Anum_pg_subscription_rel_srsublsn - 1] = true;
@@ -366,7 +366,7 @@ UpdateSubscriptionRelState(Oid subid, Oid relid, char state,
values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state); values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state);
replaces[Anum_pg_subscription_rel_srsublsn - 1] = true; replaces[Anum_pg_subscription_rel_srsublsn - 1] = true;
if (sublsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(sublsn))
values[Anum_pg_subscription_rel_srsublsn - 1] = LSNGetDatum(sublsn); values[Anum_pg_subscription_rel_srsublsn - 1] = LSNGetDatum(sublsn);
else else
nulls[Anum_pg_subscription_rel_srsublsn - 1] = true; nulls[Anum_pg_subscription_rel_srsublsn - 1] = true;

View File

@@ -393,7 +393,7 @@ parse_subscription_options(ParseState *pstate, List *stmt_options,
lsn = DatumGetLSN(DirectFunctionCall1(pg_lsn_in, lsn = DatumGetLSN(DirectFunctionCall1(pg_lsn_in,
CStringGetDatum(lsn_str))); CStringGetDatum(lsn_str)));
if (XLogRecPtrIsInvalid(lsn)) if (!XLogRecPtrIsValid(lsn))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid WAL location (LSN): %s", lsn_str))); errmsg("invalid WAL location (LSN): %s", lsn_str)));
@@ -1895,7 +1895,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
* If the user sets subskiplsn, we do a sanity check to make * If the user sets subskiplsn, we do a sanity check to make
* sure that the specified LSN is a probable value. * sure that the specified LSN is a probable value.
*/ */
if (!XLogRecPtrIsInvalid(opts.lsn)) if (XLogRecPtrIsValid(opts.lsn))
{ {
RepOriginId originid; RepOriginId originid;
char originname[NAMEDATALEN]; char originname[NAMEDATALEN];
@@ -1907,7 +1907,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
remote_lsn = replorigin_get_progress(originid, false); remote_lsn = replorigin_get_progress(originid, false);
/* Check the given LSN is at least a future LSN */ /* Check the given LSN is at least a future LSN */
if (!XLogRecPtrIsInvalid(remote_lsn) && opts.lsn < remote_lsn) if (XLogRecPtrIsValid(remote_lsn) && opts.lsn < remote_lsn)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X", errmsg("skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X",

View File

@@ -342,7 +342,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
* If we discover that WAL summarization is not enabled, just exit. * If we discover that WAL summarization is not enabled, just exit.
*/ */
current_lsn = GetOldestUnsummarizedLSN(&current_tli, &exact); current_lsn = GetOldestUnsummarizedLSN(&current_tli, &exact);
if (XLogRecPtrIsInvalid(current_lsn)) if (!XLogRecPtrIsValid(current_lsn))
proc_exit(0); proc_exit(0);
/* /*
@@ -379,7 +379,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
* only have to do this once per timeline switch, we probably wouldn't * only have to do this once per timeline switch, we probably wouldn't
* save any significant amount of work in practice. * save any significant amount of work in practice.
*/ */
if (current_tli != latest_tli && XLogRecPtrIsInvalid(switch_lsn)) if (current_tli != latest_tli && !XLogRecPtrIsValid(switch_lsn))
{ {
List *tles = readTimeLineHistory(latest_tli); List *tles = readTimeLineHistory(latest_tli);
@@ -394,7 +394,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
* on this timeline. Switch to the next timeline and go around again, * on this timeline. Switch to the next timeline and go around again,
* backing up to the exact switch point if we passed it. * backing up to the exact switch point if we passed it.
*/ */
if (!XLogRecPtrIsInvalid(switch_lsn) && current_lsn >= switch_lsn) if (XLogRecPtrIsValid(switch_lsn) && current_lsn >= switch_lsn)
{ {
/* Restart summarization from switch point. */ /* Restart summarization from switch point. */
current_tli = switch_tli; current_tli = switch_tli;
@@ -419,7 +419,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
end_of_summary_lsn = SummarizeWAL(current_tli, end_of_summary_lsn = SummarizeWAL(current_tli,
current_lsn, exact, current_lsn, exact,
switch_lsn, latest_lsn); switch_lsn, latest_lsn);
Assert(!XLogRecPtrIsInvalid(end_of_summary_lsn)); Assert(XLogRecPtrIsValid(end_of_summary_lsn));
Assert(end_of_summary_lsn >= current_lsn); Assert(end_of_summary_lsn >= current_lsn);
/* /*
@@ -923,7 +923,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
private_data = (SummarizerReadLocalXLogPrivate *) private_data = (SummarizerReadLocalXLogPrivate *)
palloc0(sizeof(SummarizerReadLocalXLogPrivate)); palloc0(sizeof(SummarizerReadLocalXLogPrivate));
private_data->tli = tli; private_data->tli = tli;
private_data->historic = !XLogRecPtrIsInvalid(switch_lsn); private_data->historic = XLogRecPtrIsValid(switch_lsn);
private_data->read_upto = maximum_lsn; private_data->read_upto = maximum_lsn;
/* Create xlogreader. */ /* Create xlogreader. */
@@ -971,7 +971,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
else else
{ {
summary_start_lsn = XLogFindNextRecord(xlogreader, start_lsn); summary_start_lsn = XLogFindNextRecord(xlogreader, start_lsn);
if (XLogRecPtrIsInvalid(summary_start_lsn)) if (!XLogRecPtrIsValid(summary_start_lsn))
{ {
/* /*
* If we hit end-of-WAL while trying to find the next valid * If we hit end-of-WAL while trying to find the next valid
@@ -1058,7 +1058,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
/* We shouldn't go backward. */ /* We shouldn't go backward. */
Assert(summary_start_lsn <= xlogreader->EndRecPtr); Assert(summary_start_lsn <= xlogreader->EndRecPtr);
if (!XLogRecPtrIsInvalid(switch_lsn) && if (XLogRecPtrIsValid(switch_lsn) &&
xlogreader->ReadRecPtr >= switch_lsn) xlogreader->ReadRecPtr >= switch_lsn)
{ {
/* /*
@@ -1180,7 +1180,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
* If we have a switch LSN and have reached it, stop before reading * If we have a switch LSN and have reached it, stop before reading
* the next record. * the next record.
*/ */
if (!XLogRecPtrIsInvalid(switch_lsn) && if (XLogRecPtrIsValid(switch_lsn) &&
xlogreader->EndRecPtr >= switch_lsn) xlogreader->EndRecPtr >= switch_lsn)
break; break;
} }
@@ -1723,7 +1723,7 @@ MaybeRemoveOldWalSummaries(void)
* If the WAL doesn't exist any more, we can remove it if the file * If the WAL doesn't exist any more, we can remove it if the file
* modification time is old enough. * modification time is old enough.
*/ */
if (XLogRecPtrIsInvalid(oldest_lsn) || ws->end_lsn <= oldest_lsn) if (!XLogRecPtrIsValid(oldest_lsn) || ws->end_lsn <= oldest_lsn)
RemoveWalSummaryIfOlderThan(ws, cutoff_time); RemoveWalSummaryIfOlderThan(ws, cutoff_time);
/* /*

View File

@@ -299,7 +299,7 @@ pa_can_start(void)
* STREAM START message, and it doesn't seem worth sending the extra eight * STREAM START message, and it doesn't seem worth sending the extra eight
* bytes with the STREAM START to enable parallelism for this case. * bytes with the STREAM START to enable parallelism for this case.
*/ */
if (!XLogRecPtrIsInvalid(MySubscription->skiplsn)) if (XLogRecPtrIsValid(MySubscription->skiplsn))
return false; return false;
/* /*
@@ -1640,7 +1640,7 @@ pa_xact_finish(ParallelApplyWorkerInfo *winfo, XLogRecPtr remote_lsn)
*/ */
pa_wait_for_xact_finish(winfo); pa_wait_for_xact_finish(winfo);
if (!XLogRecPtrIsInvalid(remote_lsn)) if (XLogRecPtrIsValid(remote_lsn))
store_flush_position(remote_lsn, winfo->shared->last_commit_end); store_flush_position(remote_lsn, winfo->shared->last_commit_end);
pa_free_worker(winfo); pa_free_worker(winfo);

View File

@@ -1661,7 +1661,7 @@ pg_stat_get_subscription(PG_FUNCTION_ARGS)
else else
nulls[3] = true; nulls[3] = true;
if (XLogRecPtrIsInvalid(worker.last_lsn)) if (!XLogRecPtrIsValid(worker.last_lsn))
nulls[4] = true; nulls[4] = true;
else else
values[4] = LSNGetDatum(worker.last_lsn); values[4] = LSNGetDatum(worker.last_lsn);
@@ -1673,7 +1673,7 @@ pg_stat_get_subscription(PG_FUNCTION_ARGS)
nulls[6] = true; nulls[6] = true;
else else
values[6] = TimestampTzGetDatum(worker.last_recv_time); values[6] = TimestampTzGetDatum(worker.last_recv_time);
if (XLogRecPtrIsInvalid(worker.reply_lsn)) if (!XLogRecPtrIsValid(worker.reply_lsn))
nulls[7] = true; nulls[7] = true;
else else
values[7] = LSNGetDatum(worker.reply_lsn); values[7] = LSNGetDatum(worker.reply_lsn);

View File

@@ -388,7 +388,7 @@ CreateInitDecodingContext(const char *plugin,
slot->data.plugin = plugin_name; slot->data.plugin = plugin_name;
SpinLockRelease(&slot->mutex); SpinLockRelease(&slot->mutex);
if (XLogRecPtrIsInvalid(restart_lsn)) if (!XLogRecPtrIsValid(restart_lsn))
ReplicationSlotReserveWal(); ReplicationSlotReserveWal();
else else
{ {
@@ -546,9 +546,9 @@ CreateDecodingContext(XLogRecPtr start_lsn,
/* slot must be valid to allow decoding */ /* slot must be valid to allow decoding */
Assert(slot->data.invalidated == RS_INVAL_NONE); Assert(slot->data.invalidated == RS_INVAL_NONE);
Assert(slot->data.restart_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(slot->data.restart_lsn));
if (start_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(start_lsn))
{ {
/* continue from last position */ /* continue from last position */
start_lsn = slot->data.confirmed_flush; start_lsn = slot->data.confirmed_flush;
@@ -757,7 +757,7 @@ output_plugin_error_callback(void *arg)
LogicalErrorCallbackState *state = (LogicalErrorCallbackState *) arg; LogicalErrorCallbackState *state = (LogicalErrorCallbackState *) arg;
/* not all callbacks have an associated LSN */ /* not all callbacks have an associated LSN */
if (state->report_location != InvalidXLogRecPtr) if (XLogRecPtrIsValid(state->report_location))
errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X", errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X",
NameStr(state->ctx->slot->data.name), NameStr(state->ctx->slot->data.name),
NameStr(state->ctx->slot->data.plugin), NameStr(state->ctx->slot->data.plugin),
@@ -1711,7 +1711,7 @@ LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin)
* Only increase if the previous values have been applied, otherwise we * Only increase if the previous values have been applied, otherwise we
* might never end up updating if the receiver acks too slowly. * might never end up updating if the receiver acks too slowly.
*/ */
else if (slot->candidate_xmin_lsn == InvalidXLogRecPtr) else if (!XLogRecPtrIsValid(slot->candidate_xmin_lsn))
{ {
slot->candidate_catalog_xmin = xmin; slot->candidate_catalog_xmin = xmin;
slot->candidate_xmin_lsn = current_lsn; slot->candidate_xmin_lsn = current_lsn;
@@ -1749,8 +1749,8 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
slot = MyReplicationSlot; slot = MyReplicationSlot;
Assert(slot != NULL); Assert(slot != NULL);
Assert(restart_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(restart_lsn));
Assert(current_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(current_lsn));
SpinLockAcquire(&slot->mutex); SpinLockAcquire(&slot->mutex);
@@ -1779,7 +1779,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
* might never end up updating if the receiver acks too slowly. A missed * might never end up updating if the receiver acks too slowly. A missed
* value here will just cause some extra effort after reconnecting. * value here will just cause some extra effort after reconnecting.
*/ */
else if (slot->candidate_restart_valid == InvalidXLogRecPtr) else if (!XLogRecPtrIsValid(slot->candidate_restart_valid))
{ {
slot->candidate_restart_valid = current_lsn; slot->candidate_restart_valid = current_lsn;
slot->candidate_restart_lsn = restart_lsn; slot->candidate_restart_lsn = restart_lsn;
@@ -1819,11 +1819,11 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
void void
LogicalConfirmReceivedLocation(XLogRecPtr lsn) LogicalConfirmReceivedLocation(XLogRecPtr lsn)
{ {
Assert(lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(lsn));
/* Do an unlocked check for candidate_lsn first. */ /* Do an unlocked check for candidate_lsn first. */
if (MyReplicationSlot->candidate_xmin_lsn != InvalidXLogRecPtr || if (XLogRecPtrIsValid(MyReplicationSlot->candidate_xmin_lsn) ||
MyReplicationSlot->candidate_restart_valid != InvalidXLogRecPtr) XLogRecPtrIsValid(MyReplicationSlot->candidate_restart_valid))
{ {
bool updated_xmin = false; bool updated_xmin = false;
bool updated_restart = false; bool updated_restart = false;
@@ -1849,7 +1849,7 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn)
MyReplicationSlot->data.confirmed_flush = lsn; MyReplicationSlot->data.confirmed_flush = lsn;
/* if we're past the location required for bumping xmin, do so */ /* if we're past the location required for bumping xmin, do so */
if (MyReplicationSlot->candidate_xmin_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(MyReplicationSlot->candidate_xmin_lsn) &&
MyReplicationSlot->candidate_xmin_lsn <= lsn) MyReplicationSlot->candidate_xmin_lsn <= lsn)
{ {
/* /*
@@ -1871,10 +1871,10 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn)
} }
} }
if (MyReplicationSlot->candidate_restart_valid != InvalidXLogRecPtr && if (XLogRecPtrIsValid(MyReplicationSlot->candidate_restart_valid) &&
MyReplicationSlot->candidate_restart_valid <= lsn) MyReplicationSlot->candidate_restart_valid <= lsn)
{ {
Assert(MyReplicationSlot->candidate_restart_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(MyReplicationSlot->candidate_restart_lsn));
MyReplicationSlot->data.restart_lsn = MyReplicationSlot->candidate_restart_lsn; MyReplicationSlot->data.restart_lsn = MyReplicationSlot->candidate_restart_lsn;
MyReplicationSlot->candidate_restart_lsn = InvalidXLogRecPtr; MyReplicationSlot->candidate_restart_lsn = InvalidXLogRecPtr;
@@ -2089,7 +2089,7 @@ LogicalSlotAdvanceAndCheckSnapState(XLogRecPtr moveto,
ResourceOwner old_resowner PG_USED_FOR_ASSERTS_ONLY = CurrentResourceOwner; ResourceOwner old_resowner PG_USED_FOR_ASSERTS_ONLY = CurrentResourceOwner;
XLogRecPtr retlsn; XLogRecPtr retlsn;
Assert(moveto != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(moveto));
if (found_consistent_snapshot) if (found_consistent_snapshot)
*found_consistent_snapshot = false; *found_consistent_snapshot = false;
@@ -2163,7 +2163,7 @@ LogicalSlotAdvanceAndCheckSnapState(XLogRecPtr moveto,
if (found_consistent_snapshot && DecodingContextReady(ctx)) if (found_consistent_snapshot && DecodingContextReady(ctx))
*found_consistent_snapshot = true; *found_consistent_snapshot = true;
if (ctx->reader->EndRecPtr != InvalidXLogRecPtr) if (XLogRecPtrIsValid(ctx->reader->EndRecPtr))
{ {
LogicalConfirmReceivedLocation(moveto); LogicalConfirmReceivedLocation(moveto);

View File

@@ -229,7 +229,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
* Wait for specified streaming replication standby servers (if any) * Wait for specified streaming replication standby servers (if any)
* to confirm receipt of WAL up to wait_for_wal_lsn. * to confirm receipt of WAL up to wait_for_wal_lsn.
*/ */
if (XLogRecPtrIsInvalid(upto_lsn)) if (!XLogRecPtrIsValid(upto_lsn))
wait_for_wal_lsn = end_of_wal; wait_for_wal_lsn = end_of_wal;
else else
wait_for_wal_lsn = Min(upto_lsn, end_of_wal); wait_for_wal_lsn = Min(upto_lsn, end_of_wal);
@@ -276,7 +276,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
} }
/* check limits */ /* check limits */
if (upto_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(upto_lsn) &&
upto_lsn <= ctx->reader->EndRecPtr) upto_lsn <= ctx->reader->EndRecPtr)
break; break;
if (upto_nchanges != 0 && if (upto_nchanges != 0 &&
@@ -289,7 +289,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
* Next time, start where we left off. (Hunting things, the family * Next time, start where we left off. (Hunting things, the family
* business..) * business..)
*/ */
if (ctx->reader->EndRecPtr != InvalidXLogRecPtr && confirm) if (XLogRecPtrIsValid(ctx->reader->EndRecPtr) && confirm)
{ {
LogicalConfirmReceivedLocation(ctx->reader->EndRecPtr); LogicalConfirmReceivedLocation(ctx->reader->EndRecPtr);

View File

@@ -984,8 +984,8 @@ replorigin_advance(RepOriginId node,
/* initialize new slot */ /* initialize new slot */
LWLockAcquire(&free_state->lock, LW_EXCLUSIVE); LWLockAcquire(&free_state->lock, LW_EXCLUSIVE);
replication_state = free_state; replication_state = free_state;
Assert(replication_state->remote_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(replication_state->remote_lsn));
Assert(replication_state->local_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(replication_state->local_lsn));
replication_state->roident = node; replication_state->roident = node;
} }
@@ -1020,7 +1020,7 @@ replorigin_advance(RepOriginId node,
*/ */
if (go_backward || replication_state->remote_lsn < remote_commit) if (go_backward || replication_state->remote_lsn < remote_commit)
replication_state->remote_lsn = remote_commit; replication_state->remote_lsn = remote_commit;
if (local_commit != InvalidXLogRecPtr && if (XLogRecPtrIsValid(local_commit) &&
(go_backward || replication_state->local_lsn < local_commit)) (go_backward || replication_state->local_lsn < local_commit))
replication_state->local_lsn = local_commit; replication_state->local_lsn = local_commit;
LWLockRelease(&replication_state->lock); LWLockRelease(&replication_state->lock);
@@ -1064,7 +1064,7 @@ replorigin_get_progress(RepOriginId node, bool flush)
LWLockRelease(ReplicationOriginLock); LWLockRelease(ReplicationOriginLock);
if (flush && local_lsn != InvalidXLogRecPtr) if (flush && XLogRecPtrIsValid(local_lsn))
XLogFlush(local_lsn); XLogFlush(local_lsn);
return remote_lsn; return remote_lsn;
@@ -1197,8 +1197,8 @@ replorigin_session_setup(RepOriginId node, int acquired_by)
/* initialize new slot */ /* initialize new slot */
session_replication_state = &replication_states[free_slot]; session_replication_state = &replication_states[free_slot];
Assert(session_replication_state->remote_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(session_replication_state->remote_lsn));
Assert(session_replication_state->local_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(session_replication_state->local_lsn));
session_replication_state->roident = node; session_replication_state->roident = node;
} }
@@ -1282,7 +1282,7 @@ replorigin_session_get_progress(bool flush)
local_lsn = session_replication_state->local_lsn; local_lsn = session_replication_state->local_lsn;
LWLockRelease(&session_replication_state->lock); LWLockRelease(&session_replication_state->lock);
if (flush && local_lsn != InvalidXLogRecPtr) if (flush && XLogRecPtrIsValid(local_lsn))
XLogFlush(local_lsn); XLogFlush(local_lsn);
return remote_lsn; return remote_lsn;
@@ -1454,7 +1454,7 @@ pg_replication_origin_session_progress(PG_FUNCTION_ARGS)
remote_lsn = replorigin_session_get_progress(flush); remote_lsn = replorigin_session_get_progress(flush);
if (remote_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(remote_lsn))
PG_RETURN_NULL(); PG_RETURN_NULL();
PG_RETURN_LSN(remote_lsn); PG_RETURN_LSN(remote_lsn);
@@ -1543,7 +1543,7 @@ pg_replication_origin_progress(PG_FUNCTION_ARGS)
remote_lsn = replorigin_get_progress(roident, flush); remote_lsn = replorigin_get_progress(roident, flush);
if (remote_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(remote_lsn))
PG_RETURN_NULL(); PG_RETURN_NULL();
PG_RETURN_LSN(remote_lsn); PG_RETURN_LSN(remote_lsn);

View File

@@ -64,7 +64,7 @@ logicalrep_read_begin(StringInfo in, LogicalRepBeginData *begin_data)
{ {
/* read fields */ /* read fields */
begin_data->final_lsn = pq_getmsgint64(in); begin_data->final_lsn = pq_getmsgint64(in);
if (begin_data->final_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(begin_data->final_lsn))
elog(ERROR, "final_lsn not set in begin message"); elog(ERROR, "final_lsn not set in begin message");
begin_data->committime = pq_getmsgint64(in); begin_data->committime = pq_getmsgint64(in);
begin_data->xid = pq_getmsgint(in, 4); begin_data->xid = pq_getmsgint(in, 4);
@@ -135,10 +135,10 @@ logicalrep_read_begin_prepare(StringInfo in, LogicalRepPreparedTxnData *begin_da
{ {
/* read fields */ /* read fields */
begin_data->prepare_lsn = pq_getmsgint64(in); begin_data->prepare_lsn = pq_getmsgint64(in);
if (begin_data->prepare_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(begin_data->prepare_lsn))
elog(ERROR, "prepare_lsn not set in begin prepare message"); elog(ERROR, "prepare_lsn not set in begin prepare message");
begin_data->end_lsn = pq_getmsgint64(in); begin_data->end_lsn = pq_getmsgint64(in);
if (begin_data->end_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(begin_data->end_lsn))
elog(ERROR, "end_lsn not set in begin prepare message"); elog(ERROR, "end_lsn not set in begin prepare message");
begin_data->prepare_time = pq_getmsgint64(in); begin_data->prepare_time = pq_getmsgint64(in);
begin_data->xid = pq_getmsgint(in, 4); begin_data->xid = pq_getmsgint(in, 4);
@@ -207,10 +207,10 @@ logicalrep_read_prepare_common(StringInfo in, char *msgtype,
/* read fields */ /* read fields */
prepare_data->prepare_lsn = pq_getmsgint64(in); prepare_data->prepare_lsn = pq_getmsgint64(in);
if (prepare_data->prepare_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(prepare_data->prepare_lsn))
elog(ERROR, "prepare_lsn is not set in %s message", msgtype); elog(ERROR, "prepare_lsn is not set in %s message", msgtype);
prepare_data->end_lsn = pq_getmsgint64(in); prepare_data->end_lsn = pq_getmsgint64(in);
if (prepare_data->end_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(prepare_data->end_lsn))
elog(ERROR, "end_lsn is not set in %s message", msgtype); elog(ERROR, "end_lsn is not set in %s message", msgtype);
prepare_data->prepare_time = pq_getmsgint64(in); prepare_data->prepare_time = pq_getmsgint64(in);
prepare_data->xid = pq_getmsgint(in, 4); prepare_data->xid = pq_getmsgint(in, 4);
@@ -274,10 +274,10 @@ logicalrep_read_commit_prepared(StringInfo in, LogicalRepCommitPreparedTxnData *
/* read fields */ /* read fields */
prepare_data->commit_lsn = pq_getmsgint64(in); prepare_data->commit_lsn = pq_getmsgint64(in);
if (prepare_data->commit_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(prepare_data->commit_lsn))
elog(ERROR, "commit_lsn is not set in commit prepared message"); elog(ERROR, "commit_lsn is not set in commit prepared message");
prepare_data->end_lsn = pq_getmsgint64(in); prepare_data->end_lsn = pq_getmsgint64(in);
if (prepare_data->end_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(prepare_data->end_lsn))
elog(ERROR, "end_lsn is not set in commit prepared message"); elog(ERROR, "end_lsn is not set in commit prepared message");
prepare_data->commit_time = pq_getmsgint64(in); prepare_data->commit_time = pq_getmsgint64(in);
prepare_data->xid = pq_getmsgint(in, 4); prepare_data->xid = pq_getmsgint(in, 4);
@@ -333,10 +333,10 @@ logicalrep_read_rollback_prepared(StringInfo in,
/* read fields */ /* read fields */
rollback_data->prepare_end_lsn = pq_getmsgint64(in); rollback_data->prepare_end_lsn = pq_getmsgint64(in);
if (rollback_data->prepare_end_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(rollback_data->prepare_end_lsn))
elog(ERROR, "prepare_end_lsn is not set in rollback prepared message"); elog(ERROR, "prepare_end_lsn is not set in rollback prepared message");
rollback_data->rollback_end_lsn = pq_getmsgint64(in); rollback_data->rollback_end_lsn = pq_getmsgint64(in);
if (rollback_data->rollback_end_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(rollback_data->rollback_end_lsn))
elog(ERROR, "rollback_end_lsn is not set in rollback prepared message"); elog(ERROR, "rollback_end_lsn is not set in rollback prepared message");
rollback_data->prepare_time = pq_getmsgint64(in); rollback_data->prepare_time = pq_getmsgint64(in);
rollback_data->rollback_time = pq_getmsgint64(in); rollback_data->rollback_time = pq_getmsgint64(in);

View File

@@ -701,7 +701,7 @@ ReorderBufferTXNByXid(ReorderBuffer *rb, TransactionId xid, bool create,
{ {
/* initialize the new entry, if creation was requested */ /* initialize the new entry, if creation was requested */
Assert(ent != NULL); Assert(ent != NULL);
Assert(lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(lsn));
ent->txn = ReorderBufferAllocTXN(rb); ent->txn = ReorderBufferAllocTXN(rb);
ent->txn->xid = xid; ent->txn->xid = xid;
@@ -849,7 +849,7 @@ ReorderBufferQueueChange(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn,
change->lsn = lsn; change->lsn = lsn;
change->txn = txn; change->txn = txn;
Assert(InvalidXLogRecPtr != lsn); Assert(XLogRecPtrIsValid(lsn));
dlist_push_tail(&txn->changes, &change->node); dlist_push_tail(&txn->changes, &change->node);
txn->nentries++; txn->nentries++;
txn->nentries_mem++; txn->nentries_mem++;
@@ -966,14 +966,14 @@ AssertTXNLsnOrder(ReorderBuffer *rb)
iter.cur); iter.cur);
/* start LSN must be set */ /* start LSN must be set */
Assert(cur_txn->first_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(cur_txn->first_lsn));
/* If there is an end LSN, it must be higher than start LSN */ /* If there is an end LSN, it must be higher than start LSN */
if (cur_txn->end_lsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(cur_txn->end_lsn))
Assert(cur_txn->first_lsn <= cur_txn->end_lsn); Assert(cur_txn->first_lsn <= cur_txn->end_lsn);
/* Current initial LSN must be strictly higher than previous */ /* Current initial LSN must be strictly higher than previous */
if (prev_first_lsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(prev_first_lsn))
Assert(prev_first_lsn < cur_txn->first_lsn); Assert(prev_first_lsn < cur_txn->first_lsn);
/* known-as-subtxn txns must not be listed */ /* known-as-subtxn txns must not be listed */
@@ -990,10 +990,10 @@ AssertTXNLsnOrder(ReorderBuffer *rb)
/* base snapshot (and its LSN) must be set */ /* base snapshot (and its LSN) must be set */
Assert(cur_txn->base_snapshot != NULL); Assert(cur_txn->base_snapshot != NULL);
Assert(cur_txn->base_snapshot_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(cur_txn->base_snapshot_lsn));
/* current LSN must be strictly higher than previous */ /* current LSN must be strictly higher than previous */
if (prev_base_snap_lsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(prev_base_snap_lsn))
Assert(prev_base_snap_lsn < cur_txn->base_snapshot_lsn); Assert(prev_base_snap_lsn < cur_txn->base_snapshot_lsn);
/* known-as-subtxn txns must not be listed */ /* known-as-subtxn txns must not be listed */
@@ -1022,11 +1022,11 @@ AssertChangeLsnOrder(ReorderBufferTXN *txn)
cur_change = dlist_container(ReorderBufferChange, node, iter.cur); cur_change = dlist_container(ReorderBufferChange, node, iter.cur);
Assert(txn->first_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->first_lsn));
Assert(cur_change->lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(cur_change->lsn));
Assert(txn->first_lsn <= cur_change->lsn); Assert(txn->first_lsn <= cur_change->lsn);
if (txn->end_lsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(txn->end_lsn))
Assert(cur_change->lsn <= txn->end_lsn); Assert(cur_change->lsn <= txn->end_lsn);
Assert(prev_lsn <= cur_change->lsn); Assert(prev_lsn <= cur_change->lsn);
@@ -1053,7 +1053,7 @@ ReorderBufferGetOldestTXN(ReorderBuffer *rb)
txn = dlist_head_element(ReorderBufferTXN, node, &rb->toplevel_by_lsn); txn = dlist_head_element(ReorderBufferTXN, node, &rb->toplevel_by_lsn);
Assert(!rbtxn_is_known_subxact(txn)); Assert(!rbtxn_is_known_subxact(txn));
Assert(txn->first_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->first_lsn));
return txn; return txn;
} }
@@ -2276,7 +2276,7 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn,
* We can't call start stream callback before processing first * We can't call start stream callback before processing first
* change. * change.
*/ */
if (prev_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(prev_lsn))
{ {
if (streaming) if (streaming)
{ {
@@ -2291,7 +2291,7 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn,
* subtransactions. The changes may have the same LSN due to * subtransactions. The changes may have the same LSN due to
* MULTI_INSERT xlog records. * MULTI_INSERT xlog records.
*/ */
Assert(prev_lsn == InvalidXLogRecPtr || prev_lsn <= change->lsn); Assert(!XLogRecPtrIsValid(prev_lsn) || prev_lsn <= change->lsn);
prev_lsn = change->lsn; prev_lsn = change->lsn;
@@ -2975,7 +2975,7 @@ ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid,
* have been updated in it by now. * have been updated in it by now.
*/ */
Assert((txn->txn_flags & RBTXN_PREPARE_STATUS_MASK) == RBTXN_IS_PREPARED); Assert((txn->txn_flags & RBTXN_PREPARE_STATUS_MASK) == RBTXN_IS_PREPARED);
Assert(txn->final_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->final_lsn));
txn->gid = pstrdup(gid); txn->gid = pstrdup(gid);
@@ -3041,7 +3041,7 @@ ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid,
*/ */
Assert((txn->txn_flags & RBTXN_PREPARE_STATUS_MASK) == Assert((txn->txn_flags & RBTXN_PREPARE_STATUS_MASK) ==
(RBTXN_IS_PREPARED | RBTXN_SKIPPED_PREPARE)); (RBTXN_IS_PREPARED | RBTXN_SKIPPED_PREPARE));
Assert(txn->final_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->final_lsn));
/* /*
* By this time the txn has the prepare record information and it is * By this time the txn has the prepare record information and it is
@@ -4552,8 +4552,8 @@ ReorderBufferRestoreChanges(ReorderBuffer *rb, ReorderBufferTXN *txn,
dlist_mutable_iter cleanup_iter; dlist_mutable_iter cleanup_iter;
File *fd = &file->vfd; File *fd = &file->vfd;
Assert(txn->first_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->first_lsn));
Assert(txn->final_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->final_lsn));
/* free current entries, so we have memory for more */ /* free current entries, so we have memory for more */
dlist_foreach_modify(cleanup_iter, &txn->changes) dlist_foreach_modify(cleanup_iter, &txn->changes)
@@ -4860,8 +4860,8 @@ ReorderBufferRestoreCleanup(ReorderBuffer *rb, ReorderBufferTXN *txn)
XLogSegNo cur; XLogSegNo cur;
XLogSegNo last; XLogSegNo last;
Assert(txn->first_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->first_lsn));
Assert(txn->final_lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(txn->final_lsn));
XLByteToSeg(txn->first_lsn, first, wal_segment_size); XLByteToSeg(txn->first_lsn, first, wal_segment_size);
XLByteToSeg(txn->final_lsn, last, wal_segment_size); XLByteToSeg(txn->final_lsn, last, wal_segment_size);

View File

@@ -493,7 +493,7 @@ reserve_wal_for_local_slot(XLogRecPtr restart_lsn)
ReplicationSlot *slot = MyReplicationSlot; ReplicationSlot *slot = MyReplicationSlot;
Assert(slot != NULL); Assert(slot != NULL);
Assert(XLogRecPtrIsInvalid(slot->data.restart_lsn)); Assert(!XLogRecPtrIsValid(slot->data.restart_lsn));
while (true) while (true)
{ {
@@ -899,8 +899,8 @@ synchronize_slots(WalReceiverConn *wrconn)
* pg_replication_slots view, then we can avoid fetching RS_EPHEMERAL * pg_replication_slots view, then we can avoid fetching RS_EPHEMERAL
* slots in the first place. * slots in the first place.
*/ */
if ((XLogRecPtrIsInvalid(remote_slot->restart_lsn) || if ((!XLogRecPtrIsValid(remote_slot->restart_lsn) ||
XLogRecPtrIsInvalid(remote_slot->confirmed_lsn) || !XLogRecPtrIsValid(remote_slot->confirmed_lsn) ||
!TransactionIdIsValid(remote_slot->catalog_xmin)) && !TransactionIdIsValid(remote_slot->catalog_xmin)) &&
remote_slot->invalidated == RS_INVAL_NONE) remote_slot->invalidated == RS_INVAL_NONE)
pfree(remote_slot); pfree(remote_slot);

View File

@@ -1210,7 +1210,7 @@ SnapBuildProcessRunningXacts(SnapBuild *builder, XLogRecPtr lsn, xl_running_xact
* oldest ongoing txn might have started when we didn't yet serialize * oldest ongoing txn might have started when we didn't yet serialize
* anything because we hadn't reached a consistent state yet. * anything because we hadn't reached a consistent state yet.
*/ */
if (txn != NULL && txn->restart_decoding_lsn != InvalidXLogRecPtr) if (txn != NULL && XLogRecPtrIsValid(txn->restart_decoding_lsn))
LogicalIncreaseRestartDecodingForSlot(lsn, txn->restart_decoding_lsn); LogicalIncreaseRestartDecodingForSlot(lsn, txn->restart_decoding_lsn);
/* /*
@@ -1218,8 +1218,8 @@ SnapBuildProcessRunningXacts(SnapBuild *builder, XLogRecPtr lsn, xl_running_xact
* we have one. * we have one.
*/ */
else if (txn == NULL && else if (txn == NULL &&
builder->reorder->current_restart_decoding_lsn != InvalidXLogRecPtr && XLogRecPtrIsValid(builder->reorder->current_restart_decoding_lsn) &&
builder->last_serialized_snapshot != InvalidXLogRecPtr) XLogRecPtrIsValid(builder->last_serialized_snapshot))
LogicalIncreaseRestartDecodingForSlot(lsn, LogicalIncreaseRestartDecodingForSlot(lsn,
builder->last_serialized_snapshot); builder->last_serialized_snapshot);
} }
@@ -1293,7 +1293,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
*/ */
if (running->oldestRunningXid == running->nextXid) if (running->oldestRunningXid == running->nextXid)
{ {
if (builder->start_decoding_at == InvalidXLogRecPtr || if (!XLogRecPtrIsValid(builder->start_decoding_at) ||
builder->start_decoding_at <= lsn) builder->start_decoding_at <= lsn)
/* can decode everything after this */ /* can decode everything after this */
builder->start_decoding_at = lsn + 1; builder->start_decoding_at = lsn + 1;
@@ -1509,8 +1509,8 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
struct stat stat_buf; struct stat stat_buf;
Size sz; Size sz;
Assert(lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(lsn));
Assert(builder->last_serialized_snapshot == InvalidXLogRecPtr || Assert(!XLogRecPtrIsValid(builder->last_serialized_snapshot) ||
builder->last_serialized_snapshot <= lsn); builder->last_serialized_snapshot <= lsn);
/* /*
@@ -2029,7 +2029,7 @@ CheckPointSnapBuild(void)
lsn = ((uint64) hi) << 32 | lo; lsn = ((uint64) hi) << 32 | lo;
/* check whether we still need it */ /* check whether we still need it */
if (lsn < cutoff || cutoff == InvalidXLogRecPtr) if (lsn < cutoff || !XLogRecPtrIsValid(cutoff))
{ {
elog(DEBUG1, "removing snapbuild snapshot %s", path); elog(DEBUG1, "removing snapbuild snapshot %s", path);

View File

@@ -514,7 +514,7 @@ bool InitializingApplyWorker = false;
* by the user. * by the user.
*/ */
static XLogRecPtr skip_xact_finish_lsn = InvalidXLogRecPtr; static XLogRecPtr skip_xact_finish_lsn = InvalidXLogRecPtr;
#define is_skipping_changes() (unlikely(!XLogRecPtrIsInvalid(skip_xact_finish_lsn))) #define is_skipping_changes() (unlikely(XLogRecPtrIsValid(skip_xact_finish_lsn)))
/* BufFile handle of the current streaming file */ /* BufFile handle of the current streaming file */
static BufFile *stream_fd = NULL; static BufFile *stream_fd = NULL;
@@ -4126,7 +4126,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received)
* due to a bug, we don't want to proceed as it can * due to a bug, we don't want to proceed as it can
* incorrectly advance oldest_nonremovable_xid. * incorrectly advance oldest_nonremovable_xid.
*/ */
if (XLogRecPtrIsInvalid(rdt_data.remote_lsn)) if (!XLogRecPtrIsValid(rdt_data.remote_lsn))
elog(ERROR, "cannot get the latest WAL position from the publisher"); elog(ERROR, "cannot get the latest WAL position from the publisher");
maybe_advance_nonremovable_xid(&rdt_data, true); maybe_advance_nonremovable_xid(&rdt_data, true);
@@ -4613,7 +4613,7 @@ wait_for_publisher_status(RetainDeadTuplesData *rdt_data,
static void static void
wait_for_local_flush(RetainDeadTuplesData *rdt_data) wait_for_local_flush(RetainDeadTuplesData *rdt_data)
{ {
Assert(!XLogRecPtrIsInvalid(rdt_data->remote_lsn) && Assert(XLogRecPtrIsValid(rdt_data->remote_lsn) &&
TransactionIdIsValid(rdt_data->candidate_xid)); TransactionIdIsValid(rdt_data->candidate_xid));
/* /*
@@ -6031,7 +6031,7 @@ maybe_start_skipping_changes(XLogRecPtr finish_lsn)
* function is called for every remote transaction and we assume that * function is called for every remote transaction and we assume that
* skipping the transaction is not used often. * skipping the transaction is not used often.
*/ */
if (likely(XLogRecPtrIsInvalid(MySubscription->skiplsn) || if (likely(!XLogRecPtrIsValid(MySubscription->skiplsn) ||
MySubscription->skiplsn != finish_lsn)) MySubscription->skiplsn != finish_lsn))
return; return;
@@ -6077,7 +6077,7 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn)
XLogRecPtr myskiplsn = MySubscription->skiplsn; XLogRecPtr myskiplsn = MySubscription->skiplsn;
bool started_tx = false; bool started_tx = false;
if (likely(XLogRecPtrIsInvalid(myskiplsn)) || am_parallel_apply_worker()) if (likely(!XLogRecPtrIsValid(myskiplsn)) || am_parallel_apply_worker())
return; return;
if (!IsTransactionState()) if (!IsTransactionState())
@@ -6173,7 +6173,7 @@ apply_error_callback(void *arg)
errcontext("processing remote data for replication origin \"%s\" during message type \"%s\"", errcontext("processing remote data for replication origin \"%s\" during message type \"%s\"",
errarg->origin_name, errarg->origin_name,
logicalrep_message_type(errarg->command)); logicalrep_message_type(errarg->command));
else if (XLogRecPtrIsInvalid(errarg->finish_lsn)) else if (!XLogRecPtrIsValid(errarg->finish_lsn))
errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u", errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u",
errarg->origin_name, errarg->origin_name,
logicalrep_message_type(errarg->command), logicalrep_message_type(errarg->command),
@@ -6189,7 +6189,7 @@ apply_error_callback(void *arg)
{ {
if (errarg->remote_attnum < 0) if (errarg->remote_attnum < 0)
{ {
if (XLogRecPtrIsInvalid(errarg->finish_lsn)) if (!XLogRecPtrIsValid(errarg->finish_lsn))
errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u", errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u",
errarg->origin_name, errarg->origin_name,
logicalrep_message_type(errarg->command), logicalrep_message_type(errarg->command),
@@ -6207,7 +6207,7 @@ apply_error_callback(void *arg)
} }
else else
{ {
if (XLogRecPtrIsInvalid(errarg->finish_lsn)) if (!XLogRecPtrIsValid(errarg->finish_lsn))
errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u", errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u",
errarg->origin_name, errarg->origin_name,
logicalrep_message_type(errarg->command), logicalrep_message_type(errarg->command),

View File

@@ -1270,15 +1270,15 @@ ReplicationSlotsComputeRequiredLSN(void)
*/ */
if (persistency == RS_PERSISTENT) if (persistency == RS_PERSISTENT)
{ {
if (last_saved_restart_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(last_saved_restart_lsn) &&
restart_lsn > last_saved_restart_lsn) restart_lsn > last_saved_restart_lsn)
{ {
restart_lsn = last_saved_restart_lsn; restart_lsn = last_saved_restart_lsn;
} }
} }
if (restart_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(restart_lsn) &&
(min_required == InvalidXLogRecPtr || (!XLogRecPtrIsValid(min_required) ||
restart_lsn < min_required)) restart_lsn < min_required))
min_required = restart_lsn; min_required = restart_lsn;
} }
@@ -1350,17 +1350,17 @@ ReplicationSlotsComputeLogicalRestartLSN(void)
*/ */
if (persistency == RS_PERSISTENT) if (persistency == RS_PERSISTENT)
{ {
if (last_saved_restart_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(last_saved_restart_lsn) &&
restart_lsn > last_saved_restart_lsn) restart_lsn > last_saved_restart_lsn)
{ {
restart_lsn = last_saved_restart_lsn; restart_lsn = last_saved_restart_lsn;
} }
} }
if (restart_lsn == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(restart_lsn))
continue; continue;
if (result == InvalidXLogRecPtr || if (!XLogRecPtrIsValid(result) ||
restart_lsn < result) restart_lsn < result)
result = restart_lsn; result = restart_lsn;
} }
@@ -1573,8 +1573,8 @@ ReplicationSlotReserveWal(void)
ReplicationSlot *slot = MyReplicationSlot; ReplicationSlot *slot = MyReplicationSlot;
Assert(slot != NULL); Assert(slot != NULL);
Assert(slot->data.restart_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(slot->data.restart_lsn));
Assert(slot->last_saved_restart_lsn == InvalidXLogRecPtr); Assert(!XLogRecPtrIsValid(slot->last_saved_restart_lsn));
/* /*
* The replication slot mechanism is used to prevent removal of required * The replication slot mechanism is used to prevent removal of required
@@ -1730,7 +1730,7 @@ static inline bool
CanInvalidateIdleSlot(ReplicationSlot *s) CanInvalidateIdleSlot(ReplicationSlot *s)
{ {
return (idle_replication_slot_timeout_secs != 0 && return (idle_replication_slot_timeout_secs != 0 &&
!XLogRecPtrIsInvalid(s->data.restart_lsn) && XLogRecPtrIsValid(s->data.restart_lsn) &&
s->inactive_since > 0 && s->inactive_since > 0 &&
!(RecoveryInProgress() && s->data.synced)); !(RecoveryInProgress() && s->data.synced));
} }
@@ -1754,7 +1754,7 @@ DetermineSlotInvalidationCause(uint32 possible_causes, ReplicationSlot *s,
{ {
XLogRecPtr restart_lsn = s->data.restart_lsn; XLogRecPtr restart_lsn = s->data.restart_lsn;
if (restart_lsn != InvalidXLogRecPtr && if (XLogRecPtrIsValid(restart_lsn) &&
restart_lsn < oldestLSN) restart_lsn < oldestLSN)
return RS_INVAL_WAL_REMOVED; return RS_INVAL_WAL_REMOVED;
} }
@@ -2922,7 +2922,7 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
* Don't need to wait for the standbys to catch up if they are already * Don't need to wait for the standbys to catch up if they are already
* beyond the specified WAL location. * beyond the specified WAL location.
*/ */
if (!XLogRecPtrIsInvalid(ss_oldest_flush_lsn) && if (XLogRecPtrIsValid(ss_oldest_flush_lsn) &&
ss_oldest_flush_lsn >= wait_for_lsn) ss_oldest_flush_lsn >= wait_for_lsn)
return true; return true;
@@ -2993,7 +2993,7 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
break; break;
} }
if (XLogRecPtrIsInvalid(restart_lsn) || restart_lsn < wait_for_lsn) if (!XLogRecPtrIsValid(restart_lsn) || restart_lsn < wait_for_lsn)
{ {
/* Log a message if no active_pid for this physical slot */ /* Log a message if no active_pid for this physical slot */
if (inactive) if (inactive)
@@ -3012,7 +3012,7 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
Assert(restart_lsn >= wait_for_lsn); Assert(restart_lsn >= wait_for_lsn);
if (XLogRecPtrIsInvalid(min_restart_lsn) || if (!XLogRecPtrIsValid(min_restart_lsn) ||
min_restart_lsn > restart_lsn) min_restart_lsn > restart_lsn)
min_restart_lsn = restart_lsn; min_restart_lsn = restart_lsn;
@@ -3031,7 +3031,7 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
return false; return false;
/* The ss_oldest_flush_lsn must not retreat. */ /* The ss_oldest_flush_lsn must not retreat. */
Assert(XLogRecPtrIsInvalid(ss_oldest_flush_lsn) || Assert(!XLogRecPtrIsValid(ss_oldest_flush_lsn) ||
min_restart_lsn >= ss_oldest_flush_lsn); min_restart_lsn >= ss_oldest_flush_lsn);
ss_oldest_flush_lsn = min_restart_lsn; ss_oldest_flush_lsn = min_restart_lsn;

View File

@@ -46,7 +46,7 @@ create_physical_replication_slot(char *name, bool immediately_reserve,
if (immediately_reserve) if (immediately_reserve)
{ {
/* Reserve WAL as the user asked for it */ /* Reserve WAL as the user asked for it */
if (XLogRecPtrIsInvalid(restart_lsn)) if (!XLogRecPtrIsValid(restart_lsn))
ReplicationSlotReserveWal(); ReplicationSlotReserveWal();
else else
MyReplicationSlot->data.restart_lsn = restart_lsn; MyReplicationSlot->data.restart_lsn = restart_lsn;
@@ -308,12 +308,12 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
else else
nulls[i++] = true; nulls[i++] = true;
if (slot_contents.data.restart_lsn != InvalidXLogRecPtr) if (XLogRecPtrIsValid(slot_contents.data.restart_lsn))
values[i++] = LSNGetDatum(slot_contents.data.restart_lsn); values[i++] = LSNGetDatum(slot_contents.data.restart_lsn);
else else
nulls[i++] = true; nulls[i++] = true;
if (slot_contents.data.confirmed_flush != InvalidXLogRecPtr) if (XLogRecPtrIsValid(slot_contents.data.confirmed_flush))
values[i++] = LSNGetDatum(slot_contents.data.confirmed_flush); values[i++] = LSNGetDatum(slot_contents.data.confirmed_flush);
else else
nulls[i++] = true; nulls[i++] = true;
@@ -357,7 +357,7 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
* *
* If we do change it, save the state for safe_wal_size below. * If we do change it, save the state for safe_wal_size below.
*/ */
if (!XLogRecPtrIsInvalid(slot_contents.data.restart_lsn)) if (XLogRecPtrIsValid(slot_contents.data.restart_lsn))
{ {
int pid; int pid;
@@ -407,7 +407,7 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
values[i++] = BoolGetDatum(slot_contents.data.two_phase); values[i++] = BoolGetDatum(slot_contents.data.two_phase);
if (slot_contents.data.two_phase && if (slot_contents.data.two_phase &&
!XLogRecPtrIsInvalid(slot_contents.data.two_phase_at)) XLogRecPtrIsValid(slot_contents.data.two_phase_at))
values[i++] = LSNGetDatum(slot_contents.data.two_phase_at); values[i++] = LSNGetDatum(slot_contents.data.two_phase_at);
else else
nulls[i++] = true; nulls[i++] = true;
@@ -467,7 +467,7 @@ pg_physical_replication_slot_advance(XLogRecPtr moveto)
XLogRecPtr startlsn = MyReplicationSlot->data.restart_lsn; XLogRecPtr startlsn = MyReplicationSlot->data.restart_lsn;
XLogRecPtr retlsn = startlsn; XLogRecPtr retlsn = startlsn;
Assert(moveto != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(moveto));
if (startlsn < moveto) if (startlsn < moveto)
{ {
@@ -523,7 +523,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
CheckSlotPermissions(); CheckSlotPermissions();
if (XLogRecPtrIsInvalid(moveto)) if (!XLogRecPtrIsValid(moveto))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid target WAL LSN"))); errmsg("invalid target WAL LSN")));
@@ -545,7 +545,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
ReplicationSlotAcquire(NameStr(*slotname), true, true); ReplicationSlotAcquire(NameStr(*slotname), true, true);
/* A slot whose restart_lsn has never been reserved cannot be advanced */ /* A slot whose restart_lsn has never been reserved cannot be advanced */
if (XLogRecPtrIsInvalid(MyReplicationSlot->data.restart_lsn)) if (!XLogRecPtrIsValid(MyReplicationSlot->data.restart_lsn))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("replication slot \"%s\" cannot be advanced", errmsg("replication slot \"%s\" cannot be advanced",
@@ -679,7 +679,7 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
NameStr(*src_name)))); NameStr(*src_name))));
/* Copying non-reserved slot doesn't make sense */ /* Copying non-reserved slot doesn't make sense */
if (XLogRecPtrIsInvalid(src_restart_lsn)) if (!XLogRecPtrIsValid(src_restart_lsn))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot copy a replication slot that doesn't reserve WAL"))); errmsg("cannot copy a replication slot that doesn't reserve WAL")));
@@ -785,7 +785,7 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
errdetail("The source replication slot was modified incompatibly during the copy operation."))); errdetail("The source replication slot was modified incompatibly during the copy operation.")));
/* The source slot must have a consistent snapshot */ /* The source slot must have a consistent snapshot */
if (src_islogical && XLogRecPtrIsInvalid(copy_confirmed_flush)) if (src_islogical && !XLogRecPtrIsValid(copy_confirmed_flush))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cannot copy unfinished logical replication slot \"%s\"", errmsg("cannot copy unfinished logical replication slot \"%s\"",
@@ -840,7 +840,7 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
/* All done. Set up the return values */ /* All done. Set up the return values */
values[0] = NameGetDatum(dst_name); values[0] = NameGetDatum(dst_name);
nulls[0] = false; nulls[0] = false;
if (!XLogRecPtrIsInvalid(MyReplicationSlot->data.confirmed_flush)) if (XLogRecPtrIsValid(MyReplicationSlot->data.confirmed_flush))
{ {
values[1] = LSNGetDatum(MyReplicationSlot->data.confirmed_flush); values[1] = LSNGetDatum(MyReplicationSlot->data.confirmed_flush);
nulls[1] = false; nulls[1] = false;

View File

@@ -493,7 +493,7 @@ SyncRepReleaseWaiters(void)
if (MyWalSnd->sync_standby_priority == 0 || if (MyWalSnd->sync_standby_priority == 0 ||
(MyWalSnd->state != WALSNDSTATE_STREAMING && (MyWalSnd->state != WALSNDSTATE_STREAMING &&
MyWalSnd->state != WALSNDSTATE_STOPPING) || MyWalSnd->state != WALSNDSTATE_STOPPING) ||
XLogRecPtrIsInvalid(MyWalSnd->flush)) !XLogRecPtrIsValid(MyWalSnd->flush))
{ {
announce_next_takeover = true; announce_next_takeover = true;
return; return;
@@ -676,11 +676,11 @@ SyncRepGetOldestSyncRecPtr(XLogRecPtr *writePtr,
XLogRecPtr flush = sync_standbys[i].flush; XLogRecPtr flush = sync_standbys[i].flush;
XLogRecPtr apply = sync_standbys[i].apply; XLogRecPtr apply = sync_standbys[i].apply;
if (XLogRecPtrIsInvalid(*writePtr) || *writePtr > write) if (!XLogRecPtrIsValid(*writePtr) || *writePtr > write)
*writePtr = write; *writePtr = write;
if (XLogRecPtrIsInvalid(*flushPtr) || *flushPtr > flush) if (!XLogRecPtrIsValid(*flushPtr) || *flushPtr > flush)
*flushPtr = flush; *flushPtr = flush;
if (XLogRecPtrIsInvalid(*applyPtr) || *applyPtr > apply) if (!XLogRecPtrIsValid(*applyPtr) || *applyPtr > apply)
*applyPtr = apply; *applyPtr = apply;
} }
} }
@@ -799,7 +799,7 @@ SyncRepGetCandidateStandbys(SyncRepStandbyData **standbys)
continue; continue;
/* Must have a valid flush position */ /* Must have a valid flush position */
if (XLogRecPtrIsInvalid(stby->flush)) if (!XLogRecPtrIsValid(stby->flush))
continue; continue;
/* OK, it's a candidate */ /* OK, it's a candidate */

View File

@@ -1469,16 +1469,16 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
{ {
values[1] = CStringGetTextDatum(WalRcvGetStateString(state)); values[1] = CStringGetTextDatum(WalRcvGetStateString(state));
if (XLogRecPtrIsInvalid(receive_start_lsn)) if (!XLogRecPtrIsValid(receive_start_lsn))
nulls[2] = true; nulls[2] = true;
else else
values[2] = LSNGetDatum(receive_start_lsn); values[2] = LSNGetDatum(receive_start_lsn);
values[3] = Int32GetDatum(receive_start_tli); values[3] = Int32GetDatum(receive_start_tli);
if (XLogRecPtrIsInvalid(written_lsn)) if (!XLogRecPtrIsValid(written_lsn))
nulls[4] = true; nulls[4] = true;
else else
values[4] = LSNGetDatum(written_lsn); values[4] = LSNGetDatum(written_lsn);
if (XLogRecPtrIsInvalid(flushed_lsn)) if (!XLogRecPtrIsValid(flushed_lsn))
nulls[5] = true; nulls[5] = true;
else else
values[5] = LSNGetDatum(flushed_lsn); values[5] = LSNGetDatum(flushed_lsn);
@@ -1491,7 +1491,7 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
nulls[8] = true; nulls[8] = true;
else else
values[8] = TimestampTzGetDatum(last_receipt_time); values[8] = TimestampTzGetDatum(last_receipt_time);
if (XLogRecPtrIsInvalid(latest_end_lsn)) if (!XLogRecPtrIsValid(latest_end_lsn))
nulls[9] = true; nulls[9] = true;
else else
values[9] = LSNGetDatum(latest_end_lsn); values[9] = LSNGetDatum(latest_end_lsn);

View File

@@ -315,7 +315,7 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo,
* If this is the first startup of walreceiver (on this timeline), * If this is the first startup of walreceiver (on this timeline),
* initialize flushedUpto and latestChunkStart to the starting point. * initialize flushedUpto and latestChunkStart to the starting point.
*/ */
if (walrcv->receiveStart == 0 || walrcv->receivedTLI != tli) if (!XLogRecPtrIsValid(walrcv->receiveStart) || walrcv->receivedTLI != tli)
{ {
walrcv->flushedUpto = recptr; walrcv->flushedUpto = recptr;
walrcv->receivedTLI = tli; walrcv->receivedTLI = tli;

View File

@@ -529,7 +529,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd)
i++; i++;
/* start LSN */ /* start LSN */
if (!XLogRecPtrIsInvalid(slot_contents.data.restart_lsn)) if (XLogRecPtrIsValid(slot_contents.data.restart_lsn))
{ {
char xloc[64]; char xloc[64];
@@ -541,7 +541,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd)
i++; i++;
/* timeline this WAL was produced on */ /* timeline this WAL was produced on */
if (!XLogRecPtrIsInvalid(slot_contents.data.restart_lsn)) if (XLogRecPtrIsValid(slot_contents.data.restart_lsn))
{ {
TimeLineID slots_position_timeline; TimeLineID slots_position_timeline;
TimeLineID current_timeline; TimeLineID current_timeline;
@@ -906,7 +906,7 @@ StartReplication(StartReplicationCmd *cmd)
* that's older than the switchpoint, if it's still in the same * that's older than the switchpoint, if it's still in the same
* WAL segment. * WAL segment.
*/ */
if (!XLogRecPtrIsInvalid(switchpoint) && if (XLogRecPtrIsValid(switchpoint) &&
switchpoint < cmd->startpoint) switchpoint < cmd->startpoint)
{ {
ereport(ERROR, ereport(ERROR,
@@ -1827,7 +1827,7 @@ WalSndWaitForWal(XLogRecPtr loc)
* receipt of WAL up to RecentFlushPtr. This is particularly interesting * receipt of WAL up to RecentFlushPtr. This is particularly interesting
* if we're far behind. * if we're far behind.
*/ */
if (!XLogRecPtrIsInvalid(RecentFlushPtr) && if (XLogRecPtrIsValid(RecentFlushPtr) &&
!NeedToWaitForWal(loc, RecentFlushPtr, &wait_event)) !NeedToWaitForWal(loc, RecentFlushPtr, &wait_event))
return RecentFlushPtr; return RecentFlushPtr;
@@ -2397,7 +2397,7 @@ PhysicalConfirmReceivedLocation(XLogRecPtr lsn)
bool changed = false; bool changed = false;
ReplicationSlot *slot = MyReplicationSlot; ReplicationSlot *slot = MyReplicationSlot;
Assert(lsn != InvalidXLogRecPtr); Assert(XLogRecPtrIsValid(lsn));
SpinLockAcquire(&slot->mutex); SpinLockAcquire(&slot->mutex);
if (slot->data.restart_lsn != lsn) if (slot->data.restart_lsn != lsn)
{ {
@@ -2519,7 +2519,7 @@ ProcessStandbyReplyMessage(void)
/* /*
* Advance our local xmin horizon when the client confirmed a flush. * Advance our local xmin horizon when the client confirmed a flush.
*/ */
if (MyReplicationSlot && flushPtr != InvalidXLogRecPtr) if (MyReplicationSlot && XLogRecPtrIsValid(flushPtr))
{ {
if (SlotIsLogical(MyReplicationSlot)) if (SlotIsLogical(MyReplicationSlot))
LogicalConfirmReceivedLocation(flushPtr); LogicalConfirmReceivedLocation(flushPtr);
@@ -3536,7 +3536,7 @@ XLogSendLogical(void)
* If first time through in this session, initialize flushPtr. Otherwise, * If first time through in this session, initialize flushPtr. Otherwise,
* we only need to update flushPtr if EndRecPtr is past it. * we only need to update flushPtr if EndRecPtr is past it.
*/ */
if (flushPtr == InvalidXLogRecPtr || if (!XLogRecPtrIsValid(flushPtr) ||
logical_decoding_ctx->reader->EndRecPtr >= flushPtr) logical_decoding_ctx->reader->EndRecPtr >= flushPtr)
{ {
/* /*
@@ -3597,8 +3597,8 @@ WalSndDone(WalSndSendDataCallback send_data)
* flush location if valid, write otherwise. Tools like pg_receivewal will * flush location if valid, write otherwise. Tools like pg_receivewal will
* usually (unless in synchronous mode) return an invalid flush location. * usually (unless in synchronous mode) return an invalid flush location.
*/ */
replicatedPtr = XLogRecPtrIsInvalid(MyWalSnd->flush) ? replicatedPtr = XLogRecPtrIsValid(MyWalSnd->flush) ?
MyWalSnd->write : MyWalSnd->flush; MyWalSnd->flush : MyWalSnd->write;
if (WalSndCaughtUp && sentPtr == replicatedPtr && if (WalSndCaughtUp && sentPtr == replicatedPtr &&
!pq_is_send_pending()) !pq_is_send_pending())
@@ -4073,19 +4073,19 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
{ {
values[1] = CStringGetTextDatum(WalSndGetStateString(state)); values[1] = CStringGetTextDatum(WalSndGetStateString(state));
if (XLogRecPtrIsInvalid(sent_ptr)) if (!XLogRecPtrIsValid(sent_ptr))
nulls[2] = true; nulls[2] = true;
values[2] = LSNGetDatum(sent_ptr); values[2] = LSNGetDatum(sent_ptr);
if (XLogRecPtrIsInvalid(write)) if (!XLogRecPtrIsValid(write))
nulls[3] = true; nulls[3] = true;
values[3] = LSNGetDatum(write); values[3] = LSNGetDatum(write);
if (XLogRecPtrIsInvalid(flush)) if (!XLogRecPtrIsValid(flush))
nulls[4] = true; nulls[4] = true;
values[4] = LSNGetDatum(flush); values[4] = LSNGetDatum(flush);
if (XLogRecPtrIsInvalid(apply)) if (!XLogRecPtrIsValid(apply))
nulls[5] = true; nulls[5] = true;
values[5] = LSNGetDatum(apply); values[5] = LSNGetDatum(apply);
@@ -4094,7 +4094,7 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
* which always returns an invalid flush location, as an * which always returns an invalid flush location, as an
* asynchronous standby. * asynchronous standby.
*/ */
priority = XLogRecPtrIsInvalid(flush) ? 0 : priority; priority = XLogRecPtrIsValid(flush) ? priority : 0;
if (writeLag < 0) if (writeLag < 0)
nulls[6] = true; nulls[6] = true;
@@ -4165,7 +4165,7 @@ WalSndKeepalive(bool requestReply, XLogRecPtr writePtr)
/* construct the message... */ /* construct the message... */
resetStringInfo(&output_message); resetStringInfo(&output_message);
pq_sendbyte(&output_message, PqReplMsg_Keepalive); pq_sendbyte(&output_message, PqReplMsg_Keepalive);
pq_sendint64(&output_message, XLogRecPtrIsInvalid(writePtr) ? sentPtr : writePtr); pq_sendint64(&output_message, XLogRecPtrIsValid(writePtr) ? writePtr : sentPtr);
pq_sendint64(&output_message, GetCurrentTimestamp()); pq_sendint64(&output_message, GetCurrentTimestamp());
pq_sendbyte(&output_message, requestReply ? 1 : 0); pq_sendbyte(&output_message, requestReply ? 1 : 0);

View File

@@ -5545,7 +5545,7 @@ MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
* checksum here. That will happen when the page is written * checksum here. That will happen when the page is written
* sometime later in this checkpoint cycle. * sometime later in this checkpoint cycle.
*/ */
if (!XLogRecPtrIsInvalid(lsn)) if (XLogRecPtrIsValid(lsn))
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
} }

View File

@@ -192,7 +192,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
LSN_FORMAT_ARGS(xlogpos), LSN_FORMAT_ARGS(xlogpos),
timeline); timeline);
if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos) if (XLogRecPtrIsValid(endpos) && endpos < xlogpos)
{ {
if (verbose) if (verbose)
pg_log_info("stopped log streaming at %X/%08X (timeline %u)", pg_log_info("stopped log streaming at %X/%08X (timeline %u)",
@@ -535,7 +535,7 @@ StreamLog(void)
* Figure out where to start streaming. First scan the local directory. * Figure out where to start streaming. First scan the local directory.
*/ */
stream.startpos = FindStreamingStart(&stream.timeline); stream.startpos = FindStreamingStart(&stream.timeline);
if (stream.startpos == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(stream.startpos))
{ {
/* /*
* Try to get the starting point from the slot if any. This is * Try to get the starting point from the slot if any. This is
@@ -556,14 +556,14 @@ StreamLog(void)
* If it the starting point is still not known, use the current WAL * If it the starting point is still not known, use the current WAL
* flush value as last resort. * flush value as last resort.
*/ */
if (stream.startpos == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(stream.startpos))
{ {
stream.startpos = serverpos; stream.startpos = serverpos;
stream.timeline = servertli; stream.timeline = servertli;
} }
} }
Assert(stream.startpos != InvalidXLogRecPtr && Assert(XLogRecPtrIsValid(stream.startpos) &&
stream.timeline != 0); stream.timeline != 0);
/* /*

View File

@@ -482,7 +482,7 @@ StreamLogicalLog(void)
} }
replyRequested = copybuf[pos]; replyRequested = copybuf[pos];
if (endpos != InvalidXLogRecPtr && walEnd >= endpos) if (XLogRecPtrIsValid(endpos) && walEnd >= endpos)
{ {
/* /*
* If there's nothing to read on the socket until a keepalive * If there's nothing to read on the socket until a keepalive
@@ -535,7 +535,7 @@ StreamLogicalLog(void)
/* Extract WAL location for this block */ /* Extract WAL location for this block */
cur_record_lsn = fe_recvint64(&copybuf[1]); cur_record_lsn = fe_recvint64(&copybuf[1]);
if (endpos != InvalidXLogRecPtr && cur_record_lsn > endpos) if (XLogRecPtrIsValid(endpos) && cur_record_lsn > endpos)
{ {
/* /*
* We've read past our endpoint, so prepare to go away being * We've read past our endpoint, so prepare to go away being
@@ -583,7 +583,7 @@ StreamLogicalLog(void)
goto error; goto error;
} }
if (endpos != InvalidXLogRecPtr && cur_record_lsn == endpos) if (XLogRecPtrIsValid(endpos) && cur_record_lsn == endpos)
{ {
/* endpos was exactly the record we just processed, we're done */ /* endpos was exactly the record we just processed, we're done */
if (!flushAndSendFeedback(conn, &now)) if (!flushAndSendFeedback(conn, &now))
@@ -913,14 +913,14 @@ main(int argc, char **argv)
exit(1); exit(1);
} }
if (startpos != InvalidXLogRecPtr && (do_create_slot || do_drop_slot)) if (XLogRecPtrIsValid(startpos) && (do_create_slot || do_drop_slot))
{ {
pg_log_error("cannot use --create-slot or --drop-slot together with --startpos"); pg_log_error("cannot use --create-slot or --drop-slot together with --startpos");
pg_log_error_hint("Try \"%s --help\" for more information.", progname); pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1); exit(1);
} }
if (endpos != InvalidXLogRecPtr && !do_start_slot) if (XLogRecPtrIsValid(endpos) && !do_start_slot)
{ {
pg_log_error("--endpos may only be specified with --start"); pg_log_error("--endpos may only be specified with --start");
pg_log_error_hint("Try \"%s --help\" for more information.", progname); pg_log_error_hint("Try \"%s --help\" for more information.", progname);
@@ -1080,7 +1080,7 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, StreamStopReason reason,
LSN_FORMAT_ARGS(endpos)); LSN_FORMAT_ARGS(endpos));
break; break;
case STREAM_STOP_END_OF_WAL: case STREAM_STOP_END_OF_WAL:
Assert(!XLogRecPtrIsInvalid(lsn)); Assert(XLogRecPtrIsValid(lsn));
pg_log_info("end position %X/%08X reached by WAL record at %X/%08X", pg_log_info("end position %X/%08X reached by WAL record at %X/%08X",
LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn)); LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn));
break; break;

View File

@@ -850,9 +850,9 @@ progress_report(bool finished)
static XLogRecPtr static XLogRecPtr
MinXLogRecPtr(XLogRecPtr a, XLogRecPtr b) MinXLogRecPtr(XLogRecPtr a, XLogRecPtr b)
{ {
if (XLogRecPtrIsInvalid(a)) if (!XLogRecPtrIsValid(a))
return b; return b;
else if (XLogRecPtrIsInvalid(b)) else if (!XLogRecPtrIsValid(b))
return a; return a;
else else
return Min(a, b); return Min(a, b);

View File

@@ -393,7 +393,7 @@ WALDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen,
int count = XLOG_BLCKSZ; int count = XLOG_BLCKSZ;
WALReadError errinfo; WALReadError errinfo;
if (private->endptr != InvalidXLogRecPtr) if (XLogRecPtrIsValid(private->endptr))
{ {
if (targetPagePtr + XLOG_BLCKSZ <= private->endptr) if (targetPagePtr + XLOG_BLCKSZ <= private->endptr)
count = XLOG_BLCKSZ; count = XLOG_BLCKSZ;
@@ -637,7 +637,7 @@ XLogDumpDisplayStats(XLogDumpConfig *config, XLogStats *stats)
/* /*
* Leave if no stats have been computed yet, as tracked by the end LSN. * Leave if no stats have been computed yet, as tracked by the end LSN.
*/ */
if (XLogRecPtrIsInvalid(stats->endptr)) if (!XLogRecPtrIsValid(stats->endptr))
return; return;
/* /*
@@ -1136,7 +1136,7 @@ main(int argc, char **argv)
/* parse position from file */ /* parse position from file */
XLogFromFileName(fname, &private.timeline, &segno, WalSegSz); XLogFromFileName(fname, &private.timeline, &segno, WalSegSz);
if (XLogRecPtrIsInvalid(private.startptr)) if (!XLogRecPtrIsValid(private.startptr))
XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr); XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr);
else if (!XLByteInSeg(private.startptr, segno, WalSegSz)) else if (!XLByteInSeg(private.startptr, segno, WalSegSz))
{ {
@@ -1147,7 +1147,7 @@ main(int argc, char **argv)
} }
/* no second file specified, set end position */ /* no second file specified, set end position */
if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr)) if (!(optind + 1 < argc) && !XLogRecPtrIsValid(private.endptr))
XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr); XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr);
/* parse ENDSEG if passed */ /* parse ENDSEG if passed */
@@ -1170,7 +1170,7 @@ main(int argc, char **argv)
pg_fatal("ENDSEG %s is before STARTSEG %s", pg_fatal("ENDSEG %s is before STARTSEG %s",
argv[optind + 1], argv[optind]); argv[optind + 1], argv[optind]);
if (XLogRecPtrIsInvalid(private.endptr)) if (!XLogRecPtrIsValid(private.endptr))
XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz, XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz,
private.endptr); private.endptr);
@@ -1192,7 +1192,7 @@ main(int argc, char **argv)
waldir = identify_target_directory(waldir, NULL); waldir = identify_target_directory(waldir, NULL);
/* we don't know what to print */ /* we don't know what to print */
if (XLogRecPtrIsInvalid(private.startptr)) if (!XLogRecPtrIsValid(private.startptr))
{ {
pg_log_error("no start WAL location given"); pg_log_error("no start WAL location given");
goto bad_argument; goto bad_argument;
@@ -1213,7 +1213,7 @@ main(int argc, char **argv)
/* first find a valid recptr to start from */ /* first find a valid recptr to start from */
first_record = XLogFindNextRecord(xlogreader_state, private.startptr); first_record = XLogFindNextRecord(xlogreader_state, private.startptr);
if (first_record == InvalidXLogRecPtr) if (!XLogRecPtrIsValid(first_record))
pg_fatal("could not find a valid record after %X/%08X", pg_fatal("could not find a valid record after %X/%08X",
LSN_FORMAT_ARGS(private.startptr)); LSN_FORMAT_ARGS(private.startptr));