aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2012-08-09 17:03:59 +0100
committerSimon Riggs <simon@2ndQuadrant.com>2012-08-09 17:03:59 +0100
commit87d8bd7c9fdc63d892968e1248e639c8078af615 (patch)
tree0b3b1659dff92932dbe7e9ef8c8fad7a6a4c650a
parentbe690e291d59e8d0c9f4df59abe09f1ff6cc0da9 (diff)
downloadpostgresql-87d8bd7c9fdc63d892968e1248e639c8078af615.tar.gz
postgresql-87d8bd7c9fdc63d892968e1248e639c8078af615.zip
Ensure all replication message info is available and correct via WalRcv
-rw-r--r--src/backend/replication/walreceiver.c5
-rw-r--r--src/backend/replication/walreceiverfuncs.c2
-rw-r--r--src/include/replication/walreceiver.h6
3 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index b0a8b197603..869457003aa 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -218,7 +218,7 @@ WalReceiverMain(void)
startpoint = walrcv->receiveStart;
/* Initialise to a sanish value */
- walrcv->lastMsgSendTime = walrcv->lastMsgReceiptTime = GetCurrentTimestamp();
+ walrcv->lastMsgSendTime = walrcv->lastMsgReceiptTime = walrcv->latestWalEndTime = GetCurrentTimestamp();
SpinLockRelease(&walrcv->mutex);
@@ -749,6 +749,9 @@ ProcessWalSndrMessage(XLogRecPtr walEnd, TimestampTz sendTime)
/* Update shared-memory status */
SpinLockAcquire(&walrcv->mutex);
+ if (XLByteLT(walrcv->latestWalEnd, walEnd))
+ walrcv->latestWalEndTime = sendTime;
+ walrcv->latestWalEnd = walEnd;
walrcv->lastMsgSendTime = sendTime;
walrcv->lastMsgReceiptTime = lastMsgReceiptTime;
SpinLockRelease(&walrcv->mutex);
diff --git a/src/backend/replication/walreceiverfuncs.c b/src/backend/replication/walreceiverfuncs.c
index b31e964fecd..9eba180f049 100644
--- a/src/backend/replication/walreceiverfuncs.c
+++ b/src/backend/replication/walreceiverfuncs.c
@@ -260,7 +260,7 @@ GetReplicationApplyDelay(void)
replayPtr = GetXLogReplayRecPtr(NULL);
- if (XLByteLE(receivePtr, replayPtr))
+ if (XLByteEQ(receivePtr, replayPtr))
return 0;
TimestampDifference(GetCurrentChunkReplayStartTime(),
diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h
index 8ef67f8a867..62b6d2d93f0 100644
--- a/src/include/replication/walreceiver.h
+++ b/src/include/replication/walreceiver.h
@@ -84,6 +84,12 @@ typedef struct
TimestampTz lastMsgReceiptTime;
/*
+ * Latest reported end of WAL on the sender
+ */
+ XLogRecPtr latestWalEnd;
+ TimestampTz latestWalEndTime;
+
+ /*
* connection string; is used for walreceiver to connect with the primary.
*/
char conninfo[MAXCONNINFO];