Search in sources :

Example 6 with ExponentialBackoffRetry

use of alluxio.retry.ExponentialBackoffRetry in project alluxio by Alluxio.

the class AbstractThriftClient method retryRPC.

/**
   * Tries to execute an RPC defined as a {@link RpcCallable}.
   *
   * @param rpc the RPC call to be executed
   * @param <V> type of return value of the RPC call
   * @return the return value of the RPC call
   * @throws IOException when retries exceeds {@link #RPC_MAX_NUM_RETRY} or some server
   *         side IOException occurred.
   */
protected <V> V retryRPC(RpcCallable<V, C> rpc) throws IOException {
    TException exception;
    RetryPolicy retryPolicy = new ExponentialBackoffRetry(BASE_SLEEP_MS, MAX_SLEEP_MS, RPC_MAX_NUM_RETRY);
    do {
        C client = acquireClient();
        try {
            return rpc.call(client);
        } catch (ThriftIOException e) {
            throw new IOException(e);
        } catch (AlluxioTException e) {
            AlluxioException ae = AlluxioException.fromThrift(e);
            try {
                processException(client, ae);
            } catch (AlluxioException ee) {
                throw new IOException(ee);
            }
            exception = new TException(ae);
        } catch (TException e) {
            LOG.warn(e.getMessage());
            closeClient(client);
            exception = e;
        } finally {
            releaseClient(client);
        }
    } while (retryPolicy.attemptRetry());
    LOG.error("Failed after " + retryPolicy.getRetryCount() + " retries.");
    Preconditions.checkNotNull(exception);
    throw new IOException(exception);
}
Also used : AlluxioTException(alluxio.thrift.AlluxioTException) TException(org.apache.thrift.TException) AlluxioTException(alluxio.thrift.AlluxioTException) ThriftIOException(alluxio.thrift.ThriftIOException) ExponentialBackoffRetry(alluxio.retry.ExponentialBackoffRetry) ThriftIOException(alluxio.thrift.ThriftIOException) IOException(java.io.IOException) RetryPolicy(alluxio.retry.RetryPolicy) AlluxioException(alluxio.exception.AlluxioException)

Aggregations

ExponentialBackoffRetry (alluxio.retry.ExponentialBackoffRetry)6 IOException (java.io.IOException)6 ThriftIOException (alluxio.thrift.ThriftIOException)5 TException (org.apache.thrift.TException)5 AlluxioException (alluxio.exception.AlluxioException)4 RetryPolicy (alluxio.retry.RetryPolicy)4 AlluxioTException (alluxio.thrift.AlluxioTException)4 CountingRetry (alluxio.retry.CountingRetry)2 TBinaryProtocol (org.apache.thrift.protocol.TBinaryProtocol)2 TMultiplexedProtocol (org.apache.thrift.protocol.TMultiplexedProtocol)2 TProtocol (org.apache.thrift.protocol.TProtocol)2 TTransportException (org.apache.thrift.transport.TTransportException)2 ConnectionFailedException (alluxio.exception.ConnectionFailedException)1 UfsBlockAccessTokenUnavailableException (alluxio.exception.UfsBlockAccessTokenUnavailableException)1 WorkerOutOfSpaceException (alluxio.exception.WorkerOutOfSpaceException)1 TTransport (org.apache.thrift.transport.TTransport)1