@@ -74,20 +74,18 @@ def __init__(self, name=None, port=None, base_dir=None, use_logging=False):
7474 use_logging: enable python logging.
7575 """
7676
77- global bound_ports
78-
7977 # public
80- self .master = None
8178 self .host = '127.0.0.1'
8279 self .name = name or _generate_app_name ()
8380 self .port = port or _reserve_port ()
8481 self .base_dir = base_dir
8582
8683 # private
87- self ._should_free_port = port is None
8884 self ._should_rm_dirs = base_dir is None
85+ self ._should_free_port = port is None
8986 self ._use_logging = use_logging
9087 self ._logger = None
88+ self ._master = None
9189
9290 # create directories if needed
9391 self ._prepare_dirs ()
@@ -96,14 +94,16 @@ def __enter__(self):
9694 return self
9795
9896 def __exit__ (self , type , value , traceback ):
99- global bound_ports
100-
10197 # stop node if necessary
10298 self .cleanup ()
10399
104100 # free port if necessary
105101 self .free_port ()
106102
103+ @property
104+ def master (self ):
105+ return self ._master
106+
107107 @property
108108 def data_dir (self ):
109109 return os .path .join (self .base_dir , _DATA_DIR )
@@ -122,11 +122,12 @@ def pg_log_name(self):
122122
123123 def _assign_master (self , master ):
124124 # now this node has a master
125- self .master = master
125+ self ._master = master
126126
127127 def _create_recovery_conf (self , username ):
128128 # fetch master of this node
129129 master = self .master
130+ assert (master is not None )
130131
131132 # yapf: disable
132133 conninfo = (
@@ -834,7 +835,8 @@ def catchup(self, dbname='postgres', username=None):
834835 Wait until async replica catches up with its master.
835836 """
836837
837- master = self .master
838+ if not self .master :
839+ raise CatchUpException ("Node doesn't have a master" )
838840
839841 if _pg_version_ge ('10' ):
840842 poll_lsn = "select pg_current_wal_lsn()::text"
@@ -843,13 +845,11 @@ def catchup(self, dbname='postgres', username=None):
843845 poll_lsn = "select pg_current_xlog_location()::text"
844846 wait_lsn = "select pg_last_xlog_replay_location() >= '{}'::pg_lsn"
845847
846- if not master :
847- raise CatchUpException ("Master node is not specified" )
848-
849848 try :
850849 # fetch latest LSN
851- lsn = master .execute (
852- dbname = dbname , username = username , query = poll_lsn )[0 ][0 ]
850+ lsn = self .master .execute (dbname = dbname ,
851+ username = username ,
852+ query = poll_lsn )[0 ][0 ]
853853
854854 # wait until this LSN reaches replica
855855 self .poll_query_until (
0 commit comments