mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
BUGFIX: Try all cluster members when doing pause/resume (#351)
Previously it was not possible to pause/resume unhealthy cluster.
This commit is contained in:
committed by
GitHub
parent
37b020e7a3
commit
66543f41a3
@@ -141,6 +141,7 @@ class RestApiHandler(BaseHTTPRequestHandler):
|
||||
value = json.dumps(data, separators=(',', ':'))
|
||||
if not self.server.patroni.dcs.set_config_value(value, cluster.config.index):
|
||||
return self.send_error(409)
|
||||
self.server.patroni.dcs.event.set()
|
||||
self._write_json_response(200, data)
|
||||
|
||||
@check_auth
|
||||
|
||||
+18
-5
@@ -794,13 +794,26 @@ def toggle_pause(config, cluster_name, paused):
|
||||
if cluster.is_paused() == paused:
|
||||
raise PatroniCtlException('Cluster is {0} paused'.format(paused and 'already' or 'not'))
|
||||
|
||||
r = request_patroni(cluster.leader.member, 'patch', 'config', {'pause': paused or None}, auth_header(config))
|
||||
members = []
|
||||
if cluster.leader:
|
||||
members.append(cluster.leader.member)
|
||||
members.extend([m for m in cluster.members if m.api_url and (not members or members[0].name != m.name)])
|
||||
|
||||
if r.status_code == 200:
|
||||
click.echo('Success: cluster management is {0}'.format(paused and 'paused' or 'resumed'))
|
||||
for member in members:
|
||||
try:
|
||||
r = request_patroni(member, 'patch', 'config', {'pause': paused or None}, auth_header(config))
|
||||
except Exception:
|
||||
logging.warning('Member %s is not accessible', member.name)
|
||||
continue
|
||||
|
||||
if r.status_code == 200:
|
||||
click.echo('Success: cluster management is {0}'.format(paused and 'paused' or 'resumed'))
|
||||
else:
|
||||
click.echo('Failed: {0} cluster management status code={1}, ({2})'.format(
|
||||
paused and 'pause' or 'resume', r.status_code, r.text))
|
||||
break
|
||||
else:
|
||||
click.echo('Failed: {0} cluster management status code={1}, ({2})'.format(
|
||||
paused and 'pause' or 'resume', r.status_code, r.text))
|
||||
raise PatroniCtlException('Can not find accessible cluster member')
|
||||
|
||||
|
||||
@ctl.command('pause', help='Disable auto failover')
|
||||
|
||||
@@ -439,3 +439,7 @@ class TestCtl(unittest.TestCase):
|
||||
patch('patroni.dcs.Cluster.is_paused', Mock(return_value=False)):
|
||||
result = self.runner.invoke(ctl, ['resume', 'dummy'])
|
||||
assert 'Cluster is not paused' in result.output
|
||||
|
||||
with patch('requests.patch', Mock(side_effect=Exception)):
|
||||
result = self.runner.invoke(ctl, ['resume', 'dummy'])
|
||||
assert 'Can not find accessible cluster member' in result.output
|
||||
|
||||
Reference in New Issue
Block a user