On Tue, Apr 16, 2024 at 4:25 PM Amit Kapila <amit.kapil...@gmail.com> wrote:
> > > > > Can you please once consider the idea shared by me at [1] (One naive > idea is that on the publisher .....) to solve this problem? > > [1] - > https://www.postgresql.org/message-id/CAA4eK1K1fSkeK%3Dkc26G5cq87vQG4%3D1qs_b%2Bno4%2Bep654SeBy1w%40mail.gmail.com > > > Expanding on Amit's idea, we found out that there is already a mechanism in code to fully decode prepared transactions prior to a defined LSN where two_phase is enabled using the "two_phase_at" LSN in the slot. Look at ReorderBufferFinishPrepared() on how this is done. This code was not working as expected in our patch because we were setting two_phase on the slot to true as soon as the alter command was received. This was not the correct way, initially when two_phase is enabled, the two_phase changes to pending state and two_phase option on the slot should only be set to true when two_phase moves from pending to enabled. This will happen once the replication is restarted with two_phase option. Look at code in CreateDecodingContext() on how "two_phase_at" is set in the slot when done this way. So we changed the code to not remotely alter two_phase when toggling from false to true. With this change, now even if there are pending transactions on the publisher when toggling two_phase from false to true, these pending transactions will be fully decoded and sent once the commit prepared is decoded as the pending prepared transactions are prior to the "two_phase_at" LSN. With this patch, now we are able to handle both pending prepared transactions when altering two_phase from true to false as well as false to true. Attaching the patch for your review and comments. Big thanks to Kuroda-san for also working on the patch. regards, Ajin Cherian Fujitsu Australia.
v4-0002-Alter-slot-option-two_phase-only-when-altering-tr.patch
Description: Binary data
v4-0003-Abort-prepared-transactions-while-altering-two_ph.patch
Description: Binary data
v4-0001-Allow-altering-of-two_phase-option-of-a-SUBSCRIPT.patch
Description: Binary data