Skip to content

Commit eccd847

Browse files
committed
tests: added delta.DeltaTest.test_delta_pg_resetxlog and page.PageTest.test_page_pg_resetxlog
1 parent 1c791f3 commit eccd847

File tree

2 files changed

+208
-1
lines changed

2 files changed

+208
-1
lines changed

tests/delta.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,3 +1335,106 @@ def test_delta_backup_from_past(self):
13351335

13361336
# Clean after yourself
13371337
self.del_test_dir(module_name, fname)
1338+
1339+
@unittest.skip("skip")
1340+
# @unittest.expectedFailure
1341+
def test_delta_pg_resetxlog(self):
1342+
fname = self.id().split('.')[3]
1343+
node = self.make_simple_node(
1344+
base_dir=os.path.join(module_name, fname, 'node'),
1345+
set_replication=True,
1346+
initdb_params=['--data-checksums'],
1347+
pg_options={
1348+
'autovacuum': 'off',
1349+
'shared_buffers': '512MB',
1350+
'max_wal_size': '3GB'})
1351+
1352+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1353+
self.init_pb(backup_dir)
1354+
self.add_instance(backup_dir, 'node', node)
1355+
node.slow_start()
1356+
1357+
# Create table
1358+
node.safe_psql(
1359+
"postgres",
1360+
"create extension bloom; create sequence t_seq; "
1361+
"create table t_heap "
1362+
"as select nextval('t_seq')::int as id, md5(i::text) as text, "
1363+
"md5(repeat(i::text,10))::tsvector as tsvector "
1364+
# "from generate_series(0,25600) i")
1365+
"from generate_series(0,2560) i")
1366+
1367+
self.backup_node(
1368+
backup_dir, 'node', node, options=['--stream'])
1369+
1370+
node.safe_psql(
1371+
'postgres',
1372+
"update t_heap set id = nextval('t_seq'), text = md5(text), "
1373+
"tsvector = md5(repeat(tsvector::text, 10))::tsvector")
1374+
1375+
# kill the bastard
1376+
if self.verbose:
1377+
print('Killing postmaster. Losing Ptrack changes')
1378+
node.stop(['-m', 'immediate', '-D', node.data_dir])
1379+
1380+
# now smack it with sledgehammer
1381+
if node.major_version >= 10:
1382+
pg_resetxlog_path = self.get_bin_path('pg_resetwal')
1383+
wal_dir = 'pg_wal'
1384+
else:
1385+
pg_resetxlog_path = self.get_bin_path('pg_resetxlog')
1386+
wal_dir = 'pg_xlog'
1387+
1388+
self.run_binary(
1389+
[
1390+
pg_resetxlog_path,
1391+
'-D',
1392+
node.data_dir,
1393+
'-o 42',
1394+
'-f'
1395+
],
1396+
asynchronous=False)
1397+
1398+
if not node.status():
1399+
node.slow_start()
1400+
else:
1401+
print("Die! Die! Why won't you die?... Why won't you die?")
1402+
exit(1)
1403+
1404+
# take ptrack backup
1405+
# self.backup_node(
1406+
# backup_dir, 'node', node,
1407+
# backup_type='delta', options=['--stream'])
1408+
1409+
try:
1410+
self.backup_node(
1411+
backup_dir, 'node', node,
1412+
backup_type='delta', options=['--stream'])
1413+
# we should die here because exception is what we expect to happen
1414+
self.assertEqual(
1415+
1, 0,
1416+
"Expecting Error because instance was brutalized by pg_resetxlog"
1417+
"\n Output: {0} \n CMD: {1}".format(
1418+
repr(self.output), self.cmd)
1419+
)
1420+
except ProbackupException as e:
1421+
self.assertIn(
1422+
'Insert error message',
1423+
e.message,
1424+
'\n Unexpected Error Message: {0}\n'
1425+
' CMD: {1}'.format(repr(e.message), self.cmd))
1426+
1427+
# pgdata = self.pgdata_content(node.data_dir)
1428+
#
1429+
# node_restored = self.make_simple_node(
1430+
# base_dir=os.path.join(module_name, fname, 'node_restored'))
1431+
# node_restored.cleanup()
1432+
#
1433+
# self.restore_node(
1434+
# backup_dir, 'node', node_restored)
1435+
#
1436+
# pgdata_restored = self.pgdata_content(node_restored.data_dir)
1437+
# self.compare_pgdata(pgdata, pgdata_restored)
1438+
1439+
# Clean after yourself
1440+
self.del_test_dir(module_name, fname)

tests/page.py

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
module_name = 'page'
1111

1212

13-
class PageBackupTest(ProbackupTest, unittest.TestCase):
13+
class PageTest(ProbackupTest, unittest.TestCase):
1414

1515
# @unittest.skip("skip")
1616
def test_basic_page_vacuum_truncate(self):
@@ -1111,3 +1111,107 @@ def test_page_create_db(self):
11111111

11121112
# Clean after yourself
11131113
self.del_test_dir(module_name, fname)
1114+
1115+
@unittest.skip("skip")
1116+
# @unittest.expectedFailure
1117+
def test_page_pg_resetxlog(self):
1118+
fname = self.id().split('.')[3]
1119+
node = self.make_simple_node(
1120+
base_dir=os.path.join(module_name, fname, 'node'),
1121+
set_replication=True,
1122+
initdb_params=['--data-checksums'],
1123+
pg_options={
1124+
'autovacuum': 'off',
1125+
'shared_buffers': '512MB',
1126+
'max_wal_size': '3GB'})
1127+
1128+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1129+
self.init_pb(backup_dir)
1130+
self.add_instance(backup_dir, 'node', node)
1131+
self.set_archiving(backup_dir, 'node', node)
1132+
node.slow_start()
1133+
1134+
# Create table
1135+
node.safe_psql(
1136+
"postgres",
1137+
"create extension bloom; create sequence t_seq; "
1138+
"create table t_heap "
1139+
"as select nextval('t_seq')::int as id, md5(i::text) as text, "
1140+
"md5(repeat(i::text,10))::tsvector as tsvector "
1141+
# "from generate_series(0,25600) i")
1142+
"from generate_series(0,2560) i")
1143+
1144+
self.backup_node(backup_dir, 'node', node)
1145+
1146+
node.safe_psql(
1147+
'postgres',
1148+
"update t_heap set id = nextval('t_seq'), text = md5(text), "
1149+
"tsvector = md5(repeat(tsvector::text, 10))::tsvector")
1150+
1151+
self.switch_wal_segment(node)
1152+
1153+
# kill the bastard
1154+
if self.verbose:
1155+
print('Killing postmaster. Losing Ptrack changes')
1156+
node.stop(['-m', 'immediate', '-D', node.data_dir])
1157+
1158+
# now smack it with sledgehammer
1159+
if node.major_version >= 10:
1160+
pg_resetxlog_path = self.get_bin_path('pg_resetwal')
1161+
wal_dir = 'pg_wal'
1162+
else:
1163+
pg_resetxlog_path = self.get_bin_path('pg_resetxlog')
1164+
wal_dir = 'pg_xlog'
1165+
1166+
self.run_binary(
1167+
[
1168+
pg_resetxlog_path,
1169+
'-D',
1170+
node.data_dir,
1171+
'-o 42',
1172+
'-f'
1173+
],
1174+
asynchronous=False)
1175+
1176+
if not node.status():
1177+
node.slow_start()
1178+
else:
1179+
print("Die! Die! Why won't you die?... Why won't you die?")
1180+
exit(1)
1181+
1182+
# take ptrack backup
1183+
# self.backup_node(
1184+
# backup_dir, 'node', node,
1185+
# backup_type='page', options=['--stream'])
1186+
1187+
try:
1188+
self.backup_node(
1189+
backup_dir, 'node', node, backup_type='page')
1190+
# we should die here because exception is what we expect to happen
1191+
self.assertEqual(
1192+
1, 0,
1193+
"Expecting Error because instance was brutalized by pg_resetxlog"
1194+
"\n Output: {0} \n CMD: {1}".format(
1195+
repr(self.output), self.cmd)
1196+
)
1197+
except ProbackupException as e:
1198+
self.assertIn(
1199+
'Insert error message',
1200+
e.message,
1201+
'\n Unexpected Error Message: {0}\n'
1202+
' CMD: {1}'.format(repr(e.message), self.cmd))
1203+
1204+
# pgdata = self.pgdata_content(node.data_dir)
1205+
#
1206+
# node_restored = self.make_simple_node(
1207+
# base_dir=os.path.join(module_name, fname, 'node_restored'))
1208+
# node_restored.cleanup()
1209+
#
1210+
# self.restore_node(
1211+
# backup_dir, 'node', node_restored)
1212+
#
1213+
# pgdata_restored = self.pgdata_content(node_restored.data_dir)
1214+
# self.compare_pgdata(pgdata, pgdata_restored)
1215+
1216+
# Clean after yourself
1217+
self.del_test_dir(module_name, fname)

0 commit comments

Comments
 (0)