func()

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
}