Re: AlterSubscription_refresh "wrconn" wrong variable?
От | Japin Li |
---|---|
Тема | Re: AlterSubscription_refresh "wrconn" wrong variable? |
Дата | |
Msg-id | MEYP282MB1669CAF00F17AE2ADF60B4A7B6589@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM обсуждение исходный текст |
Ответ на | Re: AlterSubscription_refresh "wrconn" wrong variable? (Peter Smith <smithpb2250@gmail.com>) |
Список | pgsql-hackers |
On Thu, 06 May 2021 at 17:30, Peter Smith <smithpb2250@gmail.com> wrote: > On Thu, May 6, 2021 at 7:18 PM Japin Li <japinli@hotmail.com> wrote: >> >> >> On Thu, 06 May 2021 at 17:08, Peter Smith <smithpb2250@gmail.com> wrote: >> > On Wed, May 5, 2021 at 12:35 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> >> >> >> Peter Smith <smithpb2250@gmail.com> writes: >> >> > This patch replaces the global "wrconn" in AlterSubscription_refresh with a local variable of the same name, makingit 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 stillposslble 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.
В списке pgsql-hackers по дате отправления: