@@ -74,20 +74,18 @@ def __init__(self, name=None, port=None, base_dir=None, use_logging=False):
74
74
use_logging: enable python logging.
75
75
"""
76
76
77
- global bound_ports
78
-
79
77
# public
80
- self .master = None
81
78
self .host = '127.0.0.1'
82
79
self .name = name or _generate_app_name ()
83
80
self .port = port or _reserve_port ()
84
81
self .base_dir = base_dir
85
82
86
83
# private
87
- self ._should_free_port = port is None
88
84
self ._should_rm_dirs = base_dir is None
85
+ self ._should_free_port = port is None
89
86
self ._use_logging = use_logging
90
87
self ._logger = None
88
+ self ._master = None
91
89
92
90
# create directories if needed
93
91
self ._prepare_dirs ()
@@ -96,14 +94,16 @@ def __enter__(self):
96
94
return self
97
95
98
96
def __exit__ (self , type , value , traceback ):
99
- global bound_ports
100
-
101
97
# stop node if necessary
102
98
self .cleanup ()
103
99
104
100
# free port if necessary
105
101
self .free_port ()
106
102
103
+ @property
104
+ def master (self ):
105
+ return self ._master
106
+
107
107
@property
108
108
def data_dir (self ):
109
109
return os .path .join (self .base_dir , _DATA_DIR )
@@ -122,11 +122,12 @@ def pg_log_name(self):
122
122
123
123
def _assign_master (self , master ):
124
124
# now this node has a master
125
- self .master = master
125
+ self ._master = master
126
126
127
127
def _create_recovery_conf (self , username ):
128
128
# fetch master of this node
129
129
master = self .master
130
+ assert (master is not None )
130
131
131
132
# yapf: disable
132
133
conninfo = (
@@ -834,7 +835,8 @@ def catchup(self, dbname='postgres', username=None):
834
835
Wait until async replica catches up with its master.
835
836
"""
836
837
837
- master = self .master
838
+ if not self .master :
839
+ raise CatchUpException ("Node doesn't have a master" )
838
840
839
841
if _pg_version_ge ('10' ):
840
842
poll_lsn = "select pg_current_wal_lsn()::text"
@@ -843,13 +845,11 @@ def catchup(self, dbname='postgres', username=None):
843
845
poll_lsn = "select pg_current_xlog_location()::text"
844
846
wait_lsn = "select pg_last_xlog_replay_location() >= '{}'::pg_lsn"
845
847
846
- if not master :
847
- raise CatchUpException ("Master node is not specified" )
848
-
849
848
try :
850
849
# 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 ]
853
853
854
854
# wait until this LSN reaches replica
855
855
self .poll_query_until (
0 commit comments