internal/vulndb: create vulndb table when reading from it
This is a correction of
https://go-review.git.corp.google.com/c/pkgsite-metrics/+/489855.
Change-Id: I0204fe59c0f78a0a36ff759bc6b8a7c87468c4ff
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/489935
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Julie Qiu <julieqiu@google.com>
Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com>
diff --git a/internal/vulndb/vulndb.go b/internal/vulndb/vulndb.go
index 9f9d1df..738a9d8 100644
--- a/internal/vulndb/vulndb.go
+++ b/internal/vulndb/vulndb.go
@@ -114,6 +114,14 @@
// most recent state of the vulnerability database at c.
func ReadMostRecentDB(ctx context.Context, c *bigquery.Client) (entries []*Entry, err error) {
defer derrors.Wrap(&err, "ReadMostRecentDB")
+
+ // The server does not create vulndb table since it lives
+ // in a different dataset. Hence, one could get an error
+ // accessing it if it was not created in the past.
+ if _, err := c.CreateOrUpdateTable(ctx, TableName); err != nil {
+ return nil, err
+ }
+
query := bigquery.PartitionQuery{
Table: c.FullTableName(TableName),
PartitionOn: "ID",
diff --git a/internal/worker/vulndb.go b/internal/worker/vulndb.go
index 273d80f..078e39a 100644
--- a/internal/worker/vulndb.go
+++ b/internal/worker/vulndb.go
@@ -69,18 +69,15 @@
return errors.New("failed to create go-vulndb bucket")
}
- entries, err := vulndbEntries(ctx, bucket)
- if err != nil {
- return err
- }
- // lastModified should be run after vulndbEntries. The latter
- // will create a vulndb table if one does not exist. The server
- // does not create this table since it lives in a different
- // dataset. Hence, one could get an error otherwise.
lmts, err := lastModified(ctx, dbClient)
if err != nil {
return err
}
+ entries, err := vulndbEntries(ctx, bucket)
+ if err != nil {
+ return err
+ }
+
for _, e := range entries {
lmt, ok := lmts[e.ID]
if ok && e.ModifiedTime.Equal(lmt) {