Эх сурвалжийг харах

HUE-3687 [editor] Add dependency on workflow from a Hive document action

Romain Rigaux 9 жил өмнө
parent
commit
4fd2ca4

+ 9 - 3
apps/oozie/src/oozie/tests2.py

@@ -317,6 +317,10 @@ LIMIT $limit"""))
     wf_doc2 = save_temp_workflow(MockOozieApi.JSON_WORKFLOW_LIST[4], self.user)
     wf_doc1.dependencies.add(wf_doc2)
 
+    # Add Hive query dependency
+    query_doc = Document2.objects.create(name='Hive SQL', type='query-hive', owner=self.user)
+    wf_doc1.dependencies.add(query_doc)
+
     # Add coordinator dependency
     data = {
           'id': None,
@@ -352,19 +356,21 @@ LIMIT $limit"""))
     wf_doc3 = Document2.objects.create(name='test', type='oozie-coordinator2', owner=User.objects.get(username='test'), data=data)
     wf_doc1.dependencies.add(wf_doc3)
 
-    assert_true(len(wf_doc1.dependencies.all()) == 3)
+    assert_true(len(wf_doc1.dependencies.all()) == 4)
 
-    wf_doc1.save()
+    wf_doc1.save() # TODO test is actually not testing, we would need to call the save view of a workflow
 
     # Validating dependencies after saving the workflow
-    assert_true(len(wf_doc1.dependencies.all()) == 3)
+    assert_true(len(wf_doc1.dependencies.all()) == 4)
     assert_true(len(wf_doc1.dependencies.filter(type='oozie-coordinator2')) > 0)
+    assert_equal(wf_doc1.dependencies.filter(type='query-hive').count(), 1)
     assert_true(len(wf_doc1.dependencies.filter(Q(is_history=False) & Q(type='oozie-workflow2'))) > 0)
     assert_true(len(wf_doc1.dependencies.filter(Q(is_history=True) & Q(type='oozie-workflow2'))) > 0)
 
     wf_doc1.delete()
     wf_doc2.delete()
     wf_doc3.delete()
+    query_doc.delete()
 
   def test_editor_access_permissions(self):
     group = 'no_editor'

+ 8 - 7
apps/oozie/src/oozie/views/editor2.py

@@ -218,13 +218,15 @@ def save_workflow(request):
     workflow_doc = Document2.objects.create(name=workflow['name'], uuid=workflow['uuid'], type='oozie-workflow2', owner=request.user, description=workflow['properties']['description'])
     Document.objects.link(workflow_doc, owner=workflow_doc.owner, name=workflow_doc.name, description=workflow_doc.description, extra='workflow2')
 
-  # Excludes all the sub-workflow dependencies. Contains list of history and coordinator dependencies.
-  workflow_doc.dependencies = workflow_doc.dependencies.exclude(Q(is_history=False) & Q(type='oozie-workflow2'))
+  # Excludes all the sub-workflow and Hive dependencies. Contains list of history and coordinator dependencies.
+  workflow_doc.dependencies = workflow_doc.dependencies.exclude(Q(is_history=False) & Q(type__in=['oozie-workflow2', 'query-hive']))
 
-  subworkflows = [node['properties']['workflow'] for node in workflow['nodes'] if node['type'] == 'subworkflow-widget']
-  if subworkflows:
-    subworkflow_dependencies = Document2.objects.filter(uuid__in=subworkflows)
-    workflow_doc.dependencies.add(*subworkflow_dependencies)
+  dependencies = \
+      [node['properties']['workflow'] for node in workflow['nodes'] if node['type'] == 'subworkflow-widget'] + \
+      [node['properties']['uuid'] for node in workflow['nodes'] if node['type'] == 'hive-document-widget']
+  if dependencies:
+    dependency_docs = Document2.objects.filter(uuid__in=dependencies)
+    workflow_doc.dependencies.add(*dependency_docs)
 
   if workflow['properties'].get('imported'): # We save and old format workflow to the latest
     workflow['properties']['imported'] = False
@@ -876,7 +878,6 @@ def schedule_document(request):
   Document.objects.link(workflow_doc, owner=workflow_doc.owner, name=workflow_doc.name, description=workflow_doc.description, extra='workflow2')
 
   workflow_doc.dependencies.add(document)
-  workflow_doc.save()
 
   response = {
     'status': 0,