RE: Conflict detection for update_deleted in logical replication
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
Attachments
- v36-0007-Allow-altering-retain_conflict_info-for-enabled-.patch (application/octet-stream) patch v36-0007
- v36-0001-Retain-the-information-useful-for-detecting-conf.patch (application/octet-stream) patch v36-0001
- v36-0002-Add-a-retain_conflict_info-option-to-subscriptio.patch (application/octet-stream) patch v36-0002
- v36-0003-Introduce-a-new-GUC-max_conflict_retention_durat.patch (application/octet-stream) patch v36-0003
- v36-0004-Re-create-the-replication-slot-if-the-conflict-r.patch (application/octet-stream) patch v36-0004
- v36-0005-Add-a-tap-test-to-verify-the-management-of-the-n.patch (application/octet-stream) patch v36-0005
- v36-0006-Support-the-conflict-detection-for-update_delete.patch (application/octet-stream) patch v36-0006
On Wed, Jun 11, 2025 at 5:34 PM shveta malik wrote: > > On Tue, Jun 10, 2025 at 11:55 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) > compute_min_nonremovable_xid: > > + /* > + * Stop advancing xmin if an invalid non-removable transaction ID is > + * found, otherwise update xmin. > + */ > + if (!TransactionIdIsValid(nonremovable_xid)) > + *can_advance_xmin = false; > > IMO, we can not have invalid nonremovable_xid here. It may be a possibility in > a later patch where we do stop-conflict-detection for a worker and resets > nonremovable_xid to Invalid. But in patch003, should this rather be an Assert > as we want to ensure that worker's oldest is set to slot's-xmin by this time. Agreed. I have removed the check and added an Assert. > > 2) > postgres=# create subscription sub1 connection 'dbname=postgres > host=localhost user=shveta port=5433' publication pub1 WITH > (retain_conflict_info = true); > NOTICE: deleted rows will continue to accumulate for detecting conflicts > until the subscription is enabled > NOTICE: created replication slot "sub1" on publisher CREATE > SUBSCRIPTION > > postgres=# alter subscription sub2 enable; > NOTICE: deleted rows will continue to accumulate for detecting conflicts > until the subscription is enabled > > We should not have this 'NOTICE: deleted rows' in above 2 commands. Agreed, It was a miss. After thinking more, I have modified the patch to report the NOTICE only when altering the retain_conflict_info for disabled subscription as that aligns with the original intent for introducing the NOTICE. > > > 3) > + > +ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE); DROP > +SUBSCRIPTION regress_testsub; > > Shall we enable regress_testsub as well before we drop it to catch unexpected > notices/warnings if any? I have added the ENABLE test in the tap-test in 0005, because we do not have a valid connection for subscriptions created in subscription.sql, So enabling the sub here could cause network error with random socket info, making the test unstable. > > > 4) > postgres=# alter subscription sub2 disable; > WARNING: commit timestamp and origin data required for detecting conflicts > won't be retained > HINT: Consider setting "track_commit_timestamp" to true. > > Do we need "track_commit_timestamp" related WARNING while disabling rci > sub as well? I feel it should be there while enabling it alone. Changed as suggested. Here is the V35 patch set which includes the following changes: 0001: Merged original V35-0001 and 0002. 0002: * Addressed the comments above. * The launcher will now attempt to acquire the conflict detection slot initially, allowing us to determine its existence by checking if MyReplicationSlot is NULL. * Merged the top-up patch provided by Amit[1]. 0003: Rebased 0004: Rebased 0005: Added few tests to verify the WANRINGs and NOTCE. 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