Re: [PoC] pg_upgrade: allow to upgrade publisher node - Mailing list pgsql-hackers
From | Peter Smith |
---|---|
Subject | Re: [PoC] pg_upgrade: allow to upgrade publisher node |
Date | |
Msg-id | CAHut+PvyxZCXQcV59zFL9YPqYeAS+B4U9Z9JPycrvo7wuyF+Ag@mail.gmail.com Whole thread Raw |
In response to | RE: [PoC] pg_upgrade: allow to upgrade publisher node ("Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>) |
Responses |
Re: [PoC] pg_upgrade: allow to upgrade publisher node
|
List | pgsql-hackers |
Here are some minor review comments for patch v28-0002 ====== src/sgml/ref/pgupgrade.sgml 1. - with the primary.) Replication slots are not copied and must - be recreated. + with the primary.) Replication slots on old standby are not copied. + Only logical slots on the primary are migrated to the new standby, + and other slots must be recreated. </para> /on old standby/on the old standby/ ====== src/bin/pg_upgrade/info.c 2. get_old_cluster_logical_slot_infos +void +get_old_cluster_logical_slot_infos(void) +{ + int dbnum; + + /* Logical slots can be migrated since PG17. */ + if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1600) + return; + + pg_log(PG_VERBOSE, "\nsource databases:"); + + for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) + { + DbInfo *pDbInfo = &old_cluster.dbarr.dbs[dbnum]; + + get_old_cluster_logical_slot_infos_per_db(pDbInfo); + + if (log_opts.verbose) + { + pg_log(PG_VERBOSE, "Database: \"%s\"", pDbInfo->db_name); + print_slot_infos(&pDbInfo->slot_arr); + } + } +} It might be worth putting an Assert before calling the get_old_cluster_logical_slot_infos_per_db(...) just as a sanity check: Assert(pDbInfo->slot_arr.nslots == 0); This also helps to better document the "Note" of the count_old_cluster_logical_slots() function comment. ~~~ 3. count_old_cluster_logical_slots +/* + * count_old_cluster_logical_slots() + * + * Sum up and return the number of logical replication slots for all databases. + * + * Note: this function always returns 0 if the old_cluster is PG16 and prior + * because old_cluster.dbarr.dbs[dbnum].slot_arr is set only for PG17 and + * later. + */ +int +count_old_cluster_logical_slots(void) Maybe that "Note" should be expanded a bit to say who does this: SUGGESTION Note: This function always returns 0 if the old_cluster is PG16 and prior because old_cluster.dbarr.dbs[dbnum].slot_arr is set only for PG17 and later. See where get_old_cluster_logical_slot_infos_per_db() is called. ====== src/bin/pg_upgrade/pg_upgrade.c 4. + /* + * Logical replication slot upgrade only supported for old_cluster >= + * PG17. + * + * Note: This must be done after doing the pg_resetwal command because + * pg_resetwal would remove required WALs. + */ + if (count_old_cluster_logical_slots()) + { + start_postmaster(&new_cluster, true); + create_logical_replication_slots(); + stop_postmaster(false); + } + 4a. I felt this comment needs a bit more detail otherwise you can't tell how the >= PG17 version check works. 4b. /slot upgrade only supported/slot upgrade is only supported/ ~ SUGGESTION Logical replication slot upgrade is only supported for old_cluster >= PG17. An explicit version check is not necessary here because function count_old_cluster_logical_slots() will always return 0 for old_cluster <= PG16. ------ Kind Regards, Peter Smith. Fujitsu Australia
pgsql-hackers by date: