[gnome-continuous-yocto/gnomeostree-3.28-rocko: 2895/8267] bitbake: toaster: api / project Cancel any in progress builds before project delete
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-continuous-yocto/gnomeostree-3.28-rocko: 2895/8267] bitbake: toaster: api / project Cancel any in progress builds before project delete
- Date: Sat, 16 Dec 2017 23:52:18 +0000 (UTC)
commit fffce32ebd8712e29cc6f9c4a7a97ce40f9916ee
Author: Michael Wood <michael g wood intel com>
Date: Wed Oct 5 17:08:49 2016 -0700
bitbake: toaster: api / project Cancel any in progress builds before project delete
Before we finally delete any project make sure we send the cancel command to
any in-progress builds. This ensures that an inaccessible build doesn't block
up the system and that we don't get errors after deletion.
[YOCTO #10289]
(Bitbake rev: 263762a01a6460332ef0cfea5df1e5b81c086df4)
Signed-off-by: Michael Wood <michael g wood intel com>
Signed-off-by: bavery <brian avery intel com>
Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>
bitbake/lib/toaster/toastergui/api.py | 55 ++++++++++++--------
.../lib/toaster/toastergui/templates/project.html | 12 +++--
2 files changed, 41 insertions(+), 26 deletions(-)
---
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py
index 3a05d66..b01d4ba 100644
--- a/bitbake/lib/toaster/toastergui/api.py
+++ b/bitbake/lib/toaster/toastergui/api.py
@@ -49,6 +49,28 @@ class XhrBuildRequest(View):
def get(self, request, *args, **kwargs):
return HttpResponse()
+ @staticmethod
+ def cancel_build(br):
+ """Cancel a build request"""
+ try:
+ bbctrl = bbcontroller.BitbakeController(br.environment)
+ bbctrl.forceShutDown()
+ except:
+ # We catch a bunch of exceptions here because
+ # this is where the server has not had time to start up
+ # and the build request or build is in transit between
+ # processes.
+ # We can safely just set the build as cancelled
+ # already as it never got started
+ build = br.build
+ build.outcome = Build.CANCELLED
+ build.save()
+
+ # We now hand over to the buildinfohelper to update the
+ # build state once we've finished cancelling
+ br.state = BuildRequest.REQ_CANCELLING
+ br.save()
+
def post(self, request, *args, **kwargs):
"""
Build control
@@ -74,26 +96,7 @@ class XhrBuildRequest(View):
for i in request.POST['buildCancel'].strip().split(" "):
try:
br = BuildRequest.objects.get(project=project, pk=i)
-
- try:
- bbctrl = bbcontroller.BitbakeController(br.environment)
- bbctrl.forceShutDown()
- except:
- # We catch a bunch of exceptions here because
- # this is where the server has not had time to start up
- # and the build request or build is in transit between
- # processes.
- # We can safely just set the build as cancelled
- # already as it never got started
- build = br.build
- build.outcome = Build.CANCELLED
- build.save()
-
- # We now hand over to the buildinfohelper to update the
- # build state once we've finished cancelling
- br.state = BuildRequest.REQ_CANCELLING
- br.save()
-
+ self.cancel_build(br)
except BuildRequest.DoesNotExist:
return error_response('No such build request id %s' % i)
@@ -823,11 +826,21 @@ class XhrProject(View):
return HttpResponse()
def delete(self, request, *args, **kwargs):
+ """Delete a project. Cancels any builds in progress"""
try:
- Project.objects.get(pk=kwargs['project_id']).delete()
+ project = Project.objects.get(pk=kwargs['project_id'])
+ # Cancel any builds in progress
+ for br in BuildRequest.objects.filter(
+ project=project,
+ state=BuildRequest.REQ_INPROGRESS):
+ XhrBuildRequest.cancel_build(br)
+
+ project.delete()
+
except Project.DoesNotExist:
return error_response("Project %s does not exist" %
kwargs['project_id'])
+
return JsonResponse({
"error": "ok",
"gotoUrl": reverse("all-projects", args=[])
diff --git a/bitbake/lib/toaster/toastergui/templates/project.html
b/bitbake/lib/toaster/toastergui/templates/project.html
index 7644dad..5abe241 100644
--- a/bitbake/lib/toaster/toastergui/templates/project.html
+++ b/bitbake/lib/toaster/toastergui/templates/project.html
@@ -31,12 +31,14 @@
<h4>Are you sure you want to delete this project?</h4>
</div>
<div class="modal-body">
- <p>Deleting the <strong class="project-name"></strong> project will remove forever:</p>
+ <p>Deleting the <strong class="project-name"></strong> project
+ will:</p>
<ul>
- <li>Its configuration information</li>
- <li>Its imported layers</li>
- <li>Its custom images</li>
- <li>All its build information</li>
+ <li>Cancel its builds currently in progress</li>
+ <li>Remove its configuration information</li>
+ <li>Remove its imported layers</li>
+ <li>Remove its custom images</li>
+ <li>Remove all its build information</li>
</ul>
</div>
<div class="modal-footer">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]