Skip to content

Commit 610fc3b

Browse files
authored
feat: memoize get_task_definition and _get_deps (#477)
This greatly improves performance of get_ancestors for certain inputs.
1 parent b2fcbe5 commit 610fc3b

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/taskgraph/util/taskcluster.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
44

55

6+
import copy
67
import datetime
78
import functools
89
import logging
@@ -247,6 +248,7 @@ def get_task_url(task_id, use_proxy=False):
247248
return task_tmpl.format(task_id)
248249

249250

251+
@memoize
250252
def get_task_definition(task_id, use_proxy=False):
251253
response = _do_request(get_task_url(task_id, use_proxy))
252254
return response.json()
@@ -372,13 +374,14 @@ def list_task_group_incomplete_tasks(task_group_id):
372374
break
373375

374376

377+
@memoize
375378
def _get_deps(task_ids, use_proxy):
376379
upstream_tasks = {}
377380
for task_id in task_ids:
378381
task_def = get_task_definition(task_id, use_proxy)
379382
upstream_tasks[task_def["metadata"]["name"]] = task_id
380383

381-
upstream_tasks.update(_get_deps(task_def["dependencies"], use_proxy))
384+
upstream_tasks.update(_get_deps(tuple(task_def["dependencies"]), use_proxy))
382385

383386
return upstream_tasks
384387

@@ -403,6 +406,6 @@ def get_ancestors(
403406
for task_id in task_ids:
404407
task_def = get_task_definition(task_id, use_proxy)
405408

406-
upstream_tasks.update(_get_deps(task_def["dependencies"], use_proxy))
409+
upstream_tasks.update(_get_deps(tuple(task_def["dependencies"]), use_proxy))
407410

408-
return upstream_tasks
411+
return copy.deepcopy(upstream_tasks)

test/test_util_taskcluster.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ def test_list_task_group_incomplete_tasks(responses, root_url):
358358

359359

360360
def test_get_ancestors(responses, root_url):
361+
tc.get_task_definition.clear()
362+
tc._get_deps.clear()
361363
base_url = f"{root_url}/api/queue/v1/task"
362364
responses.add(
363365
responses.GET,
@@ -431,6 +433,8 @@ def test_get_ancestors(responses, root_url):
431433

432434

433435
def test_get_ancestors_string(responses, root_url):
436+
tc.get_task_definition.clear()
437+
tc._get_deps.clear()
434438
base_url = f"{root_url}/api/queue/v1/task"
435439
responses.add(
436440
responses.GET,

0 commit comments

Comments
 (0)