Allow checking if notifier is enabled
Generating the payload of a notificatiton might be expensive due to database access. This expensive step is unnecessary if the notification driver is set to noop because it means that the generated payload will not be sent. This patch makes it possible for the user of the notifier to check if the notifier will emit any notification before the payload is generated. Cinder already implemented similar behavior in I77f655d3ef90088ce71304da5d4ea7b543991e90 and nova also plans to do it in I3e6741d59df49e1e58409314008c2ed609fdedc1 Change-Id: Ib992f5c20fef85224fb00823e1d8d9c6cff19bec
This commit is contained in:
parent
104c1da138
commit
ed149bae81
@ -415,6 +415,14 @@ class Notifier(object):
|
||||
"""
|
||||
self._notify(ctxt, event_type, payload, 'SAMPLE')
|
||||
|
||||
def is_enabled(self):
|
||||
"""Check if the notifier will emit notifications anywhere.
|
||||
|
||||
:return: false if the driver of the notifier is set only to noop, true
|
||||
otherwise
|
||||
"""
|
||||
return self._driver_mgr.names() != ['noop']
|
||||
|
||||
|
||||
class _SubNotifier(Notifier):
|
||||
|
||||
|
@ -226,6 +226,8 @@ class TestMessagingNotifier(test_utils.BaseTestCase):
|
||||
uuid.uuid4.assert_called_once_with()
|
||||
transport._send_notification.assert_has_calls(calls, any_order=True)
|
||||
|
||||
self.assertTrue(notifier.is_enabled())
|
||||
|
||||
TestMessagingNotifier.generate_scenarios()
|
||||
|
||||
|
||||
@ -337,6 +339,8 @@ class TestLogNotifier(test_utils.BaseTestCase):
|
||||
'notification.test.notify')
|
||||
logger.info.assert_called_once_with(JsonMessageMatcher(message))
|
||||
|
||||
self.assertTrue(notifier.is_enabled())
|
||||
|
||||
def test_sample_priority(self):
|
||||
# Ensure logger drops sample-level notifications.
|
||||
driver = _impl_log.LogDriver(None, None, None)
|
||||
@ -379,6 +383,8 @@ class TestRoutingNotifier(test_utils.BaseTestCase):
|
||||
self.notifier = oslo_messaging.Notifier(transport)
|
||||
self.router = self.notifier._driver_mgr['routing'].obj
|
||||
|
||||
self.assertTrue(self.notifier.is_enabled())
|
||||
|
||||
def _fake_extension_manager(self, ext):
|
||||
return extension.ExtensionManager.make_test_instance(
|
||||
[extension.Extension('test', None, None, ext), ])
|
||||
@ -593,3 +599,16 @@ group_1:
|
||||
{}, mock.ANY, 'INFO', None)
|
||||
rpc2_driver.notify.assert_called_once_with(
|
||||
{}, mock.ANY, 'INFO', None)
|
||||
|
||||
|
||||
class TestNoOpNotifier(test_utils.BaseTestCase):
|
||||
|
||||
def test_notifier(self):
|
||||
self.config(driver=['noop'],
|
||||
group='oslo_messaging_notifications')
|
||||
|
||||
transport = _FakeTransport(self.conf)
|
||||
|
||||
notifier = oslo_messaging.Notifier(transport, 'test.localhost')
|
||||
|
||||
self.assertFalse(notifier.is_enabled())
|
||||
|
Loading…
x
Reference in New Issue
Block a user