@@ -58,6 +58,8 @@ def test_external_simple(self):
5858'\n Unexpected Error Message: {0}\n CMD: {1}' .format (
5959repr (e .message ),self .cmd ))
6060
61+ sleep (1 )
62+
6163# FULL backup
6264self .backup_node (
6365backup_dir ,'node' ,node ,backup_type = "full" ,
@@ -944,6 +946,98 @@ def test_external_merge_single(self):
944946# Clean after yourself
945947self .del_test_dir (module_name ,fname )
946948
949+ # @unittest.expectedFailure
950+ # @unittest.skip("skip")
951+ def test_external_merge_3 (self ):
952+ """"""
953+ fname = self .id ().split ('.' )[3 ]
954+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
955+ node = self .make_simple_node (
956+ base_dir = os .path .join (module_name ,fname ,'node' ),
957+ set_replication = True ,
958+ initdb_params = ['--data-checksums' ],
959+ pg_options = {'autovacuum' :'off' })
960+
961+ self .init_pb (backup_dir )
962+ self .add_instance (backup_dir ,'node' ,node )
963+ self .set_archiving (backup_dir ,'node' ,node )
964+ node .slow_start ()
965+
966+ node .pgbench_init (scale = 3 )
967+
968+ # FULL backup
969+ self .backup_node (backup_dir ,'node' ,node ,options = ["-j" ,"4" ])
970+
971+ external_dir1 = self .get_tblspace_path (node ,'external_dir1' )
972+ external_dir2 = self .get_tblspace_path (node ,'external_dir2' )
973+
974+ pgbench = node .pgbench (options = ['-T' ,'30' ,'-c' ,'1' ,'--no-vacuum' ])
975+ pgbench .wait ()
976+
977+ # FULL backup
978+ backup_id = self .backup_node (
979+ backup_dir ,'node' ,node )
980+
981+ # fill external directories with changed data
982+ self .restore_node (
983+ backup_dir ,'node' ,node ,
984+ data_dir = external_dir1 )
985+
986+ self .restore_node (
987+ backup_dir ,'node' ,node ,
988+ data_dir = external_dir2 )
989+
990+ self .delete_pb (backup_dir ,'node' ,backup_id = backup_id )
991+
992+ # page backup with external directories
993+ self .backup_node (
994+ backup_dir ,'node' ,node ,backup_type = "page" ,
995+ options = [
996+ "-j" ,"4" ,
997+ "-E" ,"{0}{1}{2}" .format (
998+ external_dir1 ,
999+ self .EXTERNAL_DIRECTORY_DELIMITER ,
1000+ external_dir2 )])
1001+
1002+ # page backup with external directories
1003+ backup_id = self .backup_node (
1004+ backup_dir ,'node' ,node ,backup_type = "page" ,
1005+ options = [
1006+ "-j" ,"4" ,
1007+ "-E" ,"{0}{1}{2}" .format (
1008+ external_dir1 ,
1009+ self .EXTERNAL_DIRECTORY_DELIMITER ,
1010+ external_dir2 )])
1011+
1012+ pgdata = self .pgdata_content (
1013+ node .base_dir ,exclude_dirs = ['logs' ])
1014+
1015+ self .merge_backup (backup_dir ,'node' ,backup_id = backup_id )
1016+
1017+ # RESTORE
1018+ node .cleanup ()
1019+ shutil .rmtree (node .base_dir ,ignore_errors = True )
1020+
1021+ external_dir1_new = self .get_tblspace_path (node ,'external_dir1' )
1022+ external_dir2_new = self .get_tblspace_path (node ,'external_dir2' )
1023+
1024+ self .restore_node (
1025+ backup_dir ,'node' ,node ,
1026+ options = [
1027+ "-j" ,"4" ,
1028+ "--external-mapping={0}={1}" .format (
1029+ external_dir1 ,external_dir1_new ),
1030+ "--external-mapping={0}={1}" .format (
1031+ external_dir2 ,external_dir2_new )])
1032+
1033+ pgdata_restored = self .pgdata_content (
1034+ node .base_dir ,exclude_dirs = ['logs' ])
1035+
1036+ self .compare_pgdata (pgdata ,pgdata_restored )
1037+
1038+ # Clean after yourself
1039+ self .del_test_dir (module_name ,fname )
1040+
9471041# @unittest.expectedFailure
9481042# @unittest.skip("skip")
9491043def test_external_merge_double (self ):