@@ -18,9 +18,6 @@ class BackupTest(ProbackupTest, unittest.TestCase):
1818# PGPRO-707
1919def test_backup_modes_archive (self ):
2020"""standart backup modes with ARCHIVE WAL method"""
21- if not self .ptrack :
22- return unittest .skip ('Skipped because ptrack support is disabled' )
23-
2421fname = self .id ().split ('.' )[3 ]
2522node = self .make_simple_node (
2623base_dir = os .path .join (module_name ,fname ,'node' ),
@@ -33,12 +30,7 @@ def test_backup_modes_archive(self):
3330self .set_archiving (backup_dir ,'node' ,node )
3431node .slow_start ()
3532
36- if node .major_version >= 12 :
37- node .safe_psql (
38- "postgres" ,
39- "CREATE EXTENSION ptrack" )
40-
41- backup_id = self .backup_node (backup_dir ,'node' ,node )
33+ full_backup_id = self .backup_node (backup_dir ,'node' ,node )
4234show_backup = self .show_pb (backup_dir ,'node' )[0 ]
4335
4436self .assertEqual (show_backup ['status' ],"OK" )
@@ -47,7 +39,7 @@ def test_backup_modes_archive(self):
4739# postmaster.pid and postmaster.opts shouldn't be copied
4840excluded = True
4941db_dir = os .path .join (
50- backup_dir ,"backups" ,'node' ,backup_id ,"database" )
42+ backup_dir ,"backups" ,'node' ,full_backup_id ,"database" )
5143
5244for f in os .listdir (db_dir ):
5345if (
@@ -64,31 +56,30 @@ def test_backup_modes_archive(self):
6456page_backup_id = self .backup_node (
6557backup_dir ,'node' ,node ,backup_type = "page" )
6658
67- # print self.show_pb(node)
68- show_backup = self .show_pb (backup_dir ,'node' )[1 ]
59+ show_backup_1 = self .show_pb (backup_dir ,'node' )[1 ]
6960self .assertEqual (show_backup ['status' ],"OK" )
7061self .assertEqual (show_backup ['backup-mode' ],"PAGE" )
7162
63+ # delta backup mode
64+ delta_backup_id = self .backup_node (
65+ backup_dir ,'node' ,node ,backup_type = "delta" )
66+
67+ show_backup_2 = self .show_pb (backup_dir ,'node' )[2 ]
68+ self .assertEqual (show_backup ['status' ],"OK" )
69+ self .assertEqual (show_backup ['backup-mode' ],"DELTA" )
70+
7271# Check parent backup
7372self .assertEqual (
74- backup_id ,
73+ full_backup_id ,
7574self .show_pb (
7675backup_dir ,'node' ,
77- backup_id = show_backup ['id' ])["parent-backup-id" ])
78-
79- # ptrack backup mode
80- self .backup_node (backup_dir ,'node' ,node ,backup_type = "ptrack" )
76+ backup_id = show_backup_1 ['id' ])["parent-backup-id" ])
8177
82- show_backup = self .show_pb (backup_dir ,'node' )[2 ]
83- self .assertEqual (show_backup ['status' ],"OK" )
84- self .assertEqual (show_backup ['backup-mode' ],"PTRACK" )
85-
86- # Check parent backup
8778self .assertEqual (
8879page_backup_id ,
8980self .show_pb (
9081backup_dir ,'node' ,
91- backup_id = show_backup ['id' ])["parent-backup-id" ])
82+ backup_id = show_backup_2 ['id' ])["parent-backup-id" ])
9283
9384# Clean after yourself
9485self .del_test_dir (module_name ,fname )
@@ -118,10 +109,7 @@ def test_smooth_checkpoint(self):
118109
119110# @unittest.skip("skip")
120111def test_incremental_backup_without_full (self ):
121- """page-level backup without validated full backup"""
122- if not self .ptrack :
123- return unittest .skip ('Skipped because ptrack support is disabled' )
124-
112+ """page backup without validated full backup"""
125113fname = self .id ().split ('.' )[3 ]
126114node = self .make_simple_node (
127115base_dir = os .path .join (module_name ,fname ,'node' ),
@@ -134,11 +122,6 @@ def test_incremental_backup_without_full(self):
134122self .set_archiving (backup_dir ,'node' ,node )
135123node .slow_start ()
136124
137- if node .major_version >= 12 :
138- node .safe_psql (
139- "postgres" ,
140- "CREATE EXTENSION ptrack" )
141-
142125try :
143126self .backup_node (backup_dir ,'node' ,node ,backup_type = "page" )
144127# we should die here because exception is what we expect to happen
@@ -154,29 +137,10 @@ def test_incremental_backup_without_full(self):
154137"\n Unexpected Error Message: {0}\n CMD: {1}" .format (
155138repr (e .message ),self .cmd ))
156139
157- try :
158- self .backup_node (backup_dir ,'node' ,node ,backup_type = "ptrack" )
159- # we should die here because exception is what we expect to happen
160- self .assertEqual (
161- 1 ,0 ,
162- "Expecting Error because page backup should not be possible "
163- "without valid full backup.\n Output: {0}\n CMD: {1}" .format (
164- repr (self .output ),self .cmd ))
165- except ProbackupException as e :
166- self .assertTrue (
167- "WARNING: Valid full backup on current timeline 1 is not found" in e .message and
168- "ERROR: Create new full backup before an incremental one" in e .message ,
169- "\n Unexpected Error Message: {0}\n CMD: {1}" .format (
170- repr (e .message ),self .cmd ))
171-
172140self .assertEqual (
173141self .show_pb (backup_dir ,'node' )[0 ]['status' ],
174142"ERROR" )
175143
176- self .assertEqual (
177- self .show_pb (backup_dir ,'node' )[1 ]['status' ],
178- "ERROR" )
179-
180144# Clean after yourself
181145self .del_test_dir (module_name ,fname )
182146
@@ -242,72 +206,27 @@ def test_incremental_backup_corrupt_full(self):
242206self .del_test_dir (module_name ,fname )
243207
244208# @unittest.skip("skip")
245- def test_ptrack_threads (self ):
246- """ptrack multi thread backup mode"""
247- if not self .ptrack :
248- return unittest .skip ('Skipped because ptrack support is disabled' )
249-
250- fname = self .id ().split ('.' )[3 ]
251- node = self .make_simple_node (
252- base_dir = os .path .join (module_name ,fname ,'node' ),
253- initdb_params = ['--data-checksums' ],
254- ptrack_enable = True )
255-
256- backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
257- self .init_pb (backup_dir )
258- self .add_instance (backup_dir ,'node' ,node )
259- self .set_archiving (backup_dir ,'node' ,node )
260- node .slow_start ()
261-
262- if node .major_version >= 12 :
263- node .safe_psql (
264- "postgres" ,
265- "CREATE EXTENSION ptrack" )
266-
267- self .backup_node (
268- backup_dir ,'node' ,node ,
269- backup_type = "full" ,options = ["-j" ,"4" ])
270- self .assertEqual (self .show_pb (backup_dir ,'node' )[0 ]['status' ],"OK" )
271-
272- self .backup_node (
273- backup_dir ,'node' ,node ,
274- backup_type = "ptrack" ,options = ["-j" ,"4" ])
275- self .assertEqual (self .show_pb (backup_dir ,'node' )[0 ]['status' ],"OK" )
276-
277- # Clean after yourself
278- self .del_test_dir (module_name ,fname )
279-
280- # @unittest.skip("skip")
281- def test_ptrack_threads_stream (self ):
282- """ptrack multi thread backup mode and stream"""
283- if not self .ptrack :
284- return unittest .skip ('Skipped because ptrack support is disabled' )
285-
209+ def test_delta_threads_stream (self ):
210+ """delta multi thread backup mode and stream"""
286211fname = self .id ().split ('.' )[3 ]
287212node = self .make_simple_node (
288213base_dir = os .path .join (module_name ,fname ,'node' ),
289214set_replication = True ,
290- initdb_params = ['--data-checksums' ],
291- ptrack_enable = True )
215+ initdb_params = ['--data-checksums' ])
292216
293217backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
294218self .init_pb (backup_dir )
295219self .add_instance (backup_dir ,'node' ,node )
296220node .slow_start ()
297221
298- if node .major_version >= 12 :
299- node .safe_psql (
300- "postgres" ,
301- "CREATE EXTENSION ptrack" )
302-
303222self .backup_node (
304223backup_dir ,'node' ,node ,backup_type = "full" ,
305224options = ["-j" ,"4" ,"--stream" ])
306225
307226self .assertEqual (self .show_pb (backup_dir ,'node' )[0 ]['status' ],"OK" )
308227self .backup_node (
309228backup_dir ,'node' ,node ,
310- backup_type = "ptrack " ,options = ["-j" ,"4" ,"--stream" ])
229+ backup_type = "delta " ,options = ["-j" ,"4" ,"--stream" ])
311230self .assertEqual (self .show_pb (backup_dir ,'node' )[1 ]['status' ],"OK" )
312231
313232# Clean after yourself
@@ -1459,76 +1378,6 @@ def test_drop_rel_during_backup_page(self):
14591378# Clean after yourself
14601379self .del_test_dir (module_name ,fname )
14611380
1462- # @unittest.skip("skip")
1463- def test_drop_rel_during_backup_ptrack (self ):
1464- """"""
1465- if not self .ptrack :
1466- return unittest .skip ('Skipped because ptrack support is disabled' )
1467-
1468- fname = self .id ().split ('.' )[3 ]
1469- backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
1470- node = self .make_simple_node (
1471- base_dir = os .path .join (module_name ,fname ,'node' ),
1472- set_replication = True ,
1473- ptrack_enable = self .ptrack ,
1474- initdb_params = ['--data-checksums' ])
1475-
1476- self .init_pb (backup_dir )
1477- self .add_instance (backup_dir ,'node' ,node )
1478- self .set_archiving (backup_dir ,'node' ,node )
1479- node .slow_start ()
1480-
1481- if node .major_version >= 12 :
1482- node .safe_psql (
1483- "postgres" ,
1484- "CREATE EXTENSION ptrack" )
1485-
1486- node .safe_psql (
1487- "postgres" ,
1488- "create table t_heap as select i"
1489- " as id from generate_series(0,100) i" )
1490-
1491- relative_path = node .safe_psql (
1492- "postgres" ,
1493- "select pg_relation_filepath('t_heap')" ).decode ('utf-8' ).rstrip ()
1494-
1495- absolute_path = os .path .join (node .data_dir ,relative_path )
1496-
1497- # FULL backup
1498- self .backup_node (backup_dir ,'node' ,node ,options = ['--stream' ])
1499-
1500- # PTRACK backup
1501- gdb = self .backup_node (
1502- backup_dir ,'node' ,node ,backup_type = 'ptrack' ,
1503- gdb = True ,options = ['--log-level-file=LOG' ])
1504-
1505- gdb .set_breakpoint ('backup_files' )
1506- gdb .run_until_break ()
1507-
1508- # REMOVE file
1509- os .remove (absolute_path )
1510-
1511- # File removed, we can proceed with backup
1512- gdb .continue_execution_until_exit ()
1513-
1514- pgdata = self .pgdata_content (node .data_dir )
1515-
1516- with open (os .path .join (backup_dir ,'log' ,'pg_probackup.log' ))as f :
1517- log_content = f .read ()
1518- self .assertTrue (
1519- 'LOG: File not found: "{0}"' .format (absolute_path )in log_content ,
1520- 'File "{0}" should be deleted but it`s not' .format (absolute_path ))
1521-
1522- node .cleanup ()
1523- self .restore_node (backup_dir ,'node' ,node ,options = ["-j" ,"4" ])
1524-
1525- # Physical comparison
1526- pgdata_restored = self .pgdata_content (node .data_dir )
1527- self .compare_pgdata (pgdata ,pgdata_restored )
1528-
1529- # Clean after yourself
1530- self .del_test_dir (module_name ,fname )
1531-
15321381# @unittest.skip("skip")
15331382def test_persistent_slot_for_stream_backup (self ):
15341383""""""
@@ -1992,10 +1841,11 @@ def test_backup_with_least_privileges_role(self):
19921841'postgres' ,
19931842'CREATE DATABASE backupdb' )
19941843
1995- if self .ptrack and node . major_version >= 12 :
1844+ if self .ptrack :
19961845node .safe_psql (
19971846"backupdb" ,
1998- "CREATE EXTENSION ptrack WITH SCHEMA pg_catalog" )
1847+ "CREATE SCHEMA ptrack; "
1848+ "CREATE EXTENSION ptrack WITH SCHEMA ptrack" )
19991849
20001850# PG 9.5
20011851if self .get_version (node )< 90600 :
@@ -2105,33 +1955,14 @@ def test_backup_with_least_privileges_role(self):
21051955 )
21061956
21071957if self .ptrack :
2108- if node .major_version < 12 :
2109- # Reviewer, NB: skip this test in case of old ptrack?
2110- for fname in [
2111- 'pg_catalog.oideq(oid, oid)' ,
2112- 'pg_catalog.ptrack_version()' ,
2113- 'pg_catalog.pg_ptrack_clear()' ,
2114- 'pg_catalog.pg_ptrack_control_lsn()' ,
2115- 'pg_catalog.pg_ptrack_get_and_clear_db(oid, oid)' ,
2116- 'pg_catalog.pg_ptrack_get_and_clear(oid, oid)' ,
2117- 'pg_catalog.pg_ptrack_get_block_2(oid, oid, oid, bigint)' ,
2118- 'pg_catalog.pg_stop_backup()' ]:
2119-
2120- node .safe_psql (
2121- "backupdb" ,
2122- "GRANT EXECUTE ON FUNCTION {0} "
2123- "TO backup" .format (fname ))
2124- else :
2125- fnames = [
2126- 'pg_catalog.ptrack_get_pagemapset(pg_lsn)' ,
2127- 'pg_catalog.ptrack_init_lsn()'
2128- ]
2129-
2130- for fname in fnames :
2131- node .safe_psql (
2132- "backupdb" ,
2133- "GRANT EXECUTE ON FUNCTION {0} "
2134- "TO backup" .format (fname ))
1958+ node .safe_psql (
1959+ "backupdb" ,
1960+ "GRANT USAGE ON SCHEMA ptrack TO backup" )
1961+
1962+ node .safe_psql (
1963+ "backupdb" ,
1964+ "GRANT EXECUTE ON FUNCTION ptrack.ptrack_get_pagemapset(pg_lsn) TO backup; "
1965+ "GRANT EXECUTE ON FUNCTION 'ptrack.ptrack_init_lsn()' TO backup; " )
21351966
21361967if ProbackupTest .enterprise :
21371968node .safe_psql (
@@ -2391,7 +2222,7 @@ def test_backup_with_less_privileges_role(self):
23912222'postgres' ,
23922223'CREATE DATABASE backupdb' )
23932224
2394- if self .ptrack and node . major_version >= 12 :
2225+ if self .ptrack :
23952226node .safe_psql (
23962227'backupdb' ,
23972228'CREATE EXTENSION ptrack' )