diff --git a/CHANGELOG.md b/CHANGELOG.md index 967a3902ee2..9fb629faa30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,11 @@ #### _**Note**_: Breaking changes +### 7.0.1 (TBD) + +#### Bugs + +* Fix #6709: VertxHttpClientFactory reuses the same Vertx instance for each VertxHttpClient instance ### 7.0.0 (2024-12-03) diff --git a/httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpClientFactory.java b/httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpClientFactory.java index c0e70a0e56f..d9ef2cd0fca 100644 --- a/httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpClientFactory.java +++ b/httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpClientFactory.java @@ -25,10 +25,23 @@ public class VertxHttpClientFactory implements io.fabric8.kubernetes.client.http.HttpClient.Factory { + private static final class VertxHolder { + private static final Vertx INSTANCE = createVertxInstance(); + } + private final Vertx vertx; public VertxHttpClientFactory() { - this.vertx = createVertxInstance(); + this(VertxHolder.INSTANCE); + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + if (vertx != null) { + vertx.close(); + } + })); + } + + public VertxHttpClientFactory(Vertx vertx) { + this.vertx = vertx; } @Override @@ -46,7 +59,8 @@ private static synchronized Vertx createVertxInstance() { try { System.setProperty(DISABLE_DNS_RESOLVER_PROP_NAME, "true"); vertx = Vertx.vertx(new VertxOptions() - .setFileSystemOptions(new FileSystemOptions().setFileCachingEnabled(false).setClassPathResolvingEnabled(false))); + .setFileSystemOptions(new FileSystemOptions().setFileCachingEnabled(false).setClassPathResolvingEnabled(false)) + .setUseDaemonThread(true)); } finally { // Restore the original value if (originalValue == null) {