Преглед изворни кода

HUE-2873 [oozie] Handle TransactionManagementError on workflow dashboard

We need to avoid catching exceptions inside atomic blocks.
https://docs.djangoproject.com/en/1.8/topics/db/transactions/#django.db.transaction.atomic
krish пре 10 година
родитељ
комит
663ab26

+ 0 - 2
apps/oozie/src/oozie/importlib/workflows.py

@@ -675,8 +675,6 @@ def import_workflow_root(workflow, workflow_definition_root, metadata=None, fs=N
     workflow.save()
   except:
     LOG.exception('failed to import workflow root')
-
-    workflow.delete(skip_trash=True)
     raise
 
 

+ 11 - 9
apps/oozie/src/oozie/models.py

@@ -27,7 +27,7 @@ from datetime import datetime,  timedelta
 from string import Template
 from itertools import chain
 
-from django.db import models
+from django.db import models, transaction
 from django.db.models import Q
 from django.core.urlresolvers import reverse
 from django.core.validators import RegexValidator
@@ -543,18 +543,20 @@ class Workflow(Job):
   @classmethod
   def gen_status_graph_from_xml(cls, user, oozie_workflow):
     from oozie.importlib.workflows import import_workflow # Circular dependency
+
     try:
-      workflow = Workflow.objects.new_workflow(user)
-      workflow.save()
-      try:
+      with transaction.atomic():
+        workflow = Workflow.objects.new_workflow(user)
+        workflow.save()
+
         import_workflow(workflow, oozie_workflow.definition)
         graph =  workflow.gen_status_graph(oozie_workflow)
-        return graph, workflow.node_list
-      except Exception, e:
-        LOG.warn('Workflow %s could not be converted to a graph: %s' % (oozie_workflow.id, e))
-    finally:
-      if workflow.pk is not None:
+        node_list = workflow.node_list
         workflow.delete(skip_trash=True)
+        return graph, node_list
+    except Exception, e:
+      LOG.warn('Workflow %s could not be converted to a graph: %s' % (oozie_workflow.id, e))
+
     return None, []
 
   def to_xml(self, mapping=None):

+ 1 - 1
apps/oozie/src/oozie/models2.py

@@ -307,7 +307,7 @@ class Workflow(Job):
       LOG.exception(_("Tag with namespace %(namespace)s is not valid. Please use one of the following namespaces: %(namespaces)s") % {
       'namespace': e.namespace,
       'namespaces': e.namespaces
-    })
+      })
     return []
 
 

+ 1 - 5
apps/oozie/src/oozie/views/dashboard.py

@@ -328,11 +328,7 @@ def list_oozie_workflow(request, job_id):
         new_workflow = get_workflow()(document=doc)
         workflow_data = new_workflow.get_data()
         credentials = Credentials()
-      else:
-        try:
-          Workflow.gen_workflow_data_from_xml(request.user, oozie_workflow)
-        except Exception, e:
-          LOG.exception(_('Graph data could not be generated from Workflow %s: %s' % (oozie_workflow.id, e)))
+      #TODO: For workflows submitted from CLI in https://issues.cloudera.org/browse/HUE-2659
     except:
       LOG.exception("Ignoring error updating Document2 record for job_id=%s", job_id)
   else: