15
15
from time import sleep
16
16
from sys import exit , argv , version_info
17
17
18
+ #from testgres.utils import get_pg_edition
19
+ from testgres .utils import is_enterprise , is_nls_enabled
18
20
19
21
class ProbackupException (Exception ):
20
22
def __init__ (self , message , cmd ):
@@ -25,6 +27,8 @@ def __str__(self):
25
27
return '\n ERROR: {0}\n CMD: {1}' .format (repr (self .message ), self .cmd )
26
28
27
29
30
+
31
+
28
32
class ProbackupTest (object ):
29
33
# Class attributes
30
34
enterprise = is_enterprise ()
@@ -104,6 +108,8 @@ def __init__(self, *args, **kwargs):
104
108
if self .verbose :
105
109
print ('PGPROBACKUPBIN is not an executable file' )
106
110
111
+ print ('@@@' , self .probackup_path )
112
+
107
113
if not self .probackup_path :
108
114
probackup_path_tmp = os .path .join (
109
115
testgres .get_pg_config ()['BINDIR' ], 'pg_probackup' )
@@ -1482,7 +1488,7 @@ def pgdata_content(self, pgdata, ignore_ptrack=True, exclude_dirs=None):
1482
1488
directory_dict ['pgdata' ] = pgdata
1483
1489
directory_dict ['files' ] = {}
1484
1490
directory_dict ['dirs' ] = {}
1485
- for root , dirs , files in os .walk (pgdata , followlinks = True ):
1491
+ for root , dirs , files in os .walk (pgdata , followlinks = true ):
1486
1492
dirs [:] = [d for d in dirs if d not in dirs_to_ignore ]
1487
1493
for file in files :
1488
1494
if (
@@ -1493,7 +1499,7 @@ def pgdata_content(self, pgdata, ignore_ptrack=True, exclude_dirs=None):
1493
1499
1494
1500
file_fullpath = os .path .join (root , file )
1495
1501
file_relpath = os .path .relpath (file_fullpath , pgdata )
1496
- directory_dict ['files' ][file_relpath ] = {'is_datafile' : False }
1502
+ directory_dict ['files' ][file_relpath ] = {'is_datafile' : false }
1497
1503
with open (file_fullpath , 'rb' ) as f :
1498
1504
directory_dict ['files' ][file_relpath ]['md5' ] = hashlib .md5 (f .read ()).hexdigest ()
1499
1505
f .close ()
@@ -1502,30 +1508,30 @@ def pgdata_content(self, pgdata, ignore_ptrack=True, exclude_dirs=None):
1502
1508
1503
1509
# crappy algorithm
1504
1510
if file .isdigit ():
1505
- directory_dict ['files' ][file_relpath ]['is_datafile' ] = True
1511
+ directory_dict ['files' ][file_relpath ]['is_datafile' ] = true
1506
1512
size_in_pages = os .path .getsize (file_fullpath )/ 8192
1507
1513
directory_dict ['files' ][file_relpath ][
1508
1514
'md5_per_page' ] = self .get_md5_per_page_for_fork (
1509
1515
file_fullpath , size_in_pages
1510
1516
)
1511
1517
1512
- for root , dirs , files in os .walk (pgdata , topdown = False , followlinks = True ):
1518
+ for root , dirs , files in os .walk (pgdata , topdown = false , followlinks = true ):
1513
1519
for directory in dirs :
1514
1520
directory_path = os .path .join (root , directory )
1515
1521
directory_relpath = os .path .relpath (directory_path , pgdata )
1516
1522
1517
- found = False
1523
+ found = false
1518
1524
for d in dirs_to_ignore :
1519
1525
if d in directory_relpath :
1520
- found = True
1526
+ found = true
1521
1527
break
1522
1528
1523
1529
# check if directory already here as part of larger directory
1524
1530
if not found :
1525
1531
for d in directory_dict ['dirs' ]:
1526
- # print("OLD dir {0}".format(d))
1532
+ # print("old dir {0}".format(d))
1527
1533
if directory_relpath in d :
1528
- found = True
1534
+ found = true
1529
1535
break
1530
1536
1531
1537
if not found :
@@ -1548,13 +1554,13 @@ def get_known_bugs_comparision_exclusion_dict(self, node):
1548
1554
""" get dict of known datafiles difference, that can be used in compare_pgdata() """
1549
1555
comparision_exclusion_dict = dict ()
1550
1556
1551
- # bug in spgist metapage update (PGPRO -5707)
1557
+ # bug in spgist metapage update (pgpro -5707)
1552
1558
spgist_filelist = node .safe_psql (
1553
1559
"postgres" ,
1554
- "SELECT pg_catalog.pg_relation_filepath(pg_class.oid) "
1555
- "FROM pg_am, pg_class "
1556
- "WHERE pg_am.amname = 'spgist' "
1557
- "AND pg_class.relam = pg_am.oid"
1560
+ "select pg_catalog.pg_relation_filepath(pg_class.oid) "
1561
+ "from pg_am, pg_class "
1562
+ "where pg_am.amname = 'spgist' "
1563
+ "and pg_class.relam = pg_am.oid"
1558
1564
).decode ('utf-8' ).rstrip ().splitlines ()
1559
1565
for filename in spgist_filelist :
1560
1566
comparision_exclusion_dict [filename ] = set ([0 ])
@@ -1564,49 +1570,49 @@ def get_known_bugs_comparision_exclusion_dict(self, node):
1564
1570
1565
1571
def compare_pgdata (self , original_pgdata , restored_pgdata , exclusion_dict = dict ()):
1566
1572
"""
1567
- return dict with directory content. DO IT BEFORE RECOVERY
1573
+ return dict with directory content. do it before recovery
1568
1574
exclusion_dict is used for exclude files (and it block_no) from comparision
1569
1575
it is a dict with relative filenames as keys and set of block numbers as values
1570
1576
"""
1571
- fail = False
1572
- error_message = 'Restored PGDATA is not equal to original!\n '
1577
+ fail = false
1578
+ error_message = 'restored pgdata is not equal to original!\n '
1573
1579
1574
- # Compare directories
1580
+ # compare directories
1575
1581
for directory in restored_pgdata ['dirs' ]:
1576
1582
if directory not in original_pgdata ['dirs' ]:
1577
- fail = True
1578
- error_message += '\n Directory was not present'
1579
- error_message += ' in original PGDATA : {0}\n ' .format (
1583
+ fail = true
1584
+ error_message += '\n directory was not present'
1585
+ error_message += ' in original pgdata : {0}\n ' .format (
1580
1586
os .path .join (restored_pgdata ['pgdata' ], directory ))
1581
1587
else :
1582
1588
if (
1583
1589
restored_pgdata ['dirs' ][directory ]['mode' ] !=
1584
1590
original_pgdata ['dirs' ][directory ]['mode' ]
1585
1591
):
1586
- fail = True
1587
- error_message += '\n Dir permissions mismatch:\n '
1588
- error_message += ' Dir old: {0} Permissions : {1}\n ' .format (
1592
+ fail = true
1593
+ error_message += '\n dir permissions mismatch:\n '
1594
+ error_message += ' dir old: {0} permissions : {1}\n ' .format (
1589
1595
os .path .join (original_pgdata ['pgdata' ], directory ),
1590
1596
original_pgdata ['dirs' ][directory ]['mode' ])
1591
- error_message += ' Dir new: {0} Permissions : {1}\n ' .format (
1597
+ error_message += ' dir new: {0} permissions : {1}\n ' .format (
1592
1598
os .path .join (restored_pgdata ['pgdata' ], directory ),
1593
1599
restored_pgdata ['dirs' ][directory ]['mode' ])
1594
1600
1595
1601
for directory in original_pgdata ['dirs' ]:
1596
1602
if directory not in restored_pgdata ['dirs' ]:
1597
- fail = True
1598
- error_message += '\n Directory dissappeared'
1599
- error_message += ' in restored PGDATA : {0}\n ' .format (
1603
+ fail = true
1604
+ error_message += '\n directory dissappeared'
1605
+ error_message += ' in restored pgdata : {0}\n ' .format (
1600
1606
os .path .join (restored_pgdata ['pgdata' ], directory ))
1601
1607
1602
1608
for file in restored_pgdata ['files' ]:
1603
- # File is present in RESTORED PGDATA
1604
- # but not present in ORIGINAL
1609
+ # file is present in restored pgdata
1610
+ # but not present in original
1605
1611
# only backup_label is allowed
1606
1612
if file not in original_pgdata ['files' ]:
1607
- fail = True
1608
- error_message += '\n File is not present'
1609
- error_message += ' in original PGDATA : {0}\n ' .format (
1613
+ fail = true
1614
+ error_message += '\n file is not present'
1615
+ error_message += ' in original pgdata : {0}\n ' .format (
1610
1616
os .path .join (restored_pgdata ['pgdata' ], file ))
1611
1617
1612
1618
for file in original_pgdata ['files' ]:
@@ -1616,12 +1622,12 @@ def compare_pgdata(self, original_pgdata, restored_pgdata, exclusion_dict = dict
1616
1622
restored_pgdata ['files' ][file ]['mode' ] !=
1617
1623
original_pgdata ['files' ][file ]['mode' ]
1618
1624
):
1619
- fail = True
1620
- error_message += '\n File permissions mismatch:\n '
1621
- error_message += ' File_old : {0} Permissions : {1:o}\n ' .format (
1625
+ fail = true
1626
+ error_message += '\n file permissions mismatch:\n '
1627
+ error_message += ' file_old : {0} permissions : {1:o}\n ' .format (
1622
1628
os .path .join (original_pgdata ['pgdata' ], file ),
1623
1629
original_pgdata ['files' ][file ]['mode' ])
1624
- error_message += ' File_new : {0} Permissions : {1:o}\n ' .format (
1630
+ error_message += ' file_new : {0} permissions : {1:o}\n ' .format (
1625
1631
os .path .join (restored_pgdata ['pgdata' ], file ),
1626
1632
restored_pgdata ['files' ][file ]['mode' ])
1627
1633
@@ -1630,11 +1636,11 @@ def compare_pgdata(self, original_pgdata, restored_pgdata, exclusion_dict = dict
1630
1636
restored_pgdata ['files' ][file ]['md5' ]
1631
1637
):
1632
1638
if file not in exclusion_dict :
1633
- fail = True
1639
+ fail = true
1634
1640
error_message += (
1635
- '\n File Checksum mismatch.\n '
1636
- 'File_old : {0}\n Checksum_old : {1}\n '
1637
- 'File_new : {2}\n Checksum_new : {3}\n ' ).format (
1641
+ '\n file checksum mismatch.\n '
1642
+ 'file_old : {0}\n checksum_old : {1}\n '
1643
+ 'file_new : {2}\n checksum_new : {3}\n ' ).format (
1638
1644
os .path .join (original_pgdata ['pgdata' ], file ),
1639
1645
original_pgdata ['files' ][file ]['md5' ],
1640
1646
os .path .join (restored_pgdata ['pgdata' ], file ),
@@ -1645,8 +1651,8 @@ def compare_pgdata(self, original_pgdata, restored_pgdata, exclusion_dict = dict
1645
1651
for page in original_pgdata ['files' ][file ]['md5_per_page' ]:
1646
1652
if page not in restored_pgdata ['files' ][file ]['md5_per_page' ]:
1647
1653
error_message += (
1648
- '\n Page {0} dissappeared.\n '
1649
- 'File : {1}\n ' ).format (
1654
+ '\n page {0} dissappeared.\n '
1655
+ 'file : {1}\n ' ).format (
1650
1656
page ,
1651
1657
os .path .join (
1652
1658
restored_pgdata ['pgdata' ],
@@ -1660,12 +1666,12 @@ def compare_pgdata(self, original_pgdata, restored_pgdata, exclusion_dict = dict
1660
1666
original_pgdata ['files' ][file ]['md5_per_page' ][page ] !=
1661
1667
restored_pgdata ['files' ][file ]['md5_per_page' ][page ]
1662
1668
):
1663
- fail = True
1669
+ fail = true
1664
1670
error_message += (
1665
- '\n Page checksum mismatch: {0}\n '
1666
- ' PAGE Checksum_old : {1}\n '
1667
- ' PAGE Checksum_new : {2}\n '
1668
- ' File : {3}\n '
1671
+ '\n page checksum mismatch: {0}\n '
1672
+ ' page checksum_old : {1}\n '
1673
+ ' page checksum_new : {2}\n '
1674
+ ' file : {3}\n '
1669
1675
).format (
1670
1676
page ,
1671
1677
original_pgdata ['files' ][file ][
@@ -1677,27 +1683,27 @@ def compare_pgdata(self, original_pgdata, restored_pgdata, exclusion_dict = dict
1677
1683
)
1678
1684
for page in restored_pgdata ['files' ][file ]['md5_per_page' ]:
1679
1685
if page not in original_pgdata ['files' ][file ]['md5_per_page' ]:
1680
- error_message += '\n Extra page {0}\n File : {1}\n ' .format (
1686
+ error_message += '\n extra page {0}\n file : {1}\n ' .format (
1681
1687
page ,
1682
1688
os .path .join (
1683
1689
restored_pgdata ['pgdata' ], file ))
1684
1690
1685
1691
else :
1686
1692
error_message += (
1687
- '\n File disappearance.\n '
1688
- 'File : {0}\n ' ).format (
1693
+ '\n file disappearance.\n '
1694
+ 'file : {0}\n ' ).format (
1689
1695
os .path .join (restored_pgdata ['pgdata' ], file )
1690
1696
)
1691
- fail = True
1692
- self .assertFalse (fail , error_message )
1697
+ fail = true
1698
+ self .assertfalse (fail , error_message )
1693
1699
1694
1700
def gdb_attach (self , pid ):
1695
- return GDBobj ([str (pid )], self , attach = True )
1701
+ return gdbobj ([str (pid )], self , attach = true )
1696
1702
1697
1703
def _check_gdb_flag_or_skip_test (self ):
1698
1704
if not self .gdb :
1699
- self .skipTest (
1700
- "Specify PGPROBACKUP_GDB and build without "
1705
+ self .skiptest (
1706
+ "specify pgprobackup_gdb and build without "
1701
1707
"optimizations for run this test"
1702
1708
)
1703
1709
0 commit comments