diff --git a/pkg/services/object/get/assemble.go b/pkg/services/object/get/assemble.go index 7f8aade2..31247554 100644 --- a/pkg/services/object/get/assemble.go +++ b/pkg/services/object/get/assemble.go @@ -12,11 +12,10 @@ func (exec *execCtx) assemble() { return } - // do not use forwarding during assembly stage - // assembly flag is not inherited in produced - // `execCtx`, however `commonPrm` does, so it - // makes sense to nil it there - exec.prm.SetRequestForwarder(nil) + // Do not use forwarding during assembly stage. + // Request forwarding closure inherited in produced + // `execCtx` so it should be disabled there. + exec.disableForwarding() exec.log.Debug("trying to assemble the object...") diff --git a/pkg/services/object/get/exec.go b/pkg/services/object/get/exec.go index 58ac46e7..ac08dc58 100644 --- a/pkg/services/object/get/exec.go +++ b/pkg/services/object/get/exec.go @@ -347,3 +347,15 @@ func (exec *execCtx) writeCollectedObject() { exec.writeObjectPayload(exec.collectedObject) } } + +// isForwardingEnabled returns true if common execution +// parameters has request forwarding closure set. +func (exec execCtx) isForwardingEnabled() bool { + return exec.prm.forwarder != nil +} + +// disableForwarding removes request forwarding closure from common +// parameters, so it won't be inherited in new execution contexts. +func (exec *execCtx) disableForwarding() { + exec.prm.SetRequestForwarder(nil) +} diff --git a/pkg/services/object/get/util.go b/pkg/services/object/get/util.go index 7a1ff0cb..97aac7f7 100644 --- a/pkg/services/object/get/util.go +++ b/pkg/services/object/get/util.go @@ -82,7 +82,7 @@ func (c *clientCacheWrapper) get(addr network.AddressGroup) (getClient, error) { } func (c *clientWrapper) getObject(exec *execCtx, addr network.AddressGroup) (*objectSDK.Object, error) { - if exec.prm.forwarder != nil { + if exec.isForwardingEnabled() { return exec.prm.forwarder(addr, c.client) }