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

Unified Diff: build/android/bb_run_sharded_steps.py

Issue 12321138: Android: allows ignoring results of flaky sharded perf tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sami/tom's comment Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/bb_run_sharded_steps.py
diff --git a/build/android/bb_run_sharded_steps.py b/build/android/bb_run_sharded_steps.py
index 9010d774b71066871b9f488fa430ff5aff3a17f2..6c580fa7ff1253a21e497cb0e740260df902306f 100755
--- a/build/android/bb_run_sharded_steps.py
+++ b/build/android/bb_run_sharded_steps.py
@@ -11,9 +11,10 @@ This is sub-optimal for android, where these steps can run independently on
multiple connected devices.
The buildbots will run this script multiple times per cycle:
-- First, without params: all steps will be executed in parallel using all
-connected devices. Step results will be pickled to disk (each step has a unique
-name).
+- First: all steps listed in -s in will be executed in parallel using all
+connected devices. Step results will be pickled to disk. Each step has a unique
+name. The result code will be ignored if the step name is listed in
+--flaky_steps.
The buildbot will treat this step as a regular step, and will not process any
graph data.
@@ -21,12 +22,19 @@ graph data.
step results previously saved. The buildbot will then process the graph data
accordingly.
-The JSON config contains is a file containing a dictionary in the format:
+The JSON steps file contains a dictionary in the format:
{
- 'step_name_foo': 'script_to_execute foo',
- 'step_name_bar': 'script_to_execute bar'
+ "step_name_foo": "script_to_execute foo",
+ "step_name_bar": "script_to_execute bar"
}
+The JSON flaky steps file contains a list with step names which results should
+be ignored:
+[
+ "step_name_foo",
+ "step_name_bar"
+]
+
Note that script_to_execute necessarily have to take at least the following
options:
--device: the serial number to be passed to all adb commands.
@@ -71,9 +79,14 @@ def _RunStepsPerDevice(steps):
step['cmd'], cwd=os.path.abspath(constants.CHROME_DIR),
withexitstatus=True, logfile=sys.stdout, timeout=1800,
env=os.environ)
+ exit_code = exit_code or 0
end_time = datetime.datetime.now()
- print 'Finished %s: %s %s at %s' % (step['name'], step['cmd'],
- end_time, step['device'])
+ exit_msg = '%s %s' % (exit_code,
+ '(ignored, flaky step)' if step['is_flaky'] else '')
+ print 'Finished %s: %s %s %s at %s' % (step['name'], exit_msg, step['cmd'],
+ end_time, step['device'])
+ if step['is_flaky']:
+ exit_code = 0
result = {'name': step['name'],
'output': output,
'exit_code': exit_code or 0,
Sami 2013/02/26 17:19:13 No need for the "or 0" anymore :)
@@ -84,7 +97,7 @@ def _RunStepsPerDevice(steps):
return results
-def _RunShardedSteps(steps, devices):
+def _RunShardedSteps(steps, flaky_steps, devices):
assert steps
assert devices, 'No devices connected?'
if os.path.exists(_OUTPUT_DIR):
@@ -101,6 +114,7 @@ def _RunShardedSteps(steps, devices):
for s in steps.keys()[i * shard_size:(i + 1) * shard_size]:
steps_per_device += [{'name': s,
'device': device,
+ 'is_flaky': s in flaky_steps,
'cmd': steps[s] + ' --device ' + device +
' --keep_test_server_ports'}]
all_params += [steps_per_device]
@@ -157,6 +171,9 @@ def main(argv):
parser.add_option('-s', '--steps',
help='A JSON file containing all the steps to be '
'sharded.')
+ parser.add_option('--flaky_steps',
+ help='A JSON file containing steps that are flaky and '
+ 'will have its exit code ignored.')
parser.add_option('-p', '--print_results',
help='Only prints the results for the previously '
'executed step, do not run it again.')
@@ -181,7 +198,11 @@ def main(argv):
with file(options.steps, 'r') as f:
steps = json.load(f)
- return _RunShardedSteps(steps, devices)
+ flaky_steps = []
+ if options.flaky_steps:
+ with file(options.flaky_steps, 'r') as f:
+ flaky_steps = json.load(f)
+ return _RunShardedSteps(steps, flaky_steps, devices)
if __name__ == '__main__':
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698