aboutsummaryrefslogtreecommitdiff
path: root/internal/worker/server.go
diff options
context:
space:
mode:
authorJamal Carvalho <jamal@golang.org>2023-08-24 15:18:17 +0000
committerJamal Carvalho <jamal@golang.org>2023-08-24 16:03:18 +0000
commit3e037752644f28f0804bd273687e71408f840cee (patch)
tree91a9365573bfed1913736dfe17f12ce94075f21e /internal/worker/server.go
parente8d9bf32bf4fb01e7a9a9585c33511ce6d4b115b (diff)
downloadgo-x-pkgsite-3e037752644f28f0804bd273687e71408f840cee.tar.xz
internal/worker: filter index entries for invalid versions
A bug in the module proxy caused an entries in the index to contain empty version information breaking the pkgsite worker polling job. This change filters out index entries with invalid version information and logs the entry as a warning. Change-Id: I221100d7b26fcd7a17cb87968bb9d7c1c843a0bb Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/522183 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> kokoro-CI: kokoro <noreply+kokoro@google.com> Run-TryBot: Jamal Carvalho <jamal@golang.org>
Diffstat (limited to 'internal/worker/server.go')
-rw-r--r--internal/worker/server.go23
1 files changed, 11 insertions, 12 deletions
diff --git a/internal/worker/server.go b/internal/worker/server.go
index 9f7416ef..be0ac6a1 100644
--- a/internal/worker/server.go
+++ b/internal/worker/server.go
@@ -23,6 +23,7 @@ import (
"github.com/go-redis/redis/v8"
"github.com/google/safehtml/template"
"go.opencensus.io/trace"
+ "golang.org/x/mod/semver"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/cache"
"golang.org/x/pkgsite/internal/config"
@@ -418,27 +419,25 @@ func parseModulePathAndVersion(requestPath string) (string, string, error) {
func (s *Server) handlePollIndex(w http.ResponseWriter, r *http.Request) (err error) {
defer derrors.Wrap(&err, "handlePollIndex(%q)", r.URL.Path)
ctx := r.Context()
- if deadline, ok := ctx.Deadline(); ok {
- log.Infof(ctx, "polling at %v with deadline %v", time.Now(), deadline)
- }
-
- // log.Infof(ctx, "", limit)
limit := parseLimitParam(r, 10)
- log.Infof(ctx, "got limit %v; getting the latest index timestamp", limit)
since, err := s.db.LatestIndexTimestamp(ctx)
if err != nil {
- log.Errorf(ctx, "failed to get timestamp: %v", err)
return err
}
- log.Infof(ctx, "last timestamp was %v; querying versions from the index", since)
modules, err := s.indexClient.GetVersions(ctx, since, limit)
if err != nil {
- log.Errorf(ctx, "failed to get versions: %v", err)
return err
}
- log.Infof(ctx, "found %v modules from the index; inserting them into the database", len(modules))
- if err := s.db.InsertIndexVersions(ctx, modules); err != nil {
- log.Errorf(ctx, "failed to insert into the database: %v", err)
+ var versions []*internal.IndexVersion
+ for _, v := range modules {
+ // This is defensive, but the proxy at one point served bad versions due to a bug.
+ if semver.IsValid(v.Version) {
+ versions = append(versions, v)
+ } else {
+ log.Warningf(ctx, "invalid module version for %s %s %s", v.Path, v.Version, v.Timestamp)
+ }
+ }
+ if err := s.db.InsertIndexVersions(ctx, versions); err != nil {
return err
}
log.Infof(ctx, "inserted %d modules from the index", len(modules))