]> git.ipfire.org Git - people/jschlag/pbs.git/commitdiff
Add command to restart any failed builds
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2017 14:00:21 +0000 (15:00 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2017 14:00:21 +0000 (15:00 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/manager/__init__.py
src/manager/builds.py
src/scripts/pakfire-build-service
src/scripts/pakfire-manager

index fae10329841556940774cbe3a3e84e90fafec97e..0ffdecabf2d76c56f4b60f7f6926e6e4bdb3cc20 100644 (file)
@@ -1468,6 +1468,27 @@ class Jobs(base.Object):
                if jobs:
                        return jobs.count
 
+       def restart_failed(self, max_tries=9):
+               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 \
+                               CASE \
+                                       WHEN jobs.type = 'build' THEN 0 \
+                                       WHEN jobs.type = 'test'  THEN 1 \
+                               END, \
+                               builds.priority DESC, jobs.time_created ASC",
+                       max_tries)
+
+               # Restart the job
+               for job in jobs:
+                       job.set_state("new", log=False)
+
 
 class Job(base.DataObject):
        table = "jobs"
index 4a9b7354b25804ee5f67c03808a2d4adc8a47d3d..69eb8fa16982ad70bc0a31002304abafad9f45f7 100644 (file)
@@ -1,4 +1,4 @@
 #!/usr/bin/python
 
-from .builds       import BuildsFailedRestartEvent, CheckBuildDependenciesEvent
+from .builds       import CheckBuildDependenciesEvent
 from .builds       import DistEvent
index 9ff85d2bc58d8ca26d1433dd6919b04b5f9495cd..4ae9bcfc27cfc1afc20471204e4becb13cb6c689 100644 (file)
@@ -14,40 +14,6 @@ from . import base
 
 from ..constants import *
 
-class BuildsFailedRestartEvent(base.Event):
-       # Run when idle.
-       priority = 5
-
-       @property
-       def interval(self):
-               return self.pakfire.settings.get_int("build_keepalive_interval", 900)
-
-       def run(self):
-               max_tries = self.pakfire.settings.get_int("builds_restart_max_tries", 9)
-
-               query = self.db.query("SELECT jobs.id AS id 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 \
-                               CASE \
-                                       WHEN jobs.type = 'build' THEN 0 \
-                                       WHEN jobs.type = 'test'  THEN 1 \
-                               END, \
-                               builds.priority DESC, jobs.time_created ASC",
-                       max_tries)
-
-               for row in query:
-                       job = self.pakfire.jobs.get_by_id(row.id)
-
-                       # Restart the job.
-                       job.set_state("new", log=False)
-
-
 class CheckBuildDependenciesEvent(base.Event):
        # Process them as quickly as possible, but there may be more important events.
        priority = 3
index 470af173fc5c9ce26818cd9842171763c7bf676d..2ef005b43dc7e59049cc8d48d6bb47637d5216f6 100644 (file)
@@ -41,6 +41,9 @@ class Cli(object):
                        # Remaster Repositories
                        "remaster-repositories" : self.backend.repos.remaster,
 
+                       # Restart failed jobs
+                       "restart-failed-jobs" : self.backend.jobs.restart_failed,
+
                        # Send bug updates to Bugzilla
                        "send-bug-updates" : self.backend.bugzilla.send_all,
                }
index 9e9dac8471f8c5bd4ad30e06c6e2c49ef2e69ebf..a758c00966c612081c9306dbf4f2505dcb77f909 100644 (file)
@@ -16,10 +16,8 @@ s = pakfire.buildservice.scheduler.Scheduler()
 p = pakfire.buildservice.Pakfire()
 
 events = (
-       pakfire.buildservice.manager.BuildsFailedRestartEvent,
        pakfire.buildservice.manager.CheckBuildDependenciesEvent,
        pakfire.buildservice.manager.DistEvent,
-       pakfire.buildservice.manager.RepositoriesUpdateEvent,
 )
 
 # Add all events to the scheduler.