示例#1
0
 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
示例#2
0
    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)