On Thu, Nov 9, 2023 at 7:07 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Wed, Nov 8, 2023 at 11:05 PM vignesh C <vignes...@gmail.com> wrote: > > > > On Wed, 8 Nov 2023 at 08:43, vignesh C <vignes...@gmail.com> wrote: > > > > Here is a small improvisation where num_slots need not be initialized > > as it will be used only after assigning the result now. The attached > > patch has the changes for the same. > > > > Pushed! >
Thank you for your work on this feature! One month has already been passed since this main patch got committed but reading this change, I have some questions on new binary_upgrade_logical_slot_has_caught_up() function: Is there any reason why this function can be executed only in binary upgrade mode? It seems to me that other functions in pg_upgrade_support.c must be called only in binary upgrade mode because it does some hacky changes internally. On the other hand, binary_upgrade_logical_slot_has_caught_up() just calls LogicalReplicationSlotHasPendingWal(), which doesn't change anything internally. If we make this function usable in normal mode, the user would be able to check each slot's upgradability without pg_upgrade --check command (or without stopping the server if the user can ensure no more meaningful WAL records are generated). --- Also, the function checks if the user has the REPLICATION privilege but I think that only superuser can connect to the server in binary upgrade mode in the first place. --- The following error message doesn't match the function name: /* We must check before dereferencing the argument */ if (PG_ARGISNULL(0)) elog(ERROR, "null argument to binary_upgrade_validate_wal_records is not allowed"); --- { oid => '8046', descr => 'for use by pg_upgrade', proname => 'binary_upgrade_logical_slot_has_caught_up', proisstrict => 'f', provolatile => 'v', proparallel => 'u', prorettype => 'bool', proargtypes => 'name', prosrc => 'binary_upgrade_logical_slot_has_caught_up' }, The function is not a strict function but we check in the function if the passed argument is not null. I think it would be clearer to make it a strict function. --- LogicalReplicationSlotHasPendingWal() is defined in logical.c but I guess it's more suitable to be in slotfunc.s where similar functions such as pg_logical_replication_slot_advance() is also defined. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com