On Thu, 06 May 2021 at 17:30, Peter Smith <smithpb2...@gmail.com> wrote: > On Thu, May 6, 2021 at 7:18 PM Japin Li <japi...@hotmail.com> wrote: >> >> >> On Thu, 06 May 2021 at 17:08, Peter Smith <smithpb2...@gmail.com> wrote: >> > On Wed, May 5, 2021 at 12:35 PM Tom Lane <t...@sss.pgh.pa.us> wrote: >> >> >> >> Peter Smith <smithpb2...@gmail.com> writes: >> >> > This patch replaces the global "wrconn" in AlterSubscription_refresh >> >> > with a local variable of the same name, making it consistent with other >> >> > functions in subscriptioncmds.c (e.g. DropSubscription). >> >> > The global wrconn is only meant to be used for logical apply/tablesync >> >> > worker. >> >> > Using the global/incorrect wrconn in AlterSubscription_refresh doesn't >> >> > normally cause any problems, but harm is still posslble if the apply >> >> > worker ever manages to do a subscription refresh. e.g. see [1] >> >> >> >> Hm. I would actually place the blame for this on whoever thought >> >> it was okay to name a global variable something as generic as >> >> "wrconn". Let's rename that while we're at it, say to something >> >> like "tablesync_wrconn" (feel free to bikeshed). >> > >> > PSA v3 of the patch. Same as before, but now also renames the global >> > variable from "wrconn" to "lrep_worker_wrconn". >> > >> >> Thanks for updating patch. I'm confused why we move the walrcv_connect() out >> of >> PG_TRY() block? >> + /* Try to connect to the publisher. */ >> + wrconn = walrcv_connect(sub->conninfo, true, sub->name, &err); >> + if (!wrconn) >> + ereport(ERROR, >> + (errmsg("could not connect to the publisher: >> %s", err))); >> + >> PG_TRY(); >> { >> - /* Try to connect to the publisher. */ >> - wrconn = walrcv_connect(sub->conninfo, true, sub->name, >> &err); >> - if (!wrconn) >> - ereport(ERROR, >> - (errmsg("could not connect to the >> publisher: %s", err))); >> - >> /* Get the table list from publisher. */ >> pubrel_names = fetch_table_list(wrconn, sub->publications); > > Thanks for your review. Reason for moving that out of the PG_TRY are: > > a) It makes code now consistent with other functions using wrconn. See > CreateSubscription, DropSubscription etc > > b) It means don't need the wrconn NULL check anymore in the PG_FINALLY > so it simplifies the disconnect. >
Thanks for your explanation! -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.