Skip to content

Commit 40af5ae

Browse files
authored
remove init replication code from setup, unit-tests and docs (#258)
1 parent 136db8a commit 40af5ae

File tree

4 files changed

+3
-153
lines changed

4 files changed

+3
-153
lines changed

cterasdk/core/enum.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,11 @@ class SetupWizardStage:
239239
240240
:ivar str Server: Initializing Server
241241
:ivar str Portal: Initializing Portal
242-
:ivar str Replication: Setting Database Replication
243242
:ivar str Restart: Restarting Server
244243
:ivar str Finish: Finished
245244
"""
246245
Server = "initServer"
247246
Portal = "initPortal"
248-
Replication = "setReplication"
249247
Restart = "restartingServer"
250248
Finish = "finish"
251249

cterasdk/core/setup.py

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import logging
22
import time
3-
import re
43

54
from .base_command import BaseCommand
65
from .enum import ServerMode, SetupWizardStage, SetupWizardStatus, SlaveAuthenticaionMethod
@@ -101,66 +100,9 @@ def init_application_server(self, ipaddr, secret):
101100
:param str secret: A password or a PEM-encoded private key
102101
"""
103102
self._init_slave(ipaddr, secret)
104-
if self.stage == SetupWizardStage.Replication:
105-
logging.getLogger('cterasdk.core').info('Initializing an Application Server. %s', {'host': ipaddr})
106-
params = Setup._init_replication_param()
107-
self._init_role(params)
103+
logging.getLogger('cterasdk.core').info('Initializing Application Server. %s', {'host': ipaddr})
108104
self._core.startup.wait()
109105

110-
def init_replication_server(self, ipaddr, secret, replicate_from=None):
111-
"""
112-
Initialize a CTERA Portal Database Replication Server.
113-
114-
:param str ipaddr: The CTERA Portal master server IP address
115-
:param str secret: A password or a PEM-encoded private key
116-
:param str replicate_from: The name of a CTERA Portal server to replicate from
117-
"""
118-
self._init_slave(ipaddr, secret)
119-
if self.stage == SetupWizardStage.Replication:
120-
logging.getLogger('cterasdk.core').info('Initializing a Replication Database Server. %s',
121-
{'host': ipaddr, 'replicate_from': replicate_from})
122-
logging.getLogger('cterasdk.core').debug('Retrieving database replication candidates.')
123-
replication_candidates = {re.search('([^/]+$)', k).group(0): k for k in self.get_replication_candidates()}
124-
if replication_candidates:
125-
if replicate_from is None and len(replication_candidates) == 1:
126-
server = next(iter(replication_candidates.values()))
127-
else:
128-
server = replication_candidates.get(replicate_from)
129-
if server:
130-
logging.getLogger('cterasdk.core').debug('Found server in replication candidates. %s', {'server': replicate_from})
131-
params = Setup._init_replication_param(server)
132-
self._init_role(params)
133-
else:
134-
logging.getLogger('cterasdk.core').error('Could not find database replication target. %s', {
135-
'target': replicate_from,
136-
'options': replication_candidates
137-
})
138-
raise CTERAException('Could not find database replication target.',
139-
None, target=replicate_from, options=replication_candidates)
140-
else:
141-
logging.getLogger('cterasdk.core').error('Could not find database replication candidates.')
142-
self._core.startup.wait()
143-
144-
def _init_role(self, params):
145-
response = self._core.ctera.execute('/public/servers', 'setReplication', params)
146-
status = SetupWizardStatusMonitor(self._core).wait(SetupWizardStage.Replication)
147-
self.stage = status.wizard
148-
return response
149-
150-
def get_replication_candidates(self):
151-
return self._core.ctera.execute('/public/servers', 'getReplicaitonCandidates', None)
152-
153-
@staticmethod
154-
def _init_replication_param(replicate_from=None):
155-
params = Object()
156-
params._classname = 'SetReplicationParam' # pylint: disable=protected-access
157-
if replicate_from:
158-
params.enabledReplicationParam = Object()
159-
params.enabledReplicationParam._classname = 'EnabledReplicationParam' # pylint: disable=protected-access
160-
params.enabledReplicationParam.replicationOf = replicate_from
161-
params.enabledReplicationParam.restartDB = True
162-
return params
163-
164106
@staticmethod
165107
def _init_server_params(mode):
166108
params = Object()

docs/source/UserGuides/Portal/Administration.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,9 +1789,6 @@ Setup
17891789
master_pk = """...PEM-encoded private key..."""
17901790
admin.setup.init_application_server(master_ipaddr, master_pk)
17911791
1792-
.. automethod:: cterasdk.core.setup.Setup.init_replication_server
1793-
:noindex:
1794-
17951792
17961793
Miscellaneous
17971794
=============

tests/ut/test_core_setup.py

Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from unittest import mock
22

33
from cterasdk import toxmlstr
4-
from cterasdk import exceptions
54
from cterasdk.core import setup
65
from cterasdk.core.enum import ServerMode, SlaveAuthenticaionMethod, SetupWizardStage, SetupWizardStatus
76
from cterasdk.common import Object
@@ -20,7 +19,6 @@ def setUp(self):
2019
self._admin_last_name = 'Account'
2120
self._admin_password = 'password'
2221
self._domain = 'ctera.me'
23-
self._replication_candidates = ['objs/6//Server/server', 'objs/7//Server/server1', 'objs/8//Server/server3']
2422
self._replicate_from = 'server1'
2523

2624
def test_init_master(self):
@@ -91,7 +89,6 @@ def _test_init_application_server_success(self, authentication_method):
9189
self._init_setup()
9290
self._global_admin.ctera.get = mock.MagicMock(side_effect=[
9391
TestCoreSetup._generate_status_response(SetupWizardStage.Server, SetupWizardStatus.NA, ''),
94-
TestCoreSetup._generate_status_response(SetupWizardStage.Replication, SetupWizardStatus.NA, ''),
9592
TestCoreSetup._generate_status_response(SetupWizardStage.Finish, SetupWizardStatus.NA, '')
9693
])
9794
execute_side_effect = TestCoreSetup._create_init_slave_execute_function(authentication_method)
@@ -103,21 +100,16 @@ def _test_init_application_server_success(self, authentication_method):
103100
setup_status_url = '/setup/status'
104101
self._global_admin.ctera.get.assert_has_calls(
105102
[
106-
mock.call(setup_status_url),
107103
mock.call(setup_status_url),
108104
mock.call(setup_status_url)
109105
]
110106
)
111107
self._global_admin.ctera.execute.assert_has_calls(
112108
[
113109
mock.call('/setup/authenticaionMethod',
114-
'askMasterForSlaveAuthenticaionMethod', self._master_ipaddr),
115-
mock.call('/public/servers', 'setReplication', mock.ANY)
110+
'askMasterForSlaveAuthenticaionMethod', self._master_ipaddr)
116111
]
117112
)
118-
expected_param = TestCoreSetup._get_init_replication_param()
119-
actual_param = self._global_admin.ctera.execute.call_args_list[1][0][2] # Access setReplication call param
120-
self._assert_equal_objects(actual_param, expected_param)
121113

122114
params = TestCoreSetup._get_init_server_params(ServerMode.Slave, authentication_method, self._master_ipaddr, self._master_secret)
123115
expected_params = TestCoreSetup._get_form_data(params)
@@ -127,70 +119,6 @@ def _test_init_application_server_success(self, authentication_method):
127119
self._assert_equal_objects(actual_param[key], expected_params[key])
128120
mock_startup_wait.assert_called_once()
129121

130-
def test_init_replication_server_success_password(self):
131-
self._test_init_replication_server_success(SlaveAuthenticaionMethod.Password)
132-
133-
def test_init_replication_server_success_pk(self):
134-
self._test_init_replication_server_success(SlaveAuthenticaionMethod.PrivateKey)
135-
136-
def _test_init_replication_server_success(self, authentication_method):
137-
self.patch_call("time.sleep")
138-
self._init_setup()
139-
self._global_admin.ctera.get = mock.MagicMock(side_effect=[
140-
TestCoreSetup._generate_status_response(SetupWizardStage.Server, SetupWizardStatus.NA, ''),
141-
TestCoreSetup._generate_status_response(SetupWizardStage.Replication, SetupWizardStatus.NA, ''),
142-
TestCoreSetup._generate_status_response(SetupWizardStage.Finish, SetupWizardStatus.NA, '')
143-
])
144-
candidates = self._replication_candidates
145-
execute_side_effect = TestCoreSetup._create_init_slave_execute_function(authentication_method, candidates)
146-
self._global_admin.ctera.execute = mock.MagicMock(side_effect=execute_side_effect)
147-
mock_startup_wait = self.patch_call("cterasdk.core.startup.Startup.wait")
148-
149-
setup.Setup(self._global_admin).init_replication_server(self._master_ipaddr, self._master_secret, self._replicate_from)
150-
151-
setup_status_url = '/setup/status'
152-
self._global_admin.ctera.get.assert_has_calls(
153-
[
154-
mock.call(setup_status_url),
155-
mock.call(setup_status_url),
156-
mock.call(setup_status_url)
157-
]
158-
)
159-
self._global_admin.ctera.execute.assert_has_calls(
160-
[
161-
mock.call('/setup/authenticaionMethod',
162-
'askMasterForSlaveAuthenticaionMethod', self._master_ipaddr),
163-
mock.call('/public/servers', 'getReplicaitonCandidates', None),
164-
mock.call('/public/servers', 'setReplication', mock.ANY)
165-
]
166-
)
167-
expected_param = TestCoreSetup._get_init_replication_param(self._replication_candidates[1])
168-
actual_param = self._global_admin.ctera.execute.call_args_list[2][0][2] # Access setReplication call param
169-
self._assert_equal_objects(actual_param, expected_param)
170-
171-
params = TestCoreSetup._get_init_server_params(ServerMode.Slave, authentication_method, self._master_ipaddr, self._master_secret)
172-
expected_params = TestCoreSetup._get_form_data(params)
173-
actual_param = TestCoreSetup._format_actual_parameters_to_dict(self._global_admin.ctera.multipart.call_args[0][1])
174-
self._global_admin.ctera.multipart.assert_called_once_with('/setup', mock.ANY)
175-
for key in actual_param.keys(): # pylint: disable=consider-using-dict-items, consider-iterating-dictionary
176-
self._assert_equal_objects(actual_param[key], expected_params[key])
177-
mock_startup_wait.assert_called_once()
178-
179-
def test_no_replication_target(self):
180-
self._init_setup()
181-
get_function = mock.MagicMock(side_effect=[
182-
TestCoreSetup._generate_status_response(SetupWizardStage.Replication, SetupWizardStatus.NA, '')
183-
])
184-
candidates = ['objs/8//Server/server4']
185-
execute_side_effect_function = TestCoreSetup._create_init_slave_execute_function(SlaveAuthenticaionMethod.Password, candidates)
186-
execute_function = mock.MagicMock(side_effect=execute_side_effect_function)
187-
self._global_admin.ctera.get = get_function
188-
self._global_admin.ctera.execute = execute_function
189-
190-
with self.assertRaises(exceptions.CTERAException) as error:
191-
setup.Setup(self._global_admin).init_replication_server(self._master_ipaddr, self._master_secret, self._replicate_from)
192-
self.assertEqual('Could not find database replication target.', error.exception.message)
193-
194122
def _get_init_portal_param(self):
195123
params = Object()
196124
params._classname = 'InitParams' # pylint: disable=protected-access
@@ -225,15 +153,11 @@ def default_settings():
225153
return settings
226154

227155
@staticmethod
228-
def _create_init_slave_execute_function(authentication_method, replication_candidates=None):
156+
def _create_init_slave_execute_function(authentication_method):
229157
def _get_init_slave_execute_function(path, name, param, use_file_url=False):
230158
# pylint: disable=unused-argument
231159
if name == 'askMasterForSlaveAuthenticaionMethod':
232160
return authentication_method
233-
if name == 'getReplicaitonCandidates':
234-
return replication_candidates
235-
if name == 'setReplication':
236-
return 'Success'
237161
return None
238162
return _get_init_slave_execute_function
239163

@@ -267,14 +191,3 @@ def _get_init_server_params(mode, authentication_method=None, master_ipaddr=None
267191
elif authentication_method == SlaveAuthenticaionMethod.PrivateKey:
268192
params.slaveSettings.masterKey = master_secret
269193
return params
270-
271-
@staticmethod
272-
def _get_init_replication_param(replicate_from=None):
273-
params = Object()
274-
params._classname = 'SetReplicationParam' # pylint: disable=protected-access
275-
if replicate_from:
276-
params.enabledReplicationParam = Object()
277-
params.enabledReplicationParam._classname = 'EnabledReplicationParam' # pylint: disable=protected-access
278-
params.enabledReplicationParam.replicationOf = replicate_from
279-
params.enabledReplicationParam.restartDB = True
280-
return params

0 commit comments

Comments
 (0)