Skip to content

Commit 2c39666

Browse files
committed
[Issue #66] add switchover tests
1 parent d9b7dee commit 2c39666

File tree

1 file changed

+147
-1
lines changed

1 file changed

+147
-1
lines changed

tests/incr_restore.py

+147-1
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)