Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8fb8c6f

Browse files
author
wallisyan
committed
modify retry logic
1 parentffb7f66 commit8fb8c6f

File tree

5 files changed

+67
-61
lines changed

5 files changed

+67
-61
lines changed

‎aliyun-python-sdk-core/alibabacloud/client.py‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
TimeoutConfigReader,# 获取timeout
3535
EndpointHandler,# 获取endpoint
3636
LogHandler,
37-
#RetryHandler,
37+
RetryHandler,
3838
ServerErrorHandler,
3939
HttpHandler
4040
]
@@ -76,18 +76,18 @@ def __init__(self, access_key_id=None, access_key_secret=None, bearer_token=None
7676
self.https_port=https_port
7777
self.connection_timeout=connection_timeout
7878
self.read_timeout=read_timeout
79+
self.enable_stream_logger=enable_stream_logger
80+
self.profile_name=profile_name
81+
self.config_file=config_file
7982
# self.enable_http_debug = enable_http_debug # http-debug 只从环境变量获取
8083
self.http_debug=None
8184
# proxy provider两个: client env
8285
self.http_proxy=http_proxy
8386
self.https_proxy=https_proxy
8487
self._proxy= {
85-
'http':http_proxy,
86-
'https':https_proxy,
88+
'http':self.http_proxy,
89+
'https':self.https_proxy,
8790
}
88-
self.enable_stream_logger=enable_stream_logger
89-
self.profile_name=profile_name
90-
self.config_file=config_file
9191
# retry
9292
self._auto_retry=auto_retry
9393
importaliyunsdkcore.retry.retry_policyasretry_policy
@@ -191,17 +191,16 @@ def handle_request(self, api_request, request_handlers=None, context=None):
191191

192192
ifnotrequest_handlers:
193193
request_handlers=self.handlers
194-
195194
foriinrange(len(request_handlers)):
196195
request_handlers[i]().handle_request(context)
197196

198197
foriinreversed(range(len(request_handlers))):
199198
request_handlers[i]().handle_response(context)
200-
#if context.retry_flag:
201-
#time.sleep(context.retry_backoff)
202-
# self.handle_request(api_request,
203-
# request_handlers=request_handlers[i:],
204-
# context=context)
199+
ifcontext.retry_flag:
200+
time.sleep(context.retry_backoff/1000.0)
201+
self.handle_request(api_request,
202+
request_handlers=request_handlers[i:],
203+
context=context)
205204
ifcontext.exception:
206205
returncontext.exception
207206

‎aliyun-python-sdk-core/alibabacloud/handlers/http_handler.py‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def do_request(context):
6363
current_protocol='http://'ifhttp_request.protocol.lower()=='http'else'https://'
6464
# TODO : 最终拼接的是啥,还需要调查下
6565
url=current_protocol+context.endpoint+http_request.url
66-
6766
ifhttp_request.port!=80orhttp_request.port!=443:
6867
url=current_protocol+context.endpoint+":"+ \
6968
str(http_request.port)+http_request.url
@@ -76,9 +75,19 @@ def do_request(context):
7675

7776
# ignore the warning-InsecureRequestWarning
7877
urllib3.disable_warnings()
78+
# TODO fixed the retry flag
79+
context.retry_flag=False
80+
try:
81+
response=s.send(prepped,proxies=http_request.proxy,
82+
timeout=http_request.timeout,
83+
allow_redirects=False,verify=None,cert=None)
84+
exceptIOErrorase:
85+
fromaliyunsdkcore.acs_exception.exceptionsimportClientException
86+
fromaliyunsdkcore.acs_exceptionimporterror_code
87+
exception=ClientException(error_code.SDK_HTTP_ERROR,str(e))
7988

80-
response=s.send(prepped,proxies=http_request.proxy,
81-
timeout=http_request.timeout,
82-
allow_redirects=False,verify=None,cert=None)
83-
context.http_response=response
84-
89+
context.exception=exception
90+
fromalibabacloud.requestimportHTTPResponse
91+
context.http_response=HTTPResponse()
92+
else:
93+
context.http_response=response

‎aliyun-python-sdk-core/alibabacloud/handlers/retry_handler.py‎

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,38 +31,32 @@ class RetryHandler(RequestHandler):
3131
# pass
3232

3333
defhandle_request(self,context):
34-
print(1111111,context.http_request.retries)
3534
ifcontext.http_request.retries==0:
3635
retry_policy_context=RetryPolicyContext(context.api_request,None,0,None)
3736
ifcontext.config.retry_policy.should_retry(retry_policy_context)& \
3837
RetryCondition.SHOULD_RETRY_WITH_CLIENT_TOKEN:
3938
self._add_request_client_token(context.api_request)
4039

4140
defhandle_response(self,context):
42-
print('context.exception',context.exception)
4341
api_request=context.api_request
4442
retry_policy_context=RetryPolicyContext(api_request,context.exception,
4543
context.http_request.retries,
4644
context.http_response.status_code)
4745

4846
should_retry=context.config.retry_policy.should_retry(retry_policy_context)
4947

50-
ifshould_retry&RetryCondition.SHOULD_RETRY:
51-
retry_policy_context.retryable=should_retry
52-
53-
time_to_sleep=context.config.retry_policy.compute_delay_before_next_retry(retry_policy_context)
54-
time.sleep(time_to_sleep/1000.0)
55-
context.http_request.retries+=1
56-
57-
context.retry_flag=True
58-
# context.retry_backoff = context.config.retry_policy.compute_delay_before_next_retry(
59-
# retry_policy_context
60-
# )
61-
else:
48+
# if should_retry & RetryCondition.SHOULD_RETRY:
49+
ifshould_retry&RetryCondition.NO_RETRY:
6250
context.retry_flag=False
63-
# context.retry_backoff = 0
6451
ifcontext.exception:
6552
raisecontext.exception
53+
else:
54+
retry_policy_context.retryable=should_retry
55+
context.http_request.retries+=1
56+
context.retry_flag=True
57+
context.retry_backoff=context.config.retry_policy.compute_delay_before_next_retry(
58+
retry_policy_context
59+
)
6660

6761

6862
@staticmethod

‎aliyun-python-sdk-core/alibabacloud/handlers/server_error_handler.py‎

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,32 @@ def handle_response(self, context):
2525

2626
response=context.http_response
2727
request_id=None
28+
fromalibabacloud.requestimportHTTPResponse
29+
ifnotisinstance(response,HTTPResponse):
30+
try:
31+
body_obj=json.loads(response.text.decode('utf-8'))
32+
request_id=body_obj.get('RequestId')
33+
except (ValueError,TypeError,AttributeError):
34+
# in case the response body is not a json string, return the raw
35+
# data instead
36+
# logger.warning('Failed to parse response as json format. Response:%s', response.text)
37+
pass
38+
ifresponse.status_code<codes.OKorresponse.status_code>=codes.MULTIPLE_CHOICES:
2839

29-
try:
30-
body_obj=json.loads(response.text.decode('utf-8'))
31-
request_id=body_obj.get('RequestId')
32-
except (ValueError,TypeError,AttributeError):
33-
# in case the response body is not a json string, return the raw
34-
# data instead
35-
# logger.warning('Failed to parse response as json format. Response:%s', response.text)
36-
pass
37-
ifresponse.status_code<codes.OKorresponse.status_code>=codes.MULTIPLE_CHOICES:
38-
39-
server_error_code,server_error_message=self._parse_error_info_from_response_body(
40-
response.text)
41-
ifresponse.status_code==codes.BAD_REQUESTandserver_error_code=='SignatureDoesNotMatch':
42-
ifhttp_request.signature==server_error_message.split(':')[1]:
43-
server_error_code='InvalidAccessKeySecret'
44-
server_error_message='The AccessKeySecret is incorrect. ' \
45-
'Please check your AccessKeyId and AccessKeySecret.'
46-
fromaliyunsdkcore.acs_exception.exceptionsimportServerException
47-
exception=ServerException(
48-
server_error_code,
49-
server_error_message,
50-
http_status=response.status_code,
51-
request_id=request_id)
52-
53-
# logger.error("ServerException occurred. Host:%s SDK-Version:%s ServerException:%s",
54-
# http_request.endpoint, aliyunsdkcore.__version__, str(exception))
55-
56-
context.exception=exception
40+
server_error_code,server_error_message=self._parse_error_info_from_response_body(
41+
response.text)
42+
ifresponse.status_code==codes.BAD_REQUESTandserver_error_code=='SignatureDoesNotMatch':
43+
ifhttp_request.signature==server_error_message.split(':')[1]:
44+
server_error_code='InvalidAccessKeySecret'
45+
server_error_message='The AccessKeySecret is incorrect. ' \
46+
'Please check your AccessKeyId and AccessKeySecret.'
47+
fromaliyunsdkcore.acs_exception.exceptionsimportServerException
48+
exception=ServerException(
49+
server_error_code,
50+
server_error_message,
51+
http_status=response.status_code,
52+
request_id=request_id)
53+
context.exception=exception
5754

5855
@staticmethod
5956
def_parse_error_info_from_response_body(response_body):

‎aliyun-python-sdk-core/alibabacloud/request.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,10 @@ def __init__(self, accept_format=None, method=None, protocol=None, proxy=None,
4141
self.enable_retry=enable_retry
4242
self.max_retry_times=max_retry_times
4343
self.retries=retries
44+
45+
46+
classHTTPResponse:
47+
def__init__(self,status_code=None,headers=None,content=None):
48+
self.status_code=status_code
49+
self.headers=headers
50+
self.content=content

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp