mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +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:
@@ -12,7 +12,7 @@
|
||||
* in the primary server), and then keeps receiving XLOG records and
|
||||
* writing them to the disk as long as the connection is alive. As XLOG
|
||||
* records are received and flushed to disk, it updates the
|
||||
* WalRcv->receivedUpto variable in shared memory, to inform the startup
|
||||
* WalRcv->flushedUpto variable in shared memory, to inform the startup
|
||||
* process of how far it can proceed with XLOG replay.
|
||||
*
|
||||
* A WAL receiver cannot directly load GUC parameters used when establishing
|
||||
@@ -261,6 +261,8 @@ WalReceiverMain(void)
|
||||
|
||||
SpinLockRelease(&walrcv->mutex);
|
||||
|
||||
pg_atomic_init_u64(&WalRcv->writtenUpto, 0);
|
||||
|
||||
/* Arrange to clean up at walreceiver exit */
|
||||
on_shmem_exit(WalRcvDie, 0);
|
||||
|
||||
@@ -984,6 +986,9 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
|
||||
|
||||
LogstreamResult.Write = recptr;
|
||||
}
|
||||
|
||||
/* Update shared-memory status */
|
||||
pg_atomic_write_u64(&WalRcv->writtenUpto, LogstreamResult.Write);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1005,10 +1010,10 @@ XLogWalRcvFlush(bool dying)
|
||||
|
||||
/* Update shared-memory status */
|
||||
SpinLockAcquire(&walrcv->mutex);
|
||||
if (walrcv->receivedUpto < LogstreamResult.Flush)
|
||||
if (walrcv->flushedUpto < LogstreamResult.Flush)
|
||||
{
|
||||
walrcv->latestChunkStart = walrcv->receivedUpto;
|
||||
walrcv->receivedUpto = LogstreamResult.Flush;
|
||||
walrcv->latestChunkStart = walrcv->flushedUpto;
|
||||
walrcv->flushedUpto = LogstreamResult.Flush;
|
||||
walrcv->receivedTLI = ThisTimeLineID;
|
||||
}
|
||||
SpinLockRelease(&walrcv->mutex);
|
||||
@@ -1361,7 +1366,7 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
|
||||
state = WalRcv->walRcvState;
|
||||
receive_start_lsn = WalRcv->receiveStart;
|
||||
receive_start_tli = WalRcv->receiveStartTLI;
|
||||
received_lsn = WalRcv->receivedUpto;
|
||||
received_lsn = WalRcv->flushedUpto;
|
||||
received_tli = WalRcv->receivedTLI;
|
||||
last_send_time = WalRcv->lastMsgSendTime;
|
||||
last_receipt_time = WalRcv->lastMsgReceiptTime;
|
||||
|
||||
Reference in New Issue
Block a user