@@ -58,6 +58,8 @@ def test_external_simple(self):
58
58
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (
59
59
repr (e .message ), self .cmd ))
60
60
61
+ sleep (1 )
62
+
61
63
# FULL backup
62
64
self .backup_node (
63
65
backup_dir , 'node' , node , backup_type = "full" ,
@@ -944,6 +946,98 @@ def test_external_merge_single(self):
944
946
# Clean after yourself
945
947
self .del_test_dir (module_name , fname )
946
948
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
+
947
1041
# @unittest.expectedFailure
948
1042
# @unittest.skip("skip")
949
1043
def test_external_merge_double (self ):
0 commit comments