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

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

From: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
To: 'vignesh C' <vignesh21@gmail.com>
Cc: Julien Rouhaud <rjuju123@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Amit Kapila <amit.kapila16@gmail.com>
Date: 2023-04-20T05:28:42Z
Lists: pgsql-hackers
Dear Vignesh,

Thanks for giving a comment! New patch will be available soon.

> Thanks for the patches.
> Currently the two_phase enabled slots are not getting restored from
> the dumped contents, this is because we are passing the twophase value
> as the second parameter which indicates if it is temporary or not to
> the pg_create_logical_replication_slot function as in [1], while
> restoring it is internally creating the slot as a temporary slot in
> this case:
> +               appendPQExpBuffer(query, "SELECT
> pg_catalog.pg_create_logical_replication_slot('%s', ",
> +                                                slotname);
> +               appendStringLiteralAH(query, slotinfo->plugin, fout);
> +               appendPQExpBuffer(query, ", ");
> +               appendStringLiteralAH(query, slotinfo->twophase, fout);
> +               appendPQExpBuffer(query, ");");
> +
> +               ArchiveEntry(fout, slotinfo->dobj.catId, slotinfo->dobj.dumpId,
> +                                        ARCHIVE_OPTS(.tag = slotname,
> +
> .description = "REPLICATION SLOT",
> +
> .section = SECTION_POST_DATA,
> +
> .createStmt = query->data));
> +
> +               pfree(slotname);
> +               destroyPQExpBuffer(query);
> +       }
> +}
> 
> Since we are dumping only the permanent slots, we could update
> temporary parameter as false:
> +               appendPQExpBuffer(query, "SELECT
> pg_catalog.pg_create_logical_replication_slot('%s', ",
> +                                                slotname);
> +               appendStringLiteralAH(query, slotinfo->plugin, fout);
> +               appendPQExpBuffer(query, ", f, ");
> +               appendStringLiteralAH(query, slotinfo->twophase, fout);
> +               appendPQExpBuffer(query, ");");
> 
> [1] - https://www.postgresql.org/docs/devel/functions-admin.html

Yeah, you are right. I misread the interface of the function.
Fixed and added new test.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

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.