From 473852e563c8666a803701c7cf855aef6fdeca7e Mon Sep 17 00:00:00 2001 From: finnball <finn.ball@codethink.co.uk> Date: Mon, 10 Sep 2018 15:21:15 +0100 Subject: [PATCH] Fixed race condition. If a job was marked as completed, it may be destroyed before it had time to update the lease state. --- buildgrid/server/scheduler.py | 5 ----- buildgrid/server/worker/bots_interface.py | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/buildgrid/server/scheduler.py b/buildgrid/server/scheduler.py index a9740384b..93b826e7f 100644 --- a/buildgrid/server/scheduler.py +++ b/buildgrid/server/scheduler.py @@ -82,13 +82,10 @@ class Scheduler: job.n_tries += 1 self.queue.appendleft(job) - self.jobs[name] = job - def job_complete(self, name, result): job = self.jobs[name] job.result = result job.update_execute_stage(ExecuteStage.COMPLETED) - self.jobs[name] = job if not job.do_not_cache and self._action_cache is not None: self._action_cache.update_action_result(job.action_digest, result) @@ -101,7 +98,6 @@ class Scheduler: def update_job_lease_state(self, name, state): job = self.jobs[name] job.lease.state = state - self.jobs[name] = job def get_job_lease(self, name): return self.jobs[name].lease @@ -118,5 +114,4 @@ class Scheduler: job.update_execute_stage(ExecuteStage.EXECUTING) job.lease = job.create_lease() job.lease.state = LeaseState.PENDING.value - self.jobs[job.name] = job yield job.lease diff --git a/buildgrid/server/worker/bots_interface.py b/buildgrid/server/worker/bots_interface.py index 3937108b9..9ebbc7dca 100644 --- a/buildgrid/server/worker/bots_interface.py +++ b/buildgrid/server/worker/bots_interface.py @@ -113,8 +113,8 @@ class BotsInterface: pass elif client_state == LeaseState.COMPLETED: - self._scheduler.job_complete(client_lease.id, client_lease.result) self._scheduler.update_job_lease_state(client_lease.id, client_lease.state) + self._scheduler.job_complete(client_lease.id, client_lease.result) return None else: -- GitLab