Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2bf372a

Browse files
committed
heap_prepare_freeze_tuple: Simplify coding
Commitd2599ec introduced some contorted, confused code around:readers would think that it's possible for HeapTupleHeaderGetXmin returna non-frozen value for some frozen tuples, which would be disastrous.There's no actual bug, but it seems better to make it clearer.Per gripe from Tom Lane and Andres Freund.Discussion:https://postgr.es/m/30116.1555430496@sss.pgh.pa.us
1 parent6dd86c2 commit2bf372a

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

‎src/backend/access/heap/heapam.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6106,19 +6106,27 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple,
61066106
frz->t_infomask=tuple->t_infomask;
61076107
frz->xmax=HeapTupleHeaderGetRawXmax(tuple);
61086108

6109-
/* Process xmin */
6109+
/*
6110+
* Process xmin. xmin_frozen has two slightly different meanings: in the
6111+
* !XidIsNormal case, it means "the xmin doesn't need any freezing" (it's
6112+
* already a permanent value), while in the block below it is set true to
6113+
* mean "xmin won't need freezing after what we do to it here" (false
6114+
* otherwise). In both cases we're allowed to set totally_frozen, as far
6115+
* as xmin is concerned.
6116+
*/
61106117
xid=HeapTupleHeaderGetXmin(tuple);
6111-
xmin_frozen= ((xid==FrozenTransactionId)||
6112-
HeapTupleHeaderXminFrozen(tuple));
6113-
if (TransactionIdIsNormal(xid))
6118+
if (!TransactionIdIsNormal(xid))
6119+
xmin_frozen= true;
6120+
else
61146121
{
61156122
if (TransactionIdPrecedes(xid,relfrozenxid))
61166123
ereport(ERROR,
61176124
(errcode(ERRCODE_DATA_CORRUPTED),
61186125
errmsg_internal("found xmin %u from before relfrozenxid %u",
61196126
xid,relfrozenxid)));
61206127

6121-
if (TransactionIdPrecedes(xid,cutoff_xid))
6128+
xmin_frozen=TransactionIdPrecedes(xid,cutoff_xid);
6129+
if (xmin_frozen)
61226130
{
61236131
if (!TransactionIdDidCommit(xid))
61246132
ereport(ERROR,
@@ -6128,7 +6136,6 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple,
61286136

61296137
frz->t_infomask |=HEAP_XMIN_FROZEN;
61306138
changed= true;
6131-
xmin_frozen= true;
61326139
}
61336140
}
61346141

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp