Re: [HACKERS] Wraparound limits

2014-08-07 Thread Heikki Linnakangas

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 - 100;
  if (xidStopLimit < FirstNormalTransactionId)
  xidStopLimit -= FirstNormalTransactionId;

  xidWarnLimit = xidStopLimit - 1000;
  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


[HACKERS] Wraparound limits

2014-08-07 Thread Teodor Sigaev

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?

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

xidWarnLimit = xidStopLimit - 1000;
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...



Thank you.

--
Teodor Sigaev   E-mail: teo...@sigaev.ru
   WWW: http://www.sigaev.ru/


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