Skip to content

Commit

Permalink
fix fabric8io#4491: adding a more explicit shutdown exception
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Oct 14, 2022
1 parent 177de1c commit 53c78a5
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -15,6 +15,7 @@
#### Improvements
* Fix #4348: Introduce specific annotations for the generators
* Refactor #4441: refactoring `TokenRefreshInterceptor`
* Fix #4491: added a more explicit shutdown exception for okhttp
* Fix #4365: The Watch retry logic will handle more cases, as well as perform an exceptional close for events that are not properly handled. Informers can directly provide those exceptional outcomes via the SharedIndexInformer.stopped CompletableFuture.
* Fix #4396: Provide more error context when @Group/@Version annotations are missing
* Fix #4384: The Java generator now supports the generation of specific annotations (min, max, pattern, etc.), as defined by #4348
Expand Down
Expand Up @@ -16,6 +16,7 @@

package io.fabric8.kubernetes.client.okhttp;

import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.http.HttpClient;
import io.fabric8.kubernetes.client.http.HttpRequest;
import io.fabric8.kubernetes.client.http.HttpResponse;
Expand All @@ -40,6 +41,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.RejectedExecutionException;
import java.util.function.Function;

public class OkHttpClientImpl implements HttpClient {
Expand Down Expand Up @@ -238,22 +240,28 @@ private CompletableFuture<HttpResponse<AsyncBody>> sendAsync(HttpRequest request
Function<BufferedSource, AsyncBody> handler) {
CompletableFuture<HttpResponse<AsyncBody>> future = new CompletableFuture<>();
Call call = httpClient.newCall(((OkHttpRequestImpl) request).getRequest());
call.enqueue(new Callback() {
try {
call.enqueue(new Callback() {

@Override
public void onResponse(Call call, Response response) throws IOException {
BufferedSource source = response.body().source();
@Override
public void onResponse(Call call, Response response) throws IOException {
BufferedSource source = response.body().source();

AsyncBody asyncBody = handler.apply(source);
AsyncBody asyncBody = handler.apply(source);

future.complete(new OkHttpResponseImpl<>(response, asyncBody));
}
future.complete(new OkHttpResponseImpl<>(response, asyncBody));
}

@Override
public void onFailure(Call call, IOException e) {
future.completeExceptionally(e);
}
});
@Override
public void onFailure(Call call, IOException e) {
future.completeExceptionally(e);
}
});
} catch (RejectedExecutionException e) {
throw new KubernetesClientException("The okhttp client executor has been shutdown. "
+ "More than likely this is because the KubernetesClient.close method has been called "
+ "- please ensure that is intentional.", e);
}
future.whenComplete((r, t) -> {
if (future.isCancelled()) {
call.cancel();
Expand Down

0 comments on commit 53c78a5

Please sign in to comment.