@@ -2655,5 +2655,69 @@ def test_merge_page_header_map_retry(self):
2655
2655
# Clean after yourself
2656
2656
self .del_test_dir (module_name , fname )
2657
2657
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
+
2658
2722
# 1. Need new test with corrupted FULL backup
2659
2723
# 2. different compression levels
0 commit comments