@@ -15,6 +15,9 @@ class BackupTest(ProbackupTest, unittest.TestCase):
1515 # PGPRO-707
1616 def test_backup_modes_archive (self ):
1717 """standart backup modes with ARCHIVE WAL method"""
18+ if not self .ptrack :
19+ return unittest .skip ('Skipped because ptrack support is disabled' )
20+
1821 fname = self .id ().split ('.' )[3 ]
1922 node = self .make_simple_node (
2023 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -109,6 +112,9 @@ def test_smooth_checkpoint(self):
109112 # @unittest.skip("skip")
110113 def test_incremental_backup_without_full (self ):
111114 """page-level backup without validated full backup"""
115+ if not self .ptrack :
116+ return unittest .skip ('Skipped because ptrack support is disabled' )
117+
112118 fname = self .id ().split ('.' )[3 ]
113119 node = self .make_simple_node (
114120 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -168,8 +174,7 @@ def test_incremental_backup_corrupt_full(self):
168174 fname = self .id ().split ('.' )[3 ]
169175 node = self .make_simple_node (
170176 base_dir = os .path .join (module_name , fname , 'node' ),
171- initdb_params = ['--data-checksums' ],
172- pg_options = {'ptrack_enable' : 'on' })
177+ initdb_params = ['--data-checksums' ])
173178
174179 backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
175180 self .init_pb (backup_dir )
@@ -230,6 +235,9 @@ def test_incremental_backup_corrupt_full(self):
230235 # @unittest.skip("skip")
231236 def test_ptrack_threads (self ):
232237 """ptrack multi thread backup mode"""
238+ if not self .ptrack :
239+ return unittest .skip ('Skipped because ptrack support is disabled' )
240+
233241 fname = self .id ().split ('.' )[3 ]
234242 node = self .make_simple_node (
235243 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -258,6 +266,9 @@ def test_ptrack_threads(self):
258266 # @unittest.skip("skip")
259267 def test_ptrack_threads_stream (self ):
260268 """ptrack multi thread backup mode and stream"""
269+ if not self .ptrack :
270+ return unittest .skip ('Skipped because ptrack support is disabled' )
271+
261272 fname = self .id ().split ('.' )[3 ]
262273 node = self .make_simple_node (
263274 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -287,6 +298,9 @@ def test_ptrack_threads_stream(self):
287298 # @unittest.skip("skip")
288299 def test_page_corruption_heal_via_ptrack_1 (self ):
289300 """make node, corrupt some page, check that backup failed"""
301+ if not self .ptrack :
302+ return unittest .skip ('Skipped because ptrack support is disabled' )
303+
290304 fname = self .id ().split ('.' )[3 ]
291305 node = self .make_simple_node (
292306 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -343,6 +357,9 @@ def test_page_corruption_heal_via_ptrack_1(self):
343357 # @unittest.skip("skip")
344358 def test_page_corruption_heal_via_ptrack_2 (self ):
345359 """make node, corrupt some page, check that backup failed"""
360+ if not self .ptrack :
361+ return unittest .skip ('Skipped because ptrack support is disabled' )
362+
346363 fname = self .id ().split ('.' )[3 ]
347364 node = self .make_simple_node (
348365 base_dir = os .path .join (module_name , fname , 'node' ),
@@ -988,6 +1005,9 @@ def test_drop_rel_during_backup_page(self):
9881005 # @unittest.skip("skip")
9891006 def test_drop_rel_during_backup_ptrack (self ):
9901007 """"""
1008+ if not self .ptrack :
1009+ return unittest .skip ('Skipped because ptrack support is disabled' )
1010+
9911011 fname = self .id ().split ('.' )[3 ]
9921012 backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
9931013 node = self .make_simple_node (
@@ -1492,10 +1512,12 @@ def test_backup_with_least_privileges_role(self):
14921512 node = self .make_simple_node (
14931513 base_dir = os .path .join (module_name , fname , 'node' ),
14941514 set_replication = True ,
1495- # pg_options={'ptrack_enable': 'on'},
14961515 initdb_params = ['--data-checksums' ],
1516+ pg_options = {
1517+ 'archive_timeout' : '30s' })
14971518
1498- )
1519+ if self .ptrack :
1520+ node .append_conf ('postgresql.auto.conf' , 'ptrack_enable = on' )
14991521
15001522 self .init_pb (backup_dir )
15011523 self .add_instance (backup_dir , 'node' , node )
@@ -1506,58 +1528,87 @@ def test_backup_with_least_privileges_role(self):
15061528 'postgres' ,
15071529 'CREATE DATABASE backupdb' )
15081530
1509- node .safe_psql (
1510- 'backupdb' ,
1511- "REVOKE ALL ON DATABASE backupdb from PUBLIC; "
1512- "REVOKE ALL ON SCHEMA public from PUBLIC; "
1513- "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC; "
1514- "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC; "
1515- "REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC; "
1516- "REVOKE ALL ON SCHEMA pg_catalog from PUBLIC; "
1517- "REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM PUBLIC; "
1518- "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA pg_catalog FROM PUBLIC; "
1519- "REVOKE ALL ON ALL SEQUENCES IN SCHEMA pg_catalog FROM PUBLIC; "
1520- "REVOKE ALL ON SCHEMA information_schema from PUBLIC; "
1521- "REVOKE ALL ON ALL TABLES IN SCHEMA information_schema FROM PUBLIC; "
1522- "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA information_schema FROM PUBLIC; "
1523- "REVOKE ALL ON ALL SEQUENCES IN SCHEMA information_schema FROM PUBLIC; "
1524- "CREATE ROLE backup WITH LOGIN REPLICATION; "
1525- "GRANT CONNECT ON DATABASE backupdb to backup; "
1526- "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1527- "GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
1528- # for partial restore, checkdb and ptrack
1529- "GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; "
1530- "GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
1531- "GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1532- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1533- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
1534- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
1535- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; "
1536- # for exclusive backup for PG 9.5 and ptrack
1537- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
1538- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; "
1539- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; "
1540- "GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; "
1541- "GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1542- "GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;"
1543- )
1544-
1545- # ptrack functions
1546- # for fname in [
1547- # 'oideq(oid, oid)',
1548- # 'ptrack_version()',
1549- # 'pg_ptrack_clear()',
1550- # 'pg_ptrack_control_lsn()',
1551- # 'pg_ptrack_get_and_clear_db(oid, oid)',
1552- # 'pg_ptrack_get_and_clear(oid, oid)',
1553- # 'pg_ptrack_get_block_2(oid, oid, oid, bigint)']:
1554- # try:
1555- # node.safe_psql(
1556- # "backupdb",
1557- # "GRANT EXECUTE ON FUNCTION pg_catalog.{0} "
1558- # "TO backup".format(fname))
1559- # except:
1560- # pass
1531+ if self .get_version (node ) < 90600 :
1532+ node .safe_psql (
1533+ 'backupdb' ,
1534+ "REVOKE ALL ON DATABASE backupdb from PUBLIC; "
1535+ "REVOKE ALL ON SCHEMA public from PUBLIC; "
1536+ "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC; "
1537+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC; "
1538+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC; "
1539+ "REVOKE ALL ON SCHEMA pg_catalog from PUBLIC; "
1540+ "REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM PUBLIC; "
1541+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA pg_catalog FROM PUBLIC; "
1542+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA pg_catalog FROM PUBLIC; "
1543+ "REVOKE ALL ON SCHEMA information_schema from PUBLIC; "
1544+ "REVOKE ALL ON ALL TABLES IN SCHEMA information_schema FROM PUBLIC; "
1545+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA information_schema FROM PUBLIC; "
1546+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA information_schema FROM PUBLIC; "
1547+ "CREATE ROLE backup WITH LOGIN REPLICATION; "
1548+ "GRANT CONNECT ON DATABASE backupdb to backup; "
1549+ "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1550+ "GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
1551+ "GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
1552+ "GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
1553+ "GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
1554+ "GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
1555+ "GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1556+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1557+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
1558+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
1559+ "GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1560+ "GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;"
1561+ )
1562+ else :
1563+ node .safe_psql (
1564+ 'backupdb' ,
1565+ "REVOKE ALL ON DATABASE backupdb from PUBLIC; "
1566+ "REVOKE ALL ON SCHEMA public from PUBLIC; "
1567+ "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC; "
1568+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC; "
1569+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC; "
1570+ "REVOKE ALL ON SCHEMA pg_catalog from PUBLIC; "
1571+ "REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM PUBLIC; "
1572+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA pg_catalog FROM PUBLIC; "
1573+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA pg_catalog FROM PUBLIC; "
1574+ "REVOKE ALL ON SCHEMA information_schema from PUBLIC; "
1575+ "REVOKE ALL ON ALL TABLES IN SCHEMA information_schema FROM PUBLIC; "
1576+ "REVOKE ALL ON ALL FUNCTIONS IN SCHEMA information_schema FROM PUBLIC; "
1577+ "REVOKE ALL ON ALL SEQUENCES IN SCHEMA information_schema FROM PUBLIC; "
1578+ "CREATE ROLE backup WITH LOGIN REPLICATION; "
1579+ "GRANT CONNECT ON DATABASE backupdb to backup; "
1580+ "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1581+ "GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
1582+ "GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
1583+ "GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
1584+ "GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1585+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1586+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
1587+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
1588+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; "
1589+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; "
1590+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; "
1591+ "GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; "
1592+ "GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1593+ "GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;"
1594+ )
1595+
1596+ if self .ptrack :
1597+ for fname in [
1598+ 'oideq(oid, oid)' ,
1599+ 'ptrack_version()' ,
1600+ 'pg_ptrack_clear()' ,
1601+ 'pg_ptrack_control_lsn()' ,
1602+ 'pg_ptrack_get_and_clear_db(oid, oid)' ,
1603+ 'pg_ptrack_get_and_clear(oid, oid)' ,
1604+ 'pg_ptrack_get_block_2(oid, oid, oid, bigint)' ]:
1605+ # try:
1606+ node .safe_psql (
1607+ "backupdb" ,
1608+ "GRANT EXECUTE ON FUNCTION pg_catalog.{0} "
1609+ "TO backup" .format (fname ))
1610+ # except:
1611+ # pass
15611612
15621613 # FULL backup
15631614 self .backup_node (
@@ -1584,12 +1635,13 @@ def test_backup_with_least_privileges_role(self):
15841635 datname = 'backupdb' , options = ['--stream' , '-U' , 'backup' ])
15851636
15861637 # PTRACK
1587- # self.backup_node(
1588- # backup_dir, 'node', node, backup_type='ptrack',
1589- # datname='backupdb', options=['-U', 'backup'])
1590- # self.backup_node(
1591- # backup_dir, 'node', node, backup_type='ptrack',
1592- # datname='backupdb', options=['--stream', '-U', 'backup'])
1638+ if self .ptrack :
1639+ self .backup_node (
1640+ backup_dir , 'node' , node , backup_type = 'ptrack' ,
1641+ datname = 'backupdb' , options = ['-U' , 'backup' ])
1642+ self .backup_node (
1643+ backup_dir , 'node' , node , backup_type = 'ptrack' ,
1644+ datname = 'backupdb' , options = ['--stream' , '-U' , 'backup' ])
15931645
15941646 # Clean after yourself
15951647 self .del_test_dir (module_name , fname )
0 commit comments