RE: speed up a logical replica setup

Hayato Kuroda (Fujitsu) <kuroda.hayato@fujitsu.com>

From: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
To: 'vignesh C' <vignesh21@gmail.com>
Cc: Euler Taveira <euler@eulerto.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, Michael Paquier <michael@paquier.xyz>, Peter Eisentraut <peter@eisentraut.org>, Andres Freund <andres@anarazel.de>, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, Shlok Kyal <shlok.kyal.oss@gmail.com>, Fabrízio de Royes Mello <fabriziomello@gmail.com>
Date: 2024-02-22T15:46:06Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. pg_createsubscriber: Remove obsolete comment

  2. pg_createsubscriber: Fix an unpredictable recovery wait time.

  3. Fix unstable test in 040_pg_createsubscriber.

  4. Fix the testcase introduced in commit 81d20fbf7a.

  5. Further weaken new pg_createsubscriber test on Windows.

  6. Temporarily(?) weaken new pg_createsubscriber test on Windows.

  7. Make pg_createsubscriber warn if publisher has two-phase commit enabled.

  8. Make pg_createsubscriber more wary about quoting connection parameters.

  9. pg_createsubscriber: Remove failover replication slots on subscriber

  10. pg_createsubscriber: Remove replication slot check on primary

  11. pg_createsubscriber: Only --recovery-timeout controls the end of recovery process

  12. pg_createsubscriber: creates a new logical replica from a standby server

  13. Add some const decorations

  14. Add option force_initdb to PostgreSQL::Test::Cluster:init()

  15. Remove MSVC scripts

Dear Vignesh,

> Few comments regarding the documentation:
> 1) max_replication_slots information seems to be present couple of times:
> 
> +    <para>
> +     The target instance must have
> +     <link
> linkend="guc-max-replication-slots"><varname>max_replication_slots</varna
> me></link>
> +     and <link
> linkend="guc-max-logical-replication-workers"><varname>max_logical_replica
> tion_workers</varname></link>
> +     configured to a value greater than or equal to the number of target
> +     databases.
> +    </para>
>
> +   <listitem>
> +    <para>
> +     The target instance must have
> +     <link
> linkend="guc-max-replication-slots"><varname>max_replication_slots</varna
> me></link>
> +     configured to a value greater than or equal to the number of target
> +     databases and replication slots.
> +    </para>
> +   </listitem>

Fixed.

> 2) Can we add an id to prerequisites and use it instead of referring
> to r1-app-pg_createsubscriber-1:
> -     <application>pg_createsubscriber</application> checks if the
> given target data
> -     directory has the same system identifier than the source data directory.
> -     Since it uses the recovery process as one of the steps, it starts the
> -     target server as a replica from the source server. If the system
> -     identifier is not the same,
> <application>pg_createsubscriber</application> will
> -     terminate with an error.
> +     Checks the target can be converted.  In particular, things listed in
> +     <link linkend="r1-app-pg_createsubscriber-1">above section</link>
> would be
> +     checked.  If these are not met
> <application>pg_createsubscriber</application>
> +     will terminate with an error.
>      </para>

Changed.

> 3) The code also checks the following:
>  Verify if a PostgreSQL binary (progname) is available in the same
> directory as pg_createsubscriber.
> 
> But this is not present in the pre-requisites of documentation.

I think it is quite trivial so that I did not add.

> 4) Here we mention that the target server should be stopped, but the
> same is not mentioned in prerequisites:
> +   Here is an example of using
> <application>pg_createsubscriber</application>.
> +   Before running the command, please make sure target server is stopped.
> +<screen>
> +<prompt>$</prompt> <userinput>pg_ctl -D /usr/local/pgsql/data
> stop</userinput>
> +</screen>
> +

Oh, it is opposite, it should NOT be stopped. Fixed.

> 5) If there is an error during any of the pg_createsubscriber
> operation like if create subscription fails, it might not be possible
> to rollback to the earlier state which had physical-standby
> replication. I felt we should document this and also add it to the
> console message like how we do in case of pg_upgrade.

Added.

New version can be available in [1]

[1]: https://www.postgresql.org/message-id/TYCPR01MB12077CD333376B53F9CAE7AC0F5562%40TYCPR01MB12077.jpnprd01.prod.outlook.com

Best Regards,
Hayato Kuroda
FUJITSU LIMITED
https://www.fujitsu.com/