diff options
author | Darren Hague <d.hague@sap.com> | 2016-07-19 16:26:45 +0100 |
---|---|---|
committer | Darren Hague <d.hague@sap.com> | 2016-07-26 10:29:26 +0100 |
commit | e2e48b5d11f2bc2d67093b8a1a47f859afc03e52 (patch) | |
tree | 4370aa4215a7d863268c5206d6943938099f3fcb /ceilometermiddleware | |
parent | 7f502e2c0487273670b3817f1b3f79384e5b0d4d (diff) | |
download | ceilometermiddleware-e2e48b5d11f2bc2d67093b8a1a47f859afc03e52.tar.gz |
Fix bug in background sending
Thread's daemon property needs to be set from calling thread.
Ensure thread is alive whenever we add an event to the queue (for some reason, this is not the case for the first event when this is deployed in a swift proxy setup).
Change-Id: I9a8fad8036a0887653d2ad5f99f6b5b1b953c2db
Diffstat (limited to 'ceilometermiddleware')
-rw-r--r-- | ceilometermiddleware/swift.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/ceilometermiddleware/swift.py b/ceilometermiddleware/swift.py index f9c7605..ed679a7 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") |