]> git.ipfire.org Git - pbs.git/commitdiff
builders: Use an index to find number of running jobs
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 31 Oct 2017 18:19:44 +0000 (18:19 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 31 Oct 2017 18:19:44 +0000 (18:19 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builders.py
src/database.sql

index a2168207a8ba4fc90a810c553ce0666d2b634d3b..9e5cdf63575d92d6a7706f01062032608d3d1ee5 100644 (file)
@@ -16,6 +16,11 @@ from .decorators import *
 
 from .users import generate_password_hash, check_password_hash, generate_random_string
 
+ACTIVE_STATES = [
+       "dispatching",
+       "running",
+]
+
 class Builders(base.Object):
        def _get_builder(self, query, *args):
                res = self.db.get(query, *args)
@@ -390,12 +395,19 @@ class Builder(base.DataObject):
 
                return list(jobs)
 
+       @property
+       def num_active_jobs(self):
+               res = self.db.get("SELECT COUNT(*) AS count FROM jobs \
+                       WHERE builder_id = %s AND state = ANY(%s)", self.id, ACTIVE_STATES)
+
+               return res.count
+
        @property
        def too_many_jobs(self):
                """
                        Tell if this host is already running enough or too many jobs.
                """
-               return len(self.active_jobs) >= self.max_jobs
+               return self.num_active_jobs >= self.max_jobs
 
        @lazy_property
        def jobqueue(self):
index b5063af7d053f3f1f4cd64dbbc7301d252deaa1b..40775333d261b748812d508e07f32820e017f50c 100644 (file)
@@ -2538,6 +2538,13 @@ CREATE INDEX idx_2198256_user_id ON users_emails USING btree (user_id);
 CREATE INDEX jobs_arch ON jobs USING btree (arch);
 
 
+--
+-- Name: jobs_builders_active_jobs; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
+--
+
+CREATE INDEX jobs_builders_active_jobs ON jobs USING btree (builder_id) WHERE (state = ANY (ARRAY['dispatching'::text, 'running'::text]));
+
+
 --
 -- Name: jobs_buildroots_job_id; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
 --