Skip to content

Commit a86b838

Browse files
authored
load_bigquery_stats: Create empty table with schema. (#2642)
* load_bigquery_stats: Create empty table with schema. Previously the schema was only set on load. If an engine isn't running (and therefore no stats are output), the schema on the table is never set, leading to exceptions in /fuzz-strategy-selection. Fixes #2629. * fix tests * fix import
1 parent 6427c1a commit a86b838

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/appengine/handlers/cron/load_bigquery_stats.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def _create_dataset_if_needed(self, bigquery, dataset_id):
7777

7878
return self._execute_insert_request(dataset_insert)
7979

80-
def _create_table_if_needed(self, bigquery, dataset_id, table_id):
80+
def _create_table_if_needed(self, bigquery, dataset_id, table_id, schema):
8181
"""Create a new table if needed."""
8282
project_id = utils.get_application_id()
8383
table_body = {
@@ -91,6 +91,9 @@ def _create_table_if_needed(self, bigquery, dataset_id, table_id):
9191
},
9292
}
9393

94+
if schema is not None:
95+
table_body['schema'] = schema
96+
9497
table_insert = bigquery.tables().insert(
9598
projectId=project_id, datasetId=dataset_id, body=table_body)
9699
return self._execute_insert_request(table_insert)
@@ -110,14 +113,16 @@ def _load_data(self, bigquery, fuzzer):
110113
for kind in STATS_KINDS:
111114
kind_name = kind.__name__
112115
table_id = kind_name
113-
if not self._create_table_if_needed(bigquery, dataset_id, table_id):
114-
continue
115116

116117
if kind == fuzzer_stats.TestcaseRun:
117118
schema = fuzzer_stats_schema.get(fuzzer)
118119
else:
119120
schema = kind.SCHEMA
120121

122+
if not self._create_table_if_needed(bigquery, dataset_id, table_id,
123+
schema):
124+
continue
125+
121126
gcs_path = fuzzer_stats.get_gcs_stats_path(kind_name, fuzzer, timestamp)
122127
load = {
123128
'destinationTable': {

src/clusterfuzz/_internal/tests/appengine/handlers/cron/load_bigquery_stats_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import webtest
2121

2222
from clusterfuzz._internal.datastore import data_types
23+
from clusterfuzz._internal.metrics import fuzzer_stats
2324
from clusterfuzz._internal.tests.test_libs import helpers as test_helpers
2425
from clusterfuzz._internal.tests.test_libs import test_utils
2526
from handlers.cron import load_bigquery_stats
@@ -76,6 +77,7 @@ def test_execute(self):
7677
'tableId': 'JobRun',
7778
'datasetId': 'fuzzer_stats',
7879
},
80+
'schema': fuzzer_stats.JobRun.SCHEMA,
7981
},
8082
datasetId='fuzzer_stats',
8183
projectId='test-clusterfuzz'),

0 commit comments

Comments
 (0)