forked from mirrors/gecko-dev
The runnable jobs API on Treeherder is timing out quite frequently. This is due that it downloads the full-task-graph.json artifact from the Gecko decision task. This file has grown to be massive (over 30MB) and that takes too long to fetch. The API times out after 20 seconds. The data we need from the artifact is minimal. We can generate a file with just the minimum amount of data needed. This code change adds logic to generate a runnable-jobs.json.gz file after the full-task-graph.json artifact is generated. MozReview-Commit-ID: 9u2H7HbUAcl --HG-- extra : rebase_source : f450527e7dd565e29cfe2e04dc52761e77827cc0
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import
|
|
|
|
import unittest
|
|
|
|
from taskgraph.decision import full_task_graph_to_runnable_jobs
|
|
from taskgraph.graph import Graph
|
|
from taskgraph.taskgraph import TaskGraph
|
|
from taskgraph.task import Task
|
|
from mozunit import main
|
|
|
|
|
|
class TestRunnableJobs(unittest.TestCase):
|
|
|
|
tasks = [
|
|
{
|
|
'kind': 'build',
|
|
'label': 'a',
|
|
'attributes': {},
|
|
'task': {
|
|
'extra': {
|
|
'treeherder': {
|
|
'symbol': 'B'
|
|
}
|
|
},
|
|
}
|
|
},
|
|
{
|
|
'kind': 'test',
|
|
'label': 'b',
|
|
'attributes': {},
|
|
'task': {
|
|
'extra': {
|
|
'treeherder': {
|
|
'collection': {
|
|
'opt': True
|
|
},
|
|
'groupName': 'Some group',
|
|
'groupSymbol': 'GS',
|
|
'machine': {
|
|
'platform': 'linux64'
|
|
},
|
|
'symbol': 't'
|
|
}
|
|
},
|
|
}
|
|
},
|
|
]
|
|
|
|
def make_taskgraph(self, tasks):
|
|
label_to_taskid = {k: k + '-tid' for k in tasks}
|
|
for label, task_id in label_to_taskid.iteritems():
|
|
tasks[label].task_id = task_id
|
|
graph = Graph(nodes=set(tasks), edges=set())
|
|
taskgraph = TaskGraph(tasks, graph)
|
|
return taskgraph, label_to_taskid
|
|
|
|
def test_taskgraph_to_runnable_jobs(self):
|
|
tg, label_to_taskid = self.make_taskgraph({
|
|
t['label']: Task(**t) for t in self.tasks[:]
|
|
})
|
|
|
|
res = full_task_graph_to_runnable_jobs(tg.to_json())
|
|
|
|
self.assertEqual(res, {
|
|
'a': {
|
|
'symbol': 'B'
|
|
},
|
|
'b': {
|
|
'collection': {'opt': True},
|
|
'groupName': 'Some group',
|
|
'groupSymbol': 'GS',
|
|
'symbol': 't',
|
|
'platform': 'linux64'
|
|
}
|
|
})
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|