diff --git a/deploy-service/universal/src/main/java/com/pinterest/teletraan/universal/http/RetryInterceptor.java b/deploy-service/universal/src/main/java/com/pinterest/teletraan/universal/http/RetryInterceptor.java index 4d66e3f8d8..f702c1ea55 100644 --- a/deploy-service/universal/src/main/java/com/pinterest/teletraan/universal/http/RetryInterceptor.java +++ b/deploy-service/universal/src/main/java/com/pinterest/teletraan/universal/http/RetryInterceptor.java @@ -36,37 +36,23 @@ public RetryInterceptor(int maxRetries, long retryInterval) { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); - Response response = null; - IOException lastException = null; + Response response = chain.proceed(request); + int tryCount = 1; - for (int i = 0; i < maxRetries; i++) { + while (shouldRetry(response) && tryCount < maxRetries) { + long backoff = (long) Math.pow(2, (tryCount - 1)) * retryInterval; + response.close(); try { - response = chain.proceed(request); - if (response.isSuccessful()) { - return response; - } - } catch (IOException e) { - lastException = e; - } - - if (!shouldRetry(response) || i == maxRetries - 1) { - break; - } - - try { - long backoff = (long) Math.pow(2, i) * retryInterval; TimeUnit.MILLISECONDS.sleep(backoff); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IOException("Retry interrupted", e); } + response = chain.proceed(request); + tryCount++; } - if (response != null) { - return response; - } else { - throw lastException != null ? lastException : new IOException("Unknown error"); - } + return response; } private boolean shouldRetry(Response response) { diff --git a/deploy-service/universal/src/test/java/com/pinterest/teletraan/universal/http/HttpClientTest.java b/deploy-service/universal/src/test/java/com/pinterest/teletraan/universal/http/HttpClientTest.java index 599e3b3c6f..9204b14e32 100644 --- a/deploy-service/universal/src/test/java/com/pinterest/teletraan/universal/http/HttpClientTest.java +++ b/deploy-service/universal/src/test/java/com/pinterest/teletraan/universal/http/HttpClientTest.java @@ -278,7 +278,7 @@ static class ServerErrorDispatcher extends Dispatcher { @Override public MockResponse dispatch(RecordedRequest request) { - return new MockResponse().setResponseCode(responseCode); + return new MockResponse().setResponseCode(responseCode).setBody(TEST_BODY); } } }