mirror of
https://github.com/ansible/awx.git
synced 2026-02-18 11:40:05 -03:30
Merge pull request #3838 from AlanCoding/wf_dag_prefetch
Keep queries for building WF DAG to a minimum
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user