@@ -2734,5 +2734,46 @@ def test_merge_pg_filenode_map(self):
27342734 'postgres' ,
27352735 'select 1' )
27362736
2737+ def test_unfinished_merge (self ):
2738+ """ Test when parent has unfinished merge with a different backup. """
2739+ self ._check_gdb_flag_or_skip_test ()
2740+ cases = [('fail_merged' , 'write_backup_filelist' , ['MERGED' , 'MERGING' , 'OK' ]),
2741+ ('fail_merging' , 'pgBackupWriteControl' , ['MERGING' , 'OK' , 'OK' ])]
2742+
2743+ for name , terminate_at , states in cases :
2744+ node_name = 'node_' + name
2745+ backup_dir = os .path .join (self .tmp_path , self .module_name , self .fname , name )
2746+ node = self .make_simple_node (
2747+ base_dir = os .path .join (self .module_name , self .fname , node_name ),
2748+ set_replication = True ,
2749+ initdb_params = ['--data-checksums' ])
2750+
2751+ self .init_pb (backup_dir )
2752+ self .add_instance (backup_dir , node_name , node )
2753+ self .set_archiving (backup_dir , node_name , node )
2754+ node .slow_start ()
2755+
2756+ full_id = self .backup_node (backup_dir , node_name , node , options = ['--stream' ])
2757+
2758+ backup_id = self .backup_node (backup_dir , node_name , node , backup_type = 'delta' )
2759+ second_backup_id = self .backup_node (backup_dir , node_name , node , backup_type = 'delta' )
2760+
2761+ gdb = self .merge_backup (backup_dir , node_name , backup_id , gdb = True )
2762+ gdb .set_breakpoint (terminate_at )
2763+ gdb .run_until_break ()
2764+
2765+ gdb .remove_all_breakpoints ()
2766+ gdb ._execute ('signal SIGINT' )
2767+ gdb .continue_execution_until_error ()
2768+
2769+ print (self .show_pb (backup_dir , node_name , as_json = False , as_text = True ))
2770+
2771+ for expected , real in zip (states , self .show_pb (backup_dir , node_name ), strict = True ):
2772+ self .assertEqual (expected , real ['status' ])
2773+
2774+ with self .assertRaisesRegex (ProbackupException ,
2775+ f"Full backup { full_id } has unfinished merge with backup { backup_id } " ):
2776+ self .merge_backup (backup_dir , node_name , second_backup_id , gdb = False )
2777+
27372778# 1. Need new test with corrupted FULL backup
27382779# 2. different compression levels
0 commit comments