diff --git a/src/clusterfuzz/_internal/bot/tasks/setup.py b/src/clusterfuzz/_internal/bot/tasks/setup.py index e1e6e1d5275..81492530ca1 100644 --- a/src/clusterfuzz/_internal/bot/tasks/setup.py +++ b/src/clusterfuzz/_internal/bot/tasks/setup.py @@ -593,6 +593,9 @@ def preprocess_update_fuzzer_and_data_bundles( if not fuzzer: logs.error('No fuzzer exists with name %s.' % fuzzer_name) raise errors.InvalidFuzzerError + if not fuzzer.blobstore_key: + logs.error(f'Fuzzer {fuzzer_name} does not have a blobstore_key.') + raise errors.InvalidFuzzerError update_input = uworker_msg_pb2.SetupInput( # pylint: disable=no-member fuzzer_name=fuzzer_name, diff --git a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py index 3d979d852ce..3b24aaa48ca 100644 --- a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py +++ b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py @@ -29,6 +29,7 @@ from google.cloud import ndb from clusterfuzz._internal.base import dates +from clusterfuzz._internal.base import errors from clusterfuzz._internal.base import utils from clusterfuzz._internal.bot import testcase_manager from clusterfuzz._internal.bot.fuzzers import builtin @@ -1216,15 +1217,15 @@ def write_crashes_to_big_query(group, newly_created_testcase, existing_testcase, # Happens in case the big query function is disabled (local development). return - errors = result.get('insertErrors', []) - failed_count = len(errors) + insert_errors = result.get('insertErrors', []) + failed_count = len(insert_errors) monitoring_metrics.BIG_QUERY_WRITE_COUNT.increment_by( row_count - failed_count, {'success': True}) monitoring_metrics.BIG_QUERY_WRITE_COUNT.increment_by( failed_count, {'success': False}) - for error in errors: + for error in insert_errors: logs.error( ('Ignoring error writing the crash ' f'({group.crashes[error["index"]].crash_type}) to BigQuery.'), @@ -2290,7 +2291,11 @@ def utask_preprocess(fuzzer_name, job_type, uworker_env): # Delay adding the fuzz target to logs context until it is chosen in # preprocess. with logs.fuzzer_log_context(fuzzer_name, job_type, fuzz_target=None): - return _utask_preprocess(fuzzer_name, job_type, uworker_env) + try: + return _utask_preprocess(fuzzer_name, job_type, uworker_env) + except errors.InvalidFuzzerError: + logs.error('Fuzzer %s is invalid or no longer exists.' % fuzzer_name) + return None def save_fuzz_targets(output): diff --git a/src/clusterfuzz/_internal/tests/core/bot/tasks/setup_test.py b/src/clusterfuzz/_internal/tests/core/bot/tasks/setup_test.py index 6e39dbe6b1c..f7dbe70daae 100644 --- a/src/clusterfuzz/_internal/tests/core/bot/tasks/setup_test.py +++ b/src/clusterfuzz/_internal/tests/core/bot/tasks/setup_test.py @@ -222,7 +222,10 @@ def setUp(self): self.fuzzer_name = 'fuzzer' data_bundle_name = 'data_bundle_name' data_types.Fuzzer( - name=self.fuzzer_name, data_bundle_name=data_bundle_name).put() + name=self.fuzzer_name, + data_bundle_name=data_bundle_name, + blobstore_key='blobstore_key', + ).put() self.data_bundle = data_types.DataBundle(name=data_bundle_name) self.data_bundle.put() data_types.DataBundle(name=data_bundle_name).put()