Skip to content

Commit 2108c4a

Browse files
committed
Improve alternative URL description
1 parent ec6705d commit 2108c4a

File tree

2 files changed

+27
-23
lines changed

2 files changed

+27
-23
lines changed

src/cluster.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def get_member_ip(self, member_name: str) -> str:
166166
# Request info from cluster endpoint (which returns all members of the cluster).
167167
for attempt in Retrying(stop=stop_after_attempt(len(self.peers_ips) + 1)):
168168
with attempt:
169-
url = self._get_alternative_server_url(attempt)
169+
url = self._get_alternative_patroni_url(attempt)
170170
cluster_status = requests.get(f"{url}/cluster", verify=self.verify, timeout=10)
171171
for member in cluster_status.json()["members"]:
172172
if member["name"] == member_name:
@@ -187,7 +187,7 @@ def get_primary(self, unit_name_pattern=False) -> str:
187187
# Request info from cluster endpoint (which returns all members of the cluster).
188188
for attempt in Retrying(stop=stop_after_attempt(len(self.peers_ips) + 1)):
189189
with attempt:
190-
url = self._get_alternative_server_url(attempt)
190+
url = self._get_alternative_patroni_url(attempt)
191191
cluster_status = requests.get(f"{url}/cluster", verify=self.verify, timeout=10)
192192
for member in cluster_status.json()["members"]:
193193
if member["role"] == "leader":
@@ -198,8 +198,12 @@ def get_primary(self, unit_name_pattern=False) -> str:
198198
break
199199
return primary
200200

201-
def _get_alternative_server_url(self, attempt: AttemptManager) -> str:
202-
"""Get an alternative URL from another member each time."""
201+
def _get_alternative_patroni_url(self, attempt: AttemptManager) -> str:
202+
"""Get an alternative REST API URL from another member each time.
203+
204+
When the Patroni process is not running in the current unit it's needed
205+
to use a URL from another cluster member REST API to do some operations.
206+
"""
203207
if attempt.retry_state.attempt_number > 1:
204208
url = self._patroni_url.replace(
205209
self.unit_ip, list(self.peers_ips)[attempt.retry_state.attempt_number - 2]

tests/unit/test_cluster.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,48 +53,48 @@ def setUp(self):
5353
False,
5454
)
5555

56-
def test_get_alternative_server_url(self):
56+
def test_get_alternative_patroni_url(self):
5757
# Mock tenacity attempt.
5858
retry = tenacity.Retrying()
5959
retry_state = tenacity.RetryCallState(retry, None, None, None)
6060
attempt = tenacity.AttemptManager(retry_state)
6161

6262
# Test the first URL that is returned (it should have the current unit IP).
63-
url = self.patroni._get_alternative_server_url(attempt)
63+
url = self.patroni._get_alternative_patroni_url(attempt)
6464
self.assertEqual(url, f"http://{self.patroni.unit_ip}:8008")
6565

6666
# Test returning the other servers URLs.
6767
for attempt_number in range(
6868
attempt.retry_state.attempt_number + 1, len(self.peers_ips) + 2
6969
):
7070
attempt.retry_state.attempt_number = attempt_number
71-
url = self.patroni._get_alternative_server_url(attempt)
71+
url = self.patroni._get_alternative_patroni_url(attempt)
7272
self.assertIn(url.split("http://")[1].split(":8008")[0], self.peers_ips)
7373

7474
@mock.patch("requests.get", side_effect=mocked_requests_get)
75-
@patch("charm.Patroni._get_alternative_server_url")
76-
def test_get_member_ip(self, _get_alternative_server_url, _get):
75+
@patch("charm.Patroni._get_alternative_patroni_url")
76+
def test_get_member_ip(self, _get_alternative_patroni_url, _get):
7777
# Test error on trying to get the member IP.
78-
_get_alternative_server_url.side_effect = "http://server2"
78+
_get_alternative_patroni_url.side_effect = "http://server2"
7979
with self.assertRaises(tenacity.RetryError):
8080
self.patroni.get_member_ip(self.patroni.member_name)
8181

82-
# Test using an alternative server URL.
83-
_get_alternative_server_url.side_effect = [
82+
# Test using an alternative Patroni URL.
83+
_get_alternative_patroni_url.side_effect = [
8484
"http://server3",
8585
"http://server2",
8686
"http://server1",
8787
]
8888
ip = self.patroni.get_member_ip(self.patroni.member_name)
8989
self.assertEqual(ip, "1.1.1.1")
9090

91-
# Test using the current server URL.
92-
_get_alternative_server_url.side_effect = ["http://server1"]
91+
# Test using the current Patroni URL.
92+
_get_alternative_patroni_url.side_effect = ["http://server1"]
9393
ip = self.patroni.get_member_ip(self.patroni.member_name)
9494
self.assertEqual(ip, "1.1.1.1")
9595

9696
# Test when not having that specific member in the cluster.
97-
_get_alternative_server_url.side_effect = ["http://server1"]
97+
_get_alternative_patroni_url.side_effect = ["http://server1"]
9898
ip = self.patroni.get_member_ip("other-member-name")
9999
self.assertIsNone(ip)
100100

@@ -109,29 +109,29 @@ def test_get_postgresql_version(self, _from_system):
109109
self.assertEqual(version, "12")
110110

111111
@mock.patch("requests.get", side_effect=mocked_requests_get)
112-
@patch("charm.Patroni._get_alternative_server_url")
113-
def test_get_primary(self, _get_alternative_server_url, _get):
112+
@patch("charm.Patroni._get_alternative_patroni_url")
113+
def test_get_primary(self, _get_alternative_patroni_url, _get):
114114
# Test error on trying to get the member IP.
115-
_get_alternative_server_url.side_effect = "http://server2"
115+
_get_alternative_patroni_url.side_effect = "http://server2"
116116
with self.assertRaises(tenacity.RetryError):
117117
self.patroni.get_primary(self.patroni.member_name)
118118

119-
# Test using an alternative server URL.
120-
_get_alternative_server_url.side_effect = [
119+
# Test using an alternative Patroni URL.
120+
_get_alternative_patroni_url.side_effect = [
121121
"http://server3",
122122
"http://server2",
123123
"http://server1",
124124
]
125125
primary = self.patroni.get_primary()
126126
self.assertEqual(primary, "postgresql-0")
127127

128-
# Test using the current server URL.
129-
_get_alternative_server_url.side_effect = ["http://server1"]
128+
# Test using the current Patroni URL.
129+
_get_alternative_patroni_url.side_effect = ["http://server1"]
130130
primary = self.patroni.get_primary()
131131
self.assertEqual(primary, "postgresql-0")
132132

133133
# Test requesting the primary in the unit name pattern.
134-
_get_alternative_server_url.side_effect = ["http://server1"]
134+
_get_alternative_patroni_url.side_effect = ["http://server1"]
135135
primary = self.patroni.get_primary(unit_name_pattern=True)
136136
self.assertEqual(primary, "postgresql/0")
137137

0 commit comments

Comments
 (0)