Content-Length: 3058 | pFad | http://github.com/postgrespro/testgres/pull/120.patch
thub.com
From fba3bd36a6f86c6be42f87f3fb10e873b02dbec3 Mon Sep 17 00:00:00 2001
From: Sofia Kopikova
Date: Thu, 4 Apr 2024 19:16:02 +0300
Subject: [PATCH] Fix error 'Is another postmaster already running on port XXX'
Sometimes when we abnormally shutdown node its port stays busy. So I
added retry attempts to start() function in case we encounter such
error. Test for this case was added (test_the_same_port).
---
testgres/node.py | 32 ++++++++++++++++++++++++--------
tests/test_simple.py | 8 ++++++++
2 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/testgres/node.py b/testgres/node.py
index 0f1dcf98..c9b34d7b 100644
--- a/testgres/node.py
+++ b/testgres/node.py
@@ -726,14 +726,30 @@ def start(self, params=[], wait=True):
"start"
] + params # yapf: disable
- try:
- exit_status, out, error = execute_utility(_params, self.utils_log_file, verbose=True)
- if error and 'does not exist' in error:
- raise Exception
- except Exception as e:
- msg = 'Cannot start node'
- files = self._collect_special_files()
- raise_from(StartNodeException(msg, files), e)
+ startup_retries = 5
+ while True:
+ try:
+ exit_status, out, error = execute_utility(_params, self.utils_log_file, verbose=True)
+ if error and 'does not exist' in error:
+ raise Exception
+ except Exception as e:
+ files = self._collect_special_files()
+ if any(len(file) > 1 and 'Is another postmaster already '
+ 'running on port' in file[1].decode() for
+ file in files):
+ print("Detected an issue with connecting to port {0}. "
+ "Trying another port after a 5-second sleep...".format(self.port))
+ self.port = reserve_port()
+ options = {}
+ options['port'] = str(self.port)
+ self.set_auto_conf(options)
+ startup_retries -= 1
+ time.sleep(5)
+ continue
+
+ msg = 'Cannot start node'
+ raise_from(StartNodeException(msg, files), e)
+ break
self._maybe_start_logger()
self.is_started = True
return self
diff --git a/tests/test_simple.py b/tests/test_simple.py
index 8cb0d94e..ba23c3ed 100644
--- a/tests/test_simple.py
+++ b/tests/test_simple.py
@@ -1033,6 +1033,14 @@ def test_parse_pg_version(self):
# Macos
assert parse_pg_version("postgres (PostgreSQL) 14.9 (Homebrew)") == "14.9"
+ def test_the_same_port(self):
+ with get_new_node() as node:
+ node.init().start()
+
+ with get_new_node() as node2:
+ node2.port = node.port
+ node2.init().start()
+
if __name__ == '__main__':
if os.environ.get('ALT_CONFIG'):
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/postgrespro/testgres/pull/120.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy