@@ -1728,6 +1728,81 @@ def test_instance_from_the_past(self):
1728
1728
# Clean after yourself
1729
1729
self .del_test_dir (module_name , fname )
1730
1730
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
+
1731
1806
# TODO:
1732
1807
# null offset STOP LSN and latest record in previous segment is conrecord (manual only)
1733
1808
# archiving from promoted delayed replica
0 commit comments