Merge pull request #3838 from AlanCoding/wf_dag_prefetch

Keep queries for building WF DAG to a minimum
This commit is contained in:
Alan Rominger
2016-11-02 14:47:16 -04:00
committed by GitHub
2 changed files with 30 additions and 1 deletions

View File

@@ -9,7 +9,8 @@ class WorkflowDAG(SimpleDAG):
self._init_graph(workflow_job) self._init_graph(workflow_job)
def _init_graph(self, workflow_job): def _init_graph(self, workflow_job):
workflow_nodes = workflow_job.workflow_job_nodes.all() node_qs = workflow_job.workflow_job_nodes
workflow_nodes = node_qs.prefetch_related('success_nodes', 'failure_nodes', 'always_nodes').all()
for workflow_node in workflow_nodes: for workflow_node in workflow_nodes:
self.add_node(workflow_node) self.add_node(workflow_node)

View File

@@ -6,6 +6,34 @@ import pytest
from awx.main.models.workflow import WorkflowJob, WorkflowJobNode, WorkflowJobTemplateNode from awx.main.models.workflow import WorkflowJob, WorkflowJobNode, WorkflowJobTemplateNode
from awx.main.models.jobs import Job from awx.main.models.jobs import Job
from awx.main.models.projects import ProjectUpdate from awx.main.models.projects import ProjectUpdate
from awx.main.scheduler.dag_workflow import WorkflowDAG
# Django
from django.test import TransactionTestCase
@pytest.mark.django_db
class TestWorkflowDAGFunctional(TransactionTestCase):
def workflow_job(self):
wfj = WorkflowJob.objects.create()
nodes = [WorkflowJobNode.objects.create(workflow_job=wfj) for i in range(0, 5)]
nodes[0].success_nodes.add(nodes[1])
nodes[1].success_nodes.add(nodes[2])
nodes[0].failure_nodes.add(nodes[3])
nodes[3].failure_nodes.add(nodes[4])
return wfj
def test_build_WFJT_dag(self):
'''
Test that building the graph uses 4 queries
1 to get the nodes
3 to get the related success, failure, and always connections
'''
dag = WorkflowDAG()
wfj = self.workflow_job()
with self.assertNumQueries(4):
dag._init_graph(wfj)
@pytest.mark.django_db @pytest.mark.django_db
class TestWorkflowJob: class TestWorkflowJob: