diff --git a/CHANGELOG.md b/CHANGELOG.md index 2174caa93c..817c87999c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Changelog for NeoFS Node - GC deadlock on local object storage shutdown (#3837) - `owner mismatches signature` for stored objects (#3836) - SN does not retry resending failed transaction because of insufficient GAS in some cases (#3839) +- Too early GET/HEAD/RANGE request failure on single SN dial failure (#3840) ### Changed - SN returns unsigned responses to requests with API >= `v2.22` (#3785) diff --git a/pkg/services/object/get/exec.go b/pkg/services/object/get/exec.go index dfc65d2d25..95cea1b3c1 100644 --- a/pkg/services/object/get/exec.go +++ b/pkg/services/object/get/exec.go @@ -7,7 +7,6 @@ import ( "fmt" "io" - clientcore "github.com/nspcc-dev/neofs-node/pkg/core/client" "github.com/nspcc-dev/neofs-node/pkg/services/object/util" cid "github.com/nspcc-dev/neofs-sdk-go/container/id" "github.com/nspcc-dev/neofs-sdk-go/netmap" @@ -296,18 +295,6 @@ func (exec *execCtx) headChild(id oid.ID) (*object.Object, bool) { return nil, false } -func (exec *execCtx) remoteClient(info clientcore.NodeInfo) (getClient, bool) { - c, err := exec.svc.clientCache.get(exec.context(), info) - - if err == nil { - return c, true - } - exec.status = statusUndefined - exec.err = err - exec.log.Debug("could not construct remote node client") - return nil, false -} - func mergeSplitInfo(dst, src *object.SplitInfo) { if last := src.GetLastPart(); !last.IsZero() { dst.SetLastPart(last) diff --git a/pkg/services/object/get/remote.go b/pkg/services/object/get/remote.go index e80cdd60c3..1d302f7321 100644 --- a/pkg/services/object/get/remote.go +++ b/pkg/services/object/get/remote.go @@ -12,9 +12,12 @@ import ( func (exec *execCtx) processNode(info client.NodeInfo) bool { exec.log.Debug("processing node...", zap.Stringers("address group", info.AddressGroup())) - remoteClient, ok := exec.remoteClient(info) - if !ok { - return true + remoteClient, err := exec.svc.clientCache.get(exec.context(), info) + if err != nil { + exec.status = statusUndefined + exec.err = err + exec.log.Debug("could not construct remote node client", zap.Error(err)) + return false } obj, reader, err := remoteClient.getObject(exec)