1212
1313class 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