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());
+    }
+}

Reply via email to