12
12
13
13
class PtrackBackupTest (ProbackupTest , unittest .TestCase ):
14
14
15
- #@unittest.skip("skip")
15
+ # @unittest.skip("skip")
16
16
# @unittest.expectedFailure
17
17
def test_ptrack_enable (self ):
18
18
"""make ptrack without full backup, should result in error"""
@@ -42,7 +42,54 @@ def test_ptrack_enable(self):
42
42
# Clean after yourself
43
43
self .del_test_dir (module_name , fname )
44
44
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
+ # print('START')
64
+ # print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
65
+ self .backup_node (backup_dir , 'node' , node , options = ['--stream' ])
66
+ # print('AFTER FULL')
67
+ # print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
68
+ # DISABLE PTRACK
69
+ node .safe_psql ('postgres' , "alter system set ptrack_enable to off" )
70
+ node .restart ()
71
+ # print('DISABLED')
72
+ # print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
73
+ # ENABLE PTRACK
74
+ node .safe_psql ('postgres' , "alter system set ptrack_enable to on" )
75
+ node .restart ()
76
+ # print('ENABLED')
77
+ # print(node.safe_psql('postgres', "select pg_ptrack_control_lsn()"))
78
+
79
+ # PTRACK BACKUP
80
+ try :
81
+ self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
82
+ # we should die here because exception is what we expect to happen
83
+ 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 (
84
+ repr (self .output ), self .cmd ))
85
+ except ProbackupException as e :
86
+ self .assertIn ('ERROR: LSN from ptrack_control' , e .message ,
87
+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
88
+
89
+ # Clean after yourself
90
+ self .del_test_dir (module_name , fname )
91
+
92
+ # @unittest.skip("skip")
46
93
def test_ptrack_stream (self ):
47
94
"""make node, make full and ptrack stream backups, restore them and check data correctness"""
48
95
self .maxDiff = None
@@ -99,7 +146,7 @@ def test_ptrack_stream(self):
99
146
# Clean after yourself
100
147
self .del_test_dir (module_name , fname )
101
148
102
- #@unittest.skip("skip")
149
+ # @unittest.skip("skip")
103
150
def test_ptrack_archive (self ):
104
151
"""make archive node, make full and ptrack backups, check data correctness in restored instance"""
105
152
self .maxDiff = None
@@ -157,7 +204,7 @@ def test_ptrack_archive(self):
157
204
# Clean after yourself
158
205
self .del_test_dir (module_name , fname )
159
206
160
- #@unittest.skip("skip")
207
+ # @unittest.skip("skip")
161
208
def test_ptrack_pgpro417 (self ):
162
209
"""Make node, take full backup, take ptrack backup, delete ptrack backup. Try to take ptrack backup, which should fail"""
163
210
self .maxDiff = None
@@ -202,14 +249,13 @@ def test_ptrack_pgpro417(self):
202
249
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 (
203
250
repr (self .output ), self .cmd ))
204
251
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 ,
252
+ self .assertTrue ('ERROR: LSN from ptrack_control' in e .message ,
207
253
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
208
254
209
255
# Clean after yourself
210
256
self .del_test_dir (module_name , fname )
211
257
212
- #@unittest.skip("skip")
258
+ # @unittest.skip("skip")
213
259
def test_page_pgpro417 (self ):
214
260
"""Make archive node, take full backup, take page backup, delete page backup. Try to take ptrack backup, which should fail"""
215
261
self .maxDiff = None
@@ -241,6 +287,7 @@ def test_page_pgpro417(self):
241
287
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'page' )
242
288
243
289
self .delete_pb (backup_dir , 'node' , backup_id )
290
+ # sys.exit(1)
244
291
245
292
# PTRACK BACKUP
246
293
node .safe_psql (
@@ -253,14 +300,13 @@ def test_page_pgpro417(self):
253
300
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 (
254
301
repr (self .output ), self .cmd ))
255
302
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 ,
303
+ self .assertTrue ('ERROR: LSN from ptrack_control' in e .message ,
258
304
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
259
305
260
306
# Clean after yourself
261
307
# self.del_test_dir(module_name, fname)
262
308
263
- #@unittest.skip("skip")
309
+ # @unittest.skip("skip")
264
310
def test_full_pgpro417 (self ):
265
311
"""Make node, take two full backups, delete full second backup. Try to take ptrack backup, which should fail"""
266
312
self .maxDiff = None
@@ -303,14 +349,13 @@ def test_full_pgpro417(self):
303
349
repr (self .output ), self .cmd ))
304
350
except ProbackupException as e :
305
351
self .assertTrue ('ERROR: LSN from ptrack_control' in e .message
306
- and 'differs from LSN of previous backup' in e .message
307
352
and 'Create new full backup before an incremental one' in e .message ,
308
353
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
309
354
310
355
# Clean after yourself
311
356
self .del_test_dir (module_name , fname )
312
357
313
- #@unittest.skip("skip")
358
+ # @unittest.skip("skip")
314
359
def test_create_db (self ):
315
360
"""Make node, take full backup, create database db1, take ptrack backup, restore database and check it presense"""
316
361
self .maxDiff = None
@@ -319,11 +364,12 @@ def test_create_db(self):
319
364
node = self .make_simple_node (base_dir = "{0}/{1}/node" .format (module_name , fname ),
320
365
set_replication = True ,
321
366
initdb_params = ['--data-checksums' ],
322
- pg_options = {'wal_level' : 'replica' , 'max_wal_senders' : '2' , 'checkpoint_timeout' : '30s ' , 'ptrack_enable' : 'on' , 'autovacuum' : 'off' }
367
+ pg_options = {'wal_level' : 'replica' , 'max_wal_size' : '10GB' , ' max_wal_senders' : '2' , 'checkpoint_timeout' : '5min ' , 'ptrack_enable' : 'on' , 'autovacuum' : 'off' }
323
368
)
324
369
325
370
self .init_pb (backup_dir )
326
371
self .add_instance (backup_dir , 'node' , node )
372
+ self .set_archiving (backup_dir , 'node' , node )
327
373
node .start ()
328
374
329
375
# FULL BACKUP
@@ -338,41 +384,39 @@ def test_create_db(self):
338
384
339
385
# PTRACK BACKUP
340
386
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
341
- pgdata_content = self .pgdata_content (node .data_dir )
387
+ pgdata = self .pgdata_content (node .data_dir )
342
388
343
389
# RESTORE
344
390
node_restored = self .make_simple_node (base_dir = "{0}/{1}/node_restored" .format (module_name , fname ))
345
391
node_restored .cleanup ()
346
392
# COMPARE PHYSICAL CONTENT
347
393
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 )
394
+ pgdata_new = self .pgdata_content (node_restored .data_dir )
395
+ self .compare_pgdata (pgdata , pgdata_new )
350
396
351
397
# START RESTORED NODE
352
398
node_restored .append_conf ("postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
353
399
node_restored .start ()
354
- result_new = node_restored .safe_psql ("postgres" , "select * from pg_class" )
355
-
356
400
357
401
# DROP DATABASE DB1
358
402
node .safe_psql (
359
403
"postgres" , "drop database db1" )
360
404
# SECOND PTRACK BACKUP
361
405
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
362
- pgdata_content = self .pgdata_content (node .data_dir )
406
+ pgdata = self .pgdata_content (node .data_dir )
363
407
364
408
# RESTORE SECOND PTRACK BACKUP
365
409
node_restored .cleanup ()
366
410
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
-
371
411
372
412
# START RESTORED NODE
373
413
node_restored .append_conf ("postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
374
414
node_restored .start ()
375
415
416
+ # COMPARE PHYSICAL CONTENT
417
+ pgdata_new = self .pgdata_content (node_restored .data_dir )
418
+ self .compare_pgdata (pgdata , pgdata_new )
419
+
376
420
try :
377
421
node_restored .safe_psql ('db1' , 'select 1' )
378
422
# we should die here because exception is what we expect to happen
@@ -385,7 +429,7 @@ def test_create_db(self):
385
429
# Clean after yourself
386
430
self .del_test_dir (module_name , fname )
387
431
388
- #@unittest.skip("skip")
432
+ # @unittest.skip("skip")
389
433
def test_alter_table_set_tablespace_ptrack (self ):
390
434
"""Make node, create tablespace with table, take full backup, alter tablespace location, take ptrack backup, restore database."""
391
435
self .maxDiff = None
@@ -416,7 +460,6 @@ def test_alter_table_set_tablespace_ptrack(self):
416
460
417
461
# PTRACK BACKUP
418
462
result = node .safe_psql ("postgres" , "select * from t_heap" )
419
- node .safe_psql ("postgres" , "select * from pg_class; checkpoint" )
420
463
self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
421
464
pgdata_content = self .pgdata_content (node .data_dir )
422
465
node .stop ()
@@ -442,7 +485,7 @@ def test_alter_table_set_tablespace_ptrack(self):
442
485
# Clean after yourself
443
486
self .del_test_dir (module_name , fname )
444
487
445
- #@unittest.skip("skip")
488
+ # @unittest.skip("skip")
446
489
def test_alter_database_set_tablespace_ptrack (self ):
447
490
"""Make node, create tablespace with database, take full backup, alter tablespace location, take ptrack backup, restore database."""
448
491
self .maxDiff = None
@@ -470,7 +513,7 @@ def test_alter_database_set_tablespace_ptrack(self):
470
513
471
514
# PTRACK BACKUP
472
515
self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
473
- pgdata_content = self .pgdata_content (node .data_dir )
516
+ pgdata = self .pgdata_content (node .data_dir )
474
517
node .stop ()
475
518
476
519
# RESTORE
@@ -480,16 +523,16 @@ def test_alter_database_set_tablespace_ptrack(self):
480
523
"-T" , "{0}={1}" .format (self .get_tblspace_path (node ,'somedata' ), self .get_tblspace_path (node_restored ,'somedata' ))])
481
524
482
525
# GET PHYSICAL CONTENT
483
- pgdata_content_new = self .pgdata_content (node_restored .data_dir )
526
+ pgdata_new = self .pgdata_content (node_restored .data_dir )
484
527
# COMPARE PHYSICAL CONTENT
485
- self .compare_pgdata (pgdata_content , pgdata_content_new )
528
+ self .compare_pgdata (pgdata , pgdata_new )
486
529
# START RESTORED NODE
487
530
node_restored .start ()
488
531
489
532
# Clean after yourself
490
533
self .del_test_dir (module_name , fname )
491
534
492
- #@unittest.skip("skip")
535
+ # @unittest.skip("skip")
493
536
def test_drop_tablespace (self ):
494
537
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
495
538
self .maxDiff = None
@@ -549,7 +592,7 @@ def test_drop_tablespace(self):
549
592
# Clean after yourself
550
593
self .del_test_dir (module_name , fname )
551
594
552
- #@unittest.skip("skip")
595
+ # @unittest.skip("skip")
553
596
def test_alter_tablespace (self ):
554
597
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
555
598
self .maxDiff = None
@@ -606,17 +649,17 @@ def test_alter_tablespace(self):
606
649
node .safe_psql (
607
650
"postgres" , "alter table t_heap set tablespace pg_default" )
608
651
# SECOND PTRACK BACKUP
609
- node .safe_psql ("template1" , "checkpoint" )
610
652
self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
611
- pgdata_content = self .pgdata_content (node .data_dir )
612
653
613
654
# Restore second ptrack backup and check table consistency
614
655
self .restore_node (backup_dir , 'node' , restored_node , options = [
615
656
"-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 )
618
657
restored_node .append_conf ("postgresql.auto.conf" , "port = {0}" .format (restored_node .port ))
619
658
restored_node .start ()
659
+ # COMPARE PHYSICAL CONTENT
660
+ #pgdata = self.pgdata_content(node.data_dir)
661
+ #pgdata_new = self.pgdata_content(restored_node.data_dir)
662
+ #self.compare_pgdata(pgdata, pgdata_new)
620
663
result_new = restored_node .safe_psql ("postgres" , "select * from t_heap" )
621
664
self .assertEqual (result , result_new )
622
665
@@ -639,11 +682,10 @@ def test_relation_with_multiple_segments(self):
639
682
self .add_instance (backup_dir , 'node' , node )
640
683
node .start ()
641
684
642
- # self.create_tblspace_in_node(node, 'somedata')
685
+ self .create_tblspace_in_node (node , 'somedata' )
643
686
644
687
# CREATE TABLE
645
- # node.pgbench_init(scale=300, options=['--tablespace=somedata'])
646
- pgbench = node .pgbench_init (scale = 30 )
688
+ node .pgbench_init (scale = 300 , options = ['--tablespace=somedata' ])
647
689
# FULL BACKUP
648
690
self .backup_node (backup_dir , 'node' , node , options = ["--stream" ])
649
691
@@ -657,24 +699,25 @@ def test_relation_with_multiple_segments(self):
657
699
pgdata = self .pgdata_content (node .data_dir )
658
700
659
701
# RESTORE NODE
660
- # self.restore_node(backup_dir, 'node', restored_node, options=[
661
- # "-j", "4", "-T", "{0}={1}".format(tblspc_path, tblspc_path_new)])
662
702
restored_node = self .make_simple_node (base_dir = "{0}/{1}/restored_node" .format (module_name , fname ))
663
703
restored_node .cleanup ()
664
- # tblspc_path = self.get_tblspace_path(node, 'somedata')
665
- # tblspc_path_new = self.get_tblspace_path(restored_node, 'somedata_restored')
704
+ tblspc_path = self .get_tblspace_path (node , 'somedata' )
705
+ tblspc_path_new = self .get_tblspace_path (restored_node , 'somedata_restored' )
666
706
667
707
self .restore_node (backup_dir , 'node' , restored_node , options = [
668
- "-j" , "4" ])
708
+ "-j" , "4" , "-T" , "{0}={1}" .format (tblspc_path , tblspc_path_new )])
709
+ # self.restore_node(backup_dir, 'node', restored_node, options=[
710
+ # "-j", "4"])
669
711
# GET PHYSICAL CONTENT FROM NODE_RESTORED
670
712
pgdata_restored = self .pgdata_content (restored_node .data_dir )
671
- self .compare_pgdata (pgdata , pgdata_restored )
672
713
714
+ # START RESTORED NODE
673
715
restored_node .append_conf ("postgresql.auto.conf" , "port = {0}" .format (restored_node .port ))
674
716
restored_node .start ()
675
717
676
718
result_new = restored_node .safe_psql ("postgres" , "select * from pgbench_accounts" )
677
719
self .assertEqual (result , result_new )
720
+ self .compare_pgdata (pgdata , pgdata_restored )
678
721
679
722
# Clean after yourself
680
723
self .del_test_dir (module_name , fname )
0 commit comments