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,88 @@ 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
+ 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")
46
127
def test_ptrack_stream (self ):
47
128
"""make node, make full and ptrack stream backups, restore them and check data correctness"""
48
129
self .maxDiff = None
@@ -99,7 +180,7 @@ def test_ptrack_stream(self):
99
180
# Clean after yourself
100
181
self .del_test_dir (module_name , fname )
101
182
102
- #@unittest.skip("skip")
183
+ # @unittest.skip("skip")
103
184
def test_ptrack_archive (self ):
104
185
"""make archive node, make full and ptrack backups, check data correctness in restored instance"""
105
186
self .maxDiff = None
@@ -157,7 +238,7 @@ def test_ptrack_archive(self):
157
238
# Clean after yourself
158
239
self .del_test_dir (module_name , fname )
159
240
160
- #@unittest.skip("skip")
241
+ # @unittest.skip("skip")
161
242
def test_ptrack_pgpro417 (self ):
162
243
"""Make node, take full backup, take ptrack backup, delete ptrack backup. Try to take ptrack backup, which should fail"""
163
244
self .maxDiff = None
@@ -202,14 +283,13 @@ def test_ptrack_pgpro417(self):
202
283
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
284
repr (self .output ), self .cmd ))
204
285
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 ,
207
287
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
208
288
209
289
# Clean after yourself
210
290
self .del_test_dir (module_name , fname )
211
291
212
- #@unittest.skip("skip")
292
+ # @unittest.skip("skip")
213
293
def test_page_pgpro417 (self ):
214
294
"""Make archive node, take full backup, take page backup, delete page backup. Try to take ptrack backup, which should fail"""
215
295
self .maxDiff = None
@@ -241,6 +321,7 @@ def test_page_pgpro417(self):
241
321
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'page' )
242
322
243
323
self .delete_pb (backup_dir , 'node' , backup_id )
324
+ # sys.exit(1)
244
325
245
326
# PTRACK BACKUP
246
327
node .safe_psql (
@@ -253,14 +334,13 @@ def test_page_pgpro417(self):
253
334
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
335
repr (self .output ), self .cmd ))
255
336
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 ,
258
338
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
259
339
260
340
# Clean after yourself
261
341
# self.del_test_dir(module_name, fname)
262
342
263
- #@unittest.skip("skip")
343
+ # @unittest.skip("skip")
264
344
def test_full_pgpro417 (self ):
265
345
"""Make node, take two full backups, delete full second backup. Try to take ptrack backup, which should fail"""
266
346
self .maxDiff = None
@@ -303,14 +383,13 @@ def test_full_pgpro417(self):
303
383
repr (self .output ), self .cmd ))
304
384
except ProbackupException as e :
305
385
self .assertTrue ('ERROR: LSN from ptrack_control' in e .message
306
- and 'differs from LSN of previous backup' in e .message
307
386
and 'Create new full backup before an incremental one' in e .message ,
308
387
'\n Unexpected Error Message: {0}\n CMD: {1}' .format (repr (e .message ), self .cmd ))
309
388
310
389
# Clean after yourself
311
390
self .del_test_dir (module_name , fname )
312
391
313
- #@unittest.skip("skip")
392
+ # @unittest.skip("skip")
314
393
def test_create_db (self ):
315
394
"""Make node, take full backup, create database db1, take ptrack backup, restore database and check it presense"""
316
395
self .maxDiff = None
@@ -319,11 +398,12 @@ def test_create_db(self):
319
398
node = self .make_simple_node (base_dir = "{0}/{1}/node" .format (module_name , fname ),
320
399
set_replication = True ,
321
400
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' }
323
402
)
324
403
325
404
self .init_pb (backup_dir )
326
405
self .add_instance (backup_dir , 'node' , node )
406
+ self .set_archiving (backup_dir , 'node' , node )
327
407
node .start ()
328
408
329
409
# FULL BACKUP
@@ -337,41 +417,40 @@ def test_create_db(self):
337
417
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" )
338
418
339
419
# PTRACK BACKUP
420
+ node .safe_psql ("postgres" , "checkpoint" )
421
+ pgdata = self .pgdata_content (node .data_dir )
340
422
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
341
- pgdata_content = self .pgdata_content (node .data_dir )
342
423
343
424
# RESTORE
344
425
node_restored = self .make_simple_node (base_dir = "{0}/{1}/node_restored" .format (module_name , fname ))
345
426
node_restored .cleanup ()
346
427
# COMPARE PHYSICAL CONTENT
347
428
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 )
350
431
351
432
# START RESTORED NODE
352
433
node_restored .append_conf ("postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
353
434
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")
356
436
357
437
# DROP DATABASE DB1
358
438
node .safe_psql (
359
439
"postgres" , "drop database db1" )
360
440
# SECOND PTRACK BACKUP
361
441
backup_id = self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
362
- pgdata_content = self .pgdata_content (node .data_dir )
363
442
364
443
# RESTORE SECOND PTRACK BACKUP
365
444
node_restored .cleanup ()
366
445
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
446
372
447
# START RESTORED NODE
373
448
node_restored .append_conf ("postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
374
449
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)
375
454
376
455
try :
377
456
node_restored .safe_psql ('db1' , 'select 1' )
@@ -385,7 +464,7 @@ def test_create_db(self):
385
464
# Clean after yourself
386
465
self .del_test_dir (module_name , fname )
387
466
388
- #@unittest.skip("skip")
467
+ # @unittest.skip("skip")
389
468
def test_alter_table_set_tablespace_ptrack (self ):
390
469
"""Make node, create tablespace with table, take full backup, alter tablespace location, take ptrack backup, restore database."""
391
470
self .maxDiff = None
@@ -442,7 +521,7 @@ def test_alter_table_set_tablespace_ptrack(self):
442
521
# Clean after yourself
443
522
self .del_test_dir (module_name , fname )
444
523
445
- #@unittest.skip("skip")
524
+ # @unittest.skip("skip")
446
525
def test_alter_database_set_tablespace_ptrack (self ):
447
526
"""Make node, create tablespace with database, take full backup, alter tablespace location, take ptrack backup, restore database."""
448
527
self .maxDiff = None
@@ -489,7 +568,7 @@ def test_alter_database_set_tablespace_ptrack(self):
489
568
# Clean after yourself
490
569
self .del_test_dir (module_name , fname )
491
570
492
- #@unittest.skip("skip")
571
+ # @unittest.skip("skip")
493
572
def test_drop_tablespace (self ):
494
573
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
495
574
self .maxDiff = None
@@ -549,7 +628,7 @@ def test_drop_tablespace(self):
549
628
# Clean after yourself
550
629
self .del_test_dir (module_name , fname )
551
630
552
- #@unittest.skip("skip")
631
+ # @unittest.skip("skip")
553
632
def test_alter_tablespace (self ):
554
633
"""Make node, create table, alter table tablespace, take ptrack backup, move table from tablespace, take ptrack backup"""
555
634
self .maxDiff = None
@@ -606,17 +685,17 @@ def test_alter_tablespace(self):
606
685
node .safe_psql (
607
686
"postgres" , "alter table t_heap set tablespace pg_default" )
608
687
# SECOND PTRACK BACKUP
609
- node .safe_psql ("template1" , "checkpoint" )
610
688
self .backup_node (backup_dir , 'node' , node , backup_type = 'ptrack' , options = ["--stream" ])
611
- pgdata_content = self .pgdata_content (node .data_dir )
612
689
613
690
# Restore second ptrack backup and check table consistency
614
691
self .restore_node (backup_dir , 'node' , restored_node , options = [
615
692
"-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
693
restored_node .append_conf ("postgresql.auto.conf" , "port = {0}" .format (restored_node .port ))
619
694
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)
620
699
result_new = restored_node .safe_psql ("postgres" , "select * from t_heap" )
621
700
self .assertEqual (result , result_new )
622
701
0 commit comments