From b97cdbea9edbb582c271da586fccd983ffa70515 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Mon, 27 Sep 2021 09:52:03 +0300 Subject: [PATCH] [#839] service/object: Add high level functions to control request forwarding Applicable for object/get execution context. Signed-off-by: Alex Vanin --- pkg/services/object/get/assemble.go | 9 ++++----- pkg/services/object/get/exec.go | 12 ++++++++++++ pkg/services/object/get/util.go | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) 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) }