Re: [PoC] pg_upgrade: allow to upgrade publisher node

vignesh C <vignesh21@gmail.com>

From: vignesh C <vignesh21@gmail.com>
To: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Cc: "Wei Wang (Fujitsu)" <wangw.fnst@fujitsu.com>, Peter Eisentraut <peter.eisentraut@enterprisedb.com>, Julien Rouhaud <rjuju123@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Amit Kapila <amit.kapila16@gmail.com>, Peter Smith <smithpb2250@gmail.com>
Date: 2023-05-30T14:58:28Z
Lists: pgsql-hackers
On Mon, 22 May 2023 at 15:50, Hayato Kuroda (Fujitsu)
<kuroda.hayato@fujitsu.com> wrote:
>
> Dear Wang,
>
> Thank you for reviewing! PSA new version.

Thanks for the updated patch, Few comments:
Few comments
1) check_for_parameter_settings, check_for_confirmed_flush_lsn and
check_are_logical_slots_active functions all have the same messages,
we can keep it unique so that it is easy for user to interpret:
+check_for_parameter_settings(ClusterInfo *new_cluster)
+{
+       PGresult   *res;
+       PGconn     *conn = connectToServer(new_cluster, "template1");
+       int                     max_replication_slots;
+       char       *wal_level;
+
+       prep_status("Checking for logical replication slots");
+
+       res = executeQueryOrDie(conn, "SHOW max_replication_slots;");

+check_for_confirmed_flush_lsn(ClusterInfo *cluster)
+{
+       int                     i,
+                               ntups,
+                               i_slotname;
+       bool            is_error = false;
+       PGresult   *res;
+       DbInfo     *active_db = &cluster->dbarr.dbs[0];
+       PGconn     *conn = connectToServer(cluster, active_db->db_name);
+
+       Assert(user_opts.include_logical_slots);
+
+       /* --include-logical-replication-slots can be used since PG16. */
+       if (GET_MAJOR_VERSION(cluster->major_version) <= 1500)
+               return;
+
+       prep_status("Checking for logical replication slots");

+check_are_logical_slots_active(ClusterInfo *cluster)
+{
+       int                     i,
+                               ntups,
+                               i_slotname;
+       bool            is_error = false;
+       PGresult   *res;
+       DbInfo     *active_db = &cluster->dbarr.dbs[0];
+       PGconn     *conn = connectToServer(cluster, active_db->db_name);
+
+       Assert(user_opts.include_logical_slots);
+
+       /* --include-logical-replication-slots can be used since PG16. */
+       if (GET_MAJOR_VERSION(cluster->major_version) <= 1500)
+               return;
+
+       prep_status("Checking for logical replication slots");

2) This function can be placed above get_logical_slot_infos and the
prototype from this file can be removed:
+/*
+ * get_logical_slot_infos_per_db()
+ *
+ * gets the LogicalSlotInfos for all the logical replication slots of
the database
+ * referred to by "dbinfo".
+ */
+static void
+get_logical_slot_infos_per_db(ClusterInfo *cluster, DbInfo *dbinfo)
+{
+       PGconn     *conn = connectToServer(cluster,
+
    dbinfo->db_name);

3) LogicalReplicationSlotInfo should be placed after LogicalRepWorker
to keep the order consistent:
 LogicalRepCommitPreparedTxnData
 LogicalRepCtxStruct
+LogicalReplicationSlotInfo
 LogicalRepMsgType

4) "existence of slots" be changed to "existence of slots."
+               /*
+                * If --include-logical-replication-slots is required, check the
+                * existence of slots
+                */

5) This comment can be removed:
+ *
+ * XXX: add more attributes if needed
+ */

Regards,
Vignesh



Commits

  1. Fix issues in binary_upgrade_logical_slot_has_caught_up().

  2. Fix a random failure in 003_logical_slots.pl.

  3. Fix a test in 003_logical_slots.

  4. Fix uninitialized slot array access during the upgrade.

  5. Fix the test 003_logical_slots.

  6. Commit b195e6d482 forgot to update meson.build.

  7. Use shorter file names in the upgrade logical slots test.

  8. Migrate logical slots to the new node during an upgrade.

  9. Flush logical slots to disk during a shutdown checkpoint if required.

  10. Prevent possibility of panics during shutdown checkpoint.