@@ -58,6 +58,8 @@ def test_external_simple(self):
5858 '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
5959 repr (e .message ), self .cmd ))
6060
61+ sleep (1 )
62+
6163 # FULL backup
6264 self .backup_node (
6365 backup_dir , 'node' , node , backup_type = "full" ,
@@ -944,6 +946,98 @@ def test_external_merge_single(self):
944946 # Clean after yourself
945947 self .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")
9491043 def test_external_merge_double (self ):
0 commit comments