Re: [HACKERS] PANIC in pg_commit_ts slru after crashes
От | Jeff Janes |
---|---|
Тема | Re: [HACKERS] PANIC in pg_commit_ts slru after crashes |
Дата | |
Msg-id | CAMkU=1xqfE3=O8v7AexGk+L17+A9dwRyhW8QJ=k-cuC7Gi=vWg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] PANIC in pg_commit_ts slru after crashes (Pavan Deolasee <pavan.deolasee@gmail.com>) |
Ответы |
Re: [HACKERS] PANIC in pg_commit_ts slru after crashes
|
Список | pgsql-hackers |
On Fri, Apr 14, 2017 at 9:33 PM, Pavan Deolasee <pavan.deolasee@gmail.com> wrote:
Since all those offsets fall on a page boundary, my guess is that we're somehow failing to handle a new page correctly.Looking at the patch itself, my feeling is that the following code in src/backend/access/transam/twophase.c might be causing the problem. 18411842 /* update nextXid if needed */1843 if (TransactionIdFollowsOrEquals(maxsubxid, ShmemVariableCache->nextXid)) 1844 {1845 LWLockAcquire(XidGenLock, LW_EXCLUSIVE);1846 ShmemVariableCache->nextXid = maxsubxid;1847 TransactionIdAdvance(ShmemVariableCache->nextXid); 1848 LWLockRelease(XidGenLock);1849 }The functionPrescanPreparedTransactions() gets called at the start of the redo recovery and this specific block will get exercised irrespective of whether there are any prepared transactions or not. What I find particularly wrong here is that we are initialising maxsubxid to current value of ShmemVariableCache->nextXid when the function enters, but this block would then again increment ShmemVariableCache->nextXid, when there are no prepared transactions in the system. I wonder if we should do as in attached patch.
That solves it for me.
Thanks,
Jeff
В списке pgsql-hackers по дате отправления: