@@ -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