This is an automated email from the ASF dual-hosted git repository.

thetumbled pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new f0ec07b3d8c [fix][client] ControlledClusterFailover avoid unnecessary 
reconnection. (#25178)
f0ec07b3d8c is described below

commit f0ec07b3d8c5cfe36942957fc0ad32e40d69320d
Author: Wenzhi Feng <[email protected]>
AuthorDate: Fri Jan 23 17:42:32 2026 +0800

    [fix][client] ControlledClusterFailover avoid unnecessary reconnection. 
(#25178)
    
    Co-authored-by: fengwenzhi <[email protected]>
---
 .../apache/pulsar/client/impl/ControlledClusterFailover.java   | 10 ++++++++++
 .../pulsar/client/impl/ControlledClusterFailoverTest.java      |  5 +++++
 2 files changed, 15 insertions(+)

diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
index 032069786a4..7819f051e75 100644
--- 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
+++ 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
@@ -44,6 +44,7 @@ import org.apache.pulsar.client.api.AuthenticationFactory;
 import org.apache.pulsar.client.api.ControlledClusterFailoverBuilder;
 import org.apache.pulsar.client.api.PulsarClient;
 import org.apache.pulsar.client.api.ServiceUrlProvider;
+import org.apache.pulsar.client.impl.conf.ClientConfigurationData;
 import org.apache.pulsar.client.util.ExecutorProvider;
 import org.apache.pulsar.common.util.ObjectMapperFactory;
 import org.asynchttpclient.AsyncHttpClient;
@@ -119,6 +120,15 @@ public class ControlledClusterFailover implements 
ServiceUrlProvider {
                 .addHeader("Accept", "application/json");
         headers.forEach(requestBuilder::addHeader);
 
+        // Initialize currentControlledConfiguration from client's current 
configuration
+        // to avoid unnecessary reconnection on first scheduled check when the 
configuration hasn't changed
+        ClientConfigurationData conf = pulsarClient.getConfiguration();
+        this.currentControlledConfiguration = new ControlledConfiguration();
+        
this.currentControlledConfiguration.setServiceUrl(currentPulsarServiceUrl);
+        
this.currentControlledConfiguration.setTlsTrustCertsFilePath(conf.getTlsTrustCertsFilePath());
+        
this.currentControlledConfiguration.setAuthPluginClassName(conf.getAuthPluginClassName());
+        
this.currentControlledConfiguration.setAuthParamsString(conf.getAuthParams());
+
         // start to check service url every 30 seconds
         this.executor.scheduleAtFixedRate(catchingAndLoggingThrowables(() -> {
             ControlledConfiguration controlledConfiguration = null;
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ControlledClusterFailoverTest.java
 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ControlledClusterFailoverTest.java
index ca4aca6c329..86b2fa7cb4f 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ControlledClusterFailoverTest.java
+++ 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ControlledClusterFailoverTest.java
@@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit;
 import lombok.Cleanup;
 import org.apache.pulsar.client.api.Authentication;
 import org.apache.pulsar.client.api.ServiceUrlProvider;
+import org.apache.pulsar.client.impl.conf.ClientConfigurationData;
 import org.asynchttpclient.Request;
 import org.awaitility.Awaitility;
 import org.mockito.Mockito;
@@ -57,7 +58,9 @@ public class ControlledClusterFailoverTest {
 
         PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class);
         ConnectionPool connectionPool = mock(ConnectionPool.class);
+        ClientConfigurationData clientConf = new ClientConfigurationData();
         when(pulsarClient.getCnxPool()).thenReturn(connectionPool);
+        when(pulsarClient.getConfiguration()).thenReturn(clientConf);
         controlledClusterFailover.initialize(pulsarClient);
 
         Request request = 
controlledClusterFailover.getRequestBuilder().build();
@@ -97,7 +100,9 @@ public class ControlledClusterFailoverTest {
         ControlledClusterFailover controlledClusterFailover = 
Mockito.spy((ControlledClusterFailover) provider);
         PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class);
         ConnectionPool connectionPool = mock(ConnectionPool.class);
+        ClientConfigurationData clientConf = new ClientConfigurationData();
         when(pulsarClient.getCnxPool()).thenReturn(connectionPool);
+        when(pulsarClient.getConfiguration()).thenReturn(clientConf);
 
         controlledClusterFailover.initialize(pulsarClient);
 

Reply via email to