aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modfetch/fetch.go
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2020-07-15 17:38:36 -0400
committerMichael Matloob <matloob@golang.org>2020-08-17 19:57:12 +0000
commit1a3558341860357c2400e37773e5076bb3a51628 (patch)
treecc3e1f275ecb21f7c8957f30b6b45f1c263bef77 /src/cmd/go/internal/modfetch/fetch.go
parentc0cf190d226cc3defb71d17c01d0b45bf49a8a85 (diff)
downloadgo-1a3558341860357c2400e37773e5076bb3a51628.tar.gz
go-1a3558341860357c2400e37773e5076bb3a51628.zip
cmd/go: add tracing for querying and downloading from the proxy
This CL adds tracing spans for modload.queryPattern, modload.queryProxy, modload.QueryPattern, modload.QueryPattern.queryModule, modload.queryPrefixModules and modfetch.Download. Updates #38714 Change-Id: I537c7fa4f466c691c1b60ec73ef8a2277af49cd7 Reviewed-on: https://go-review.googlesource.com/c/go/+/242786 Run-TryBot: Michael Matloob <matloob@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/go/internal/modfetch/fetch.go')
-rw-r--r--src/cmd/go/internal/modfetch/fetch.go21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go
index 6606612658..e29eb0a942 100644
--- a/src/cmd/go/internal/modfetch/fetch.go
+++ b/src/cmd/go/internal/modfetch/fetch.go
@@ -24,6 +24,7 @@ import (
"cmd/go/internal/par"
"cmd/go/internal/renameio"
"cmd/go/internal/robustio"
+ "cmd/go/internal/trace"
"golang.org/x/mod/module"
"golang.org/x/mod/sumdb/dirhash"
@@ -48,7 +49,7 @@ func Download(ctx context.Context, mod module.Version) (dir string, err error) {
err error
}
c := downloadCache.Do(mod, func() interface{} {
- dir, err := download(mod)
+ dir, err := download(ctx, mod)
if err != nil {
return cached{"", err}
}
@@ -58,7 +59,10 @@ func Download(ctx context.Context, mod module.Version) (dir string, err error) {
return c.dir, c.err
}
-func download(mod module.Version) (dir string, err error) {
+func download(ctx context.Context, mod module.Version) (dir string, err error) {
+ ctx, span := trace.StartSpan(ctx, "modfetch.download "+mod.String())
+ defer span.Done()
+
// If the directory exists, and no .partial file exists, the module has
// already been completely extracted. .partial files may be created when a
// module zip directory is extracted in place instead of being extracted to a
@@ -73,7 +77,7 @@ func download(mod module.Version) (dir string, err error) {
// To avoid cluttering the cache with extraneous files,
// DownloadZip uses the same lockfile as Download.
// Invoke DownloadZip before locking the file.
- zipfile, err := DownloadZip(mod)
+ zipfile, err := DownloadZip(ctx, mod)
if err != nil {
return "", err
}
@@ -143,6 +147,7 @@ func download(mod module.Version) (dir string, err error) {
return "", err
}
+ ctx, span = trace.StartSpan(ctx, "unzip "+zipfile)
if unzipInPlace {
if err := ioutil.WriteFile(partialPath, nil, 0666); err != nil {
return "", err
@@ -172,6 +177,7 @@ func download(mod module.Version) (dir string, err error) {
return "", err
}
}
+ defer span.Done()
if !cfg.ModCacheRW {
// Make dir read-only only *after* renaming it.
@@ -196,7 +202,7 @@ var downloadZipCache par.Cache
// DownloadZip downloads the specific module version to the
// local zip cache and returns the name of the zip file.
-func DownloadZip(mod module.Version) (zipfile string, err error) {
+func DownloadZip(ctx context.Context, mod module.Version) (zipfile string, err error) {
// The par.Cache here avoids duplicate work.
type cached struct {
zipfile string
@@ -231,7 +237,7 @@ func DownloadZip(mod module.Version) (zipfile string, err error) {
if err := os.MkdirAll(filepath.Dir(zipfile), 0777); err != nil {
return cached{"", err}
}
- if err := downloadZip(mod, zipfile); err != nil {
+ if err := downloadZip(ctx, mod, zipfile); err != nil {
return cached{"", err}
}
return cached{zipfile, nil}
@@ -239,7 +245,10 @@ func DownloadZip(mod module.Version) (zipfile string, err error) {
return c.zipfile, c.err
}
-func downloadZip(mod module.Version, zipfile string) (err error) {
+func downloadZip(ctx context.Context, mod module.Version, zipfile string) (err error) {
+ ctx, span := trace.StartSpan(ctx, "modfetch.downloadZip "+zipfile)
+ defer span.Done()
+
// Clean up any remaining tempfiles from previous runs.
// This is only safe to do because the lock file ensures that their
// writers are no longer active.