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