Search in sources :

Example 1 with RetryConfig

use of com.evanlennick.retry4j.RetryConfig in project aws-cf-templates by widdix.

the class ATest method retry.

protected final <T> T retry(Callable<T> callable) {
    final Callable<T> wrapper = () -> {
        try {
            return callable.call();
        } catch (final Exception e) {
            System.out.println("retry[] exception: " + e.getMessage());
            e.printStackTrace();
            throw e;
        }
    };
    final RetryConfig config = new RetryConfigBuilder().retryOnAnyException().withMaxNumberOfTries(30).withDelayBetweenTries(10, ChronoUnit.SECONDS).withFixedBackoff().build();
    final CallResults<Object> results = new CallExecutor(config).execute(wrapper);
    return (T) results.getResult();
}
Also used : RetryConfigBuilder(com.evanlennick.retry4j.RetryConfigBuilder) CallExecutor(com.evanlennick.retry4j.CallExecutor) RetryConfig(com.evanlennick.retry4j.RetryConfig)

Example 2 with RetryConfig

use of com.evanlennick.retry4j.RetryConfig in project bender by Nextdoor.

the class HttpTransport method sendBatch.

public void sendBatch(byte[] raw) throws TransportException {
    /*
     * Wrap the call with retry logic to avoid intermittent ES issues.
     */
    Callable<HttpResponse> callable = () -> {
        HttpResponse resp;
        String responseString = null;
        HttpPost httpPost = new HttpPost(this.url);
        /*
       * Do the call, read response, release connection so it is available for use again, and
       * finally check the response.
       */
        try {
            if (this.useGzip) {
                resp = sendBatchCompressed(httpPost, raw);
            } else {
                resp = sendBatchUncompressed(httpPost, raw);
            }
            try {
                responseString = EntityUtils.toString(resp.getEntity());
            } catch (ParseException | IOException e) {
                throw new TransportException("http transport call failed because " + resp.getStatusLine().getReasonPhrase());
            }
        } finally {
            /*
         * Always release connection otherwise it blocks future requests.
         */
            httpPost.releaseConnection();
        }
        checkResponse(resp, responseString);
        return resp;
    };
    RetryConfig config = new RetryConfigBuilder().retryOnSpecificExceptions(TransportException.class).withMaxNumberOfTries(this.retries + 1).withDelayBetweenTries(this.retryDelayMs, ChronoUnit.MILLIS).withExponentialBackoff().build();
    try {
        new CallExecutor(config).execute(callable);
    } catch (RetriesExhaustedException ree) {
        logger.warn("transport failed after " + ree.getCallResults().getTotalTries() + " tries.");
        throw new TransportException(ree.getCallResults().getLastExceptionThatCausedRetry());
    } catch (UnexpectedException ue) {
        throw new TransportException(ue);
    }
}
Also used : RetryConfigBuilder(com.evanlennick.retry4j.RetryConfigBuilder) HttpPost(org.apache.http.client.methods.HttpPost) CallExecutor(com.evanlennick.retry4j.CallExecutor) UnexpectedException(com.evanlennick.retry4j.exception.UnexpectedException) RetryConfig(com.evanlennick.retry4j.RetryConfig) RetriesExhaustedException(com.evanlennick.retry4j.exception.RetriesExhaustedException) HttpResponse(org.apache.http.HttpResponse) TransportException(com.nextdoor.bender.ipc.TransportException)

Aggregations

CallExecutor (com.evanlennick.retry4j.CallExecutor)2 RetryConfig (com.evanlennick.retry4j.RetryConfig)2 RetryConfigBuilder (com.evanlennick.retry4j.RetryConfigBuilder)2 RetriesExhaustedException (com.evanlennick.retry4j.exception.RetriesExhaustedException)1 UnexpectedException (com.evanlennick.retry4j.exception.UnexpectedException)1 TransportException (com.nextdoor.bender.ipc.TransportException)1 HttpResponse (org.apache.http.HttpResponse)1 HttpPost (org.apache.http.client.methods.HttpPost)1