diff options
| author | Jamal Carvalho <jamal@golang.org> | 2023-08-24 15:18:17 +0000 |
|---|---|---|
| committer | Jamal Carvalho <jamal@golang.org> | 2023-08-24 16:03:18 +0000 |
| commit | 3e037752644f28f0804bd273687e71408f840cee (patch) | |
| tree | 91a9365573bfed1913736dfe17f12ce94075f21e /internal/worker/server.go | |
| parent | e8d9bf32bf4fb01e7a9a9585c33511ce6d4b115b (diff) | |
| download | go-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.go | 23 |
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)) |
