mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +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:
@ -282,11 +282,11 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo,
|
||||
|
||||
/*
|
||||
* If this is the first startup of walreceiver (on this timeline),
|
||||
* initialize receivedUpto and latestChunkStart to the starting point.
|
||||
* initialize flushedUpto and latestChunkStart to the starting point.
|
||||
*/
|
||||
if (walrcv->receiveStart == 0 || walrcv->receivedTLI != tli)
|
||||
{
|
||||
walrcv->receivedUpto = recptr;
|
||||
walrcv->flushedUpto = recptr;
|
||||
walrcv->receivedTLI = tli;
|
||||
walrcv->latestChunkStart = recptr;
|
||||
}
|
||||
@ -304,7 +304,7 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo,
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the last+1 byte position that walreceiver has written.
|
||||
* Returns the last+1 byte position that walreceiver has flushed.
|
||||
*
|
||||
* Optionally, returns the previous chunk start, that is the first byte
|
||||
* written in the most recent walreceiver flush cycle. Callers not
|
||||
@ -312,13 +312,13 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo,
|
||||
* receiveTLI.
|
||||
*/
|
||||
XLogRecPtr
|
||||
GetWalRcvWriteRecPtr(XLogRecPtr *latestChunkStart, TimeLineID *receiveTLI)
|
||||
GetWalRcvFlushRecPtr(XLogRecPtr *latestChunkStart, TimeLineID *receiveTLI)
|
||||
{
|
||||
WalRcvData *walrcv = WalRcv;
|
||||
XLogRecPtr recptr;
|
||||
|
||||
SpinLockAcquire(&walrcv->mutex);
|
||||
recptr = walrcv->receivedUpto;
|
||||
recptr = walrcv->flushedUpto;
|
||||
if (latestChunkStart)
|
||||
*latestChunkStart = walrcv->latestChunkStart;
|
||||
if (receiveTLI)
|
||||
@ -328,6 +328,18 @@ GetWalRcvWriteRecPtr(XLogRecPtr *latestChunkStart, TimeLineID *receiveTLI)
|
||||
return recptr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the last+1 byte position that walreceiver has written.
|
||||
* This returns a recently written value without taking a lock.
|
||||
*/
|
||||
XLogRecPtr
|
||||
GetWalRcvWriteRecPtr(void)
|
||||
{
|
||||
WalRcvData *walrcv = WalRcv;
|
||||
|
||||
return pg_atomic_read_u64(&walrcv->writtenUpto);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the replication apply delay in ms or -1
|
||||
* if the apply delay info is not available
|
||||
@ -345,7 +357,7 @@ GetReplicationApplyDelay(void)
|
||||
TimestampTz chunkReplayStartTime;
|
||||
|
||||
SpinLockAcquire(&walrcv->mutex);
|
||||
receivePtr = walrcv->receivedUpto;
|
||||
receivePtr = walrcv->flushedUpto;
|
||||
SpinLockRelease(&walrcv->mutex);
|
||||
|
||||
replayPtr = GetXLogReplayRecPtr(NULL);
|
||||
|
Reference in New Issue
Block a user