Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 05cb4a4588753d1c3dc59a31d6c29b5daf3fa2a5
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Thu May 28 17:39:43 2015 +0200
[frontend] reject build_chroot status update for `failed`, `cancelled` and `succeded`
states; added some logs
---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 8 +++++++-
.../coprs/views/backend_ns/backend_general.py | 18 ++++++++++--------
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py
b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 9d3dc3e..df5f73c 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -14,6 +14,7 @@ from coprs import models
from coprs import helpers
from coprs import signals
from coprs.constants import DEFAULT_BUILD_TIMEOUT, MAX_BUILD_TIMEOUT
+from coprs.helpers import StatusEnum
from coprs.logic import coprs_logic
from coprs.logic import users_logic
@@ -175,11 +176,16 @@ class BuildsLogic(object):
@classmethod
def update_state_from_dict(cls, build, upd_dict):
+ log.info("Updating build: {} by: {}".format(build.id, upd_dict))
if "chroot" in upd_dict:
# update respective chroot status
for build_chroot in build.build_chroots:
if build_chroot.name == upd_dict["chroot"]:
- if "status" in upd_dict:
+
+ if "status" in upd_dict and build_chroot.status not in [
+ # this states is terminal
+ StatusEnum("failed"),
StatusEnum("succeeded"), StatusEnum("canceled")
+ ]:
build_chroot.status = upd_dict["status"]
db.session.add(build_chroot)
diff --git a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py
b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py
index 207c8f9..f84bfce 100644
--- a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py
+++ b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py
@@ -108,14 +108,15 @@ def starting_build():
if "build_id" in flask.request.json and "chroot" in
flask.request.json:
build = BuildsLogic.get_by_id(flask.request.json["build_id"])
-
- if build and not build.canceled:
- BuildsLogic.update_state_from_dict(build, {
- "chroot": flask.request.json["chroot"],
- "status": StatusEnum("starting")
- })
- db.session.commit()
- result["can_start"] = True
+ chroot = flask.request.get("chroot")
+ if build and chroot and not build.canceled:
+ log.info("mark build {} chroot {} as starting".format(build.id,
chroot))
+ BuildsLogic.update_state_from_dict(build, {
+ "chroot": chroot,
+ "status": StatusEnum("starting")
+ })
+ db.session.commit()
+ result["can_start"] = True
return flask.jsonify(result)
@@ -160,6 +161,7 @@ def reschedule_build_chroot():
build_chroot = build.chroots_dict_by_name.get(chroot)
run_statuses = set([StatusEnum("starting"),
StatusEnum("running")])
if build_chroot and build_chroot.status in run_statuses:
+ log.info("rescheduling build {} chroot: {}".format(build.id,
build_chroot.name))
BuildsLogic.update_state_from_dict(build, {
"chroot": chroot,
"status": StatusEnum("pending")