Index: dashboard/dashboard/pinpoint/models/quest/run_test.py |
diff --git a/dashboard/dashboard/pinpoint/models/quest/run_test.py b/dashboard/dashboard/pinpoint/models/quest/run_test.py |
index 3a4b90c2a3f80f75123a1c76aeccba43ed31adb0..476d557a5eaabece22838383172b91db7f06958a 100644 |
--- a/dashboard/dashboard/pinpoint/models/quest/run_test.py |
+++ b/dashboard/dashboard/pinpoint/models/quest/run_test.py |
@@ -90,40 +90,44 @@ class _RunTestExecution(execution_module.Execution): |
self._isolate_hash = isolate_hash |
self._first_execution = first_execution |
- self._task_id = None |
- self._bot_id = None |
+ self._task_ids = [] |
+ self._bot_ids = [] |
@property |
- def bot_id(self): |
- return self._bot_id |
+ def bot_ids(self): |
+ return tuple(self._bot_ids) |
def _Poll(self): |
- if not self._task_id: |
+ if not self._task_ids: |
self._StartTask() |
return |
- result = swarming_service.Task(self._task_id).Result() |
+ isolate_hashes = [] |
+ for task_id in self._task_ids: |
+ result = swarming_service.Task(task_id).Result() |
- if 'bot_id' in result: |
- # Set bot_id to pass the info back to the Quest. |
- self._bot_id = result['bot_id'] |
+ if 'bot_id' in result: |
+ # Set bot_id to pass the info back to the Quest. |
+ self._bot_ids.append(result['bot_id']) |
- if result['state'] == 'PENDING' or result['state'] == 'RUNNING': |
- return |
+ if result['state'] == 'PENDING' or result['state'] == 'RUNNING': |
+ return |
+ |
+ if result['state'] != 'COMPLETED': |
+ raise SwarmingTaskError(task_id, result['state']) |
- if result['state'] != 'COMPLETED': |
- raise SwarmingTaskError(self._task_id, result['state']) |
+ if result['failure']: |
+ raise SwarmingTestError(task_id, result['exit_code']) |
- if result['failure']: |
- raise SwarmingTestError(self._task_id, result['exit_code']) |
+ isolate_hashes.append(result['outputs_ref']['isolated']) |
- result_arguments = {'isolate_hash': result['outputs_ref']['isolated']} |
+ result_arguments = {'isolate_hashes': tuple(isolate_hashes)} |
self._Complete(result_arguments=result_arguments) |
def _StartTask(self): |
"""Kick off a Swarming task to run a test.""" |
- if self._first_execution and not self._first_execution._bot_id: |
+ if self._first_execution and not self._first_execution.bot_ids: |
if self._first_execution.failed: |
# If the first Execution fails before it gets a bot ID, it's likely it |
# couldn't find any device to run on. Subsequent Executions probably |
@@ -135,7 +139,11 @@ class _RunTestExecution(execution_module.Execution): |
dimensions = [{'key': 'pool', 'value': 'Chrome-perf-pinpoint'}] |
if self._first_execution: |
- dimensions.append({'key': 'id', 'value': self._first_execution.bot_id}) |
+ dimensions.append({ |
+ 'key': 'id', |
+ # TODO: Use all the bot ids. |
+ 'value': self._first_execution.bot_ids[0] |
+ }) |
else: |
dimensions += self._dimensions |
@@ -154,4 +162,4 @@ class _RunTestExecution(execution_module.Execution): |
} |
response = swarming_service.Tasks().New(body) |
- self._task_id = response['task_id'] |
+ self._task_ids.append(response['task_id']) |