@@ -2796,7 +2796,9 @@ async def run(self) -> T:
27962796 if isinstance (exc , (ConnectionFailure , OperationFailure )):
27972797 # ConnectionFailures do not supply a code property
27982798 exc_code = getattr (exc , "code" , None )
2799- always_retryable = exc .has_error_label ("RetryableError" )
2799+ always_retryable = exc .has_error_label (
2800+ "RetryableError"
2801+ ) and exc .has_error_label ("SystemOverloadedError" )
28002802 overloaded = exc .has_error_label ("SystemOverloadedError" )
28012803 if not always_retryable and (
28022804 self ._is_not_eligible_for_retry ()
@@ -2819,7 +2821,9 @@ async def run(self) -> T:
28192821 ):
28202822 exc_to_check = exc .error
28212823 retryable_write_label = exc_to_check .has_error_label ("RetryableWriteError" )
2822- always_retryable = exc_to_check .has_error_label ("RetryableError" )
2824+ always_retryable = exc_to_check .has_error_label (
2825+ "RetryableError"
2826+ ) and exc .has_error_label ("SystemOverloadedError" )
28232827 overloaded = exc_to_check .has_error_label ("SystemOverloadedError" )
28242828 if not self ._retryable and not always_retryable :
28252829 raise
@@ -2847,15 +2851,14 @@ async def run(self) -> T:
28472851 self ._deprioritized_servers .append (self ._server )
28482852
28492853 self ._always_retryable = always_retryable
2850- if always_retryable :
2854+ if overloaded :
28512855 delay = self ._retry_policy .backoff (self ._attempt_number ) if overloaded else 0
28522856 if not await self ._retry_policy .should_retry (self ._attempt_number , delay ):
28532857 if exc_to_check .has_error_label ("NoWritesPerformed" ) and self ._last_error :
28542858 raise self ._last_error from exc
28552859 else :
28562860 raise
2857- if overloaded :
2858- await asyncio .sleep (delay )
2861+ await asyncio .sleep (delay )
28592862
28602863 def _is_not_eligible_for_retry (self ) -> bool :
28612864 """Checks if the exchange is not eligible for retry"""
0 commit comments