def with_grpc_catch(*args, **kwargs): try: return fn(*args, **kwargs) except grpc.RpcError as exc: if isinstance(exc, grpc.Call): # pylint: disable=no-member raise GRPCError( "rpc %s: failed with error code %s, details: %s" % (fn.__name__, exc.code(), exc.details())) from exc else: raise GRPCError("rpc %s failed: status %s" % (str(fn.__name__), exc)) from exc
def with_grpc_catch(*args, **kwargs): retries = 0 while True: try: return fn(*args, **kwargs) except grpc.RpcError as exc: code = exc.code() max_retries = GRPC_MAX_RETRIES_BY_CODE.get(code) if max_retries is None: raise GRPCError("rpc %s failed: status %s" % (str(fn.__name__), exc)) if retries > max_retries: raise RetriesExceededError("rpc %s failed: status %s" % (str(fn.__name__), exc)) backoff = min(0.0625 * 2**retries, 1.0) logger.debug( "Sleeping for %r before retrying failed request ...", backoff) retries += 1 time.sleep(backoff)