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]

Reply via email to