@@ -510,6 +510,7 @@ def _metadata_with_prefix(prefix, **kw):
510510def _retry_on_aborted_exception (
511511 func ,
512512 deadline ,
513+ default_retry_delay = None ,
513514):
514515 """
515516 Handles retry logic for Aborted exceptions, considering the deadline.
@@ -520,7 +521,12 @@ def _retry_on_aborted_exception(
520521 attempts += 1
521522 return func ()
522523 except Aborted as exc :
523- _delay_until_retry (exc , deadline = deadline , attempts = attempts )
524+ _delay_until_retry (
525+ exc ,
526+ deadline = deadline ,
527+ attempts = attempts ,
528+ default_retry_delay = default_retry_delay ,
529+ )
524530 continue
525531
526532
@@ -608,7 +614,7 @@ def _metadata_with_span_context(metadata: List[Tuple[str, str]], **kw) -> None:
608614 inject (setter = OpenTelemetryContextSetter (), carrier = metadata )
609615
610616
611- def _delay_until_retry (exc , deadline , attempts ):
617+ def _delay_until_retry (exc , deadline , attempts , default_retry_delay = None ):
612618 """Helper for :meth:`Session.run_in_transaction`.
613619
614620 Detect retryable abort, and impose server-supplied delay.
@@ -628,15 +634,15 @@ def _delay_until_retry(exc, deadline, attempts):
628634 if now >= deadline :
629635 raise
630636
631- delay = _get_retry_delay (cause , attempts )
637+ delay = _get_retry_delay (cause , attempts , default_retry_delay = default_retry_delay )
632638 if delay is not None :
633639 if now + delay > deadline :
634640 raise
635641
636642 time .sleep (delay )
637643
638644
639- def _get_retry_delay (cause , attempts ):
645+ def _get_retry_delay (cause , attempts , default_retry_delay = None ):
640646 """Helper for :func:`_delay_until_retry`.
641647
642648 :type exc: :class:`grpc.Call`
@@ -658,6 +664,8 @@ def _get_retry_delay(cause, attempts):
658664 retry_info .ParseFromString (retry_info_pb )
659665 nanos = retry_info .retry_delay .nanos
660666 return retry_info .retry_delay .seconds + nanos / 1.0e9
667+ if default_retry_delay is not None :
668+ return default_retry_delay
661669
662670 return 2 ** attempts + random .random ()
663671
@@ -699,6 +707,10 @@ def __radd__(self, n):
699707 """
700708 return self .__add__ (n )
701709
710+ def reset (self ):
711+ with self .__lock :
712+ self .__value = 0
713+
702714
703715def _metadata_with_request_id (* args , ** kwargs ):
704716 return with_request_id (* args , ** kwargs )
0 commit comments