diff options
author | Zuul <zuul@review.opendev.org> | 2022-10-13 18:52:53 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-10-13 18:52:53 +0000 |
commit | ea8b7a8033f8cfa1dec2d9652a70f6435b9e9626 (patch) | |
tree | 28e2f0c200eaa2f27f7864c8bf33b5a28a151944 /zuul | |
parent | 763bcbf7854b89c68c88f63bde0954278ae22aaa (diff) | |
parent | 8b2065c5bb2774ef5d892b528aa0ecb156a4b98c (diff) | |
download | zuul-ea8b7a8033f8cfa1dec2d9652a70f6435b9e9626.tar.gz |
Merge "Fix shutdown race in timer driver"
Diffstat (limited to 'zuul')
-rw-r--r-- | zuul/driver/timer/__init__.py | 2 | ||||
-rw-r--r-- | zuul/scheduler.py | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/zuul/driver/timer/__init__.py b/zuul/driver/timer/__init__.py index 6eec5da7c..f415c6012 100644 --- a/zuul/driver/timer/__init__.py +++ b/zuul/driver/timer/__init__.py @@ -80,6 +80,8 @@ class TimerDriver(Driver, TriggerInterface): def reconfigure(self, tenant): self._removeJobs(tenant) + if self.stopped: + return if not self.apsched: # Handle possible reuse of the driver without connection objects. self.apsched = BackgroundScheduler() diff --git a/zuul/scheduler.py b/zuul/scheduler.py index d37ef9539..3377fa872 100644 --- a/zuul/scheduler.py +++ b/zuul/scheduler.py @@ -367,15 +367,17 @@ class Scheduler(threading.Thread): self.log.debug("Stopping nodepool") self.nodepool.stop() self.log.debug("Stopping connections") - # Connections may be waiting on the primed event + # Connections and layout update may be waiting on the primed event self.primed_event.set() + # Layout update can reconfigure connections, so make sure + # layout update is stopped first. + self.log.debug("Waiting for layout update thread") + self.layout_update_event.set() + self.layout_update_thread.join() self.stopConnections() self.log.debug("Stopping stats thread") self.stats_election.cancel() self.stats_thread.join() - self.log.debug("Waiting for layout update thread") - self.layout_update_event.set() - self.layout_update_thread.join() self.stopRepl() self._command_running = False self.log.debug("Stopping command socket") |