Re: Reset snapshot export state on the transaction abort
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-10-16T03:43:00Z
Lists: pgsql-hackers
On Thu, Oct 14, 2021 at 02:58:55PM +0530, Dilip Kumar wrote: > On Thu, Oct 14, 2021 at 12:24 PM Michael Paquier <michael@paquier.xyz> wrote: >> Yes, you are right here. I did not remember the semantics this relies >> on. I have played more with the patch, reviewed the whole, and the >> fields you are resetting as part of the snapshot builds seem correct >> to me. So let's fix this. > > Great, thanks! While double-checking this stuff, I have noticed something that's wrong in the patch when a command that follows a CREATE_REPLICATION_SLOT query resets SnapBuildClearExportedSnapshot(). Once the slot is created, the WAL sender is in a TRANS_INPROGRESS state, meaning that AbortCurrentTransaction() would call AbortTransaction(), hence calling ResetSnapBuildExportSnapshotState() and resetting SavedResourceOwnerDuringExport to NULL before we store a NULL into CurrentResourceOwner :) One solution would be as simple as saving SavedResourceOwnerDuringExport into a temporary variable before calling AbortCurrentTransaction(), and save it back into CurrentResourceOwner once we are done in SnapBuildClearExportedSnapshot() as we need to rely on AbortTransaction() to do the static state cleanup if an error happens until the command after the replslot creation command shows up. -- Michael
Commits
-
Reset properly snapshot export state during transaction abort
- f49bf8263459 9.6.24 landed
- d1a6a08dfafc 10.19 landed
- 506aa1f71a98 11.14 landed
- a207b8521346 12.9 landed
- 8f4fe8d7f8dc 13.5 landed
- 5b353aaff69c 14.1 landed
- 409f9ca44713 15.0 landed