Re: Wraparound limits - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: Wraparound limits
Date
Msg-id 53E379CE.6080108@vmware.com
Whole thread Raw
In response to Wraparound limits  (Teodor Sigaev <teodor@sigaev.ru>)
List pgsql-hackers
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




pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: pg_shmem_allocations view
Next
From: Fujii Masao
Date:
Subject: Re: HEAD crashes with assertion and LWLOCK_STATS enabled