Skip to content

Commit

Permalink
Merge pull request #7204 from p12tic/worker-state-race
Browse files Browse the repository at this point in the history
worker: Fix race condition in worker state handling
  • Loading branch information
p12tic committed Nov 6, 2023
2 parents e1bf966 + 08dc419 commit 758979c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
18 changes: 16 additions & 2 deletions master/buildbot/worker/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from buildbot.process.properties import Properties
from buildbot.util import Notifier
from buildbot.util import bytes2unicode
from buildbot.util import deferwaiter
from buildbot.util import service


Expand Down Expand Up @@ -56,6 +57,10 @@ class AbstractWorker(service.BuildbotService):
# override to True if isCompatibleWithBuild may return False
builds_may_be_incompatible = False

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._deferwaiter = deferwaiter.DeferWaiter()

def checkConfig(self, name, password, max_builds=None,
notify_on_missing=None,
missing_timeout=None,
Expand Down Expand Up @@ -365,6 +370,7 @@ def stopService(self):
yield self.disconnect()
yield self.waitForCompleteShutdown()

yield self._deferwaiter.wait()
yield super().stopService()

def isCompatibleWithBuild(self, build_props):
Expand Down Expand Up @@ -664,10 +670,18 @@ def maybeShutdown(self):
d.addErrback(log.err, 'error while shutting down worker')

def _update_paused(self):
self.master.data.updates.set_worker_paused(self.workerid, self._paused, self._pause_reason)
self._deferwaiter.add(
self.master.data.updates.set_worker_paused(
self.workerid,
self._paused,
self._pause_reason
)
)

def _update_graceful(self):
self.master.data.updates.set_worker_graceful(self.workerid, self._graceful)
self._deferwaiter.add(
self.master.data.updates.set_worker_graceful(self.workerid, self._graceful)
)

def pause(self, reason):
"""Stop running new builds on the worker."""
Expand Down
2 changes: 0 additions & 2 deletions master/buildbot/worker/latent.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
from buildbot.interfaces import LatentWorkerFailedToSubstantiate
from buildbot.interfaces import LatentWorkerSubstantiatiationCancelled
from buildbot.util import Notifier
from buildbot.util import deferwaiter
from buildbot.worker.base import AbstractWorker


Expand Down Expand Up @@ -162,7 +161,6 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._substantiation_notifier = Notifier()
self._start_stop_lock = defer.DeferredLock()
self._deferwaiter = deferwaiter.DeferWaiter()
self._check_instance_timer = None

def checkConfig(self, name, password,
Expand Down

0 comments on commit 758979c

Please sign in to comment.