in services/dybaseapi/mns/queue.go [71:132]
func (queue *Queue) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse) (err error) {
// add clientVersion
request.GetHeaders()["x-sdk-core-version"] = sdk.Version
if request.GetScheme() == "" {
request.SetScheme("HTTP")
}
// init request params
err = requests.InitParams(request)
if err != nil {
return
}
// signature
httpRequest, err := buildHttpRequest(request, queue.signer)
if err != nil {
return
}
if queue.config.UserAgent != "" {
httpRequest.Header.Set("User-Agent", queue.config.UserAgent)
}
var httpResponse *http.Response
for retryTimes := 0; retryTimes <= queue.config.MaxRetryTime; retryTimes++ {
httpResponse, err = queue.httpClient.Do(httpRequest)
//var timeout bool
// receive error
if err != nil {
if !queue.config.AutoRetry {
return
//} else if timeout = isTimeout(err); !timeout {
// // if not timeout error, return
// return
} else if retryTimes >= queue.config.MaxRetryTime {
// timeout but reached the max retry times, return
timeoutErrorMsg := fmt.Sprintf(errors.TimeoutErrorMessage, strconv.Itoa(retryTimes+1), strconv.Itoa(retryTimes+1))
err = errors.NewClientError(errors.TimeoutErrorCode, timeoutErrorMsg, err)
return
}
}
// if status code >= 500 or timeout, will trigger retry
if queue.config.AutoRetry && (err != nil || isServerError(httpResponse)) {
// rewrite signatureNonce and signature
httpRequest, err = buildHttpRequest(request, queue.signer)
if err != nil {
return
}
continue
}
break
}
err = responses.Unmarshal(response, httpResponse, request.GetAcceptFormat())
// wrap server errors
if serverErr, ok := err.(*errors.ServerError); ok {
var wrapInfo = map[string]string{}
wrapInfo["StringToSign"] = request.GetStringToSign()
err = errors.WrapServerError(serverErr, wrapInfo)
}
return
}