Re: Conflict detection for update_deleted in logical replication
Dilip Kumar <dilipbalaut@gmail.com>
On Tue, Dec 17, 2024 at 8:54 AM Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com> wrote: > > On Monday, December 16, 2024 7:21 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > So IIUC in step 2) we send the message and get the list of all the > > transactions which are in the commit phase? What do you exactly mean by a > > transaction which is in the commit phase? > > I was referring to transactions calling RecordTransactionCommit() and have > entered the commit critical section. In the patch, we checked if the proc has > marked the new flag DELAY_CHKPT_IN_COMMIT in 'MyProc->delayChkptFlags'. > > > Can I assume transactions which are currently running on the publisher? > > I think it's a subset of the running transactions. We only get the transactions > in commit phase with the intention to avoid delays caused by waiting for > long-running transactions to complete, which can result in the long retention > of dead tuples. Ok > We decided to wait for running(committing) transactions due to the WAL/LSN > inversion issue[1]. The original idea is to directly return the latest WAL > write position without checking running transactions. But since there is a gap > between when we acquire the commit_timestamp and the commit LSN, it's possible > the transactions might have been assigned an earlier commit timestamp but have > not yet written the commit WAL record. Yes, that makes sense. > > And in step 3) we wait for all the transactions to get committed which we saw > > running (or in the commit phase) and we anyway don't worry about the newly > > started transactions as they would not be problematic for us. And in step 4) > > we would wait for all the flush location to reach "last received WAL > > position", here my question is what exactly will be the "last received WAL > > position" I assume it would be the position somewhere after the position of > > the commit WAL of all the transaction we were interested on the publisher? > > Yes, your understanding is correct. It's a position after the position of all > the interesting transactions. In the patch, we get the latest WAL write > position(GetXLogWriteRecPtr()) in walsender after all interesting transactions > have finished and reply it to apply worker. Got it, thanks. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com
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