1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00
Following are a few clean-ups related to failover option support in slots:
1. Improve the documentation in create_subscription.sgml.
2. Remove the spurious blank line in subscriptioncmds.c.
3. Remove the NOTICE for alter_replication_slot in subscriptioncmds.c as
we would sometimes print it even when nothing has changed. One can find
the change by enabling log_replication_commands on the publisher.
4. Optimize ReplicationSlotAlter() function to prevent disk flushing when
the slot's data remains unchanged.

Author: Hou Zhijie
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com
Discussion: https://postgr.es/m/OS0PR01MB57164904651FB588A518E98894472@OS0PR01MB5716.jpnprd01.prod.outlook.com
This commit is contained in:
Amit Kapila
2024-02-07 10:04:04 +05:30
parent b9d6038d70
commit 22f7e61a63
4 changed files with 12 additions and 19 deletions

View File

@ -117,9 +117,8 @@ CREATE SUBSCRIPTION <replaceable class="parameter">subscription_name</replaceabl
command should connect to the publisher at all. The default command should connect to the publisher at all. The default
is <literal>true</literal>. Setting this to is <literal>true</literal>. Setting this to
<literal>false</literal> will force the values of <literal>false</literal> will force the values of
<literal>create_slot</literal>, <literal>enabled</literal>, <literal>create_slot</literal>, <literal>enabled</literal> and
<literal>copy_data</literal>, and <literal>failover</literal> <literal>copy_data</literal> to <literal>false</literal>.
to <literal>false</literal>.
(You cannot combine setting <literal>connect</literal> (You cannot combine setting <literal>connect</literal>
to <literal>false</literal> with to <literal>false</literal> with
setting <literal>create_slot</literal>, <literal>enabled</literal>, setting <literal>create_slot</literal>, <literal>enabled</literal>,

View File

@ -1591,9 +1591,7 @@ CREATE DATABASE foo WITH TEMPLATE template0;
information might have to be changed. If the subscription needs to information might have to be changed. If the subscription needs to
be enabled for be enabled for
<link linkend="sql-createsubscription-params-with-failover"><literal>failover</literal></link>, <link linkend="sql-createsubscription-params-with-failover"><literal>failover</literal></link>,
then same needs to be done by executing execute <link linkend="sql-altersubscription-params-set"><literal>ALTER SUBSCRIPTION ... SET (failover = true)</literal></link>
<link linkend="sql-altersubscription-params-set">
<literal>ALTER SUBSCRIPTION ... SET (failover = true)</literal></link>
after the slot has been created. It might also be appropriate to after the slot has been created. It might also be appropriate to
truncate the target tables before initiating a new full table copy. If users truncate the target tables before initiating a new full table copy. If users
intend to copy initial data during refresh they must create the slot with intend to copy initial data during refresh they must create the slot with

View File

@ -73,7 +73,6 @@
#define SUBOPT_LSN 0x00004000 #define SUBOPT_LSN 0x00004000
#define SUBOPT_ORIGIN 0x00008000 #define SUBOPT_ORIGIN 0x00008000
/* check if the 'val' has 'bits' set */ /* check if the 'val' has 'bits' set */
#define IsSet(val, bits) (((val) & (bits)) == (bits)) #define IsSet(val, bits) (((val) & (bits)) == (bits))
@ -852,9 +851,6 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
(opts.failover || walrcv_server_version(wrconn) >= 170000)) (opts.failover || walrcv_server_version(wrconn) >= 170000))
{ {
walrcv_alter_slot(wrconn, opts.slot_name, opts.failover); walrcv_alter_slot(wrconn, opts.slot_name, opts.failover);
ereport(NOTICE,
(errmsg("changed the failover state of replication slot \"%s\" on publisher to %s",
opts.slot_name, opts.failover ? "true" : "false")));
} }
} }
PG_FINALLY(); PG_FINALLY();
@ -1547,10 +1543,6 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
PG_TRY(); PG_TRY();
{ {
walrcv_alter_slot(wrconn, sub->slotname, opts.failover); walrcv_alter_slot(wrconn, sub->slotname, opts.failover);
ereport(NOTICE,
(errmsg("changed the failover state of replication slot \"%s\" on publisher to %s",
sub->slotname, opts.failover ? "true" : "false")));
} }
PG_FINALLY(); PG_FINALLY();
{ {

View File

@ -696,12 +696,16 @@ ReplicationSlotAlter(const char *name, bool failover)
errmsg("cannot use %s with a physical replication slot", errmsg("cannot use %s with a physical replication slot",
"ALTER_REPLICATION_SLOT")); "ALTER_REPLICATION_SLOT"));
if (MyReplicationSlot->data.failover != failover)
{
SpinLockAcquire(&MyReplicationSlot->mutex); SpinLockAcquire(&MyReplicationSlot->mutex);
MyReplicationSlot->data.failover = failover; MyReplicationSlot->data.failover = failover;
SpinLockRelease(&MyReplicationSlot->mutex); SpinLockRelease(&MyReplicationSlot->mutex);
ReplicationSlotMarkDirty(); ReplicationSlotMarkDirty();
ReplicationSlotSave(); ReplicationSlotSave();
}
ReplicationSlotRelease(); ReplicationSlotRelease();
} }