Skip to content

Commit

Permalink
Fix RetryInterceptor (#1751)
Browse files Browse the repository at this point in the history
Similar issue square/okhttp#4986

```
ava.lang.IllegalStateException: cannot make a new request because the previous response is still open: please call response.close() at okhttp3.internal.connection.RealCall.enterNetworkInterceptorExchange(RealCall.kt:229) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:66) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.pinterest.teletraan.universal.http.HttpClient.lambda$new$0(HttpClient.java:81) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.pinterest.teletraan.universal.http.RetryInterceptor.intercept(RetryInterceptor.java:44) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at io.micrometer.core.instrument.binder.okhttp3.OkHttpObservationInterceptor.intercept(OkHttpObservationInterceptor.java:98) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.kt:154) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) at com.pinterest.teletraan.universal.http.HttpClient.makeCall(HttpClient.java:179) at com.pinterest.teletraan.universal.http.HttpClient.post(HttpClient.java:140) at com.pinterest.deployservice.rodimus.RodimusManagerImpl.getTerminatedHosts(RodimusManagerImpl.java:129) at
```

## Test plan
Updated test cases and confirmed that the exception is thrown if `response.close();` is not called.
  • Loading branch information
tylerwowen authored Nov 15, 2024
1 parent 62ad465 commit 6383271
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}

0 comments on commit 6383271

Please sign in to comment.