[#839] service/object: Add high level functions to control request forwarding

Applicable for object/get execution context.

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-09-27 09:52:03 +03:00 committed by Alex Vanin
parent b3464e8140
commit b97cdbea9e
3 changed files with 17 additions and 6 deletions

View file

@ -12,11 +12,10 @@ func (exec *execCtx) assemble() {
return return
} }
// do not use forwarding during assembly stage // Do not use forwarding during assembly stage.
// assembly flag is not inherited in produced // Request forwarding closure inherited in produced
// `execCtx`, however `commonPrm` does, so it // `execCtx` so it should be disabled there.
// makes sense to nil it there exec.disableForwarding()
exec.prm.SetRequestForwarder(nil)
exec.log.Debug("trying to assemble the object...") exec.log.Debug("trying to assemble the object...")

View file

@ -347,3 +347,15 @@ func (exec *execCtx) writeCollectedObject() {
exec.writeObjectPayload(exec.collectedObject) 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)
}

View file

@ -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) { 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) return exec.prm.forwarder(addr, c.client)
} }