diff options
-rw-r--r-- | ceilometermiddleware/swift.py | 18 | ||||
-rw-r--r-- | setup.cfg | 4 | ||||
-rw-r--r-- | tox.ini | 2 |
3 files changed, 15 insertions, 9 deletions
diff --git a/ceilometermiddleware/swift.py b/ceilometermiddleware/swift.py index e6baa81..d9106d2 100644 --- a/ceilometermiddleware/swift.py +++ b/ceilometermiddleware/swift.py @@ -150,9 +150,7 @@ class Swift(object): if Swift.event_queue is None: send_queue_size = int(conf.get('send_queue_size', 1000)) Swift.event_queue = queue.Queue(send_queue_size) - Swift.event_sender = SendEventThread(self._notifier) - Swift.event_sender.start() - _LOG.debug('Started sender thread') + self.start_sender_thread() Swift.threadLock.release() def __call__(self, env, start_response): @@ -280,12 +278,21 @@ class Swift(object): if self.nonblocking_notify: try: Swift.event_queue.put(event, False) - _LOG.debug('Event %s added to send queue', event.id) + if not Swift.event_sender.is_alive(): + Swift.threadLock.acquire() + self.start_sender_thread() + Swift.threadLock.release() + except queue.Full: _LOG.warning('Send queue FULL: Event %s not added', event.id) else: Swift.send_notification(self._notifier, event) + def start_sender_thread(self): + Swift.event_sender = SendEventThread(self._notifier) + Swift.event_sender.daemon = True + Swift.event_sender.start() + @staticmethod def send_notification(notifier, event): notifier.info({}, 'objectstore.http.request', event.as_dict()) @@ -296,7 +303,6 @@ class SendEventThread(threading.Thread): def __init__(self, notifier): super(SendEventThread, self).__init__() self.notifier = notifier - self.daemon = True def run(self): """Send events without blocking swift proxy.""" @@ -307,7 +313,7 @@ class SendEventThread(threading.Thread): _LOG.debug('Got event %s from queue - now send it', event.id) Swift.send_notification(self.notifier, event) _LOG.debug('Event %s sent.', event.id) - except Exception: + except BaseException: _LOG.exception("SendEventThread loop exception") @@ -5,7 +5,7 @@ description-file = README.rst author = OpenStack author-email = openstack-dev@lists.openstack.org -home-page = http://www.openstack.org/ +home-page = http://docs.openstack.org/developer/ceilometermiddleware classifier = Environment :: OpenStack Intended Audience :: Information Technology @@ -16,8 +16,8 @@ classifier = Programming Language :: Python :: 2 Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 - Programming Language :: Python :: 3.3 Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 [files] packages = @@ -1,6 +1,6 @@ [tox] minversion = 1.8 -envlist = py33,py34,py27,pypy,pep8 +envlist = py34,py35,py27,pypy,pep8 skipsdist = True [testenv] |