[rerun] Handle 1-core experimental builders
I'm trying to reduce the memory usage of rerun builders so that they can
run on 1-core machines without crashing. They're all running on 32 cores
right now, so I'd like to have a single rerun builder running on a
1-core machine so I can easily monitor the effects of my work.
In order to do that while still leaving the 32-core builder running, the
1-core builder needs to have a different name. So I added the "-1-core"
suffix. It's kinda ugly, but should be temporary.
See the expectation diff between patchsets 1 and 2 for the result of
adding the special case for builders with that suffix.
Bug: 44578
Change-Id: I8be7abddae7593951ba4dc0694beb556a8913cea
diff --git a/recipes/fuchsia/rerun.expected/1_core.json b/recipes/fuchsia/rerun.expected/1_core.json
new file mode 100644
index 0000000..8261072
--- /dev/null
+++ b/recipes/fuchsia/rerun.expected/1_core.json
@@ -0,0 +1,139 @@
+[
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.search",
+ "stdin": "{\"requests\": [{\"searchBuilds\": {\"fields\": \"builds.*.builder,builds.*.createTime,builds.*.createdBy,builds.*.critical,builds.*.endTime,builds.*.id,builds.*.input,builds.*.number,builds.*.output,builds.*.startTime,builds.*.status,builds.*.updateTime\", \"pageSize\": 1, \"predicate\": {\"builder\": {\"bucket\": \"source-bucket\", \"builder\": \"source-builder\", \"project\": \"project\"}, \"status\": \"SUCCESS\"}}}]}",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"searchBuilds\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builds\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"builder\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"project\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"8945511751514863184\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"project\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/master\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"child_build_id\": 123@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"searchBuilds\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builds.*.builder,builds.*.createTime,builds.*.createdBy,builds.*.critical,builds.*.endTime,builds.*.id,builds.*.input,builds.*.number,builds.*.output,builds.*.startTime,builds.*.status,builds.*.updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"pageSize\": 1, @@@",
+ "@@@STEP_LOG_LINE@request@ \"predicate\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"source-bucket\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"source-builder\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"project\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@8945511751514863184@https://cr-buildbucket.appspot.com/build/8945511751514863184@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"rerun\", \"builder\": \"source-builder-1-core\", \"project\": \"project\"}, \"experimental\": \"NO\", \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"chromium.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"project\", \"ref\": \"refs/heads/master\"}, \"priority\": 30, \"properties\": {\"child_build_id\": 123}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"tags\": [{\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"rerun\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"source-builder-1-core\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"project\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"8922054662172514000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"rerun\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"source-builder-1-core\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"project\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"chromium.googlesource.com\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"project\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/master\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"priority\": 30, @@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"child_build_id\": 123@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@8922054662172514000@https://cr-buildbucket.appspot.com/build/8922054662172514000@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/fuchsia/rerun.py b/recipes/fuchsia/rerun.py
index 7a799c6..7213ba6 100644
--- a/recipes/fuchsia/rerun.py
+++ b/recipes/fuchsia/rerun.py
@@ -14,9 +14,7 @@
"""
-from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2
from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2
-from PB.go.chromium.org.luci.buildbucket.proto import rpc as rpc_pb2
from recipe_engine.recipe_api import Property
@@ -45,10 +43,17 @@
# Flaky builders are rarely successful, so we take any build.
if source_builder.endswith('-flaky'):
last_build_status = None
+
+ # TODO(fxb/44578): We'll no longer need this special case once we've reduced
+ # memory usage such that all rerun builders can run on 1-core machines.
+ original_builder = source_builder
+ one_core_suffix = '-1-core'
+ if original_builder.endswith(one_core_suffix):
+ original_builder = original_builder[:-len(one_core_suffix)]
source_build = api.buildbucket_util.last_build(
my_build.builder.project,
source_bucket,
- source_builder,
+ original_builder,
status=last_build_status)
if not source_build:
raise api.step.InfraFailure(
@@ -80,3 +85,8 @@
yield (api.status_check.test('success') + properties +
api.buildbucket.simulated_search_results([source_build]) +
api.buildbucket.ci_build(bucket='rerun'))
+
+ yield (api.status_check.test('1_core') + api.properties(
+ source_bucket='source-bucket', source_builder='source-builder-1-core') +
+ api.buildbucket.simulated_search_results([source_build]) +
+ api.buildbucket.ci_build(bucket='rerun'))