Fix MVCC bug with prepared xact with subxacts on standby
Heikki Linnakangas <heikki.linnakangas@iki.fi>
Fix MVCC bug with prepared xact with subxacts on standby We did not recover the subtransaction IDs of prepared transactions when starting a hot standby from a shutdown checkpoint. As a result, such subtransactions were considered as aborted, rather than in-progress. That would lead to hint bits being set incorrectly, and the subtransactions suddenly becoming visible to old snapshots when the prepared transaction was committed. To fix, update pg_subtrans with prepared transactions's subxids when starting hot standby from a shutdown checkpoint. The snapshots taken from that state need to be marked as "suboverflowed", so that we also check the pg_subtrans. Backport to all supported versions. Discussion: https://www.postgresql.org/message-id/6b852e98-2d49-4ca1-9e95-db419a2696e0@iki.fi
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/transam/twophase.c | modified | +3 −4 |
| src/backend/access/transam/xlog.c | modified | +8 −6 |
| src/backend/storage/ipc/procarray.c | modified | +15 −3 |
| src/backend/storage/ipc/standby.c | modified | +3 −3 |
| src/include/storage/standby.h | modified | +9 −1 |
| src/test/recovery/t/009_twophase.pl | modified | +46 −0 |
| src/tools/pgindent/typedefs.list | modified | +1 −0 |
Discussion
- Visibility bug with prepared transaction with subtransactions on standby 6 messages · 2024-06-20 → 2024-12-16