Skip to content

Commit

Permalink
fix #4988: ensuring the previous response is closed
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins authored and manusa committed Apr 4, 2023
1 parent 3237246 commit 2ee3cf7
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* Fix #4910: Pod file upload will now detect if it's not completely sent to the api server
* Fix #4963: Openshift Client return 403 when use websocket
* Fix #4985: triggering the immediate cleanup of the okhttp idle task
* Fix #4988: Ensuring that previous requests are closed before retry
* fix #5002: Jetty response completion accounts for header processing

#### Improvements
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ protected <V> void retryWithExponentialBackoff(CompletableFuture<V> result,
LOG.debug("HTTP operation on url: {} should be retried as the response code was {}, retrying after {} millis",
uri, code, retryInterval);
retry = true;
cancel.accept(response);
}
} else if (throwable instanceof IOException) {
LOG.debug(String.format("HTTP operation on url: %s should be retried after %d millis because of IOException",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,30 @@ void testWebSocketWithLessFailuresThanRetries() throws Exception {
assertEquals(3, client.getWsFutures().size());
}

@Test
void testClosePreviousBeforeRetry() throws Exception {
client = client.newBuilder().tag(new RequestConfigBuilder()
.withRequestRetryBackoffLimit(1)
.withRequestRetryBackoffInterval(50).build())
.build();

final HttpResponse<AsyncBody> error = new TestHttpResponse<AsyncBody>().withBody(Mockito.mock(AsyncBody.class))
.withCode(503);
client.getRespFutures().add(CompletableFuture.completedFuture(error));
client.getRespFutures().add(CompletableFuture.completedFuture(new TestHttpResponse<AsyncBody>().withCode(200)));

CompletableFuture<HttpResponse<AsyncBody>> consumeFuture = client.consumeBytes(
client.newHttpRequestBuilder().uri("http://localhost").build(),
(value, asyncBody) -> {
});

Mockito.verify(error.body()).cancel();

// should ultimately succeed with the final 200
assertEquals(200, consumeFuture.get().code());

// only 2 requests issued
assertEquals(2, client.getRespFutures().size());
}

}

0 comments on commit 2ee3cf7

Please sign in to comment.