[copr] master: [backend] request frontend to reschedule old unfinished builds at startup (d99a68d)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d99a68d2c15acbcb62f2f303fd381038501e6406
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Tue May 19 17:58:42 2015 +0200
[backend] request frontend to reschedule old unfinished builds at startup
>---------------------------------------------------------------
backend/backend/daemons/backend.py | 9 +++++++++
backend/backend/frontend.py | 5 +++++
backend/tests/deamons/test_backend.py | 1 +
3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/backend/backend/daemons/backend.py b/backend/backend/daemons/backend.py
index 2269733..40da5d0 100644
--- a/backend/backend/daemons/backend.py
+++ b/backend/backend/daemons/backend.py
@@ -16,6 +16,7 @@ from collections import defaultdict
import lockfile
from daemon import DaemonContext
+from requests import RequestException
from retask.queue import Queue
from retask import ConnectionError
from backend.frontend import FrontendClient
@@ -250,6 +251,14 @@ class CoprBackend(object):
self.log.info("Initial config: {}".format(self.opts))
self.log.info("Sub processes was started")
+
+ try:
+ self.log.info("Rescheduling old unfinished builds")
+ self.frontend_client.reschedule_all_running()
+ except RequestException as err:
+ self.log.exception(err)
+ return
+
self.is_running = True
while self.is_running:
# re-read config into opts
diff --git a/backend/backend/frontend.py b/backend/backend/frontend.py
index addce1a..86d5e22 100644
--- a/backend/backend/frontend.py
+++ b/backend/backend/frontend.py
@@ -73,3 +73,8 @@ class FrontendClient(object):
"""
data = {"build_id": build_id, "chroot": chroot_name}
self._post_to_frontend_repeatedly(data, "reschedule_build_chroot")
+
+ def reschedule_all_running(self):
+ response = self._post_to_frontend({}, "reschedule_all_running")
+ if response.status_code != 200:
+ raise RequestException("Failed to reschedule all running jobs")
diff --git a/backend/tests/deamons/test_backend.py b/backend/tests/deamons/test_backend.py
index 6115d3a..227558b 100644
--- a/backend/tests/deamons/test_backend.py
+++ b/backend/tests/deamons/test_backend.py
@@ -318,6 +318,7 @@ class TestBackend(object):
# self.be.init_task_queues = MagicMock()
self.be.update_conf = MagicMock()
self.be.spin_up_workers_by_group = MagicMock()
+ self.be.frontend_client = MagicMock()
def spin_up():
self.be.workers_by_group_id[0].append(worker_alive)