Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: appengine/findit/waterfall/trigger_swarming_tasks_pipeline.py

Issue 2139093002: [Findit] Trigger swarming tasks after detech_first_faliure_pipeline (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: . Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from collections import defaultdict
6
7 from google.appengine.ext import ndb
8
9 from common.pipeline_wrapper import BasePipeline
10 from common.waterfall import failure_type
11 from model.wf_analysis import WfAnalysis
12 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline
13
14
15 @ndb.transactional
16 def _GetsStepsNeedToTriggerSwarmingTasks(
17 master_name, builder_name, build_number, failure_info):
18 """Gets first time failed steps and tests which haven't triggered
19 swarming tasks.
20 """
21 result_steps = defaultdict(list)
22 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
23
24 if not analysis:
25 return result_steps
26 failure_result_map = analysis.failure_result_map
stgao 2016/07/12 17:47:50 failure_result_map not updated nor saved.
chanli 2016/07/12 20:04:52 Done.
27
28 # A dict to store all the first time failed steps and/ or tests which
29 # have not trigger a swarming task yet.
stgao 2016/07/12 17:47:50 nit: triggered
chanli 2016/07/12 20:04:52 Done.
30 for failed_step, step_failure in failure_info['failed_steps'].iteritems():
31 if failure_result_map and failure_result_map.get(failed_step):
32 # The step has been processed.
33 continue
34 elif not failure_result_map:
35 failure_result_map = {}
36
37 if not step_failure.get('tests'): # Not a swarming gtest.
38 continue
39
40 failure_result_map[failed_step] = {}
41 for failed_test, test_failure in step_failure['tests'].iteritems():
42 task_key = '%s/%s/%s' % (
43 master_name, builder_name, test_failure['first_failure'])
44 failure_result_map[failed_step][failed_test] = task_key
45
46 if test_failure['first_failure'] == test_failure['current_failure']:
47 # First time failure, add to result_steps.
48 result_steps[failed_step].append(test_failure['base_test_name'])
49 return result_steps
50
51 class TriggerSwarmingTasksPipeline(BasePipeline):
52 """Root Pipeline to trigger swarming tasks."""
53
54 # Arguments number differs from overridden method - pylint: disable=W0221
55 def run(self, master_name, builder_name, build_number, failure_info):
56 if (not failure_info or not failure_info['failed_steps'] or
57 not failure_info['failure_type'] == failure_type.TEST):
58 return
59
60 steps = _GetsStepsNeedToTriggerSwarmingTasks(
61 master_name, builder_name, build_number, failure_info)
62 for step_name, base_tests in steps.iteritems():
63 yield TriggerSwarmingTaskPipeline(
64 master_name, builder_name, build_number, step_name, base_tests)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698