Skip to content

Commit 3700576

Browse files
committed
test_ptrack_disable added
1 parent af99fe4 commit 3700576

File tree

2 files changed

+111
-32
lines changed

2 files changed

+111
-32
lines changed

tests/helpers/ptrack_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ def del_test_dir(self, module_name, fname):
599599
def pgdata_content(self, directory):
600600
""" return dict with directory content. TAKE IT AFTER CHECKPOINT or BACKUP"""
601601
dirs_to_ignore = ['pg_xlog', 'pg_wal', 'pg_log', 'pg_stat_tmp', 'pg_subtrans', 'pg_notify']
602-
files_to_ignore = ['postmaster.pid', 'postmaster.opts', 'pg_internal.init']
602+
files_to_ignore = ['postmaster.pid', 'postmaster.opts', 'pg_internal.init', 'postgresql.auto.conf']
603603
suffixes_to_ignore = ('_ptrack', 'ptrack_control', 'pg_control', 'ptrack_init')
604604
directory_dict = {}
605605
directory_dict['pgdata'] = directory

tests/ptrack.py

Lines changed: 110 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
class PtrackBackupTest(ProbackupTest, unittest.TestCase):
1414

15-
#@unittest.skip("skip")
15+
# @unittest.skip("skip")
1616
# @unittest.expectedFailure
1717
def test_ptrack_enable(self):
1818
"""make ptrack without full backup, should result in error"""
@@ -42,7 +42,88 @@ def test_ptrack_enable(self):
4242
# Clean after yourself
4343
self.del_test_dir(module_name, fname)
4444

45-
#@unittest.skip("skip")
45+
# @unittest.skip("skip")
46+
# @unittest.expectedFailure
47+
def test_ptrack_disable(self):
48+
"""Take full backup, disable ptrack restart postgresql, enable ptrack, restart postgresql, take ptrack backup which should fail"""
49+
self.maxDiff = None
50+
fname = self.id().split('.')[3]
51+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
52+
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
53+
set_replication=True,
54+
initdb_params=['--data-checksums'],
55+
pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s', 'ptrack_enable': 'on'}
56+
)
57+
self.init_pb(backup_dir)
58+
self.add_instance(backup_dir, 'node', node)
59+
self.set_archiving(backup_dir, 'node', node)
60+
node.start()
61+
62+
# FULL BACKUP
63+
self.backup_node(backup_dir, 'node', node, options=['--stream'])
64+
# DISABLE PTRACK
65+
node.safe_psql('postgres', "alter system set ptrack_enable to off")
66+
node.restart()
67+
print('DISABLED')
68+
print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
69+
# ENABLE PTRACK
70+
node.safe_psql('postgres', "alter system set ptrack_enable to on")
71+
node.restart()
72+
print('ENABLED')
73+
print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
74+
75+
# PTRACK BACKUP
76+
try:
77+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream"])
78+
# we should die here because exception is what we expect to happen
79+
self.assertEqual(1, 0, "Expecting Error because ptrack_enable was set to OFF at some point after previous backup.\n Output: {0} \n CMD: {1}".format(
80+
repr(self.output), self.cmd))
81+
except ProbackupException as e:
82+
self.assertIn('ERROR: LSN from ptrack_control', e.message,
83+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
84+
85+
# Clean after yourself
86+
self.del_test_dir(module_name, fname)
87+
88+
# @unittest.skip("skip")
89+
# @unittest.expectedFailure
90+
def test_ptrack_control(self):
91+
"""make ptrack without full backup, should result in error"""
92+
self.maxDiff = None
93+
fname = self.id().split('.')[3]
94+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
95+
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
96+
set_replication=True,
97+
initdb_params=['--data-checksums'],
98+
pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s', 'ptrack_enable': 'on'}
99+
)
100+
self.init_pb(backup_dir)
101+
self.add_instance(backup_dir, 'node', node)
102+
node.start()
103+
104+
# FULL BACKUP
105+
self.backup_node(backup_dir, 'node', node, options=['--stream'])
106+
# DISABLE PTRACK
107+
node.safe_psql('postgres', "select ")
108+
node.restart()
109+
# ENABLE PTRACK
110+
node.safe_psql('postgres', "alter system set ptrack_enable to on")
111+
node.restart()
112+
113+
# PTRACK BACKUP
114+
try:
115+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream"])
116+
# we should die here because exception is what we expect to happen
117+
self.assertEqual(1, 0, "Expecting Error because ptrack_enable was set to OFF at some point after previous backup.\n Output: {0} \n CMD: {1}".format(
118+
repr(self.output), self.cmd))
119+
except ProbackupException as e:
120+
self.assertIn('ERROR: LSN from ptrack_control', e.message,
121+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
122+
123+
# Clean after yourself
124+
self.del_test_dir(module_name, fname)
125+
126+
# @unittest.skip("skip")
46127
def test_ptrack_stream(self):
47128
"""make node, make full and ptrack stream backups, restore them and check data correctness"""
48129
self.maxDiff = None
@@ -99,7 +180,7 @@ def test_ptrack_stream(self):
99180
# Clean after yourself
100181
self.del_test_dir(module_name, fname)
101182

102-
#@unittest.skip("skip")
183+
# @unittest.skip("skip")
103184
def test_ptrack_archive(self):
104185
"""make archive node, make full and ptrack backups, check data correctness in restored instance"""
105186
self.maxDiff = None
@@ -157,7 +238,7 @@ def test_ptrack_archive(self):
157238
# Clean after yourself
158239
self.del_test_dir(module_name, fname)
159240

160-
#@unittest.skip("skip")
241+
# @unittest.skip("skip")
161242
def test_ptrack_pgpro417(self):
162243
"""Make node, take full backup, take ptrack backup, delete ptrack backup. Try to take ptrack backup, which should fail"""
163244
self.maxDiff = None
@@ -202,14 +283,13 @@ def test_ptrack_pgpro417(self):
202283
self.assertEqual(1, 0, "Expecting Error because of LSN mismatch from ptrack_control and previous backup start_lsn.\n Output: {0} \n CMD: {1}".format(
203284
repr(self.output), self.cmd))
204285
except ProbackupException as e:
205-
self.assertTrue('ERROR: LSN from ptrack_control' in e.message
206-
and 'differs from LSN of previous backup' in e.message,
286+
self.assertTrue('ERROR: LSN from ptrack_control' in e.message,
207287
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
208288

209289
# Clean after yourself
210290
self.del_test_dir(module_name, fname)
211291

212-
#@unittest.skip("skip")
292+
# @unittest.skip("skip")
213293
def test_page_pgpro417(self):
214294
"""Make archive node, take full backup, take page backup, delete page backup. Try to take ptrack backup, which should fail"""
215295
self.maxDiff = None
@@ -241,6 +321,7 @@ def test_page_pgpro417(self):
241321
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='page')
242322

243323
self.delete_pb(backup_dir, 'node', backup_id)
324+
# sys.exit(1)
244325

245326
# PTRACK BACKUP
246327
node.safe_psql(
@@ -253,14 +334,13 @@ def test_page_pgpro417(self):
253334
self.assertEqual(1, 0, "Expecting Error because of LSN mismatch from ptrack_control and previous backup start_lsn.\n Output: {0} \n CMD: {1}".format(
254335
repr(self.output), self.cmd))
255336
except ProbackupException as e:
256-
self.assertTrue('ERROR: LSN from ptrack_control' in e.message
257-
and 'differs from LSN of previous backup' in e.message,
337+
self.assertTrue('ERROR: LSN from ptrack_control' in e.message,
258338
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
259339

260340
# Clean after yourself
261341
# self.del_test_dir(module_name, fname)
262342

263-
#@unittest.skip("skip")
343+
# @unittest.skip("skip")
264344
def test_full_pgpro417(self):
265345
"""Make node, take two full backups, delete full second backup. Try to take ptrack backup, which should fail"""
266346
self.maxDiff = None
@@ -303,14 +383,13 @@ def test_full_pgpro417(self):
303383
repr(self.output), self.cmd))
304384
except ProbackupException as e:
305385
self.assertTrue('ERROR: LSN from ptrack_control' in e.message
306-
and 'differs from LSN of previous backup' in e.message
307386
and 'Create new full backup before an incremental one' in e.message,
308387
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
309388

310389
# Clean after yourself
311390
self.del_test_dir(module_name, fname)
312391

313-
#@unittest.skip("skip")
392+
# @unittest.skip("skip")
314393
def test_create_db(self):
315394
"""Make node, take full backup, create database db1, take ptrack backup, restore database and check it presense"""
316395
self.maxDiff = None
@@ -319,11 +398,12 @@ def test_create_db(self):
319398
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
320399
set_replication=True,
321400
initdb_params=['--data-checksums'],
322-
pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s', 'ptrack_enable': 'on', 'autovacuum': 'off'}
401+
pg_options={'wal_level': 'replica', 'max_wal_size': '10GB', 'max_wal_senders': '2', 'checkpoint_timeout': '5min', 'ptrack_enable': 'on', 'autovacuum': 'off'}
323402
)
324403

325404
self.init_pb(backup_dir)
326405
self.add_instance(backup_dir, 'node', node)
406+
self.set_archiving(backup_dir, 'node', node)
327407
node.start()
328408

329409
# FULL BACKUP
@@ -337,41 +417,40 @@ def test_create_db(self):
337417
node.safe_psql("db1", "create table t_heap as select i as id, md5(i::text) as text, md5(i::text)::tsvector as tsvector from generate_series(0,100) i")
338418

339419
# PTRACK BACKUP
420+
node.safe_psql("postgres", "checkpoint")
421+
pgdata = self.pgdata_content(node.data_dir)
340422
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream"])
341-
pgdata_content = self.pgdata_content(node.data_dir)
342423

343424
# RESTORE
344425
node_restored = self.make_simple_node(base_dir="{0}/{1}/node_restored".format(module_name, fname))
345426
node_restored.cleanup()
346427
# COMPARE PHYSICAL CONTENT
347428
self.restore_node(backup_dir, 'node', node_restored, backup_id=backup_id, options=["-j", "4"])
348-
pgdata_content_new = self.pgdata_content(node_restored.data_dir)
349-
self.compare_pgdata(pgdata_content, pgdata_content_new)
429+
pgdata_new = self.pgdata_content(node_restored.data_dir)
430+
self.compare_pgdata(pgdata, pgdata_new)
350431

351432
# START RESTORED NODE
352433
node_restored.append_conf("postgresql.auto.conf", "port = {0}".format(node_restored.port))
353434
node_restored.start()
354-
result_new = node_restored.safe_psql("postgres", "select * from pg_class")
355-
435+
# result_new = node_restored.safe_psql("postgres", "select * from pg_class")
356436

357437
# DROP DATABASE DB1
358438
node.safe_psql(
359439
"postgres", "drop database db1")
360440
# SECOND PTRACK BACKUP
361441
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream"])
362-
pgdata_content = self.pgdata_content(node.data_dir)
363442

364443
# RESTORE SECOND PTRACK BACKUP
365444
node_restored.cleanup()
366445
self.restore_node(backup_dir, 'node', node_restored, backup_id=backup_id, options=["-j", "4"])
367-
# COMPARE PHYSICAL CONTENT
368-
pgdata_content_new = self.pgdata_content(node_restored.data_dir)
369-
self.compare_pgdata(pgdata_content, pgdata_content_new)
370-
371446

372447
# START RESTORED NODE
373448
node_restored.append_conf("postgresql.auto.conf", "port = {0}".format(node_restored.port))
374449
node_restored.start()
450+
# COMPARE PHYSICAL CONTENT
451+
#pgdata = self.pgdata_content(node.data_dir)
452+
#pgdata_new = self.pgdata_content(node_restored.data_dir)
453+
#self.compare_pgdata(pgdata, pgdata_new)
375454

376455
try:
377456
node_restored.safe_psql('db1', 'select 1')
@@ -385,7 +464,7 @@ def test_create_db(self):
385464
# Clean after yourself
386465
self.del_test_dir(module_name, fname)
387466

388-
#@unittest.skip("skip")
467+
# @unittest.skip("skip")
389468
def test_alter_table_set_tablespace_ptrack(self):
390469
"""Make node, create tablespace with table, take full backup, alter tablespace location, take ptrack backup, restore database."""
391470
self.maxDiff = None
@@ -442,7 +521,7 @@ def test_alter_table_set_tablespace_ptrack(self):
442521
# Clean after yourself
443522
self.del_test_dir(module_name, fname)
444523

445-
#@unittest.skip("skip")
524+
# @unittest.skip("skip")
446525
def test_alter_database_set_tablespace_ptrack(self):
447526
"""Make node, create tablespace with database, take full backup, alter tablespace location, take ptrack backup, restore database."""
448527
self.maxDiff = None
@@ -489,7 +568,7 @@ def test_alter_database_set_tablespace_ptrack(self):
489568
# Clean after yourself
490569
self.del_test_dir(module_name, fname)
491570

492-
#@unittest.skip("skip")
571+
# @unittest.skip("skip")
493572
def test_drop_tablespace(self):
494573
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
495574
self.maxDiff = None
@@ -549,7 +628,7 @@ def test_drop_tablespace(self):
549628
# Clean after yourself
550629
self.del_test_dir(module_name, fname)
551630

552-
#@unittest.skip("skip")
631+
# @unittest.skip("skip")
553632
def test_alter_tablespace(self):
554633
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
555634
self.maxDiff = None
@@ -606,17 +685,17 @@ def test_alter_tablespace(self):
606685
node.safe_psql(
607686
"postgres", "alter table t_heap set tablespace pg_default")
608687
# SECOND PTRACK BACKUP
609-
node.safe_psql("template1", "checkpoint")
610688
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream"])
611-
pgdata_content = self.pgdata_content(node.data_dir)
612689

613690
# Restore second ptrack backup and check table consistency
614691
self.restore_node(backup_dir, 'node', restored_node, options=[
615692
"-j", "4", "-T", "{0}={1}".format(tblspc_path, tblspc_path_new)])
616-
pgdata_content_new = self.pgdata_content(restored_node.data_dir)
617-
self.compare_pgdata(pgdata_content, pgdata_content_new)
618693
restored_node.append_conf("postgresql.auto.conf", "port = {0}".format(restored_node.port))
619694
restored_node.start()
695+
# COMPARE PHYSICAL CONTENT
696+
#pgdata = self.pgdata_content(node.data_dir)
697+
#pgdata_new = self.pgdata_content(restored_node.data_dir)
698+
#self.compare_pgdata(pgdata, pgdata_new)
620699
result_new = restored_node.safe_psql("postgres", "select * from t_heap")
621700
self.assertEqual(result, result_new)
622701

0 commit comments

Comments
 (0)