diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 753316e8c3777ed99a8f54d9d88ada86b2d08ccb..ed3ef55ebe79c378d5f13c597d8a9ba9c0de88b2 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -793,15 +793,26 @@ ProcessWalSndrMessage(XLogRecPtr walEnd, TimestampTz sendTime) { char *sendtime; char *receipttime; + int applyDelay; /* Copy because timestamptz_to_str returns a static buffer */ sendtime = pstrdup(timestamptz_to_str(sendTime)); receipttime = pstrdup(timestamptz_to_str(lastMsgReceiptTime)); - elog(DEBUG2, "sendtime %s receipttime %s replication apply delay %d ms transfer latency %d ms", - sendtime, - receipttime, - GetReplicationApplyDelay(), - GetReplicationTransferLatency()); + applyDelay = GetReplicationApplyDelay(); + + /* apply delay is not available */ + if (applyDelay == -1) + elog(DEBUG2, "sendtime %s receipttime %s replication apply delay (N/A) transfer latency %d ms", + sendtime, + receipttime, + GetReplicationTransferLatency()); + else + elog(DEBUG2, "sendtime %s receipttime %s replication apply delay %d ms transfer latency %d ms", + sendtime, + receipttime, + applyDelay, + GetReplicationTransferLatency()); + pfree(sendtime); pfree(receipttime); } diff --git a/src/backend/replication/walreceiverfuncs.c b/src/backend/replication/walreceiverfuncs.c index e105f093d35c254c4608e59ab4f92b1c56c4502a..98706e3b9ba913a3f3883da154913dc4af8effae 100644 --- a/src/backend/replication/walreceiverfuncs.c +++ b/src/backend/replication/walreceiverfuncs.c @@ -241,7 +241,8 @@ GetWalRcvWriteRecPtr(XLogRecPtr *latestChunkStart) } /* - * Returns the replication apply delay in ms + * Returns the replication apply delay in ms or -1 + * if the apply delay info is not available */ int GetReplicationApplyDelay(void) @@ -255,6 +256,8 @@ GetReplicationApplyDelay(void) long secs; int usecs; + TimestampTz chunckReplayStartTime; + SpinLockAcquire(&walrcv->mutex); receivePtr = walrcv->receivedUpto; SpinLockRelease(&walrcv->mutex); @@ -264,7 +267,12 @@ GetReplicationApplyDelay(void) if (XLByteEQ(receivePtr, replayPtr)) return 0; - TimestampDifference(GetCurrentChunkReplayStartTime(), + chunckReplayStartTime = GetCurrentChunkReplayStartTime(); + + if (chunckReplayStartTime == 0) + return -1; + + TimestampDifference(chunckReplayStartTime, GetCurrentTimestamp(), &secs, &usecs);