Re: lastOverflowedXid does not handle transaction ID wraparound

Поиск
Список
Период
Сортировка
От Andrey Borodin
Тема Re: lastOverflowedXid does not handle transaction ID wraparound
Дата
Msg-id 3AED5C70-9CEA-4044-B844-9A97D002D831@yandex-team.ru
обсуждение исходный текст
Ответ на Re: lastOverflowedXid does not handle transaction ID wraparound  (Alexander Korotkov <aekorotkov@gmail.com>)
Список pgsql-hackers

> 3 нояб. 2021 г., в 14:08, Alexander Korotkov <aekorotkov@gmail.com> написал(а):
>
> ( a.On Wed, Nov 3, 2021 at 11:44 AM Andrey Borodin <x4mmm@yandex-team.ru> wrote:
>>> 21 окт. 2021 г., в 09:01, Kyotaro Horiguchi <horikyota.ntt@gmail.com> написал(а):
>>>
>>> If the discussion so far is correct, the following diff will fix the
>>> issue.
>>>
>>> diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
>>> index bd3c7a47fe..19682b73ec 100644
>>> --- a/src/backend/storage/ipc/procarray.c
>>> +++ b/src/backend/storage/ipc/procarray.c
>>> @@ -4463,6 +4463,12 @@ ExpireOldKnownAssignedTransactionIds(TransactionId xid)
>>> {
>>>       LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE);
>>>       KnownAssignedXidsRemovePreceding(xid);
>>> +       /*
>>> +        * reset lastOverflowedXid if we know transactions that have been possiblly
>>> +        * running are being gone.
>>> +        */
>>> +       if (TransactionIdPrecedes(procArray->lastOverflowedXid, xid))
>>> +               procArray->lastOverflowedXid = InvalidTransactionId;
>>>       LWLockRelease(ProcArrayLock);
>>> }
>>
>> The patch seems correct bugfix to me. The only question I have: is it right place from modularity standpoint?
procArray->lastOverflowedXidis not a part of KnownAssignedTransactionIds? 
>
> It seems the right place because we take ProcArrayLock here.
Oh.. I see. ProcArrayApplyRecoveryInfo() is taking ProcArrayLock in so many places.

>  It would
> be undesirable to take it twice.  We could give a better name for
> ExpireOldKnownAssignedTransactionIds() indicating that it could modify
> lastOverflowedXid as well.  Any ideas?
Looking more I think the name is OK. KnownAssignedXidsReset() and KnownAssignedXidsRemovePreceding() interferes with
procArraya lot. 

> Should ExpireAllKnownAssignedTransactionIds() be also involved here?
I think it's good for unification, but I do not see how procArray->lastOverflowedXid can be used after
ExpireAllKnownAssignedTransactionIds().


Best regards, Andrey Borodin.


В списке pgsql-hackers по дате отправления:

Предыдущее
От: gkokolatos@pm.me
Дата:
Сообщение: Re: Teach pg_receivewal to use lz4 compression
Следующее
От: Vik Fearing
Дата:
Сообщение: Re: Should we support new definition for Identity column : GENERATED BY DEFAULT ON NULL?