@@ -284,7 +284,7 @@ def test_incr_restore_with_tablespace_2(self):
284
284
self .del_test_dir (module_name , fname )
285
285
286
286
# @unittest.skip("skip")
287
- def test_incr_restore_sanity (self ):
287
+ def test_basic_incr_restore_sanity (self ):
288
288
"""recovery to target timeline"""
289
289
fname = self .id ().split ('.' )[3 ]
290
290
node = self .make_simple_node (
@@ -1106,5 +1106,151 @@ def test_incr_checksum_restore_backward(self):
1106
1106
# Clean after yourself
1107
1107
self .del_test_dir (module_name , fname )
1108
1108
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
+
1109
1255
# check that MinRecPoint and BackupStartLsn are correctly used in case of --incrementa-lsn
1110
1256
# incremental restore + partial restore.
0 commit comments