From: Michael Tremer Date: Fri, 26 May 2023 15:00:54 +0000 (+0000) Subject: builders: Add maintenance mode X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0aad577b5195a153bde5f6c3b7dad4a8b8b6f80d;p=pbs.git builders: Add maintenance mode Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builders.py b/src/buildservice/builders.py index 46a2eb52..08f0cae6 100644 --- a/src/buildservice/builders.py +++ b/src/buildservice/builders.py @@ -284,6 +284,16 @@ class Builder(base.DataObject): return True + # Maintenance + + def get_maintenance(self): + return self.data.maintenance + + def set_maintenance(self, maintenance): + self._set_attribute("maintenance", maintenance) + + maintenance = property(get_maintenance, set_maintenance) + # Stats def _get_stats(self, query, *args, **kwargs): @@ -598,6 +608,11 @@ class Builder(base.DataObject): if await self.is_running(): return + # Don't start when in maintenance mode + if self.maintenance: + log.warning("Won't start %s in maintenance mode" % self) + return + await asyncio.to_thread(self._start, wait=wait) def _start(self, wait): @@ -658,6 +673,11 @@ class Builder(base.DataObject): if await self.is_shutting_down() or await self.is_shut_down(): return + # Don't stop when in maintenance mode + if self.maintenance: + log.warning("Won't stop %s in maintenance mode" % self) + return + await asyncio.to_thread(self._stop, wait=wait) def _stop(self, wait): @@ -692,7 +712,7 @@ class Builder(base.DataObject): if not self.instance: return 0 - # Running builds should come first + # Running builders should come first if await self.is_running(): return 1 diff --git a/src/database.sql b/src/database.sql index c4b5c94e..b19ccf95 100644 --- a/src/database.sql +++ b/src/database.sql @@ -338,7 +338,7 @@ CREATE TABLE public.builders ( enabled boolean DEFAULT false NOT NULL, deleted boolean DEFAULT false NOT NULL, loadavg text DEFAULT '0'::character varying NOT NULL, - testmode boolean DEFAULT true NOT NULL, + maintenance boolean DEFAULT false NOT NULL, max_jobs bigint DEFAULT (1)::bigint NOT NULL, pakfire_version text, os_name text, diff --git a/src/templates/builders/edit.html b/src/templates/builders/edit.html index 0935de7d..bad87624 100644 --- a/src/templates/builders/edit.html +++ b/src/templates/builders/edit.html @@ -60,17 +60,17 @@ - {# Test Mode #} + {# Maintenance #}

- {{ _("Only build test jobs on this builder") }} + {{ _("When in maintenance mode, builders won't be automatically started or stopped") }}

diff --git a/src/web/builders.py b/src/web/builders.py index b2b75ec0..2b5c7833 100644 --- a/src/web/builders.py +++ b/src/web/builders.py @@ -127,9 +127,9 @@ class BuilderEditHandler(base.BaseHandler): raise tornado.web.HTTPError(403) with self.db.transaction(): - builder.enabled = self.get_argument("enabled", False) - builder.testmode = self.get_argument("testmode", False) - builder.max_jobs = self.get_argument_int("max_jobs") + builder.enabled = self.get_argument("enabled", False) + builder.maintenance = self.get_argument_bool("maintenance") + builder.max_jobs = self.get_argument_int("max_jobs") # Try to dispatch more jobs await self.backend.jobs.queue.dispatch()