@@ -508,13 +508,10 @@ def do_api_query(self, orig_request, url, method="POST",
508
508
query_state = {
509
509
'had_error_retry' : False ,
510
510
'request' : request ,
511
- 'failures' : 0 ,
512
511
} # type: Dict[str, Any]
513
512
514
513
def error_retry (error_string ):
515
- # type: (str) -> bool
516
- if not self .retry_on_errors or query_state ["failures" ] >= 10 :
517
- return False
514
+ # type: (str) -> None
518
515
if self .verbose :
519
516
if not query_state ["had_error_retry" ]:
520
517
sys .stdout .write ("zulip API(%s): connection error%s -- retrying." %
@@ -524,9 +521,6 @@ def error_retry(error_string):
524
521
sys .stdout .write ("." )
525
522
sys .stdout .flush ()
526
523
query_state ["request" ]["dont_block" ] = json .dumps (True )
527
- time .sleep (1 )
528
- query_state ["failures" ] += 1
529
- return True
530
524
531
525
def end_error_retry (succeeded ):
532
526
# type: (bool) -> None
@@ -536,7 +530,8 @@ def end_error_retry(succeeded):
536
530
else :
537
531
print ("Failed!" )
538
532
539
- while True :
533
+ backoff = RandomExponentialBackoff (timeout_success_equivalent = 300 )
534
+ while backoff .keep_going ():
540
535
try :
541
536
if method == "GET" :
542
537
kwarg = "params"
@@ -559,7 +554,9 @@ def end_error_retry(succeeded):
559
554
560
555
# On 50x errors, try again after a short sleep
561
556
if str (res .status_code ).startswith ('5' ):
562
- if error_retry (" (server %s)" % (res .status_code ,)):
557
+ error_retry (" (server %s)" % (res .status_code ,))
558
+ backoff .fail ()
559
+ if backoff .keep_going ():
563
560
continue
564
561
# Otherwise fall through and process the python-requests error normally
565
562
except (requests .exceptions .Timeout , requests .exceptions .SSLError ) as e :
@@ -585,7 +582,9 @@ def end_error_retry(succeeded):
585
582
# in an invalid site.
586
583
raise UnrecoverableNetworkError ('cannot connect to server ' + self .base_url )
587
584
588
- if error_retry ("" ):
585
+ error_retry ("" )
586
+ backoff .fail ()
587
+ if backoff .keep_going ():
589
588
continue
590
589
end_error_retry (False )
591
590
return {'msg' : "Connection error:\n %s" % traceback .format_exc (),
@@ -609,6 +608,7 @@ def end_error_retry(succeeded):
609
608
end_error_retry (False )
610
609
return {'msg' : "Unexpected error from the server" , "result" : "http-error" ,
611
610
"status_code" : res .status_code }
611
+ return {'msg' : "Unexpected error from the server" , "result" : "unexpected-error" }
612
612
613
613
def call_endpoint (self , url = None , method = "POST" , request = None ,
614
614
longpolling = False , files = None , timeout = None ):
0 commit comments