We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[GCP] Runners are not started.
I pulled master and tried to evaluate libfuzzer against honggfuzz in 5 trials for 1 hour on 1 benchmark (mbedtls_fuzz_dtlsclient). It doesn't generate the report anymore. The web bucket is empty, the experiments-result folder does not exist in the data bucket, the SQL database is empty, and the Error Reporting gives the following error:
```
ValueError: Empty experiment data. Message: Error generating HTML report.
at validate_data (/work/src/analysis/data_utils.py:21)
at generate_report (/work/src/analysis/generate_report.py:132)
at output_report (/work/src/experiment/reporter.py:43)
```

I deleted authorization keys of the service account. I deleted the old and set up a new SQL database (incl. `alembic upgrade head`). I cleaned out the container registry (by deleting the `container` folder in the corresponding bucket). I cleaned out the Cloud Builds (by deleting `source` folder in the corresponding bucket). It recreates the containers and builds, when I start the dispatcher. The dispatcher runs properly. I SSH'ed into a random runner: `docker images` and `docker ps -a` return empty-handed. Is the recent setup gcr.io/fuzzbench-specific? Any suggestion to debug?

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `common/benchmark_utils.py`
Content:
```
1 # Copyright 2020 Google LLC
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 """Code for dealing with benchmarks."""
15 import os
16 import re
17 
18 from common import experiment_utils
19 from common import fuzzer_utils
20 from common import logs
21 from common import oss_fuzz
22 from common import utils
23 
24 VALID_BENCHMARK_REGEX = re.compile(r'^[A-Za-z0-9\._\-]+$')
25 
26 
27 def is_oss_fuzz(benchmark):
28     """Returns True if |benchmark| is OSS-Fuzz-based project."""
29     return os.path.isfile(oss_fuzz.get_config_file(benchmark))
30 
31 
32 def get_project(benchmark):
33     """Returns the OSS-Fuzz project of |benchmark| if it is based on an
34     OSS-Fuzz project, otherwise raises ValueError."""
35     if is_oss_fuzz(benchmark):
36         return oss_fuzz.get_config(benchmark)['project']
37     raise ValueError('Can only get project on OSS-Fuzz benchmarks.')
38 
39 
40 def get_fuzz_target(benchmark):
41     """Returns the fuzz target of |benchmark|"""
42     if is_oss_fuzz(benchmark):
43         return oss_fuzz.get_config(benchmark)['fuzz_target']
44     return fuzzer_utils.DEFAULT_FUZZ_TARGET_NAME
45 
46 
47 def get_runner_image_url(benchmark, fuzzer, cloud_project):
48     """Get the URL of the docker runner image for fuzzing the benchmark with
49     fuzzer."""
50     base_tag = experiment_utils.get_base_docker_tag(cloud_project)
51     if is_oss_fuzz(benchmark):
52         return '{base_tag}/oss-fuzz/runners/{fuzzer}/{project}'.format(
53             base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))
54     return '{base_tag}/runners/{fuzzer}/{benchmark}'.format(base_tag=base_tag,
55                                                             fuzzer=fuzzer,
56                                                             benchmark=benchmark)
57 
58 
59 def get_builder_image_url(benchmark, fuzzer, cloud_project):
60     """Get the URL of the docker builder image for fuzzing the benchmark with
61     fuzzer."""
62     base_tag = experiment_utils.get_base_docker_tag(cloud_project)
63     if is_oss_fuzz(benchmark):
64         return '{base_tag}/oss-fuzz/builders/{fuzzer}/{project}'.format(
65             base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))
66     return '{base_tag}/builders/{fuzzer}/{benchmark}'.format(
67         base_tag=base_tag, fuzzer=fuzzer, benchmark=benchmark)
68 
69 
70 def get_oss_fuzz_builder_hash(benchmark):
71     """Get the specified hash of the OSS-Fuzz builder for the OSS-Fuzz project
72     used by |benchmark|."""
73     if is_oss_fuzz(benchmark):
74         return oss_fuzz.get_config(benchmark)['oss_fuzz_builder_hash']
75     raise ValueError('Can only get project on OSS-Fuzz benchmarks.')
76 
77 
78 def validate(benchmark):
79     """Return True if |benchmark| is a valid fuzzbench fuzzer."""
80     if VALID_BENCHMARK_REGEX.match(benchmark) is None:
81         logs.error('%s does not conform to %s pattern.', benchmark,
82                    VALID_BENCHMARK_REGEX.pattern)
83         return False
84     if benchmark in get_all_benchmarks():
85         return True
86     logs.error('%s must have a build.sh or oss-fuzz.yaml.', benchmark)
87     return False
88 
89 
90 def get_all_benchmarks():
91     """Returns the list of all benchmarks."""
92     benchmarks_dir = os.path.join(utils.ROOT_DIR, 'benchmarks')
93     all_benchmarks = []
94     for benchmark in os.listdir(benchmarks_dir):
95         benchmark_path = os.path.join(benchmarks_dir, benchmark)
96         if os.path.isfile(os.path.join(benchmark_path, 'oss-fuzz.yaml')):
97             # Benchmark is an OSS-Fuzz benchmark.
98             all_benchmarks.append(benchmark)
99         elif os.path.isfile(os.path.join(benchmark_path, 'build.sh')):
100             # Benchmark is a standard benchmark.
101             all_benchmarks.append(benchmark)
102     return all_benchmarks
103
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/common/benchmark_utils.py b/common/benchmark_utils.py
--- a/common/benchmark_utils.py
+++ b/common/benchmark_utils.py
@@ -48,9 +48,6 @@
     """Get the URL of the docker runner image for fuzzing the benchmark with
     fuzzer."""
     base_tag = experiment_utils.get_base_docker_tag(cloud_project)
-    if is_oss_fuzz(benchmark):
-        return '{base_tag}/oss-fuzz/runners/{fuzzer}/{project}'.format(
-            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))
     return '{base_tag}/runners/{fuzzer}/{benchmark}'.format(base_tag=base_tag,
                                                             fuzzer=fuzzer,
                                                             benchmark=benchmark)
@@ -60,9 +57,6 @@
     """Get the URL of the docker builder image for fuzzing the benchmark with
     fuzzer."""
     base_tag = experiment_utils.get_base_docker_tag(cloud_project)
-    if is_oss_fuzz(benchmark):
-        return '{base_tag}/oss-fuzz/builders/{fuzzer}/{project}'.format(
-            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))
     return '{base_tag}/builders/{fuzzer}/{benchmark}'.format(
         base_tag=base_tag, fuzzer=fuzzer, benchmark=benchmark)

{"golden_diff": "diff --git a/common/benchmark_utils.py b/common/benchmark_utils.py\n--- a/common/benchmark_utils.py\n+++ b/common/benchmark_utils.py\n@@ -48,9 +48,6 @@\n     \"\"\"Get the URL of the docker runner image for fuzzing the benchmark with\n     fuzzer.\"\"\"\n     base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n-    if is_oss_fuzz(benchmark):\n-        return '{base_tag}/oss-fuzz/runners/{fuzzer}/{project}'.format(\n-            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))\n     return '{base_tag}/runners/{fuzzer}/{benchmark}'.format(base_tag=base_tag,\n                                                             fuzzer=fuzzer,\n                                                             benchmark=benchmark)\n@@ -60,9 +57,6 @@\n     \"\"\"Get the URL of the docker builder image for fuzzing the benchmark with\n     fuzzer.\"\"\"\n     base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n-    if is_oss_fuzz(benchmark):\n-        return '{base_tag}/oss-fuzz/builders/{fuzzer}/{project}'.format(\n-            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))\n     return '{base_tag}/builders/{fuzzer}/{benchmark}'.format(\n         base_tag=base_tag, fuzzer=fuzzer, benchmark=benchmark)\n", "issue": "[GCP] Runners are not started.\nI pulled master and tried to evaluate libfuzzer against honggfuzz in 5 trials for 1 hour on 1 benchmark (mbedtls_fuzz_dtlsclient). It doesn't generate the report anymore. The web bucket is empty, the experiments-result folder does not exist in the data bucket, the SQL database is empty, and the Error Reporting gives the following error:\r\n```\r\nValueError: Empty experiment data. Message: Error generating HTML report.\r\nat validate_data (/work/src/analysis/data_utils.py:21)\r\nat generate_report (/work/src/analysis/generate_report.py:132)\r\nat output_report (/work/src/experiment/reporter.py:43)\r\n```\r\n\r\nI deleted authorization keys of the service account. I deleted the old and set up a new SQL database (incl. `alembic upgrade head`). I cleaned out the container registry (by deleting the `container` folder in the corresponding bucket). I cleaned out the Cloud Builds (by deleting `source` folder in the corresponding bucket). It recreates the containers and builds, when I start the dispatcher. The dispatcher runs properly. I SSH'ed into a random runner: `docker images` and `docker ps -a` return empty-handed. Is the recent setup gcr.io/fuzzbench-specific? Any suggestion to debug?\n", "before_files": [{"content": "# Copyright 2020 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Code for dealing with benchmarks.\"\"\"\nimport os\nimport re\n\nfrom common import experiment_utils\nfrom common import fuzzer_utils\nfrom common import logs\nfrom common import oss_fuzz\nfrom common import utils\n\nVALID_BENCHMARK_REGEX = re.compile(r'^[A-Za-z0-9\\._\\-]+$')\n\n\ndef is_oss_fuzz(benchmark):\n    \"\"\"Returns True if |benchmark| is OSS-Fuzz-based project.\"\"\"\n    return os.path.isfile(oss_fuzz.get_config_file(benchmark))\n\n\ndef get_project(benchmark):\n    \"\"\"Returns the OSS-Fuzz project of |benchmark| if it is based on an\n    OSS-Fuzz project, otherwise raises ValueError.\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['project']\n    raise ValueError('Can only get project on OSS-Fuzz benchmarks.')\n\n\ndef get_fuzz_target(benchmark):\n    \"\"\"Returns the fuzz target of |benchmark|\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['fuzz_target']\n    return fuzzer_utils.DEFAULT_FUZZ_TARGET_NAME\n\n\ndef get_runner_image_url(benchmark, fuzzer, cloud_project):\n    \"\"\"Get the URL of the docker runner image for fuzzing the benchmark with\n    fuzzer.\"\"\"\n    base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n    if is_oss_fuzz(benchmark):\n        return '{base_tag}/oss-fuzz/runners/{fuzzer}/{project}'.format(\n            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))\n    return '{base_tag}/runners/{fuzzer}/{benchmark}'.format(base_tag=base_tag,\n                                                            fuzzer=fuzzer,\n                                                            benchmark=benchmark)\n\n\ndef get_builder_image_url(benchmark, fuzzer, cloud_project):\n    \"\"\"Get the URL of the docker builder image for fuzzing the benchmark with\n    fuzzer.\"\"\"\n    base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n    if is_oss_fuzz(benchmark):\n        return '{base_tag}/oss-fuzz/builders/{fuzzer}/{project}'.format(\n            base_tag=base_tag, fuzzer=fuzzer, project=get_project(benchmark))\n    return '{base_tag}/builders/{fuzzer}/{benchmark}'.format(\n        base_tag=base_tag, fuzzer=fuzzer, benchmark=benchmark)\n\n\ndef get_oss_fuzz_builder_hash(benchmark):\n    \"\"\"Get the specified hash of the OSS-Fuzz builder for the OSS-Fuzz project\n    used by |benchmark|.\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['oss_fuzz_builder_hash']\n    raise ValueError('Can only get project on OSS-Fuzz benchmarks.')\n\n\ndef validate(benchmark):\n    \"\"\"Return True if |benchmark| is a valid fuzzbench fuzzer.\"\"\"\n    if VALID_BENCHMARK_REGEX.match(benchmark) is None:\n        logs.error('%s does not conform to %s pattern.', benchmark,\n                   VALID_BENCHMARK_REGEX.pattern)\n        return False\n    if benchmark in get_all_benchmarks():\n        return True\n    logs.error('%s must have a build.sh or oss-fuzz.yaml.', benchmark)\n    return False\n\n\ndef get_all_benchmarks():\n    \"\"\"Returns the list of all benchmarks.\"\"\"\n    benchmarks_dir = os.path.join(utils.ROOT_DIR, 'benchmarks')\n    all_benchmarks = []\n    for benchmark in os.listdir(benchmarks_dir):\n        benchmark_path = os.path.join(benchmarks_dir, benchmark)\n        if os.path.isfile(os.path.join(benchmark_path, 'oss-fuzz.yaml')):\n            # Benchmark is an OSS-Fuzz benchmark.\n            all_benchmarks.append(benchmark)\n        elif os.path.isfile(os.path.join(benchmark_path, 'build.sh')):\n            # Benchmark is a standard benchmark.\n            all_benchmarks.append(benchmark)\n    return all_benchmarks\n", "path": "common/benchmark_utils.py"}], "after_files": [{"content": "# Copyright 2020 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Code for dealing with benchmarks.\"\"\"\nimport os\nimport re\n\nfrom common import experiment_utils\nfrom common import fuzzer_utils\nfrom common import logs\nfrom common import oss_fuzz\nfrom common import utils\n\nVALID_BENCHMARK_REGEX = re.compile(r'^[A-Za-z0-9\\._\\-]+$')\n\n\ndef is_oss_fuzz(benchmark):\n    \"\"\"Returns True if |benchmark| is OSS-Fuzz-based project.\"\"\"\n    return os.path.isfile(oss_fuzz.get_config_file(benchmark))\n\n\ndef get_project(benchmark):\n    \"\"\"Returns the OSS-Fuzz project of |benchmark| if it is based on an\n    OSS-Fuzz project, otherwise raises ValueError.\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['project']\n    raise ValueError('Can only get project on OSS-Fuzz benchmarks.')\n\n\ndef get_fuzz_target(benchmark):\n    \"\"\"Returns the fuzz target of |benchmark|\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['fuzz_target']\n    return fuzzer_utils.DEFAULT_FUZZ_TARGET_NAME\n\n\ndef get_runner_image_url(benchmark, fuzzer, cloud_project):\n    \"\"\"Get the URL of the docker runner image for fuzzing the benchmark with\n    fuzzer.\"\"\"\n    base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n    return '{base_tag}/runners/{fuzzer}/{benchmark}'.format(base_tag=base_tag,\n                                                            fuzzer=fuzzer,\n                                                            benchmark=benchmark)\n\n\ndef get_builder_image_url(benchmark, fuzzer, cloud_project):\n    \"\"\"Get the URL of the docker builder image for fuzzing the benchmark with\n    fuzzer.\"\"\"\n    base_tag = experiment_utils.get_base_docker_tag(cloud_project)\n    return '{base_tag}/builders/{fuzzer}/{benchmark}'.format(\n        base_tag=base_tag, fuzzer=fuzzer, benchmark=benchmark)\n\n\ndef get_oss_fuzz_builder_hash(benchmark):\n    \"\"\"Get the specified hash of the OSS-Fuzz builder for the OSS-Fuzz project\n    used by |benchmark|.\"\"\"\n    if is_oss_fuzz(benchmark):\n        return oss_fuzz.get_config(benchmark)['oss_fuzz_builder_hash']\n    raise ValueError('Can only get project on OSS-Fuzz benchmarks.')\n\n\ndef validate(benchmark):\n    \"\"\"Return True if |benchmark| is a valid fuzzbench fuzzer.\"\"\"\n    if VALID_BENCHMARK_REGEX.match(benchmark) is None:\n        logs.error('%s does not conform to %s pattern.', benchmark,\n                   VALID_BENCHMARK_REGEX.pattern)\n        return False\n    if benchmark in get_all_benchmarks():\n        return True\n    logs.error('%s must have a build.sh or oss-fuzz.yaml.', benchmark)\n    return False\n\n\ndef get_all_benchmarks():\n    \"\"\"Returns the list of all benchmarks.\"\"\"\n    benchmarks_dir = os.path.join(utils.ROOT_DIR, 'benchmarks')\n    all_benchmarks = []\n    for benchmark in os.listdir(benchmarks_dir):\n        benchmark_path = os.path.join(benchmarks_dir, benchmark)\n        if os.path.isfile(os.path.join(benchmark_path, 'oss-fuzz.yaml')):\n            # Benchmark is an OSS-Fuzz benchmark.\n            all_benchmarks.append(benchmark)\n        elif os.path.isfile(os.path.join(benchmark_path, 'build.sh')):\n            # Benchmark is a standard benchmark.\n            all_benchmarks.append(benchmark)\n    return all_benchmarks\n", "path": "common/benchmark_utils.py"}]}