From a2cc1314f9dbc66a1f39e6227541ec016880daaf Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 17 Aug 2023 11:25:00 +0200 Subject: [PATCH] refactor: use ridiculous getter --- cmd/ipfs/main.go | 74 +++++++++++++++++++++++++++++------------------- go.mod | 2 +- go.sum | 4 +-- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/cmd/ipfs/main.go b/cmd/ipfs/main.go index e54d3d83f64..a9244609ab2 100644 --- a/cmd/ipfs/main.go +++ b/cmd/ipfs/main.go @@ -13,6 +13,7 @@ import ( "os" "runtime/pprof" "strings" + "sync" "time" "github.com/blang/semver/v4" @@ -323,13 +324,7 @@ func makeExecutor(req *cmds.Request, env interface{}) (cmds.Executor, error) { Transport: otelhttp.NewTransport(tpt), } opts = append(opts, cmdhttp.ClientWithHTTPClient(httpClient)) - - // Fetch remove version, as some feature compatibility might change depending on it. - remoteVersion, err := getRemoteVersion(tracingWrappedExecutor{cmdhttp.NewClient(host, opts...)}) - if err != nil { - return nil, fmt.Errorf("could not determine version of remote API: %w", err) - } - opts = append(opts, cmdhttp.ClientWithRawAbsPath(remoteVersion.LT(ipfs.EncodedAbsolutePathVersion))) + opts = append(opts, cmdhttp.ClientWithRawAbsPath(getRawAbsPath(tracingWrappedExecutor{cmdhttp.NewClient(host, opts...)}))) return tracingWrappedExecutor{cmdhttp.NewClient(host, opts...)}, nil } @@ -438,31 +433,52 @@ func (nw nopWriter) Close() error { return nil } -func getRemoteVersion(exe cmds.Executor) (*semver.Version, error) { - ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second*30)) - defer cancel() +func getRawAbsPath(exe cmds.Executor) func() (bool, error) { + var ( + rawAbsPath bool + err error + once sync.Once + ) + + return func() (bool, error) { + once.Do(func() { + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second*30)) + defer cancel() + + req, e := cmds.NewRequest(ctx, []string{"version"}, nil, nil, nil, Root) + if e != nil { + err = e + return + } - req, err := cmds.NewRequest(ctx, []string{"version"}, nil, nil, nil, Root) - if err != nil { - return nil, err - } + var buf bytes.Buffer + re, e := cmds.NewWriterResponseEmitter(nopWriter{&buf}, req) + if e != nil { + err = e + return + } + err = exe.Execute(req, re, nil) + if e != nil { + err = e + return + } - var buf bytes.Buffer - re, err := cmds.NewWriterResponseEmitter(nopWriter{&buf}, req) - if err != nil { - return nil, err - } + var out ipfs.VersionInfo + dec := json.NewDecoder(&buf) + if e := dec.Decode(&out); e != nil { + err = e + return + } - err = exe.Execute(req, re, nil) - if err != nil { - return nil, err - } + remoteVersion, e := semver.New(out.Version) + if e != nil { + err = e + return + } - var out ipfs.VersionInfo - dec := json.NewDecoder(&buf) - if err := dec.Decode(&out); err != nil { - return nil, err - } + rawAbsPath = remoteVersion.LT(ipfs.EncodedAbsolutePathVersion) + }) - return semver.New(out.Version) + return rawAbsPath, err + } } diff --git a/go.mod b/go.mod index aeef3e699b6..3b991757741 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/ipfs/go-ds-measure v0.2.0 github.com/ipfs/go-fs-lock v0.0.7 github.com/ipfs/go-graphsync v0.14.4 - github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817083650-931096e39dda + github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817092353-bc5d76dbe1a2 github.com/ipfs/go-ipld-format v0.5.0 github.com/ipfs/go-ipld-git v0.1.1 github.com/ipfs/go-ipld-legacy v0.2.1 diff --git a/go.sum b/go.sum index feb1e237e14..70e5316bbef 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12X github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE= github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= -github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817083650-931096e39dda h1:+QVJu/I1vFZUM/Q5gJ3uyB+in2aQmV9SKGKUPRPJVGE= -github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817083650-931096e39dda/go.mod h1:OMMX/4WtqvDh8VbIxWLVAWH6HkVy2WMjnsEzZZcgsdw= +github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817092353-bc5d76dbe1a2 h1:qKD3rV/dTXhAQdiG+6uCrdE5kM3MGYr7PBOFsI0w9ls= +github.com/ipfs/go-ipfs-cmds v0.9.1-0.20230817092353-bc5d76dbe1a2/go.mod h1:OMMX/4WtqvDh8VbIxWLVAWH6HkVy2WMjnsEzZZcgsdw= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=