On 08/07/2014 01:34 PM, Teodor Sigaev wrote:
Hi!

I have a questions about setting transaction's wraparound limits. Function
SetTransactionIdLimit() in access/transam/varsup.c:

1)
      xidWrapLimit = oldest_datfrozenxid + (MaxTransactionId >> 1);
      if (xidWrapLimit < FirstNormalTransactionId)
          xidWrapLimit += FirstNormalTransactionId;

Isn't  it a problem if oldest_datfrozenxid > MaxTransactionId/2?

Don't think so. What problem do you see?

2)
      xidStopLimit = xidWrapLimit - 1000000;
      if (xidStopLimit < FirstNormalTransactionId)
          xidStopLimit -= FirstNormalTransactionId;

      xidWarnLimit = xidStopLimit - 10000000;
      if (xidWarnLimit < FirstNormalTransactionId)
          xidWarnLimit -= FirstNormalTransactionId;

Why does it use '-' instead of '+' if variable < FirstNormalTransactionId? In
this case it is easy to get xidStopLimit > xidWrapLimit or xidWarnLimit >
xidStopLimit...

Remember that the limits are compared with xids using wrap-around aware functions TransactionIdPrecedes and TransactionidFollows. Not regular < and >. The "<" checks above are just to check if the XID hit one of the special TransactionIds, and if so, increase/decrese it to get back to the normal range.

- Heikki



--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to