@@ -1728,6 +1728,81 @@ def test_instance_from_the_past(self):
17281728 # Clean after yourself
17291729 self .del_test_dir (module_name , fname )
17301730
1731+ # @unittest.skip("skip")
1732+ def test_replica_via_basebackup (self ):
1733+ """
1734+ """
1735+ fname = self .id ().split ('.' )[3 ]
1736+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1737+ node = self .make_simple_node (
1738+ base_dir = os .path .join (module_name , fname , 'node' ),
1739+ set_replication = True ,
1740+ initdb_params = ['--data-checksums' ],
1741+ pg_options = {'autovacuum' : 'off' , 'hot_standby' : 'on' })
1742+
1743+ self .init_pb (backup_dir )
1744+ self .add_instance (backup_dir , 'node' , node )
1745+ self .set_archiving (backup_dir , 'node' , node )
1746+
1747+ node .slow_start ()
1748+
1749+ node .pgbench_init (scale = 10 )
1750+
1751+ #FULL backup
1752+ full_id = self .backup_node (backup_dir , 'node' , node )
1753+
1754+ pgbench = node .pgbench (
1755+ options = ['-T' , '10' , '-c' , '1' , '--no-vacuum' ])
1756+ pgbench .wait ()
1757+
1758+ node .cleanup ()
1759+
1760+ self .restore_node (
1761+ backup_dir , 'node' , node ,
1762+ options = ['--recovery-target=latest' , '--recovery-target-action=promote' ])
1763+ node .slow_start ()
1764+
1765+ # Timeline 2
1766+ # Take stream page backup from instance in timeline2
1767+ page_id = self .backup_node (
1768+ backup_dir , 'node' , node , backup_type = 'full' , options = ['--stream' ])
1769+
1770+ node .cleanup ()
1771+
1772+ # restore stream backup
1773+ self .restore_node (backup_dir , 'node' , node )
1774+
1775+ xlog_dir = 'pg_wal'
1776+ if self .get_version (node ) < 100000 :
1777+ xlog_dir = 'pg_xlog'
1778+
1779+ filepath = os .path .join (node .data_dir , xlog_dir , "00000002.history" )
1780+ self .assertTrue (
1781+ os .path .exists (filepath ),
1782+ "History file do not exists: {0}" .format (filepath ))
1783+
1784+ node .slow_start ()
1785+
1786+ # "pg_receivewal --create-slot --slot archive_slot --if-not-exists "
1787+ # "&& pg_receivewal --synchronous -Z 1 /tmp/wal --slot archive_slot --no-loop"
1788+ node_restored = self .make_simple_node (
1789+ base_dir = os .path .join (module_name , fname , 'node_restored' ))
1790+ node_restored .cleanup ()
1791+
1792+ pg_basebackup_path = self .get_bin_path ('pg_basebackup' )
1793+
1794+ self .run_binary (
1795+ [
1796+ pg_basebackup_path , '-p' , str (node .port ), '-h' , 'localhost' ,
1797+ '-R' , '-X' , 'stream' , '-D' , node_restored .data_dir
1798+ ])
1799+
1800+ self .set_auto_conf (node_restored , {'port' : node_restored .port })
1801+ node_restored .slow_start (replica = True )
1802+
1803+ # Clean after yourself
1804+ self .del_test_dir (module_name , fname )
1805+
17311806# TODO:
17321807# null offset STOP LSN and latest record in previous segment is conrecord (manual only)
17331808# archiving from promoted delayed replica
0 commit comments