X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/461fdaa1b96142b8065c131ae0334046fc71ea56..841d8e9643b622457474b74d075b36dcb67c871b:/sdk/go/keepclient/gateway_shim.go diff --git a/sdk/go/keepclient/gateway_shim.go b/sdk/go/keepclient/gateway_shim.go index eeb187e107..260824453d 100644 --- a/sdk/go/keepclient/gateway_shim.go +++ b/sdk/go/keepclient/gateway_shim.go @@ -17,6 +17,12 @@ import ( // keepViaHTTP implements arvados.KeepGateway by using a KeepClient to // do upstream requests to keepstore and keepproxy. +// +// This enables KeepClient to use KeepGateway wrappers (like +// arvados.DiskCache) to wrap its own HTTP client back-end methods +// (getOrHead, httpBlockWrite). +// +// See (*KeepClient)upstreamGateway() for the relevant glue. type keepViaHTTP struct { *KeepClient } @@ -40,8 +46,11 @@ func (kvh *keepViaHTTP) BlockRead(ctx context.Context, opts arvados.BlockReadOpt if err != nil { return 0, err } - defer rdr.Close() n, err := io.Copy(opts.WriteTo, rdr) + errClose := rdr.Close() + if err == nil { + err = errClose + } return int(n), err }