Re: [HACKERS] make async slave to wait for lsn to be replayed
Alexander Korotkov <aekorotkov@gmail.com>
Attachments
- v9-0001-Implement-AFTER-clause-for-BEGIN-command.patch (application/octet-stream) patch v9-0001
On Mon, Mar 11, 2024 at 12:44 PM Alexander Korotkov <aekorotkov@gmail.com> wrote: > I've decided to put my hands on this patch. > > On Thu, Mar 7, 2024 at 2:25 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > +1 for the second one not only because it avoids new words in grammar > > but also sounds to convey the meaning. I think you can explain in docs > > how this feature can be used basically how will one get the correct > > LSN value to specify. > > I picked the second option and left only the AFTER clause for the > BEGIN statement. I think this should be enough for the beginning. > > > As suggested previously also pick one of the approaches (I would > > advocate the second one) and keep an option for the second one by > > mentioning it in the commit message. I hope to see more > > reviews/discussions or usage like how will users get the LSN value to > > be specified on the core logic of the feature at this stage. IF > > possible, state, how real-world applications could leverage this > > feature. > > I've added a paragraph to the docs about the usage. After you made > some changes on primary, you run pg_current_wal_insert_lsn(). Then > connect to replica and run 'BEGIN AFTER lsn' with the just obtained > LSN. Now you're guaranteed to see the changes made to the primary. > > Also, I've significantly reworked other aspects of the patch. The > most significant changes are: > 1) Waiters are now stored in the array sorted by LSN. This saves us > from scanning of wholeper-backend array. > 2) Waiters are removed from the array immediately once their LSNs are > replayed. Otherwise, the WAL replayer will keep scanning the shared > memory array till waiters wake up. > 3) To clean up after errors, we now call WaitLSNCleanup() on backend > shmem exit. I think this is preferable over the previous approach to > remove from the queue before ProcessInterrupts(). > 4) There is now condition to recheck if LSN is replayed after adding > to the shared memory array. This should save from the race > conditions. > 5) I've renamed too generic names for functions and files. I went through this patch another time, and made some minor adjustments. Now it looks good, I'm going to push it if no objections. ------ Regards, Alexander Korotkov
Commits
-
Ensure standby promotion point in 043_wal_replay_wait.pl
- 2520226c953c 18.0 landed
-
Minor cleanup related to pg_wal_replay_wait() procedure
- 85b98b8d5a48 18.0 landed
-
Adjust pg_wal_replay_wait() procedure behavior on promoted standby
- 867d396ccd2a 18.0 landed
-
pg_wal_replay_wait(): Fix typo in the doc
- 8036d73ae3d4 18.0 landed
-
Implement pg_wal_replay_wait() stored procedure
- 3c5db1d6b016 18.0 landed
- 06c418e163e9 17.0 landed
-
Revert: Implement pg_wal_replay_wait() stored procedure
- 772faafca1b2 17.0 landed
-
Call WaitLSNCleanup() in AbortTransaction()
- 74eaf66f988c 17.0 landed
-
Clarify what is protected by WaitLSNLock
- ee79928441e7 17.0 landed
-
Use an LWLock instead of a spinlock in waitlsn.c
- 25f42429e2ff 17.0 landed
-
Use the pairing heap instead of a flat array for LSN replay waiters
- bf1e65080629 17.0 landed
-
Minor improvements for waitlsn.c
- e37662f22158 17.0 landed
-
Make the order of the header file includes consistent
- 97d85be36544 17.0 cited