This is an automated email from the ASF dual-hosted git repository. oppenheimer01 pushed a commit to branch cbdb-postgres-merge in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 7e96c279c01b71a41cc199b1c4b11457d6e2dade Author: liushengsong <[email protected]> AuthorDate: Thu Apr 30 11:33:17 2026 +0800 Fix gprecoverseg: restore replication slot creation fallback for new segments The try/except fallback logic in FullRecovery.run() was commented out during the PG16 merge. This caused pg_basebackup to fail when recovering new segments (e.g. during gpexpand) that don't yet have the internal_wal_replication_slot. Restore the fallback to retry with create_slot=True when the slot doesn't exist. --- gpMgmt/sbin/gpsegrecovery.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/gpMgmt/sbin/gpsegrecovery.py b/gpMgmt/sbin/gpsegrecovery.py index ef1bc88738f..811a73ccbb5 100644 --- a/gpMgmt/sbin/gpsegrecovery.py +++ b/gpMgmt/sbin/gpsegrecovery.py @@ -39,26 +39,26 @@ class FullRecovery(Command): target_gp_dbid=self.recovery_info.target_segment_dbid, progress_file=self.recovery_info.progress_file) self.logger.info("Running pg_basebackup with progress output temporarily in %s" % self.recovery_info.progress_file) - # try: - cmd.run(validateAfter=True) - # except Exception as e: #TODO should this be ExecutionError? - # self.logger.info("Running pg_basebackup failed: {}".format(str(e))) - # - # # If the cluster never has mirrors, cmd will fail - # # quickly because the internal slot doesn't exist. - # # Re-run with `create_slot`. - # # GPDB_12_MERGE_FIXME could we check it before? or let - # # pg_basebackup create slot if not exists. - # cmd = PgBaseBackup(self.recovery_info.target_datadir, - # self.recovery_info.source_hostname, - # str(self.recovery_info.source_port), - # create_slot=True, - # replication_slot_name=self.replicationSlotName, - # forceoverwrite=True, - # target_gp_dbid=self.recovery_info.target_segment_dbid, - # progress_file=self.recovery_info.progress_file) - # self.logger.info("Re-running pg_basebackup, creating the slot this time") - # cmd.run(validateAfter=True) + try: + cmd.run(validateAfter=True) + except Exception as e: #TODO should this be ExecutionError? + self.logger.info("Running pg_basebackup failed: {}".format(str(e))) + + # If the cluster never has mirrors, cmd will fail + # quickly because the internal slot doesn't exist. + # Re-run with `create_slot`. + # GPDB_12_MERGE_FIXME could we check it before? or let + # pg_basebackup create slot if not exists. + cmd = PgBaseBackup(self.recovery_info.target_datadir, + self.recovery_info.source_hostname, + str(self.recovery_info.source_port), + create_slot=True, + replication_slot_name=self.replicationSlotName, + forceoverwrite=True, + target_gp_dbid=self.recovery_info.target_segment_dbid, + progress_file=self.recovery_info.progress_file) + self.logger.info("Re-running pg_basebackup, creating the slot this time") + cmd.run(validateAfter=True) self.error_type = RecoveryErrorType.DEFAULT_ERROR self.logger.info("Successfully ran pg_basebackup for dbid: {}".format( --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
