Dear Amit, Thanks for reviewing! New patch is available at [1].
> > Some more comments: > 1. Let's restruture binary_upgrade_validate_wal_logical_end() a bit. > First, let's change its name to binary_upgrade_slot_has_pending_wal() > or something like that. Then move the context creation and free > related code into DecodingContextHasDecodedItems(). We can rename > DecodingContextHasDecodedItems() as > pg_logical_replication_slot_has_pending_wal() and place it in > slotfuncs.c. This will make the code structure similar to other slot > functions like pg_replication_slot_advance(). Seems clearer than mine. Fixed. > 2. + * Returns true if there are no changes after the confirmed_flush_lsn. > > How about something like: "Returns true if there are no decodable WAL > records after the confirmed_flush_lsn."? Fixed. > 3. Shouldn't we need to call CheckSlotPermissions() in > binary_upgrade_validate_wal_logical_end? Added, but actually it is not needed. This is because only superusers can connect to the server while upgrading. Please see below codes in InitPostgres(). ``` if (IsBinaryUpgrade && !am_superuser) { ereport(FATAL, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to connect in binary upgrade mode"))); } ``` > 4. > + /* > + * Also, set processing_required flag if the message is not > + * transactional. It is needed to notify the message's existence to > + * the caller side. Usually, the flag is set when either the COMMIT or > + * ABORT records are decoded, but this must be turned on here because > + * the non-transactional logical message is decoded without waiting > + * for these records. > + */ > > The first sentence of the comments doesn't seem to be required as that > just says what the code does. So, let's slightly change it to: "We > need to set processing_required flag to notify the message's existence > to the caller side. Usually, the flag is set when either the COMMIT or > ABORT records are decoded, but this must be turned on here because the > non-transactional logical message is decoded without waiting for these > records." Fixed. [1]: https://www.postgresql.org/message-id/TYAPR01MB5866B0614F80CE9F5EF051BDF5D3A%40TYAPR01MB5866.jpnprd01.prod.outlook.com Best Regards, Hayato Kuroda FUJITSU LIMITED