summaryrefslogtreecommitdiff
path: root/ceilometermiddleware/tests/test_swift.py
diff options
context:
space:
mode:
authorDarren Hague <d.hague@sap.com>2016-06-13 15:48:30 +0100
committerDarren Hague <d.hague@sap.com>2016-07-11 16:37:13 +0100
commitc7cba1fe02e03744e5b45e54c84f3e971b450698 (patch)
tree52e4dde73718f1e077288ea82c15144a7e2f0139 /ceilometermiddleware/tests/test_swift.py
parentc962fedb851c4bdc36f43b22d55efc82ca1d0dfd (diff)
downloadceilometermiddleware-c7cba1fe02e03744e5b45e54c84f3e971b450698.tar.gz
Add background thread notifier sending ability
Add ability to hand off notifier event sending to a queue processed by a background thread so as not to block swift proxy. This fixes an issue whereby if ceilometer's RabbitMQ went down then the swift proxy would wait for it to come back up, effectively coupling Swift's availabiilty to that of Ceilometer's RabbitMQ. Background sending is activated by setting config item 'nonblocking_notify' to True. Queue size defaults to 1000, which can be overridden by setting config item 'send_queue_size'. If the queue is full, new events are discarded. Change-Id: I3da2b88b2bc9b7fd8c572a0085fa1d78c4f54701
Diffstat (limited to 'ceilometermiddleware/tests/test_swift.py')
-rw-r--r--ceilometermiddleware/tests/test_swift.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/ceilometermiddleware/tests/test_swift.py b/ceilometermiddleware/tests/test_swift.py
index 2e7287a..4c0f43e 100644
--- a/ceilometermiddleware/tests/test_swift.py
+++ b/ceilometermiddleware/tests/test_swift.py
@@ -20,6 +20,7 @@ import six
from ceilometermiddleware import swift
from ceilometermiddleware.tests import base as tests_base
+from threading import Event
class FakeApp(object):
@@ -90,6 +91,31 @@ class TestSwift(tests_base.TestCase):
self.assertEqual('obj', metadata['object'])
self.assertEqual('get', data[2]['target']['action'])
+ def test_get_background(self):
+ notified = Event()
+ app = swift.Swift(FakeApp(),
+ {"nonblocking_notify": "True",
+ "send_queue_size": "1"})
+ req = FakeRequest('/1.0/account/container/obj',
+ environ={'REQUEST_METHOD': 'GET'})
+ with mock.patch('oslo_messaging.Notifier.info',
+ side_effect=lambda *args, **kwargs: notified.set()
+ ) as notify:
+ resp = app(req.environ, self.start_response)
+ self.assertEqual(["This string is 28 bytes long"], list(resp))
+ notified.wait()
+ self.assertEqual(1, len(notify.call_args_list))
+ data = notify.call_args_list[0][0]
+ self.assertEqual('objectstore.http.request', data[1])
+ self.assertEqual(28, data[2]['measurements'][0]['result'])
+ self.assertEqual('storage.objects.outgoing.bytes',
+ data[2]['measurements'][0]['metric']['name'])
+ metadata = data[2]['target']['metadata']
+ self.assertEqual('1.0', metadata['version'])
+ self.assertEqual('container', metadata['container'])
+ self.assertEqual('obj', metadata['object'])
+ self.assertEqual('get', data[2]['target']['action'])
+
def test_put(self):
app = swift.Swift(FakeApp(body=['']), {})
req = FakeRequest(