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"
#!/usr/bin/python
-from .builds import BuildsFailedRestartEvent, CheckBuildDependenciesEvent
+from .builds import CheckBuildDependenciesEvent
from .builds import DistEvent
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
# 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,
}
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.