diff --git a/zuul/executor/client.py b/zuul/executor/client.py index ec0a21bd1d..bc05babd95 100644 --- a/zuul/executor/client.py +++ b/zuul/executor/client.py @@ -488,11 +488,9 @@ class ExecutorClient(object): build.worker.updateFromData(data) build.__gearman_worker = build.worker.name - if 'paused' in data and build.paused != data['paused']: - build.paused = data['paused'] - if build.paused: - result_data = data.get('data', {}) - self.sched.onBuildPaused(build, result_data) + if 'paused' in data: + result_data = data.get('data', {}) + self.sched.onBuildPaused(build, result_data) if not started: self.log.info("Build %s started" % job) diff --git a/zuul/scheduler.py b/zuul/scheduler.py index 383f77cc6e..36788fe94c 100644 --- a/zuul/scheduler.py +++ b/zuul/scheduler.py @@ -1445,6 +1445,11 @@ class Scheduler(threading.Thread): def _doBuildPausedEvent(self, event): build = event.build + + # Setting paused is deferred to event processing stage to avoid a race + # with child job skipping. + build.paused = True + log = get_annotated_logger(self.log, build.zuul_event_id) if build.build_set is not build.build_set.item.current_build_set: log.warning("Build %s is not in the current build set", build)