[gnome-continuous-yocto/gnomeostree-3.28-rocko: 2895/8267] bitbake: toaster: api / project Cancel any in progress builds before project delete



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]