Repository navigation
Conversation
94588b6 to
0ed17ac
Compare
IvanBM18
left a comment
There was a problem hiding this comment.
LGTM, but, I would have this running a day in dev first and would use pitter to verify the before/after of this changes to see if everything is 'the same'.
To test this changes in the dev branch:
- Ask internally in the chat with GOSST if anyone is using dev, dev is a shared CF instance so we have to ask if no one else is running anything there before submitting changes to avoid from breaking someone else tests
- If dev is free, sync dev with master, commit your changes in dev & push them
- In around 20-30 min your changes should be reflected there
- You can verify which clusterfuzz version your bots are using by filtering the logs with jsonPayload.extras.clusterfuzz_version : '<first 5 chars of commit ID>`
g-ortuno
left a comment
There was a problem hiding this comment.
Non-blocking: Curious if you looked into the existing dont_retry mechanism. From a quick check it seems like we have two ways of doing the same thing and it might be worth aligning on a single one eventually. Might be worth opening a bug and leaving a TODO.
|
Thanks for working on this! |
Currently, when a testcase's fuzzer no longer exists, preprocessing closes the testcase but then re-raises InvalidFuzzerError. The bot only drops tasks on InvalidTestcaseError, so the task message is never acked and gets redelivered until it expires, roughly a thousand failures per such testcase. With this change, both errors derive from a new NonRetryableError (still an errors.Error, so metric labels are unchanged), and the bot drops tasks on any NonRetryableError, as suggested on b/578100711. This also covers corpus pruning tasks whose engine fuzzer is missing.
Non-retryable errors still return normally so the task is acked, but its status now reads ERROR like any other failure instead of FINISHED. This also applies to deleted testcases, which used to read FINISHED. For the tasks whose status run_command manages, that status only acts as a lock against concurrent runs, so nothing else changes.
0ed17ac to
23ca0c2
Compare
|
@g-ortuno Good point, I hadn't looked at @dylanjew I don't think so. The other places that catch |
Currently, when a testcase's fuzzer no longer exists, preprocessing closes the testcase but then re-raises
InvalidFuzzerError. The bot only drops tasks onInvalidTestcaseError, so the task message is never acked and gets redelivered until it expires, roughly a thousand failures per such testcase.With this change, both errors derive from a new
NonRetryableError(still anerrors.Error, so metric labels are unchanged), and the bot drops tasks on anyNonRetryableError, as suggested on b/578100711. This also covers corpus pruning tasks whose engine fuzzer is missing.Dropped tasks now record their task status as ERROR, like any other failure; deleted-testcase tasks used to read FINISHED. For these tasks that status only acts as a lock against concurrent runs, so nothing else should change.
Task.dont_retry()drops tasks along a second path; b/582875759 tracks settling on one.This came out of an investigation of b/578100711 (done with AI help; report).