Re: Connections hang indefinitely while taking a gin index's LWLock buffer_content lock

From: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>
To: Peter Geoghegan <pg(at)bowt(dot)ie>
Cc: chjischj(at)163(dot)com, Teodor Sigaev <teodor(at)sigaev(dot)ru>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Connections hang indefinitely while taking a gin index's LWLock buffer_content lock
Date: 2018-11-14 18:11:12
Message-ID: 359DAAF1-CC69-4195-8EAF-A8B68B0D59B5@yandex-team.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

<html><head></head><body dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class="ApplePlainTextBody">Hi everyone!<br><br>I didn't noticed this thread for too long somehow, sorry.<br><br><blockquote type="cite">8 нояб. 2018 г., в 6:46, Peter Geoghegan &lt;pg(at)bowt(dot)ie&gt; написал(а):<br><br>I don't think<br>the general "there can't be any inserters at this subtree" thing works<br>given that we have to couple buffer locks when moving right for other<br>reasons. We call ginStepRight() within ginFinishSplit(), for reasons<br>that date back to bug fix commit ac4ab97e from 2013 -- that detail is<br>probably important, because it seems to be what breaks the subtree<br>design (we don't delete in two phases or anything in GIN).<br></blockquote><br>ginVacuumPostingTreeLeaves() holds LockBufferForCleanup() on subtree root b.<br>Thus there may be no GinBtreeStack's holding pin on b at the moment.<br>When you ginStepRight(b) to the parent in ginFinishSplit(), you always get to the buffer from your stack.<br>Hence you can never have ginFinishSplit() deadlock with cleanup of subtree whose root is LockBufferForCleanup()'d.<br><br>Is this correct or did I miss something?<br><br>But we have a deadlock at hand, I'll think more about it. Something with locking protocol is clearly wrong.<br><br><blockquote type="cite">11 нояб. 2018 г., в 22:33, chenhj &lt;chjischj(at)163(dot)com&gt; написал(а):<br><br>The order of get lwlock in ginRedoDeletePage() may should be change from "dbuffer-&gt;pbuffer-&gt;lbuffer" to "lbuffer-&gt;dbuffer-&gt;pbuffer" . Is this right?<br></blockquote><br>This looks correct to me.<br><br>Best regards, Andrey Borodin.</div></body></html>

Attachment Content-Type Size
unknown_filename text/html 1.7 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message James Coleman 2018-11-14 18:21:30 Re: Proving IS NOT NULL inference for ScalarArrayOpExpr's
Previous Message Alvaro Herrera 2018-11-14 18:10:50 Re: Speeding up INSERTs and UPDATEs to partitioned tables