internal/proxydatasource: cache fetching errors
Update getModule to correctly cache fetching errors.
Don't cache context cancellation errors, to give the server a chance to
retry fetching a module if sudden interrupts occur.
Fixes golang/go#42886
Change-Id: I0fdcbcbb3c899c90dff745a69703a401981b98a7
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/274152
Reviewed-by: Julie Qiu <julie@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
diff --git a/internal/proxydatasource/datasource.go b/internal/proxydatasource/datasource.go
index 767820a..65097e7 100644
--- a/internal/proxydatasource/datasource.go
+++ b/internal/proxydatasource/datasource.go
@@ -99,10 +99,14 @@
m.RemoveNonRedistributableData()
}
}
- ds.versionCache[key] = &versionEntry{module: m, err: err}
+
if res.Error != nil {
+ if !errors.Is(ctx.Err(), context.Canceled) {
+ ds.versionCache[key] = &versionEntry{module: m, err: res.Error}
+ }
return nil, res.Error
}
+ ds.versionCache[key] = &versionEntry{module: m, err: err}
// Since we hold the lock and missed the cache, we can assume that we have
// never seen this module version. Therefore the following insert-and-sort