Move broker request handling code to common helper
Change-Id: Iae2ff6362b032e644bf3ae3553792357eae4cb6d
This commit is contained in:
parent
77953fe1a6
commit
3a094a28e7
|
@ -474,6 +474,36 @@ def notify_client():
|
|||
mds_relation_joined(relid=relid, unit=unit)
|
||||
|
||||
|
||||
def handle_broker_request(relid, unit, add_legacy_response=False):
|
||||
"""Retrieve broker request from relation, process, return response data.
|
||||
|
||||
:param relid: Realtion ID
|
||||
:type relid: str
|
||||
:param unit: Remote unit name
|
||||
:type unit: str
|
||||
:param add_legacy_response: (Optional) Adds the legacy ``broker_rsp`` key
|
||||
to the response in addition to the new way.
|
||||
:type add_legacy_response: bool
|
||||
:returns: Dictionary of response data ready for use with relation_set.
|
||||
:rtype: dict
|
||||
"""
|
||||
response = {}
|
||||
if not unit:
|
||||
unit = remote_unit()
|
||||
settings = relation_get(rid=relid, unit=unit)
|
||||
if 'broker_req' in settings:
|
||||
if not ceph.is_leader():
|
||||
log("Not leader - ignoring broker request", level=DEBUG)
|
||||
else:
|
||||
rsp = process_requests(settings['broker_req'])
|
||||
unit_id = unit.replace('/', '-')
|
||||
unit_response_key = 'broker-rsp-' + unit_id
|
||||
response.update({unit_response_key: rsp})
|
||||
if add_legacy_response:
|
||||
response.update({'broker_rsp': rsp})
|
||||
return response
|
||||
|
||||
|
||||
@hooks.hook('osd-relation-joined')
|
||||
@hooks.hook('osd-relation-changed')
|
||||
def osd_relation(relid=None, unit=None):
|
||||
|
@ -489,20 +519,10 @@ def osd_relation(relid=None, unit=None):
|
|||
caps=ceph.osd_upgrade_caps),
|
||||
}
|
||||
|
||||
unit = unit or remote_unit()
|
||||
settings = relation_get(rid=relid, unit=unit)
|
||||
"""Process broker request(s)."""
|
||||
if 'broker_req' in settings:
|
||||
if ceph.is_leader():
|
||||
rsp = process_requests(settings['broker_req'])
|
||||
unit_id = unit.replace('/', '-')
|
||||
unit_response_key = 'broker-rsp-' + unit_id
|
||||
data[unit_response_key] = rsp
|
||||
else:
|
||||
log("Not leader - ignoring broker request", level=DEBUG)
|
||||
|
||||
data.update(handle_broker_request(relid, unit))
|
||||
relation_set(relation_id=relid,
|
||||
relation_settings=data)
|
||||
|
||||
# NOTE: radosgw key provision is gated on presence of OSD
|
||||
# units so ensure that any deferred hooks are processed
|
||||
notify_radosgws()
|
||||
|
@ -596,17 +616,7 @@ def radosgw_relation(relid=None, unit=None):
|
|||
# Old style global radosgw key
|
||||
data['radosgw_key'] = ceph.get_radosgw_key()
|
||||
|
||||
settings = relation_get(rid=relid, unit=unit)
|
||||
"""Process broker request(s)."""
|
||||
if 'broker_req' in settings:
|
||||
if ceph.is_leader():
|
||||
rsp = process_requests(settings['broker_req'])
|
||||
unit_id = unit.replace('/', '-')
|
||||
unit_response_key = 'broker-rsp-' + unit_id
|
||||
data[unit_response_key] = rsp
|
||||
else:
|
||||
log("Not leader - ignoring broker request", level=DEBUG)
|
||||
|
||||
data.update(handle_broker_request(relid, unit))
|
||||
relation_set(relation_id=relid, relation_settings=data)
|
||||
|
||||
|
||||
|
@ -626,17 +636,7 @@ def mds_relation_joined(relid=None, unit=None):
|
|||
'mds_key': ceph.get_mds_key(name=mds_name),
|
||||
'auth': config('auth-supported'),
|
||||
'ceph-public-address': public_addr}
|
||||
settings = relation_get(rid=relid, unit=unit)
|
||||
"""Process broker request(s)."""
|
||||
if 'broker_req' in settings:
|
||||
if ceph.is_leader():
|
||||
rsp = process_requests(settings['broker_req'])
|
||||
unit_id = unit.replace('/', '-')
|
||||
unit_response_key = 'broker-rsp-' + unit_id
|
||||
data[unit_response_key] = rsp
|
||||
else:
|
||||
log("Not leader - ignoring mds broker request", level=DEBUG)
|
||||
|
||||
data.update(handle_broker_request(relid, unit))
|
||||
relation_set(relation_id=relid, relation_settings=data)
|
||||
|
||||
|
||||
|
@ -689,24 +689,10 @@ def client_relation_changed(relid=None, unit=None):
|
|||
if ready_for_service():
|
||||
log('mon cluster in quorum and osds bootstrapped '
|
||||
'- processing client broker requests')
|
||||
if not unit:
|
||||
unit = remote_unit()
|
||||
settings = relation_get(rid=relid, unit=unit)
|
||||
if 'broker_req' in settings:
|
||||
if not ceph.is_leader():
|
||||
log("Not leader - ignoring broker request", level=DEBUG)
|
||||
else:
|
||||
rsp = process_requests(settings['broker_req'])
|
||||
unit_id = unit.replace('/', '-')
|
||||
unit_response_key = 'broker-rsp-' + unit_id
|
||||
# broker_rsp is being left for backward compatibility,
|
||||
# unit_response_key superscedes it
|
||||
data = {
|
||||
'broker_rsp': rsp,
|
||||
unit_response_key: rsp,
|
||||
}
|
||||
relation_set(relation_id=relid,
|
||||
relation_settings=data)
|
||||
data = handle_broker_request(relid, unit, add_legacy_response=True)
|
||||
if len(data):
|
||||
relation_set(relation_id=relid,
|
||||
relation_settings=data)
|
||||
|
||||
|
||||
@hooks.hook('upgrade-charm.real')
|
||||
|
|
|
@ -300,6 +300,29 @@ class RelatedUnitsTestCase(unittest.TestCase):
|
|||
'broker-rsp-glance-0': 'AOK',
|
||||
'broker_rsp': 'AOK'})
|
||||
|
||||
@patch.object(ceph_hooks, 'process_requests')
|
||||
@patch.object(ceph_hooks.ceph, 'is_leader')
|
||||
@patch.object(ceph_hooks, 'relation_get')
|
||||
@patch.object(ceph_hooks, 'remote_unit')
|
||||
def test_handle_broker_request(self, mock_remote_unit, mock_relation_get,
|
||||
mock_ceph_is_leader,
|
||||
mock_broker_process_requests):
|
||||
mock_remote_unit.return_value = 'glance/0'
|
||||
ceph_hooks.handle_broker_request('rel1', None)
|
||||
mock_remote_unit.assert_called_once_with()
|
||||
mock_relation_get.assert_called_once_with(rid='rel1', unit='glance/0')
|
||||
mock_relation_get.reset_mock()
|
||||
mock_relation_get.return_value = {'broker_req': 'FAKE-REQUEST'}
|
||||
mock_broker_process_requests.return_value = 'AOK'
|
||||
self.assertEqual(
|
||||
ceph_hooks.handle_broker_request('rel1', 'glance/0'),
|
||||
{'broker-rsp-glance-0': 'AOK'})
|
||||
mock_relation_get.assert_called_once_with(rid='rel1', unit='glance/0')
|
||||
self.assertEqual(
|
||||
ceph_hooks.handle_broker_request('rel1', 'glance/0',
|
||||
add_legacy_response=True),
|
||||
{'broker_rsp': 'AOK', 'broker-rsp-glance-0': 'AOK'})
|
||||
|
||||
|
||||
class BootstrapSourceTestCase(test_utils.CharmTestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue