Re: Identify missing publications from publisher while create/alter subscription. - Mailing list pgsql-hackers
From | Ashutosh Sharma |
---|---|
Subject | Re: Identify missing publications from publisher while create/alter subscription. |
Date | |
Msg-id | CAE9k0P=QLW5y6Lzv_TDLVH4oRjB9hKpFTnB2kM7Jeez1dN5r5A@mail.gmail.com Whole thread Raw |
In response to | Re: Identify missing publications from publisher while create/alter subscription. (vignesh C <vignesh21@gmail.com>) |
Responses |
Re: Identify missing publications from publisher while create/alter subscription.
|
List | pgsql-hackers |
I have spent little time looking at the latest patch. The patch looks to be in good shape as it has already been reviewed by many people here, although I did get some comments. Please take a look and let me know your thoughts. + /* 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))); I think it would be good to also include the errcode (ERRCODE_CONNECTION_FAILURE) here? -- @@ -514,6 +671,8 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, PG_TRY(); { + check_publications(wrconn, publications, opts.validate_publication); + Instead of passing the opts.validate_publication argument to check_publication function, why can't we first check if this option is set or not and accordingly call check_publication function? For other options I see that it has been done in the similar way for e.g. check for opts.connect or opts.refresh or opts.enabled etc. -- Above comment also applies for: @@ -968,6 +1130,8 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, replaces[Anum_pg_subscription_subpublications - 1] = true; update_tuple = true; + connect_and_check_pubs(sub, stmt->publication, + opts.validate_publication); -- + <para> + When true, the command verifies if all the specified publications + that are being subscribed to are present in the publisher and throws + an error if any of the publication doesn't exist. The default is + <literal>false</literal>. publication -> publications (in the 4th line : throw an error if any of the publication doesn't exist) This applies for both CREATE and ALTER subscription commands. -- With Regards, Ashutosh Sharma. On Sat, Nov 13, 2021 at 12:50 PM vignesh C <vignesh21@gmail.com> wrote: > > On Wed, Nov 10, 2021 at 11:16 AM Bharath Rupireddy > <bharath.rupireddyforpostgres@gmail.com> wrote: > > > > On Tue, Nov 9, 2021 at 9:27 PM vignesh C <vignesh21@gmail.com> wrote: > > > Attached v12 version is rebased on top of Head. > > > > Thanks for the patch. Here are some comments on v12: > > > > 1) I think ERRCODE_TOO_MANY_ARGUMENTS isn't the right error code, the > > ERRCODE_UNDEFINED_OBJECT is more meaningful. Please change. > > + ereport(ERROR, > > + (errcode(ERRCODE_TOO_MANY_ARGUMENTS), > > + errmsg_plural("publication %s does not exist in the publisher", > > + "publications %s do not exist in the publisher", > > > > The existing code using > > ereport(ERROR, > > (errcode(ERRCODE_UNDEFINED_OBJECT), > > errmsg("subscription \"%s\" does not exist", subname))); > > Modified > > > 2) Typo: It is "One of the specified publications exists." > > +# One of the specified publication exist. > > Modified > > > 3) I think we can remove the test case "+# Specified publication does > > not exist." because the "+# One of the specified publication exist." > > covers the code. > > Modified > > > 4) Do we need the below test case? Even with refresh = false, it does > > call connect_and_check_pubs() right? Please remove it. > > +# Specified publication does not exist with refresh = false. > > +($ret, $stdout, $stderr) = $node_subscriber->psql('postgres', > > + "ALTER SUBSCRIPTION mysub1 SET PUBLICATION non_existent_pub > > WITH (REFRESH = FALSE, VALIDATE_PUBLICATION = TRUE)" > > +); > > +ok( $stderr =~ > > + m/ERROR: publication "non_existent_pub" does not exist in > > the publisher/, > > + "Alter subscription for non existent publication fails"); > > + > > Modified > > > 5) Change the test case names to different ones instead of the same. > > Have something like: > > "Create subscription fails with single non-existent publication"); > > "Create subscription fails with multiple non-existent publications"); > > "Create subscription fails with mutually exclusive options"); > > "Alter subscription add publication fails with non-existent publication"); > > "Alter subscription set publication fails with non-existent publication"); > > "Alter subscription set publication fails with connection to a > > non-existent database"); > > Modified > > Thanks for the comments, the attached v13 patch has the fixes for the same. > > Regards, > Vignesh
pgsql-hackers by date: