summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Kapila2023-11-21 02:29:53 +0000
committerAmit Kapila2023-11-21 02:29:53 +0000
commit7c3fb505b14e86581b6a052075a294c78c91b123 (patch)
tree0b549aaaa960958a07bf0e891946237938edd3dd
parent07cb29737a4ea9bd28e436eecb4016c3202e3928 (diff)
Log messages for replication slot acquisition and release.
This commit log messages (at LOG level when log_replication_commands is set, otherwise at DEBUG1 level) when walsenders acquire and release replication slots. These messages help to know the lifetime of a replication slot - one can know how long a streaming standby, logical subscriber, or replication slot consumer is down. These messages will be useful on production servers to debug and analyze inactive replication slots. Note that these messages are emitted only for walsenders but not for backends. This is because walsenders are the ones that typically hold replication slots for longer durations, unlike backends which hold them for executing replication related functions. Author: Bharath Rupireddy Reviewed-by: Peter Smith, Amit Kapila, Alvaro Herrera Discussion: http://postgr.es/m/CALj2ACX17G7F-jeLt+7KhJ6YxVeRwR8Zk0rDh4VnT546o0UpTQ@mail.gmail.com
-rw-r--r--doc/src/sgml/config.sgml11
-rw-r--r--src/backend/replication/slot.c30
2 files changed, 36 insertions, 5 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index fc35a46e5ea..9398afbcbd3 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7510,11 +7510,12 @@ log_line_prefix = '%m [%p] %q%u@%d/%a '
</term>
<listitem>
<para>
- Causes each replication command to be logged in the server log.
- See <xref linkend="protocol-replication"/> for more information about
- replication command. The default value is <literal>off</literal>.
- Only superusers and users with the appropriate <literal>SET</literal>
- privilege can change this setting.
+ Causes each replication command and <literal>walsender</literal>
+ process's replication slot acquisition/release to be logged in the
+ server log. See <xref linkend="protocol-replication"/> for more
+ information about replication command. The default value is
+ <literal>off</literal>. Only superusers and users with the appropriate
+ <literal>SET</literal> privilege can change this setting.
</para>
</listitem>
</varlistentry>
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 781aa43cc4f..18bc28195b0 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -537,6 +537,16 @@ retry:
*/
if (SlotIsLogical(s))
pgstat_acquire_replslot(s);
+
+ if (am_walsender)
+ {
+ ereport(log_replication_commands ? LOG : DEBUG1,
+ SlotIsLogical(s)
+ ? errmsg("acquired logical replication slot \"%s\"",
+ NameStr(s->data.name))
+ : errmsg("acquired physical replication slot \"%s\"",
+ NameStr(s->data.name)));
+ }
}
/*
@@ -549,9 +559,17 @@ void
ReplicationSlotRelease(void)
{
ReplicationSlot *slot = MyReplicationSlot;
+ char *slotname = NULL; /* keep compiler quiet */
+ bool is_logical = false; /* keep compiler quiet */
Assert(slot != NULL && slot->active_pid != 0);
+ if (am_walsender)
+ {
+ slotname = pstrdup(NameStr(slot->data.name));
+ is_logical = SlotIsLogical(slot);
+ }
+
if (slot->data.persistency == RS_EPHEMERAL)
{
/*
@@ -596,6 +614,18 @@ ReplicationSlotRelease(void)
MyProc->statusFlags &= ~PROC_IN_LOGICAL_DECODING;
ProcGlobal->statusFlags[MyProc->pgxactoff] = MyProc->statusFlags;
LWLockRelease(ProcArrayLock);
+
+ if (am_walsender)
+ {
+ ereport(log_replication_commands ? LOG : DEBUG1,
+ is_logical
+ ? errmsg("released logical replication slot \"%s\"",
+ slotname)
+ : errmsg("released physical replication slot \"%s\"",
+ slotname));
+
+ pfree(slotname);
+ }
}
/*