RE: Conflict detection for update_deleted in logical replication

From: "Zhijie Hou (Fujitsu)" <houzj(dot)fnst(at)fujitsu(dot)com>
To: shveta malik <shveta(dot)malik(at)gmail(dot)com>
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: RE: Conflict detection for update_deleted in logical replication
Date: 2025-06-16 03:59:21
Message-ID: OS0PR01MB571669AAB173240133054FC39470A@OS0PR01MB5716.jpnprd01.prod.outlook.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jun 13, 2025 at 2:52 PM shveta malik wrote:

>
> On Thu, Jun 12, 2025 at 4:22 PM shveta malik <shveta(dot)malik(at)gmail(dot)com>
> wrote:
> >
> > On Thu, Jun 12, 2025 at 11:34 AM Zhijie Hou (Fujitsu)
> > <houzj(dot)fnst(at)fujitsu(dot)com> wrote:
> > >
> > >
> > > Here is the V35 patch set which includes the following changes:
> > >
> >
> > Thank You for the patches. Few comments:

Thanks for the comments!

> >
> > 1)
> > Since now we create slot for rci enabled subscription, it will require
> > wal_level >= replica even on subscribers. We shall mention this in the
> > docs.

Added.

> >
> > 2)
> > postgres=# alter subscription sub3 set (retain_conflict_info=true);
> > NOTICE: deleted rows will continue to accumulate for detecting
> > conflicts until the subscription is enabled ALTER SUBSCRIPTION
> >
> > postgres=# alter subscription sub3 disable;
> > WARNING: deleted rows to detect conflicts would not be removed until
> > the subscription is enabled
> > HINT: Consider setting retain_conflict_info to false.
> >
> > I feel we shall have the same message in both the cases as we are
> > trying to convey the exact same thing concerning deleted rows
> > accumulation..

Changed.

> >
>
> Few more comments:
>
> 3)
>
> +static void
> +create_conflict_slot_if_not_exists(void)
> +{
> - /* Exit early if the replication slot is already created and acquired */
> + /* Exit early, if the replication slot is already created and acquired
> + */
> if (MyReplicationSlot)
> return;
>
> - /* If the replication slot exists, acquire it and exit */
> + /* If the replication slot exists, acquire it, and exit */
> if (acquire_conflict_slot_if_exists())
> return;
>
> We never release the slot explicitly in the launcher and thus do not need 'If the
> replication slot exists, acquire it' code part here. For the cases 1) when slot is
> dropped and recreated 2) slot is acquired by launcher on restart; 'if
> (MyReplicationSlot)' check is enough.

Agreed. I have removed this check.

>
> 4)
> /*
> * Common checks for altering failover and two_phase options.
> */
> @@ -1051,7 +1075,8 @@ CheckAlterSubOption(Subscription *sub, const char
> *option,
> * two_phase options.
> */
> Assert(strcmp(option, "failover") == 0 ||
> - strcmp(option, "two_phase") == 0);
> + strcmp(option, "two_phase") == 0 ||
> + strcmp(option, "retain_conflict_info") == 0);
>
> Please update the comment atop CheckAlterSubOption to mention
> retain_conflict_info as well.

Added.

>
> 5)
> In CheckAlterSubOption(), we need to ensure that when 'slot_needs_update'
> is true, it is either failover or two_phase but not rci. Such Assert can be added.

Added an Assert().

0001:
* Removed the slot acquisition as suggested above.

0002:
* Addressed the comments above.

0003:
Rebased

0004:
Rebased

0005:
Rebased

0006:
Rebased

0007:
Rebased

Best Regards,
Hou zj

Attachment Content-Type Size
v37-0006-Support-the-conflict-detection-for-update_delete.patch application/octet-stream 25.7 KB
v37-0002-Add-a-retain_conflict_info-option-to-subscriptio.patch application/octet-stream 100.2 KB
v37-0001-Retain-the-information-useful-for-detecting-conf.patch application/octet-stream 62.7 KB
v37-0007-Allow-altering-retain_conflict_info-for-enabled-.patch application/octet-stream 27.7 KB
v37-0003-Introduce-a-new-GUC-max_conflict_retention_durat.patch application/octet-stream 29.4 KB
v37-0004-Re-create-the-replication-slot-if-the-conflict-r.patch application/octet-stream 7.0 KB
v37-0005-Add-a-tap-test-to-verify-the-management-of-the-n.patch application/octet-stream 8.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Matt Smith (matts3) 2025-06-16 04:10:40 [PATCH] Add an ldflags_sl meson build option
Previous Message shveta malik 2025-06-16 03:56:54 Re: Replication slot is not able to sync up