mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Rationalize GetWalRcv{Write,Flush}RecPtr().
GetWalRcvWriteRecPtr() previously reported the latest *flushed* location. Adopt the conventional terminology used elsewhere in the tree by renaming it to GetWalRcvFlushRecPtr(), and likewise for some related variables that used the term "received". Add a new definition of GetWalRcvWriteRecPtr(), which returns the latest *written* value. This will allow later patches to use the value for non-data-integrity purposes, without having to wait for the flush pointer to advance. Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CA%2BhUKGJ4VJN8ttxScUFM8dOKX0BrBiboo5uz1cq%3DAovOddfHpA%40mail.gmail.com
This commit is contained in:
@ -208,8 +208,8 @@ HotStandbyState standbyState = STANDBY_DISABLED;
|
||||
|
||||
static XLogRecPtr LastRec;
|
||||
|
||||
/* Local copy of WalRcv->receivedUpto */
|
||||
static XLogRecPtr receivedUpto = 0;
|
||||
/* Local copy of WalRcv->flushedUpto */
|
||||
static XLogRecPtr flushedUpto = 0;
|
||||
static TimeLineID receiveTLI = 0;
|
||||
|
||||
/*
|
||||
@ -9363,7 +9363,7 @@ CreateRestartPoint(int flags)
|
||||
* Retreat _logSegNo using the current end of xlog replayed or received,
|
||||
* whichever is later.
|
||||
*/
|
||||
receivePtr = GetWalRcvWriteRecPtr(NULL, NULL);
|
||||
receivePtr = GetWalRcvFlushRecPtr(NULL, NULL);
|
||||
replayPtr = GetXLogReplayRecPtr(&replayTLI);
|
||||
endptr = (receivePtr < replayPtr) ? replayPtr : receivePtr;
|
||||
KeepLogSeg(endptr, &_logSegNo);
|
||||
@ -11856,7 +11856,7 @@ retry:
|
||||
/* See if we need to retrieve more data */
|
||||
if (readFile < 0 ||
|
||||
(readSource == XLOG_FROM_STREAM &&
|
||||
receivedUpto < targetPagePtr + reqLen))
|
||||
flushedUpto < targetPagePtr + reqLen))
|
||||
{
|
||||
if (!WaitForWALToBecomeAvailable(targetPagePtr + reqLen,
|
||||
private->randAccess,
|
||||
@ -11887,10 +11887,10 @@ retry:
|
||||
*/
|
||||
if (readSource == XLOG_FROM_STREAM)
|
||||
{
|
||||
if (((targetPagePtr) / XLOG_BLCKSZ) != (receivedUpto / XLOG_BLCKSZ))
|
||||
if (((targetPagePtr) / XLOG_BLCKSZ) != (flushedUpto / XLOG_BLCKSZ))
|
||||
readLen = XLOG_BLCKSZ;
|
||||
else
|
||||
readLen = XLogSegmentOffset(receivedUpto, wal_segment_size) -
|
||||
readLen = XLogSegmentOffset(flushedUpto, wal_segment_size) -
|
||||
targetPageOff;
|
||||
}
|
||||
else
|
||||
@ -12305,7 +12305,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
|
||||
RequestXLogStreaming(tli, ptr, PrimaryConnInfo,
|
||||
PrimarySlotName,
|
||||
wal_receiver_create_temp_slot);
|
||||
receivedUpto = 0;
|
||||
flushedUpto = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -12329,14 +12329,14 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
|
||||
* XLogReceiptTime will not advance, so the grace time
|
||||
* allotted to conflicting queries will decrease.
|
||||
*/
|
||||
if (RecPtr < receivedUpto)
|
||||
if (RecPtr < flushedUpto)
|
||||
havedata = true;
|
||||
else
|
||||
{
|
||||
XLogRecPtr latestChunkStart;
|
||||
|
||||
receivedUpto = GetWalRcvWriteRecPtr(&latestChunkStart, &receiveTLI);
|
||||
if (RecPtr < receivedUpto && receiveTLI == curFileTLI)
|
||||
flushedUpto = GetWalRcvFlushRecPtr(&latestChunkStart, &receiveTLI);
|
||||
if (RecPtr < flushedUpto && receiveTLI == curFileTLI)
|
||||
{
|
||||
havedata = true;
|
||||
if (latestChunkStart <= RecPtr)
|
||||
|
Reference in New Issue
Block a user