@@ -2655,5 +2655,69 @@ def test_merge_page_header_map_retry(self):
26552655# Clean after yourself
26562656self .del_test_dir (module_name ,fname )
26572657
2658+ # @unittest.skip("skip")
2659+ def test_missing_data_file (self ):
2660+ """
2661+ """
2662+ fname = self .id ().split ('.' )[3 ]
2663+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
2664+ node = self .make_simple_node (
2665+ base_dir = os .path .join (module_name ,fname ,'node' ),
2666+ set_replication = True ,
2667+ initdb_params = ['--data-checksums' ],
2668+ pg_options = {'autovacuum' :'off' })
2669+
2670+ self .init_pb (backup_dir )
2671+ self .add_instance (backup_dir ,'node' ,node )
2672+ self .set_archiving (backup_dir ,'node' ,node )
2673+ node .slow_start ()
2674+
2675+ # Add data
2676+ node .pgbench_init (scale = 1 )
2677+
2678+ # FULL backup
2679+ self .backup_node (backup_dir ,'node' ,node )
2680+
2681+ # Change data
2682+ pgbench = node .pgbench (options = ['-T' ,'5' ,'-c' ,'1' ])
2683+ pgbench .wait ()
2684+
2685+ # DELTA backup
2686+ delta_id = self .backup_node (backup_dir ,'node' ,node ,backup_type = 'delta' )
2687+
2688+ path = node .safe_psql (
2689+ 'postgres' ,
2690+ "select pg_relation_filepath('pgbench_accounts')" ).rstrip ()
2691+
2692+ pgdata = self .pgdata_content (node .data_dir )
2693+
2694+ print (self .show_pb (
2695+ backup_dir ,'node' ,as_json = False ,as_text = True ))
2696+
2697+ gdb = self .merge_backup (
2698+ backup_dir ,"node" ,delta_id ,
2699+ options = ['--log-level-file=VERBOSE' ],gdb = True )
2700+ gdb .set_breakpoint ('merge_files' )
2701+ gdb .run_until_break ()
2702+
2703+ # remove data file in incremental backup
2704+ file_to_remove = os .path .join (
2705+ backup_dir ,'backups' ,
2706+ 'node' ,delta_id ,'database' ,path )
2707+
2708+ os .remove (file_to_remove )
2709+
2710+ gdb .continue_execution_until_error ()
2711+
2712+ logfile = os .path .join (backup_dir ,'log' ,'pg_probackup.log' )
2713+ with open (logfile ,'r' )as f :
2714+ logfile_content = f .read ()
2715+
2716+ self .assertIn (
2717+ 'ERROR: Cannot open backup file "{0}": No such file or directory' .format (file_to_remove ),
2718+ logfile_content )
2719+
2720+ self .del_test_dir (module_name ,fname )
2721+
26582722# 1. Need new test with corrupted FULL backup
26592723# 2. different compression levels