This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.10.x by this push:
new dfea3807e88 CAMEL-21770: Avoid closing autowired KubernetesClient
dfea3807e88 is described below
commit dfea3807e8882e09f69498059d369df6ba08dbef
Author: James Netherton <[email protected]>
AuthorDate: Mon Feb 24 07:34:09 2025 +0000
CAMEL-21770: Avoid closing autowired KubernetesClient
---
.../kubernetes/AbstractKubernetesEndpoint.java | 2 +-
.../properties/BasePropertiesFunction.java | 8 +++
.../secrets/vault/SecretsReloadTriggerTask.java | 2 +-
.../producer/KubernetesEndpointTest.java | 61 ++++++++++++++++++++++
.../kubernetes/properties/SecretReloadTest.java | 41 +++++++++++++++
5 files changed, 112 insertions(+), 2 deletions(-)
diff --git
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
index 381780b50aa..406f35ce5b2 100644
---
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
+++
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
@@ -70,7 +70,7 @@ public abstract class AbstractKubernetesEndpoint extends
DefaultEndpoint impleme
@Override
protected void doStop() throws Exception {
super.doStop();
- if (client != null) {
+ if (client != null && configuration.getKubernetesClient() == null) {
client.close();
}
}
diff --git
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
index c59eb817fe6..932ea8c478a 100644
---
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
+++
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
@@ -69,6 +69,7 @@ abstract class BasePropertiesFunction extends ServiceSupport
implements Properti
private Boolean clientEnabled;
private String mountPathConfigMaps;
private String mountPathSecrets;
+ private boolean isAutowiredClient;
@Override
protected void doInit() {
@@ -98,6 +99,9 @@ abstract class BasePropertiesFunction extends ServiceSupport
implements Properti
}
if (clientEnabled && client == null) {
client = CamelContextHelper.findSingleByType(camelContext,
KubernetesClient.class);
+ if (client != null) {
+ isAutowiredClient = true;
+ }
}
if (clientEnabled && client == null) {
// try to auto-configure via properties
@@ -224,6 +228,10 @@ abstract class BasePropertiesFunction extends
ServiceSupport implements Properti
this.mountPathSecrets = mountPathSecrets;
}
+ public boolean isAutowiredClient() {
+ return isAutowiredClient;
+ }
+
@Override
public String apply(String remainder) {
String defaultValue = StringHelper.after(remainder, ":");
diff --git
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/vault/SecretsReloadTriggerTask.java
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/vault/SecretsReloadTriggerTask.java
index cf233b97624..316539975b0 100644
---
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/vault/SecretsReloadTriggerTask.java
+++
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/vault/SecretsReloadTriggerTask.java
@@ -103,7 +103,7 @@ public class SecretsReloadTriggerTask extends
ServiceSupport implements CamelCon
protected void doShutdown() throws Exception {
super.doShutdown();
- if (kubernetesClient != null) {
+ if (kubernetesClient != null &&
!propertiesFunction.isAutowiredClient()) {
try {
kubernetesClient.close();
} catch (Exception e) {
diff --git
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesEndpointTest.java
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesEndpointTest.java
new file mode 100644
index 00000000000..30a4fcefd1f
--- /dev/null
+++
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesEndpointTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.kubernetes.producer;
+
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.kubernetes.pods.KubernetesPodsComponent;
+import org.apache.camel.component.kubernetes.pods.KubernetesPodsEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class KubernetesEndpointTest extends CamelTestSupport {
+ @BindToRegistry
+ KubernetesClient client = new KubernetesClientBuilder().build();
+
+ @Test
+ void endpointStopDoesNotCloseAutowiredKubernetesClient() {
+ assertFalse(client.getHttpClient().isClosed());
+ KubernetesPodsEndpoint endpoint
+ =
context.getEndpoint("kubernetes-pods:local?operation=listPods",
KubernetesPodsEndpoint.class);
+ endpoint.stop();
+ assertFalse(client.getHttpClient().isClosed());
+ }
+
+ @Test
+ void endpointStopClosesNonAutowiredKubernetesClient() {
+ KubernetesPodsEndpoint endpoint
+ =
context.getEndpoint("kubernetes-no-autowired-pods:local?operation=listPods",
KubernetesPodsEndpoint.class);
+ assertFalse(endpoint.getKubernetesClient().getHttpClient().isClosed());
+ endpoint.stop();
+ assertTrue(endpoint.getKubernetesClient().getHttpClient().isClosed());
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext camelContext = super.createCamelContext();
+ KubernetesPodsComponent podsComponent = new KubernetesPodsComponent();
+ podsComponent.setAutowiredEnabled(false);
+ camelContext.addComponent("kubernetes-no-autowired-pods",
podsComponent);
+ return camelContext;
+ }
+}
diff --git
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretReloadTest.java
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretReloadTest.java
new file mode 100644
index 00000000000..c83163d122b
--- /dev/null
+++
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretReloadTest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.kubernetes.properties;
+
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.spi.ContextReloadStrategy;
+import org.apache.camel.support.DefaultContextReloadStrategy;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+public class SecretReloadTest extends CamelTestSupport {
+ @BindToRegistry
+ KubernetesClient client = new KubernetesClientBuilder().build();
+
+ @Test
+ void contextReloadDoesNotCloseAutowiredKubernetesClient() throws Exception
{
+ assertFalse(client.getHttpClient().isClosed());
+ context.addService(new DefaultContextReloadStrategy());
+ ContextReloadStrategy reload =
context.hasService(ContextReloadStrategy.class);
+ reload.onReload(this);
+ assertFalse(client.getHttpClient().isClosed());
+ }
+}