mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
More code-review related fixes
- Add missing delete_cluster. - Simplify parts of the code by removing exception handlers where they are not needed. - Fix typos.
This commit is contained in:
+7
-12
@@ -661,11 +661,8 @@ def touch_member(config, dcs):
|
||||
'state': p.state,
|
||||
'role': p.role
|
||||
}
|
||||
try:
|
||||
dcs.touch_member(json.dumps(data, separators=(',', ':')), permanent=True)
|
||||
except DCSError:
|
||||
return False
|
||||
return True
|
||||
|
||||
return dcs.touch_member(json.dumps(data, separators=(',', ':')), permanent=True)
|
||||
|
||||
|
||||
def set_defaults(config, cluster_name):
|
||||
@@ -694,11 +691,9 @@ def scaffold(cluster_name, config_file, dcs, sysid):
|
||||
|
||||
set_defaults(config, cluster_name)
|
||||
|
||||
try:
|
||||
# make sure the leader keys will never expire
|
||||
if not (touch_member(config, dcs) and dcs.attempt_to_acquire_leader(permanent=True)):
|
||||
# we did initialize this cluster, but failed to write the leader or member keys, wipe it down completely.
|
||||
raise PatroniCtlException("Unable to install permanent leader for cluster {0}".format(cluster_name))
|
||||
except:
|
||||
raise
|
||||
# make sure the leader keys will never expire
|
||||
if not (touch_member(config, dcs) and dcs.attempt_to_acquire_leader(permanent=True)):
|
||||
# we did initialize this cluster, but failed to write the leader or member keys, wipe it down completely.
|
||||
dcs.delete_cluster()
|
||||
raise PatroniCtlException("Unable to install permanent leader for cluster {0}".format(cluster_name))
|
||||
click.echo("Cluster {0} has been created successfully".format(cluster_name))
|
||||
|
||||
@@ -316,7 +316,7 @@ class AbstractDCS(object):
|
||||
def attempt_to_acquire_leader(self, permanent=False):
|
||||
"""Attempt to acquire leader lock
|
||||
This method should create `/leader` key with value=`~self._name`
|
||||
:param permanent: if set to `!True`, the leader key will never expie. Used in patronictl for the external master
|
||||
:param permanent: if set to `!True`, the leader key will never expire. Used in patronictl for the external master
|
||||
:returns: `!True` if key has been created successfully.
|
||||
|
||||
Key must be created atomically. In case if key already exists it should not be
|
||||
|
||||
+4
-5
@@ -10,8 +10,7 @@ from six.moves import BaseHTTPServer
|
||||
from click.testing import CliRunner
|
||||
from mock import patch, Mock
|
||||
from patroni.ctl import ctl, members, store_config, load_config, output_members, post_patroni, get_dcs, parse_dcs, \
|
||||
wait_for_leader, get_all_members, get_any_member, get_cursor, query_member, configure, touch_member, set_defaults,\
|
||||
PatroniCtlException
|
||||
wait_for_leader, get_all_members, get_any_member, get_cursor, query_member, configure, PatroniCtlException
|
||||
|
||||
from patroni.exceptions import DCSError
|
||||
from psycopg2 import OperationalError
|
||||
@@ -316,9 +315,9 @@ class TestCtl(unittest.TestCase):
|
||||
|
||||
with patch.object(self.e, 'initialize', return_value=False):
|
||||
result = self.runner.invoke(ctl, ['scaffold', 'alpha'])
|
||||
assert result.exit_code == 1
|
||||
assert result.exception
|
||||
|
||||
with patch.object(mock_get_dcs.return_value, 'touch_member', Mock(side_effect=DCSError("foo"))):
|
||||
with patch.object(mock_get_dcs.return_value, 'touch_member', Mock(return_value=False)):
|
||||
result = self.runner.invoke(ctl, ['scaffold', 'alpha'])
|
||||
assert result.exception
|
||||
|
||||
@@ -327,4 +326,4 @@ class TestCtl(unittest.TestCase):
|
||||
|
||||
mock_get_dcs.return_value.get_cluster = get_cluster_initialized_with_leader
|
||||
result = self.runner.invoke(ctl, ['scaffold', 'alpha'])
|
||||
assert result.exit_code == 1
|
||||
assert result.exception
|
||||
|
||||
Reference in New Issue
Block a user