@@ -3497,6 +3497,65 @@ def test_validate_target_lsn(self):
3497
3497
'--recovery-target-timeline=2' ,
3498
3498
'--recovery-target-lsn={0}' .format (target_lsn )])
3499
3499
3500
+ # @unittest.expectedFailure
3501
+ # @unittest.skip("skip")
3502
+ def test_recovery_target_backup_victim (self ):
3503
+ """
3504
+ Check that for validation to recovery target
3505
+ probackup chooses valid backup
3506
+ https://github.com/postgrespro/pg_probackup/issues/104
3507
+ """
3508
+ fname = self .id ().split ('.' )[3 ]
3509
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
3510
+ node = self .make_simple_node (
3511
+ base_dir = os .path .join (module_name , fname , 'node' ),
3512
+ set_replication = True ,
3513
+ initdb_params = ['--data-checksums' ])
3514
+
3515
+ self .init_pb (backup_dir )
3516
+ self .add_instance (backup_dir , 'node' , node )
3517
+ self .set_archiving (backup_dir , 'node' , node )
3518
+ node .slow_start ()
3519
+
3520
+ # FULL backup
3521
+ self .backup_node (backup_dir , 'node' , node )
3522
+
3523
+ node .safe_psql (
3524
+ "postgres" ,
3525
+ "create table t_heap as select 1 as id, md5(i::text) as text, "
3526
+ "md5(repeat(i::text,10))::tsvector as tsvector "
3527
+ "from generate_series(0,10000) i" )
3528
+
3529
+ target_time = node .safe_psql (
3530
+ "postgres" ,
3531
+ "select now()" ).rstrip ()
3532
+
3533
+ node .safe_psql (
3534
+ "postgres" ,
3535
+ "create table t_heap1 as select 1 as id, md5(i::text) as text, "
3536
+ "md5(repeat(i::text,10))::tsvector as tsvector "
3537
+ "from generate_series(0,100) i" )
3538
+
3539
+ gdb = self .backup_node (backup_dir , 'node' , node , gdb = True )
3540
+
3541
+ gdb .set_breakpoint ('pg_stop_backup' )
3542
+ gdb .run_until_break ()
3543
+ gdb .remove_all_breakpoints ()
3544
+ gdb ._execute ('signal SIGINT' )
3545
+ gdb .continue_execution_until_error ()
3546
+
3547
+ backup_id = self .show_pb (backup_dir , 'node' )[1 ]['id' ]
3548
+
3549
+ self .assertEqual (
3550
+ 'ERROR' ,
3551
+ self .show_pb (backup_dir , 'node' , backup_id )['status' ],
3552
+ 'Backup STATUS should be "ERROR"' )
3553
+
3554
+ self .validate_pb (
3555
+ backup_dir , 'node' ,
3556
+ options = ['--recovery-target-time={0}' .format (target_time )])
3557
+
3558
+
3500
3559
# validate empty backup list
3501
3560
# page from future during validate
3502
3561
# page from future during backup
0 commit comments