Re: locking [user] catalog tables vs 2pc vs logical rep

From: vignesh C <vignesh21(at)gmail(dot)com>
To: "osumi(dot)takamichi(at)fujitsu(dot)com" <osumi(dot)takamichi(at)fujitsu(dot)com>
Cc: Peter Smith <smithpb2250(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Markus Wanner <markus(dot)wanner(at)enterprisedb(dot)com>
Subject: Re: locking [user] catalog tables vs 2pc vs logical rep
Date: 2021-06-03 04:08:37
Message-ID: CALDaNm1YuxZR3OsDSbv0MAQ_7a7emjcvATJhh4QNi71w+=NBRA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jun 3, 2021 at 9:18 AM osumi(dot)takamichi(at)fujitsu(dot)com
<osumi(dot)takamichi(at)fujitsu(dot)com> wrote:
>
> On Tuesday, June 1, 2021 4:33 PM Peter Smith <smithpb2250(at)gmail(dot)com>
> > To: Andres Freund <andres(at)anarazel(dot)de>
> > Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>; Amit Kapila
> > <amit(dot)kapila16(at)gmail(dot)com>; Markus Wanner
> > <markus(dot)wanner(at)enterprisedb(dot)com>
> > Subject: Re: locking [user] catalog tables vs 2pc vs logical rep
> >
> > Hi.
> >
> > The attached PG docs patch about catalog deadlocks was previously
> > implemented in another thread [1], but it seems more relevant to this one.
> >
> > PSA.
> Thank you for providing the patch.
> I have updated your patch to include some other viewpoints.
>
> For example, CLUSTER command scenario
> that also causes hang of PREPARE in synchronous mode.
> We get this deadlock, using the 2PC patch-set.
>
> FYI, the scenario is
> (1) create a table with a trigger
> (2) create pub and sub in synchronous mode
> (3) then, execute CLUSTER pg_trigger USING pg_trigger_oid_index,
> and do some operations (e.g. INSERT) on the trigger-attached table and PREPARE
>
> The mechanism of this is
> walsender tries to take a lock on pg_trigger if the table has a trigger,
> but, pg_trigger is already locked by the CLUSTER command, which leads to the deadlock.
> Then, this scenario requires some operations on the table which has trigger
> because it invokes the walsender to take the lock described above.
>
> I also included the description about TRUNCATE on user_catalog_table
> in the patch. Please have a look at this patch.

1) I was not able to generate html docs with the attached patch:
logicaldecoding.sgml:1128: element sect1: validity error : Element
sect1 content does not follow the DTD, expecting (sect1info? , (title
, subtitle? , titleabbrev?) , (toc | lot | index | glossary |
bibliography)* , (((calloutlist | glosslist | bibliolist |
itemizedlist | orderedlist | segmentedlist | simplelist | variablelist
| caution | important | note | tip | warning | literallayout |
programlisting | programlistingco | screen | screenco | screenshot |
synopsis | cmdsynopsis | funcsynopsis | classsynopsis | fieldsynopsis
| constructorsynopsis | destructorsynopsis | methodsynopsis |
formalpara | para | simpara | address | blockquote | graphic |
graphicco | mediaobject | mediaobjectco | informalequation |
informalexample | informalfigure | informaltable | equation | example
| figure | table | msgset | procedure | sidebar | qandaset | task |
anchor | bridgehead | remark | highlights | abstract | authorblurb |
epigraph | indexterm | beginpage)+ , (refentry* | sect2* |
simplesect*)) | refentry+ | sect2+ | simplesect+) , (toc | lot | index
| glossary | bibliography)*), got (title sect2 sect2 note )
</sect1>

2) You could change hang to deadlock:
+ logical decoding of published table within the same
transaction leads to a hang.

Regards,
Vignesh

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2021-06-03 04:17:06 Re: Fixup some appendStringInfo and appendPQExpBuffer calls
Previous Message Amit Kapila 2021-06-03 03:59:28 Re: Decoding of two-phase xacts missing from CREATE_REPLICATION_SLOT command