v2-0001-Add-LOG-messages-when-replication-slots-become-ac.patch

application/octet-stream

Filename: v2-0001-Add-LOG-messages-when-replication-slots-become-ac.patch
Type: application/octet-stream
Part: 0
Message: Re: Is it worth adding ReplicationSlot active_pid to ReplicationSlotPersistentData?

Patch

Format: format-patch
Series: patch v2-0001
Subject: Add LOG messages when replication slots become active and inactive
File+
src/backend/replication/slot.c 28 0
From ddfe0a371599bc7bf9af6ba2e7dfad04673fb372 Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Date: Tue, 28 Dec 2021 06:53:16 +0000
Subject: [PATCH v2] Add LOG messages when replication slots become active and
 inactive

These logs will be extremely useful on production servers to debug
and analyze inactive replication slot issues.
---
 src/backend/replication/slot.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 90ba9b417d..2fdb60927f 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -337,6 +337,13 @@ ReplicationSlotCreate(const char *name, bool db_specific,
 
 	/* Let everybody know we've modified this slot */
 	ConditionVariableBroadcast(&slot->active_cv);
+
+	ereport(LOG,
+			(errmsg("created %s %s replication slot \"%s\"",
+					(slot->data.persistency == RS_TEMPORARY ? "temporary" : "persistent"),
+					(SlotIsPhysical(slot) ? "physical" : "logical"),
+					NameStr(slot->data.name)),
+			 errhidestmt(true)));
 }
 
 /*
@@ -457,6 +464,13 @@ retry:
 
 	/* We made this slot active, so it's ours now. */
 	MyReplicationSlot = s;
+
+	ereport(LOG,
+			(errmsg("acquired %s %s replication slot \"%s\"",
+					(s->data.persistency == RS_TEMPORARY ? "temporary" : "persistent"),
+					(SlotIsPhysical(s) ? "physical" : "logical"),
+					NameStr(s->data.name)),
+			 errhidestmt(true)));
 }
 
 /*
@@ -516,6 +530,13 @@ ReplicationSlotRelease(void)
 	MyProc->statusFlags &= ~PROC_IN_LOGICAL_DECODING;
 	ProcGlobal->statusFlags[MyProc->pgxactoff] = MyProc->statusFlags;
 	LWLockRelease(ProcArrayLock);
+
+	ereport(LOG,
+			(errmsg("released %s %s replication slot \"%s\"",
+					(slot->data.persistency == RS_TEMPORARY ? "temporary" : "persistent"),
+					(SlotIsPhysical(slot) ? "physical" : "logical"),
+					NameStr(slot->data.name)),
+			 errhidestmt(true)));
 }
 
 /*
@@ -700,6 +721,13 @@ ReplicationSlotDropPtr(ReplicationSlot *slot)
 	 * a slot while we're still cleaning up the detritus of the old one.
 	 */
 	LWLockRelease(ReplicationSlotAllocationLock);
+
+	ereport(LOG,
+			(errmsg("dropped %s %s replication slot \"%s\"",
+					(slot->data.persistency == RS_TEMPORARY ? "temporary" : "persistent"),
+					(SlotIsPhysical(slot) ? "physical" : "logical"),
+					NameStr(slot->data.name)),
+			 errhidestmt(true)));
 }
 
 /*
-- 
2.25.1