]> git.ipfire.org Git - people/jschlag/pbs.git/commitdiff
jobs: Drop tries field
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 21 Oct 2017 14:47:58 +0000 (15:47 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 21 Oct 2017 14:47:58 +0000 (15:47 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/jobs.py
src/database.sql
src/templates/jobs-detail.html
src/web/handlers_jobs.py

index 08c1ed59da11196216f9b163daca1972db4fffef..cb4931ed227c2ee5d92b93b270299ac4d2ebfff2 100644 (file)
@@ -176,13 +176,12 @@ class Jobs(base.Object):
                if jobs:
                        return jobs.count
 
-       def restart_failed(self, max_tries=9):
+       def restart_failed(self):
                jobs = self._get_jobs("SELECT jobs.* FROM jobs \
                        JOIN builds ON builds.id = jobs.build_id \
                        WHERE \
                                jobs.type = 'build' AND \
                                jobs.state = 'failed' AND \
-                               jobs.tries <= %s AND \
                                NOT builds.state = 'broken' AND \
                                jobs.time_finished < NOW() - '72 hours'::interval \
                        ORDER BY \
@@ -190,8 +189,7 @@ class Jobs(base.Object):
                                        WHEN jobs.type = 'build' THEN 0 \
                                        WHEN jobs.type = 'test'  THEN 1 \
                                END, \
-                               builds.priority DESC, jobs.time_created ASC",
-                       max_tries)
+                               builds.priority DESC, jobs.time_created ASC")
 
                # Restart the job
                for job in jobs:
@@ -433,7 +431,7 @@ class Job(base.DataObject):
                                WHERE id = %s", self.id)
 
                elif state == "pending":
-                       self.db.execute("UPDATE jobs SET tries = tries + 1, time_started = NULL, \
+                       self.db.execute("UPDATE jobs SET time_started = NULL, \
                                time_finished = NULL WHERE id = %s", self.id)
 
                elif state in ("aborted", "dependency_error", "finished", "failed"):
@@ -537,10 +535,6 @@ class Job(base.DataObject):
                if expected_runtime:
                        return expected_runtime - int(self.duration), stddev
 
-       @property
-       def tries(self):
-               return self.data.tries
-
        def get_pkg_by_uuid(self, uuid):
                pkg = self.backend.packages._get_package("SELECT packages.id FROM packages \
                        JOIN jobs_packages ON jobs_packages.pkg_id = packages.id \
@@ -591,7 +585,7 @@ class Job(base.DataObject):
                        i = 1
                        while True:
                                target_filename = os.path.join(target_dirname,
-                                       "test.%s.%s.%s.log" % (self.arch, i, self.tries))
+                                       "test.%s.%s.%s.log" % (self.arch, i, self.uuid))
 
                                if os.path.exists(target_filename):
                                        i += 1
@@ -599,7 +593,7 @@ class Job(base.DataObject):
                                        break
                else:
                        target_filename = os.path.join(target_dirname,
-                               "build.%s.%s.log" % (self.arch, self.tries))
+                               "build.%s.%s.log" % (self.arch, self.uuid))
 
                # Make sure the target directory exists.
                if not os.path.exists(target_dirname):
@@ -669,39 +663,17 @@ class Job(base.DataObject):
                return set(l)
 
        def save_buildroot(self, pkgs):
-               rows = []
+               # Cleanup old stuff first (for rebuilding packages)
+               self.db.execute("DELETE FROM jobs_buildroots WHERE job_id = %s", self.id)
 
                for pkg_name, pkg_uuid in pkgs:
-                       rows.append((self.id, self.tries, pkg_uuid, pkg_name))
-
-               # Cleanup old stuff first (for rebuilding packages).
-               self.db.execute("DELETE FROM jobs_buildroots WHERE job_id = %s AND tries = %s",
-                       self.id, self.tries)
-
-               self.db.executemany("INSERT INTO \
-                       jobs_buildroots(job_id, tries, pkg_uuid, pkg_name) \
-                       VALUES(%s, %s, %s, %s)", rows)
-
-       def has_buildroot(self, tries=None):
-               if tries is None:
-                       tries = self.tries
-
-               res = self.db.get("SELECT COUNT(*) AS num FROM jobs_buildroots \
-                       WHERE jobs_buildroots.job_id = %s AND jobs_buildroots.tries = %s",
-                       self.id, tries)
-
-               if res:
-                       return res.num
-
-               return 0
-
-       def get_buildroot(self, tries=None):
-               if tries is None:
-                       tries = self.tries
+                       self.db.execute("INSERT INTO jobs_buildroots(job_id, pkg_uuid, pkg_name) \
+                               VALUES(%s, %s, %s)", self.id, pkg_name, pkg_uuid)
 
+       @lazy_property
+       def buildroot(self):
                rows = self.db.query("SELECT * FROM jobs_buildroots \
-                       WHERE jobs_buildroots.job_id = %s AND jobs_buildroots.tries = %s \
-                       ORDER BY pkg_name", self.id, tries)
+                       WHERE jobs_buildroots.job_id = %s ORDER BY pkg_name", self.id)
 
                pkgs = []
                for row in rows:
index 11995762f1261d757940679feeed4a772137c11f..7465f642640c23356d82961aeae91b82ee8c59f4 100644 (file)
@@ -862,7 +862,6 @@ CREATE TABLE jobs (
     time_finished timestamp without time zone,
     start_not_before timestamp without time zone,
     builder_id integer,
-    tries integer DEFAULT 0 NOT NULL,
     aborted_state integer DEFAULT 0 NOT NULL,
     message text,
     test boolean DEFAULT true NOT NULL,
@@ -1064,7 +1063,6 @@ CREATE VIEW jobs_active AS
     jobs.time_finished,
     jobs.start_not_before,
     jobs.builder_id,
-    jobs.tries,
     jobs.aborted_state,
     jobs.message
    FROM jobs
@@ -1080,7 +1078,6 @@ ALTER TABLE jobs_active OWNER TO pakfire;
 
 CREATE TABLE jobs_buildroots (
     job_id integer NOT NULL,
-    tries integer NOT NULL,
     pkg_uuid text NOT NULL,
     pkg_name text NOT NULL
 );
@@ -1167,7 +1164,7 @@ ALTER SEQUENCE jobs_packages_id_seq OWNED BY jobs_packages.id;
 CREATE VIEW jobs_queue AS
  WITH queue AS (
          SELECT jobs.id,
-            rank() OVER (ORDER BY jobs.type, builds.priority DESC, jobs.tries, jobs.time_created) AS rank
+            rank() OVER (ORDER BY jobs.type, builds.priority DESC, jobs.time_created) AS rank
            FROM (jobs
              LEFT JOIN builds ON ((jobs.build_id = builds.id)))
           WHERE (jobs.state = 'pending'::jobs_state)
@@ -2745,13 +2742,6 @@ CREATE INDEX idx_2198063_time_finished ON jobs USING btree (time_finished);
 CREATE UNIQUE INDEX idx_2198063_uuid ON jobs USING btree (uuid);
 
 
---
--- Name: idx_2198074_job_id; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
---
-
-CREATE INDEX idx_2198074_job_id ON jobs_buildroots USING btree (job_id);
-
-
 --
 -- Name: idx_2198080_job_id; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
 --
@@ -2878,6 +2868,15 @@ CREATE INDEX idx_2198256_user_id ON users_emails USING btree (user_id);
 CREATE INDEX jobs_arch ON jobs USING btree (arch);
 
 
+--
+-- Name: jobs_buildroots_job_id; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
+--
+
+CREATE INDEX jobs_buildroots_job_id ON jobs_buildroots USING btree (job_id);
+
+ALTER TABLE jobs_buildroots CLUSTER ON jobs_buildroots_job_id;
+
+
 --
 -- Name: jobs_buildroots_pkg_uuid; Type: INDEX; Schema: public; Owner: pakfire; Tablespace: 
 --
index 3402c6ce4410b13938d2e1da404739149b79e3da..9a6fb14a0c38d626ca1d2fb5bc55552817035ca0 100644 (file)
                                <p class="muted">{{ _("No logs available, yet.") }}</p>
                        {% end %}
 
-                       {% if job.has_buildroot() %}
+                       {% if job.buildroot %}
                                <hr>
                                <p class="ac">
-                                       <a href="/job/{{ job.uuid }}/buildroot?tries={{ job.tries }}">{{ _("Buildroot") }}</a>
-                                       ({{ _("%s package", "%s packages", job.has_buildroot()) % job.has_buildroot() }})
+                                       <a href="/job/{{ job.uuid }}/buildroot">{{ _("Buildroot") }}</a>
+                                       ({{ _("%s package", "%s packages", len(job.buildroot)) % len(job.buildroot) }})
                                </p>
                        {% end %}
                </div>
index 7d797bf386b3e66439c048fd04dbdc2b5a23b844..a8614477b68996ac13600d45e697d32ac3454be6 100644 (file)
@@ -54,14 +54,11 @@ class JobBuildrootHandler(BaseHandler):
                if not job:
                        raise tornado.web.HTTPError(404, "Job not found: %s" % uuid)
 
-               tries = self.get_argument("tries", None)
-               buildroot = job.get_buildroot(tries)
-
                # Calculate the download size and buildroot size.
                download_size = 0
                buildroot_size = 0
 
-               for name, uuid, pkg in buildroot:
+               for name, uuid, pkg in job.buildroot:
                        if not pkg:
                                continue