Commit 750dfd2
authored
Search for min revision exponentially backwards (#3934)
This PR radically reworks the way regression task starts off, while
leaving bisection untouched.
Before this change, on first run, regression task would:
1. iterate linearly through a handful of the latest revisions to see if
the regression was very recent
1. if so, return that regression range
2. iterate linearly through a handful of the earliest revisions to see
if the testcase reproduced there
1. if so, then return regression range `0:earliest_revision`
2. if none of these earliest builds were good, fail with
`REGRESSION_BAD_BUILD_ERROR` _and get stuck_
3. start bisecting
Step 2.ii. was responsible for lots of issues for Chrome's clusterfuzz
instance as the earliest builds would sometimes stop working due to
docker image changes (usually related to system libs).
This change reworks this to broadly behave as follows:
1. Search exponentially backwards from the max revision for a suitable
min revision
1. If no such revision can be found, find the first good revision and
return regression range `0:earliest good revision`
2. If we time out, set up state on the testcase to remember where we
left off and reschedule regression task
2. Start bisecting
Note that this means that there are now 3 possible states when we start
regression task:
1. Starting from scratch: `last_regression_max` and
`last_regression_min` are `None`
2. (new) Resuming the search for a min revision: `last_regression_max`
is an integer, `last_regression_min` is None
3. Resuming bisection: `last_regression_max` and `last_regression_min`
are integers
Bug: https://crbug.com/3963443821 parent a917759 commit 750dfd2
File tree
2 files changed
+1033
-194
lines changed- src/clusterfuzz/_internal
- bot/tasks/utasks
- tests/core/bot/tasks/utasks
2 files changed
+1033
-194
lines changed
0 commit comments