RE: Conflict detection for update_deleted in logical replication
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
Attachments
- v37-0006-Support-the-conflict-detection-for-update_delete.patch (application/octet-stream) patch v37-0006
- v37-0002-Add-a-retain_conflict_info-option-to-subscriptio.patch (application/octet-stream) patch v37-0002
- v37-0001-Retain-the-information-useful-for-detecting-conf.patch (application/octet-stream) patch v37-0001
- v37-0007-Allow-altering-retain_conflict_info-for-enabled-.patch (application/octet-stream) patch v37-0007
- v37-0003-Introduce-a-new-GUC-max_conflict_retention_durat.patch (application/octet-stream) patch v37-0003
- v37-0004-Re-create-the-replication-slot-if-the-conflict-r.patch (application/octet-stream) patch v37-0004
- v37-0005-Add-a-tap-test-to-verify-the-management-of-the-n.patch (application/octet-stream) patch v37-0005
On Fri, Jun 13, 2025 at 2:52 PM shveta malik wrote:
>
> On Thu, Jun 12, 2025 at 4:22 PM shveta malik <shveta.malik@gmail.com>
> wrote:
> >
> > On Thu, Jun 12, 2025 at 11:34 AM Zhijie Hou (Fujitsu)
> > <houzj.fnst@fujitsu.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
Commits
-
Fix intermittent BF failures in 035_conflicts.
- 0f42206531b3 19 (unreleased) landed
-
Resume conflict-relevant data retention automatically.
- 0d48d393d465 19 (unreleased) landed
-
Fix intermittent test failure introduced in 6456c6e2c4.
- 01d793698f59 19 (unreleased) landed
-
Fix Coverity issue reported in commit a850be2fe.
- 5ac3c1ac22cb 19 (unreleased) landed
-
Add test to prevent premature removal of conflict-relevant data.
- 6456c6e2c4ad 19 (unreleased) landed
-
Post-commit review fixes for 228c370868.
- 1f7e9ba3ac4e 19 (unreleased) landed
-
Add max_retention_duration option to subscriptions.
- a850be2fe653 19 (unreleased) landed
-
Detect and report update_deleted conflicts.
- fd5a1a0c3e56 19 (unreleased) landed
-
Preserve conflict-relevant data during logical replication.
- 228c37086855 19 (unreleased) landed
-
Integrate FullTransactionIds deeper into two-phase code
- 62a17a92833d 19 (unreleased) cited
-
Improve checks for GUC recovery_target_timeline
- fd7d7b719137 19 (unreleased) cited
-
Prevent excessive delays before launching new logrep workers.
- fd519419c948 18.0 cited
-
Keep WAL segments by slot's last saved restart LSN
- ca307d5cec90 18.0 cited
-
Rework some code handling pg_subscription data in psql and pg_dump
- 08691ea958c2 18.0 cited
-
Use generateClonedIndexStmt to propagate CREATE INDEX to partitions.
- 68dfecbef210 18.0 cited