]> git.ipfire.org Git - pbs.git/commitdiff
builders: Add maintenance mode
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 May 2023 15:00:54 +0000 (15:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 May 2023 15:00:54 +0000 (15:00 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builders.py
src/database.sql
src/templates/builders/edit.html
src/web/builders.py

index 46a2eb5209eb615dab38a926cfce5f554a375b6c..08f0cae671e6e2c86f338803c212ea5514965798 100644 (file)
@@ -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
 
index c4b5c94e3ce9d41391b449d568fd0031dd96cb0e..b19ccf95327450480b2d83cf15b0c520088ca543 100644 (file)
@@ -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,
index 0935de7d0d4d1dda3ef22a6f3eed1220b1c7c84a..bad8762409c8c0ac19651dabf8086ef8cf22a0f3 100644 (file)
                                                        </div>
                                                </div>
 
-                                               {# Test Mode #}
+                                               {# Maintenance #}
                                                <div class="field">
                                                        <div class="control">
                                                                <label class="checkbox">
-                                                                       <input type="checkbox" name="testmode"
-                                                                               {% if builder.testmode %}checked{% end %}>
-                                                                       {{ _("Enable Test Mode") }}
+                                                                       <input type="checkbox" name="maintenance"
+                                                                               {% if builder.maintenance %}checked{% end %}>
+                                                                       {{ _("Enable Maintenance Mode") }}
                                                                </label>
                                                        </div>
                                                        <p class="help">
-                                                               {{ _("Only build test jobs on this builder") }}
+                                                               {{ _("When in maintenance mode, builders won't be automatically started or stopped") }}
                                                        </p>
                                                </div>
                                        </fieldset>
index b2b75ec0c3ea532fb6e0033715129ce60459de74..2b5c783351bb3c8381fb529d362e73c2a91a44c4 100644 (file)
@@ -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()