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

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

Issue 2605803002: [Findit] Refactoring WfTryJobData into BaseTryJobData, WfTryJobData, and FlakeTryJobData (Closed)
Patch Set: Fixing code coverage Created 3 years, 11 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
1 # Copyright 2016 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from collections import defaultdict 5 from collections import defaultdict
6 import logging 6 import logging
7 7
8 from common.waterfall import failure_type 8 from common.waterfall import failure_type
9 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
10 from model.wf_try_job_data import WfTryJobData
10 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline 11 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline
11 12
12 13
13 def _GetTargetedTests(reliable_tests): 14 def _GetTargetedTests(reliable_tests):
14 targeted_tests = defaultdict(list) 15 targeted_tests = defaultdict(list)
15 for step_reliable_tests in reliable_tests.itervalues(): 16 for step_reliable_tests in reliable_tests.itervalues():
16 step_name_no_platform = step_reliable_tests[0] 17 step_name_no_platform = step_reliable_tests[0]
17 tests = step_reliable_tests[1] 18 tests = step_reliable_tests[1]
18 if tests: 19 if tests:
19 targeted_tests[step_name_no_platform].extend(tests) 20 targeted_tests[step_name_no_platform].extend(tests)
20 return targeted_tests 21 return targeted_tests
21 22
22 23
23 class ScheduleTestTryJobPipeline(ScheduleTryJobPipeline): 24 class ScheduleTestTryJobPipeline(ScheduleTryJobPipeline):
24 """A pipeline for scheduling a new try job for failed test build.""" 25 """A pipeline for scheduling a new try job for failed test build."""
25 26
26 def _GetBuildProperties( 27 def _GetBuildProperties(
27 self, master_name, builder_name, build_number, good_revision, 28 self, master_name, builder_name, build_number, good_revision,
28 bad_revision, try_job_type, suspected_revisions): 29 bad_revision, try_job_type, suspected_revisions):
29 properties = super(ScheduleTestTryJobPipeline, self)._GetBuildProperties( 30 properties = super(ScheduleTestTryJobPipeline, self)._GetBuildProperties(
30 master_name, builder_name, build_number, good_revision, 31 master_name, builder_name, build_number, good_revision,
31 bad_revision, try_job_type, suspected_revisions) 32 bad_revision, try_job_type, suspected_revisions)
32 properties['target_testername'] = builder_name 33 properties['target_testername'] = builder_name
33 34
34 return properties 35 return properties
35 36
37 def _CreateTryJobData(
38 self, build_id, try_job_key, has_heuristic_results):
39 try_job_data = WfTryJobData.Create(build_id)
40 try_job_data.has_compile_targets = False
41 try_job_data.has_heuristic_results = has_heuristic_results
42 try_job_data.try_job_key = try_job_key
43 try_job_data.try_job_type = failure_type.GetDescriptionForFailureType(
44 failure_type.TEST)
45 try_job_data.put()
46
36 # Arguments number differs from overridden method - pylint: disable=W0221 47 # Arguments number differs from overridden method - pylint: disable=W0221
37 def run( 48 def run(
38 self, master_name, builder_name, build_number, good_revision, 49 self, master_name, builder_name, build_number, good_revision,
39 bad_revision, try_job_type, suspected_revisions, *reliable_tests): 50 bad_revision, try_job_type, suspected_revisions, *reliable_tests):
40 """ 51 """
41 Args: 52 Args:
42 master_name (str): the master name of a build. 53 master_name (str): the master name of a build.
43 builder_name (str): the builder name of a build. 54 builder_name (str): the builder name of a build.
44 build_number (int): the build number of a build. 55 build_number (int): the build number of a build.
45 good_revision (str): the revision of the last passed build. 56 good_revision (str): the revision of the last passed build.
(...skipping 13 matching lines...) Expand all
59 targeted_tests = _GetTargetedTests(dict(reliable_tests)) 70 targeted_tests = _GetTargetedTests(dict(reliable_tests))
60 if not targeted_tests: # pragma: no cover 71 if not targeted_tests: # pragma: no cover
61 logging.info('All tests are flaky, no try job will be triggered.') 72 logging.info('All tests are flaky, no try job will be triggered.')
62 return 73 return
63 74
64 additional_parameters = {'tests': targeted_tests} 75 additional_parameters = {'tests': targeted_tests}
65 76
66 build_id = self._TriggerTryJob( 77 build_id = self._TriggerTryJob(
67 master_name, builder_name, properties, additional_parameters) 78 master_name, builder_name, properties, additional_parameters)
68 79
69 try_job_result = WfTryJob.Get(master_name, builder_name, build_number) 80 try_job = WfTryJob.Get(master_name, builder_name, build_number)
70 try_job_result.test_results.append({'try_job_id': build_id}) 81 try_job.test_results.append({'try_job_id': build_id})
71 try_job_result.try_job_ids.append(build_id) 82 try_job.try_job_ids.append(build_id)
72 try_job_result.put() 83 try_job.put()
73 84
74 # Create a corresponding WfTryJobData entity to capture as much metadata as 85 # Create a corresponding WfTryJobData entity to capture as much metadata as
75 # early as possible. 86 # early as possible.
76 self._CreateTryJobData( 87 self._CreateTryJobData(build_id, try_job.key, bool(suspected_revisions))
77 build_id, master_name, builder_name, build_number,
78 failure_type.GetDescriptionForFailureType(try_job_type),
79 False, bool(suspected_revisions))
80 88
81 return build_id 89 return build_id
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698