Michael Paquier wrote:
> On Fri, Oct 6, 2017 at 1:24 AM, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
> + /*
> + * If the xmax of the old tuple is identical to the xmin of the new one,
> + * it's a match.
> + */
> + if (xmax == xmin)
> + return true;
> I would use TransactionIdEquals() here, to remember once you switch
> that to a macro.
I've had second thoughts about the macro thing -- for now I'm keeping it
a function, actually.
> +/*
> + * Given a tuple, verify whether the given Xmax matches the tuple's Xmin,
> + * taking into account that the Xmin might have been frozen.
> + */
> [...]
> + /*
> + * We actually don't know if there's a match, but if the previous tuple
> + * was frozen, we cannot really rely on a perfect match.
> + */
I don't know what you had in mind here, but I tweaked the 9.3 version so
that it now looks like this:
/** HeapTupleUpdateXmaxMatchesXmin - verify update chain xmax/xmin lineage** Given the new version of a tuple after
someupdate, verify whether the* given Xmax (corresponding to the previous version) matches the tuple's* Xmin, taking
intoaccount that the Xmin might have been frozen after the* update.*/
bool
HeapTupleUpdateXmaxMatchesXmin(TransactionId xmax, HeapTupleHeader htup)
{TransactionId xmin = HeapTupleHeaderGetXmin(htup);
/* * If the xmax of the old tuple is identical to the xmin of the new one, * it's a match. */if
(TransactionIdEquals(xmax,xmin)) return true;
/* * When a tuple is frozen, the original Xmin is lost, but we know it's a * committed transaction. So unless the Xmax
isInvalidXid, we don't * know for certain that there is a match, but there may be one; and we * must return true so
thata HOT chain that is half-frozen can be walked * correctly. */if (TransactionIdEquals(xmin, FrozenTransactionId) &&
TransactionIdIsValid(xmax)) return true;
return false;
}
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers