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