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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy