On Wed, May 31, 2017 at 12:30 PM, Michael Paquier
<michael.paquier@gmail.com> wrote:
> On Wed, May 31, 2017 at 6:57 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> wangchuanting@huawei.com writes:
>>> startup process on standby encounter a deadlock of TwoPhaseStateLock when
>>> redo 2PC xlog.
>>
>> Please provide an example of how to get into this state.
>
> That would help. Are you seeing in the logs something like "removing
> future two-phase state from memory for XXX" or "removing stale
> two-phase state from shared memory for XXX"?
>
> Even with that, the light-weight lock sequence taken in those code
> paths look definitely wrong to me, we should not take twice
> TwoPhaseStateLock in the same code path. I think that we should remove
> the lock acquisitions in RemoveGXact() and PrepareRedoRemove, and then
> upgrade the locks of PrescanPreparedTransactions() and
> StandbyRecoverPreparedTransactions() to be exclusive. We still need to
> keep a lock as CheckPointTwoPhase() may still be triggered by the
> checkpoint. Tom, what do you think?
Attached is what I was thinking about for reference. I just came back
from a long flight and I am pretty tired, so my brain may have missed
something. I'll take again a look at this issue on Monday, an open
item has been added for now.
--
Michael
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs