@@ -596,25 +596,34 @@ def execute!(*params)
596
596
597
597
Retriable . retriable :tries => tries ,
598
598
:on => [ TransmissionError ] ,
599
- :on_retry => client_error_handler ( request . authorization ) ,
600
599
:interval => lambda { |attempts | ( 2 ** attempts ) + rand } do
601
- result = request . send ( connection , true )
602
-
603
- case result . status
604
- when 200 ...300
605
- result
606
- when 301 , 302 , 303 , 307
607
- request = generate_request ( request . to_hash . merge ( {
608
- :uri => result . headers [ 'location' ] ,
609
- :api_method => nil
610
- } ) )
611
- raise RedirectError . new ( result . headers [ 'location' ] , result )
612
- when 400 ...500
613
- raise ClientError . new ( result . error_message || "A client error has occurred" , result )
614
- when 500 ...600
615
- raise ServerError . new ( result . error_message || "A server error has occurred" , result )
616
- else
617
- raise TransmissionError . new ( result . error_message || "A transmission error has occurred" , result )
600
+ # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
601
+ # auth to be re-attempted without having to retry all sorts of other failures like
602
+ # NotFound, etc
603
+ Retriable . retriable :tries => 2 ,
604
+ :on => [ AuthorizationError ] ,
605
+ :on_retry => client_error_handler ( request . authorization ) ,
606
+ :interval => lambda { |attempts | ( 2 ** attempts ) + rand } do
607
+ result = request . send ( connection , true )
608
+
609
+ case result . status
610
+ when 200 ...300
611
+ result
612
+ when 301 , 302 , 303 , 307
613
+ request = generate_request ( request . to_hash . merge ( {
614
+ :uri => result . headers [ 'location' ] ,
615
+ :api_method => nil
616
+ } ) )
617
+ raise RedirectError . new ( result . headers [ 'location' ] , result )
618
+ when 401
619
+ raise AuthorizationError . new ( result . error_message || 'Invalid/Expired Authentication' , result )
620
+ when 400 , 402 ...500
621
+ raise ClientError . new ( result . error_message || "A client error has occurred" , result )
622
+ when 500 ...600
623
+ raise ServerError . new ( result . error_message || "A server error has occurred" , result )
624
+ else
625
+ raise TransmissionError . new ( result . error_message || "A transmission error has occurred" , result )
626
+ end
618
627
end
619
628
end
620
629
end
0 commit comments