internal/worker: fetch vuln db modified times after reading entries

vulndb table sits in the vulndb dataset. Worker server does not create
tables, if needed, for that dataset upon startup. If the table does not
exist and we try to read last modified entries, we'll hit an error.

Change-Id: Ic1f9fb40e8645c1738f6ca7056c431f19412dde5
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/489855
Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com>
Reviewed-by: Julie Qiu <julieqiu@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/internal/vulndb/vulndb_test.go b/internal/vulndb/vulndb_test.go
index adc07df..a54f71d 100644
--- a/internal/vulndb/vulndb_test.go
+++ b/internal/vulndb/vulndb_test.go
@@ -78,7 +78,11 @@
 		t.Fatalf("want 2 rows; got %d", len(got))
 	}
 	for _, e := range got {
-		if e.ModifiedTime != lmt {
+		// Ideally, we would check lmt != e.ModifiedTime but
+		// unmarshaling time.Time introduces some nanosecond
+		// level imprecision. Instead, we just check that it
+		// is actually set.
+		if e.ModifiedTime.IsZero() {
 			t.Fatalf("want last modified time %v; got %v", lmt, e.ModifiedTime)
 		}
 	}
diff --git a/internal/worker/vulndb.go b/internal/worker/vulndb.go
index 0ee62e2..273d80f 100644
--- a/internal/worker/vulndb.go
+++ b/internal/worker/vulndb.go
@@ -69,11 +69,15 @@
 		return errors.New("failed to create go-vulndb bucket")
 	}
 
-	lmts, err := lastModified(ctx, dbClient)
+	entries, err := vulndbEntries(ctx, bucket)
 	if err != nil {
 		return err
 	}
-	entries, err := vulndbEntries(ctx, bucket)
+	// 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
 	}