Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a92a6e7

Browse files
Merge remote-tracking branch 'origin/D20250227_001--node-pid' into D20250226_001--ci_and_ssh
2 parents 381d64d + fce595a commit a92a6e7

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

testgres/node.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ class PostgresNode(object):
132132
# a max number of node start attempts
133133
_C_MAX_START_ATEMPTS = 5
134134

135+
# a max number of read pid file attempts
136+
_C_MAX_GET_PID_ATEMPTS = 5
137+
135138
def __init__(self, name=None, base_dir=None, port=None, conn_params: ConnectionParams = ConnectionParams(),
136139
bin_dir=None, prefix=None):
137140
"""
@@ -208,14 +211,40 @@ def pid(self):
208211
Return postmaster's PID if node is running, else 0.
209212
"""
210213

211-
if self.status():
212-
pid_file = os.path.join(self.data_dir, PG_PID_FILE)
213-
lines = self.os_ops.readlines(pid_file)
214-
pid = int(lines[0]) if lines else None
215-
return pid
214+
nAttempt = 0
215+
pid_file = os.path.join(self.data_dir, PG_PID_FILE)
216+
pid_s: str = None
217+
while True:
218+
if nAttempt == __class__._C_MAX_GET_PID_ATEMPTS:
219+
errMsg = "Can't read postmaster pid file [{0}].".format(pid_file)
220+
raise Exception(errMsg)
216221

217-
# for clarity
218-
return 0
222+
nAttempt += 1
223+
224+
s1 = self.status()
225+
if s1 != NodeStatus.Running:
226+
return 0
227+
228+
try:
229+
lines = self.os_ops.readlines(pid_file)
230+
except Exception:
231+
s2 = self.status()
232+
if s2 == NodeStatus.Running:
233+
raise
234+
return 0
235+
236+
assert lines is not None # [2025-02-27] OK?
237+
assert type(lines) == list # noqa: E721
238+
if len(lines) == 0:
239+
continue
240+
241+
pid_s = lines[0]
242+
assert type(pid_s) == str # noqa: E721
243+
if len(pid_s) == 0:
244+
continue
245+
246+
pid = int(pid_s)
247+
return pid
219248

220249
@property
221250
def auxiliary_pids(self):

0 commit comments

Comments
 (0)