@@ -3443,6 +3443,119 @@ def test_validate_corrupt_tablespace_map(self):
34433443 '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
34443444 repr (e .message ), self .cmd ))
34453445
3446+ # @unittest.expectedFailure
3447+ # @unittest.skip("skip")
3448+ def test_validate_target_lsn (self ):
3449+ """
3450+ Check validation to specific LSN
3451+ """
3452+ fname = self .id ().split ('.' )[3 ]
3453+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
3454+ node = self .make_simple_node (
3455+ base_dir = os .path .join (module_name , fname , 'node' ),
3456+ set_replication = True ,
3457+ initdb_params = ['--data-checksums' ])
3458+
3459+ self .init_pb (backup_dir )
3460+ self .add_instance (backup_dir , 'node' , node )
3461+ self .set_archiving (backup_dir , 'node' , node )
3462+ node .slow_start ()
3463+
3464+ # FULL backup
3465+ self .backup_node (backup_dir , 'node' , node )
3466+
3467+ node .safe_psql (
3468+ "postgres" ,
3469+ "create table t_heap as select 1 as id, md5(i::text) as text, "
3470+ "md5(repeat(i::text,10))::tsvector as tsvector "
3471+ "from generate_series(0,10000) i" )
3472+
3473+ node_restored = self .make_simple_node (
3474+ base_dir = os .path .join (module_name , fname , 'node_restored' ))
3475+ node_restored .cleanup ()
3476+
3477+ self .restore_node (backup_dir , 'node' , node_restored )
3478+
3479+ node_restored .append_conf (
3480+ "postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
3481+
3482+ node_restored .slow_start ()
3483+
3484+ self .switch_wal_segment (node )
3485+
3486+ backup_id = self .backup_node (
3487+ backup_dir , 'node' , node_restored ,
3488+ data_dir = node_restored .data_dir )
3489+
3490+ target_lsn = self .show_pb (backup_dir , 'node' )[1 ]['stop-lsn' ]
3491+
3492+ self .delete_pb (backup_dir , 'node' , backup_id )
3493+
3494+ self .validate_pb (
3495+ backup_dir , 'node' ,
3496+ options = [
3497+ '--recovery-target-timeline=2' ,
3498+ '--recovery-target-lsn={0}' .format (target_lsn )])
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+
34463559# validate empty backup list
34473560# page from future during validate
34483561# page from future during backup
0 commit comments