Re: Adding a '--clean-publisher-objects' option to 'pg_createsubscriber' utility.

From: Shubham Khanna <khannashubham1197(at)gmail(dot)com>
To: "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Shlok Kyal <shlok(dot)kyal(dot)oss(at)gmail(dot)com>
Subject: Re: Adding a '--clean-publisher-objects' option to 'pg_createsubscriber' utility.
Date: 2025-02-11 04:21:30
Message-ID: CAHv8RjJGjA_fwJ_TNrHbyTz7ATA1MXfNxPhoBvJfKRfk1Qf-ng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Feb 7, 2025 at 7:46 AM Hayato Kuroda (Fujitsu)
<kuroda(dot)hayato(at)fujitsu(dot)com> wrote:
>
> Dear Shubham,
>
> Thanks for updating the patch.
>
> Previously you told that you had a plan to extend the patch to drop other replication
> objects [1], but I think it is not needed. pg_createsubscriber has already been
> able to drop the existing subscrisubscriptions in check_and_drop_existing_subscriptions().
> As for the replication slot, I have told in [2], it would be created intentionally
> thus I feel it should not be dropped.
> Thus I regard the patch does not have concrete extending plan.
>
> Below part contains my review comment.
>
> 01. Option name
>
> Based on the above discussion, "--cleanup-publisher-objects" is not suitable because
> it won't drop replication slots. How about "--cleanup-publications"?
>

I have changed the name of the option to "--cleanup-existing-publications"

> 02. usage()
> ```
> + printf(_(" -C --cleanup-publisher-objects drop all publications on the logical replica\n"));
> ```

Fixed.

> s/logical replica/subscriber
>
> 03. drop_all_publications
> ```
> +/* Drops all existing logical replication publications from all subscriber
> + * databases
> + */
> +static void
> ```
>
> Initial line of the comment must be blank [3].
>

Removed this function.

> 04. main
> ```
> + {"cleanup-publisher-objects", no_argument, NULL, 'C'},
> ```
>
> Is there a reason why upper case is used? I feel lower one is enough.
>

Fixed.

> 05. main
> ```
> + /* Drop publications from the subscriber if requested */
> + if (opt.cleanup_publisher_objects)
> + drop_all_publications(dbinfo);
> ```
>
> After considering more, I noticed that we have already called drop_publication()
> in the setup_subscriber(). Can we call drop_all_publications() there instead when
> -C is specified?
>

I agree with you on this. I have removed the drop_all_publication()
and added the "--cleanup-existing-publications" option to the
drop_publication()

> 06. 040_pg_createsubscriber.pl
>
> ```
> +$node_s->start;
> +# Create publications to test it's removal
> +$node_p->safe_psql($db1, "CREATE PUBLICATION test_pub FOR ALL TABLES;");
> +$node_p->safe_psql($db1, "CREATE PUBLICATION test_pub2 FOR ALL TABLES;");
> +
> +# Verify the existing publications
> +my $pub_count_before =
> + $node_s->safe_psql($db1, "SELECT COUNT(*) FROM pg_publication;");
> +is($pub_count_before, '2',
> + 'two publications created before --cleanup-publisher-objects is run');
> +
> +$node_s->stop;
> ```
>
> I feel it requires unnecessary startup and shutdown. IIUC, creating publications and check
> counts can be before stopping the node_s, around line 331.
>

Fixed.

> 07. 040_pg_createsubscriber.pl
>
> ```
> +$node_p->safe_psql($db1, "CREATE PUBLICATION test_pub FOR ALL TABLES;");
> +$node_p->safe_psql($db1, "CREATE PUBLICATION test_pub2 FOR ALL TABLES;");
> +
> +# Verify the existing publications
> +my $pub_count_before =
> + $node_s->safe_psql($db1, "SELECT COUNT(*) FROM pg_publication;");
> +is($pub_count_before, '2',
> + 'two publications created before --cleanup-publisher-objects is run');
> +
> ```
>
> Also, there is a possibility that CREATE PUBLICATION on node_p is not replicated yet
> when SELECT COUNT(*) is executed. Please wait for the replay.
>
> [1]: https://www.postgresql.org/message-id/CAHv8RjL4OvoYafofTb_U_JD5HuyoNowBoGpMfnEbhDSENA74Kg%40mail.gmail.com
> [2]: https://www.postgresql.org/message-id/OSCPR01MB1496664FDC38DA40A441F449FF5EE2%40OSCPR01MB14966.jpnprd01.prod.outlook.com
> [3]: https://www.postgresql.org/docs/devel/source-format.html
>

Fixed.

The attached Patch contains the suggested changes.

Thanks and regards,
Shubham Khanna.

Attachment Content-Type Size
v4-0001-Support-for-dropping-all-publications-in-pg_creat.patch application/octet-stream 12.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Ilia Evdokimov 2025-02-11 05:34:32 Re: 2025-02-13 release announcement draft
Previous Message Peter Smith 2025-02-11 03:19:20 Re: Introduce XID age and inactive timeout based replication slot invalidation