diff --git a/buildman/component/buildcomponent.py b/buildman/component/buildcomponent.py index c5fe8a24a..1d3ee078b 100644 --- a/buildman/component/buildcomponent.py +++ b/buildman/component/buildcomponent.py @@ -17,6 +17,7 @@ from buildman.jobutil.workererror import WorkerError from data.database import BUILD_PHASE HEARTBEAT_DELTA = datetime.timedelta(seconds=30) +BUILD_HEARTBEAT_DELAY = datetime.timedelta(seconds=30) HEARTBEAT_TIMEOUT = 10 INITIAL_TIMEOUT = 25 @@ -76,8 +77,8 @@ class BuildComponent(BaseComponent): @trollius.coroutine def start_build(self, build_job): """ Starts a build. """ - logger.debug('Starting build for component %s (worker version: %s)', - self.builder_realm, self._worker_version) + logger.debug('Starting build for component %s (build %s, worker version: %s)', + self.builder_realm, build_job.repo_build.uuid, self._worker_version) self._current_job = build_job self._build_status = StatusHandler(self.build_logs, build_job.repo_build.uuid) @@ -150,6 +151,11 @@ class BuildComponent(BaseComponent): self.call("io.quay.builder.build", **build_arguments).add_done_callback(self._build_complete) + # Set the heartbeat for the future. If the builder never receives the build call, + # then this will cause a timeout after 30 seconds. We know the builder has registered + # by this point, so it makes sense to have a timeout. + self._last_heartbeat = datetime.datetime.utcnow() + BUILD_HEARTBEAT_DELAY + @staticmethod def _commit_sha(build_config): """ Determines whether the metadata is using an old schema or not and returns the commit. """ @@ -401,8 +407,8 @@ class BuildComponent(BaseComponent): yield From(self._timeout()) raise Return() - logger.debug('Heartbeat on realm %s is valid: %s.', self.builder_realm, - self._last_heartbeat) + logger.debug('Heartbeat on realm %s is valid: %s (%s).', self.builder_realm, + self._last_heartbeat, self._component_status) yield From(trollius.sleep(HEARTBEAT_TIMEOUT))