mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-06 14:06:58 +02:00
Make HEAP_LOCK/HEAP2_LOCK_UPDATED replay reset HEAP_XMAX_INVALID.
0ac5ad5
started to compress infomask bits in WAL records. Unfortunately the replay routines for XLOG_HEAP_LOCK/XLOG_HEAP2_LOCK_UPDATED forgot to reset the HEAP_XMAX_INVALID (and some other) hint bits. Luckily that's not problematic in the majority of cases, because after a crash/on a standby row locks aren't meaningful. Unfortunately that does not hold true in the presence of prepared transactions. This means that after a crash, or after promotion, row level locks held by a prepared, but not yet committed, prepared transaction might not be enforced. Discussion: 20160715192319.ubfuzim4zv3rqnxv@alap3.anarazel.de Backpatch: 9.3, the oldest branch on which0ac5ad5
is present.
This commit is contained in:
parent
649dd1b58b
commit
b33e81cba8
@ -8393,6 +8393,8 @@ heap_xlog_lock(XLogReaderState *record)
|
|||||||
|
|
||||||
htup = (HeapTupleHeader) PageGetItem(page, lp);
|
htup = (HeapTupleHeader) PageGetItem(page, lp);
|
||||||
|
|
||||||
|
htup->t_infomask &= ~(HEAP_XMAX_BITS | HEAP_MOVED);
|
||||||
|
htup->t_infomask2 &= ~HEAP_KEYS_UPDATED;
|
||||||
fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
|
fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
|
||||||
&htup->t_infomask2);
|
&htup->t_infomask2);
|
||||||
|
|
||||||
@ -8443,6 +8445,8 @@ heap_xlog_lock_updated(XLogReaderState *record)
|
|||||||
|
|
||||||
htup = (HeapTupleHeader) PageGetItem(page, lp);
|
htup = (HeapTupleHeader) PageGetItem(page, lp);
|
||||||
|
|
||||||
|
htup->t_infomask &= ~(HEAP_XMAX_BITS | HEAP_MOVED);
|
||||||
|
htup->t_infomask2 &= ~HEAP_KEYS_UPDATED;
|
||||||
fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
|
fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
|
||||||
&htup->t_infomask2);
|
&htup->t_infomask2);
|
||||||
HeapTupleHeaderSetXmax(htup, xlrec->xmax);
|
HeapTupleHeaderSetXmax(htup, xlrec->xmax);
|
||||||
|
Loading…
Reference in New Issue
Block a user