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:31:16Z
Lists: pgsql-hackers

Attachments

Dear Vignesh,

Thank you for reviewing! PSA new patchset.

> > Additionally, I added a checking functions in 0003
> > According to pg_resetwal and other functions, the length of
> CHECKPOINT_SHUTDOWN
> > record seems (SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort +
> sizeof(CheckPoint)).
> > Therefore, the function ensures that the difference between current insert
> position
> > and confirmed_flush_lsn is less than (above + page header).
> 
> Logical replication slots can be created only if wal_level >= logical,
> currently we do not have any check to see if wal_level >= logical if
> "--include-logical-replication-slots" option is specified. If
> include-logical-replication-slots is specified with pg_upgrade, we
> will be creating replication slots after a lot of steps like
> performing prechecks, analyzing, freezing, deleting, restoring,
> copying, setting related objects and then create replication slot,
> where we will be erroring out after a lot of time(Many cases
> pg_upgrade takes a lot of hours to perform these operations). I feel
> it would be better to add a check in the beginning itself somewhere in
> check_new_cluster to see if wal_level is set appropriately in case of
> include-logical-replication-slot option to detect and throw an error
> early itself.

I see your point. Moreover, I think max_replication_slots != 0 must be also checked.
I added a checking function and related test in 0001.

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.