forked from TrueCloudLab/frostfs-sdk-go
[#254] client: Fix incorrect response processing case
In previous implementation `processResponse` returned `true` if `resolveAPIFailures` is set and status failure is received. This led to post-processing of the results, which no longer pays attention to the status. For example, `ObjectHead` returned `unexpected header type` error due to empty body. Make `contextCall.processResponse` to return success flag regardless of `resolveAPIFailures` setting. Make `contextCall.processCall` to return `err` field presence flag on `processResponse` false return. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
3bbf7ee15d
commit
85e3c7b087
1 changed files with 7 additions and 7 deletions
|
@ -211,18 +211,18 @@ func (x *contextCall) processResponse() bool {
|
||||||
// unwrap unsuccessful status and return it
|
// unwrap unsuccessful status and return it
|
||||||
// as error if client has been configured so
|
// as error if client has been configured so
|
||||||
successfulStatus := apistatus.IsSuccessful(st)
|
successfulStatus := apistatus.IsSuccessful(st)
|
||||||
if !successfulStatus && x.resolveAPIFailures {
|
|
||||||
|
if x.resolveAPIFailures {
|
||||||
x.err = apistatus.ErrFromStatus(st)
|
x.err = apistatus.ErrFromStatus(st)
|
||||||
return false
|
} else {
|
||||||
|
x.statusRes.setStatus(st)
|
||||||
}
|
}
|
||||||
|
|
||||||
x.statusRes.setStatus(st)
|
return successfulStatus
|
||||||
|
|
||||||
return successfulStatus || !x.resolveAPIFailures
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// reads response (if rResp is set) and processes it. Result means success.
|
// reads response (if rResp is set) and processes it. Result means success.
|
||||||
// If failed, contextCall.err contains the reason.
|
// If failed, contextCall.err (or statusRes if resolveAPIFailures is set) contains the reason.
|
||||||
func (x *contextCall) readResponse() bool {
|
func (x *contextCall) readResponse() bool {
|
||||||
if x.rResp != nil {
|
if x.rResp != nil {
|
||||||
x.err = x.rResp()
|
x.err = x.rResp()
|
||||||
|
@ -273,7 +273,7 @@ func (x *contextCall) processCall() bool {
|
||||||
// read response
|
// read response
|
||||||
ok = x.readResponse()
|
ok = x.readResponse()
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return x.err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// close and write response to resulting structure
|
// close and write response to resulting structure
|
||||||
|
|
Loading…
Reference in a new issue