@@ -51,7 +51,7 @@ def __init__(self,
51
51
retry_max_attempts = 4 ,
52
52
retry_first_delay = 15 ,
53
53
retry_random_delay = 5 ,
54
- timeout_seconds = 60 .0 ,
54
+ timeout_seconds = 120 .0 ,
55
55
throttle_actions = 10 ,
56
56
throttle_commands = 10 ,
57
57
user_agent = None ,
@@ -369,42 +369,49 @@ def call():
369
369
def call ():
370
370
return self .session .get (self .endpoint + path , auth = self .auth , timeout = self .timeout )
371
371
372
- total_time = wait_time = 0
372
+ total_time = 0
373
373
result = None
374
374
for num_attempts in range (1 , self .retry_max_attempts + 1 ):
375
- if wait_time > 0 :
376
- sleep (wait_time )
377
- total_time += wait_time
378
- wait_time = 0
379
375
try :
380
376
result = call ()
377
+ if result .status_code == 200 :
378
+ return result
379
+ elif result .status_code in [429 , 502 , 503 , 504 ]:
380
+ if self .logger : self .logger .warning ("UMAPI timeout...service unavailable (code %d on try %d)" ,
381
+ result .status_code , num_attempts )
382
+ retry_wait = 0
383
+ if "Retry-After" in result .headers :
384
+ advice = result .headers ["Retry-After" ]
385
+ advised_time = parsedate_tz (advice )
386
+ if advised_time is not None :
387
+ # header contains date
388
+ retry_wait = int (mktime_tz (advised_time ) - time ())
389
+ else :
390
+ # header contains delta seconds
391
+ retry_wait = int (advice )
392
+ if retry_wait <= 0 :
393
+ # use exponential back-off with random delay
394
+ delay = randint (0 , self .retry_random_delay )
395
+ retry_wait = (int (pow (2 , num_attempts - 1 )) * self .retry_first_delay ) + delay
396
+ elif 201 <= result .status_code < 400 :
397
+ raise ClientError ("Unexpected HTTP Status {:d}: {}" .format (result .status_code , result .text ), result )
398
+ elif 400 <= result .status_code < 500 :
399
+ raise RequestError (result )
400
+ else :
401
+ raise ServerError (result )
381
402
except requests .Timeout :
382
403
total_time += int (self .timeout )
383
- raise UnavailableError (num_attempts , total_time , result )
384
- if result .status_code == 200 :
385
- return result
386
- elif result .status_code in [429 , 502 , 503 , 504 ]:
387
- if self .logger : self .logger .warning ("UMAPI timeout...service unavailable (code %d on try %d)" ,
388
- result .status_code , num_attempts )
389
- if "Retry-After" in result .headers :
390
- advice = result .headers ["Retry-After" ]
391
- advised_time = parsedate_tz (advice )
392
- if advised_time is not None :
393
- # header contains date
394
- wait_time = int (mktime_tz (advised_time ) - time ())
395
- else :
396
- # header contains delta seconds
397
- wait_time = int (advice )
398
- if wait_time <= 0 :
399
- # use exponential back-off with random delay
400
- delay = randint (0 , self .retry_random_delay )
401
- wait_time = (int (pow (2 , num_attempts )) * self .retry_first_delay ) + delay
402
- if self .logger : self .logger .warning ("Next retry in %d seconds..." , wait_time )
403
- elif 201 <= result .status_code < 400 :
404
- raise ClientError ("Unexpected HTTP Status {:d}: {}" .format (result .status_code , result .text ), result )
405
- elif 400 <= result .status_code < 500 :
406
- raise RequestError (result )
407
- else :
408
- raise ServerError (result )
409
- if self .logger : self .logger .error ("UMAPI timeout...giving up after %d attempts." , self .retry_max_attempts )
404
+ if self .logger : self .logger .warning ("UMAPI connection timeout...(%d seconds on try %d)" ,
405
+ self .timeout , num_attempts )
406
+ retry_wait = 0
407
+ result = None
408
+ if num_attempts < self .retry_max_attempts :
409
+ if retry_wait > 0 :
410
+ if self .logger : self .logger .warning ("Next retry in %d seconds..." , retry_wait )
411
+ sleep (retry_wait )
412
+ total_time += retry_wait
413
+ else :
414
+ if self .logger : self .logger .warning ("Immediate retry..." , retry_wait )
415
+ if self .logger : self .logger .error ("UMAPI timeout...giving up after %d attempts (%d seconds)." ,
416
+ self .retry_max_attempts , total_time )
410
417
raise UnavailableError (self .retry_max_attempts , total_time , result )
0 commit comments