huaweicloud-sdk-go-v3 icon indicating copy to clipboard operation
huaweicloud-sdk-go-v3 copied to clipboard

关于BaseInvoker中,Withretry方法的问题

Open leonharetd opened this issue 2 years ago • 2 comments

需求和问题描述: 使用NewEcsClient创建ecs,然后调用ListServerGroupsInvoker,这里使用了retry功能。然后发现无论成功失败都retry了一定次数。 客户端创建代码增加了RequestHandler,ResponseHandler。


func RequestHandler(request http.Request) {
	fmt.Println(request)
}

func ResponseHandler(response http.Response) {
	fmt.Println(response)
}

WithHttpHandler(httphandler.
NewHttpHandler().
AddRequestHandler(RequestHandler).
AddResponseHandler(ResponseHandler)))

response, err := client.ListServerGroupsInvoker(&model.ListServerGroupsRequest{
	Limit: &limit,
	}).WithRetry(5, func(i interface{}, err error) bool { return err != nil}, new(retry.None)).Invoke()
	if err == nil {
		fmt.Printf("%+v\n", response)
	}

结果就是handler打印了很多次,然后我看WithRetry的代码https://github.com/huaweicloud/huaweicloud-sdk-go-v3/blob/b1fce86b345524cdeb25cba84a0c325178499b98/core/invoker/invoker.go#L87 发现这里的退出条件只有times满足条件。 期望: 请求成功或者在重试过程中成功就结束retry,是否增加一个条件? 比如

if b.retryChecker(resp, err) {
  time.Sleep(time.Duration(b.backoffStrategy.ComputeDelayBeforeNextRetry()))
} else { 
  break
}

🙏

leonharetd avatar Nov 17 '22 09:11 leonharetd

感谢使用,v0.1.12已修复该问题

unionsdk avatar Nov 24 '22 12:11 unionsdk

👌

leonharetd avatar Nov 25 '22 00:11 leonharetd