Python 3 Fix: use six.reraise
Use six.reraise to transfer exceptions across threads instead of the
old python 2 syntax.
Change-Id: Ie8d401811e12f9199a6fa88100ed2acd9385343c
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 30a6c81..beab879 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -20,6 +20,7 @@
import logging
import os
import pickle
+import six
from six.moves import queue as Queue
import re
import sys
@@ -125,12 +126,10 @@
"""An event that should be processed within the main queue run loop"""
def __init__(self):
self._wait_event = threading.Event()
- self._exception = None
- self._traceback = None
+ self._exc_info = None
- def exception(self, e, tb):
- self._exception = e
- self._traceback = tb
+ def exception(self, exc_info):
+ self._exc_info = exc_info
self._wait_event.set()
def done(self):
@@ -138,8 +137,8 @@
def wait(self, timeout=None):
self._wait_event.wait(timeout)
- if self._exception:
- raise self._exception, None, self._traceback
+ if self._exc_info:
+ six.reraise(*self._exc_info)
return self._wait_event.is_set()
@@ -1053,8 +1052,8 @@
else:
self.log.error("Unable to handle event %s" % event)
event.done()
- except Exception as e:
- event.exception(e, sys.exc_info()[2])
+ except Exception:
+ event.exception(sys.exc_info())
self.management_event_queue.task_done()
def process_result_queue(self):