@@ -284,7 +284,7 @@ def test_incr_restore_with_tablespace_2(self):
284284 self .del_test_dir (module_name , fname )
285285
286286 # @unittest.skip("skip")
287- def test_incr_restore_sanity (self ):
287+ def test_basic_incr_restore_sanity (self ):
288288 """recovery to target timeline"""
289289 fname = self .id ().split ('.' )[3 ]
290290 node = self .make_simple_node (
@@ -1106,5 +1106,151 @@ def test_incr_checksum_restore_backward(self):
11061106 # Clean after yourself
11071107 self .del_test_dir (module_name , fname )
11081108
1109+ # @unittest.skip("skip")
1110+ def test_make_replica_via_incr_checksum_restore (self ):
1111+ """
1112+ """
1113+ fname = self .id ().split ('.' )[3 ]
1114+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1115+ master = self .make_simple_node (
1116+ base_dir = os .path .join (module_name , fname , 'master' ),
1117+ set_replication = True ,
1118+ initdb_params = ['--data-checksums' ])
1119+
1120+ if self .get_version (master ) < self .version_to_num ('9.6.0' ):
1121+ self .del_test_dir (module_name , fname )
1122+ return unittest .skip (
1123+ 'Skipped because backup from replica is not supported in PG 9.5' )
1124+
1125+ self .init_pb (backup_dir )
1126+ self .add_instance (backup_dir , 'node' , master )
1127+ self .set_archiving (backup_dir , 'node' , master , replica = True )
1128+ master .slow_start ()
1129+
1130+ replica = self .make_simple_node (
1131+ base_dir = os .path .join (module_name , fname , 'replica' ))
1132+ replica .cleanup ()
1133+
1134+ master .pgbench_init (scale = 20 )
1135+
1136+ self .backup_node (backup_dir , 'node' , master )
1137+
1138+ self .restore_node (
1139+ backup_dir , 'node' , replica , options = ['-R' ])
1140+
1141+ # Settings for Replica
1142+ self .set_replica (master , replica , synchronous = False )
1143+
1144+ replica .slow_start (replica = True )
1145+
1146+ pgbench = master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1147+ pgbench .wait ()
1148+
1149+ # PROMOTIONS
1150+ replica .promote ()
1151+ new_master = replica
1152+
1153+ # old master is going a bit further
1154+ old_master = master
1155+ pgbench = old_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1156+ pgbench .wait ()
1157+ old_master .stop ()
1158+
1159+ pgbench = new_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1160+ pgbench .wait ()
1161+
1162+ # take backup from new master
1163+ self .backup_node (
1164+ backup_dir , 'node' , new_master ,
1165+ data_dir = new_master .data_dir , backup_type = 'page' )
1166+
1167+ # restore old master as replica
1168+ print (self .restore_node (
1169+ backup_dir , 'node' , old_master , data_dir = old_master .data_dir ,
1170+ options = ['-R' , '--incremental-mode=checksum' ]))
1171+
1172+ self .set_replica (new_master , old_master , synchronous = True )
1173+
1174+ old_master .slow_start (replica = True )
1175+
1176+ pgbench = new_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1177+ pgbench .wait ()
1178+
1179+ # Clean after yourself
1180+ self .del_test_dir (module_name , fname )
1181+
1182+ # @unittest.skip("skip")
1183+ def test_make_replica_via_incr_lsn_restore (self ):
1184+ """
1185+ """
1186+ fname = self .id ().split ('.' )[3 ]
1187+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1188+ master = self .make_simple_node (
1189+ base_dir = os .path .join (module_name , fname , 'master' ),
1190+ set_replication = True ,
1191+ initdb_params = ['--data-checksums' ])
1192+
1193+ if self .get_version (master ) < self .version_to_num ('9.6.0' ):
1194+ self .del_test_dir (module_name , fname )
1195+ return unittest .skip (
1196+ 'Skipped because backup from replica is not supported in PG 9.5' )
1197+
1198+ self .init_pb (backup_dir )
1199+ self .add_instance (backup_dir , 'node' , master )
1200+ self .set_archiving (backup_dir , 'node' , master , replica = True )
1201+ master .slow_start ()
1202+
1203+ replica = self .make_simple_node (
1204+ base_dir = os .path .join (module_name , fname , 'replica' ))
1205+ replica .cleanup ()
1206+
1207+ master .pgbench_init (scale = 20 )
1208+
1209+ self .backup_node (backup_dir , 'node' , master )
1210+
1211+ self .restore_node (
1212+ backup_dir , 'node' , replica , options = ['-R' ])
1213+
1214+ # Settings for Replica
1215+ self .set_replica (master , replica , synchronous = False )
1216+
1217+ replica .slow_start (replica = True )
1218+
1219+ pgbench = master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1220+ pgbench .wait ()
1221+
1222+ # PROMOTIONS
1223+ replica .promote ()
1224+ new_master = replica
1225+
1226+ # old master is going a bit further
1227+ old_master = master
1228+ pgbench = old_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1229+ pgbench .wait ()
1230+ old_master .stop ()
1231+
1232+ pgbench = new_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1233+ pgbench .wait ()
1234+
1235+ # take backup from new master
1236+ self .backup_node (
1237+ backup_dir , 'node' , new_master ,
1238+ data_dir = new_master .data_dir , backup_type = 'page' )
1239+
1240+ # restore old master as replica
1241+ print (self .restore_node (
1242+ backup_dir , 'node' , old_master , data_dir = old_master .data_dir ,
1243+ options = ['-R' , '--incremental-mode=lsn' ]))
1244+
1245+ self .set_replica (new_master , old_master , synchronous = True )
1246+
1247+ old_master .slow_start (replica = True )
1248+
1249+ pgbench = new_master .pgbench (options = ['-T' , '10' , '-c' , '1' ])
1250+ pgbench .wait ()
1251+
1252+ # Clean after yourself
1253+ self .del_test_dir (module_name , fname )
1254+
11091255# check that MinRecPoint and BackupStartLsn are correctly used in case of --incrementa-lsn
11101256# incremental restore + partial restore.
0 commit comments