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

lhotari pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new c973c7daada [fix][broker] Fix httpProxyTimeout config (#25223)
c973c7daada is described below

commit c973c7daadae5ba98872b334f7dbb53173575e91
Author: Zixuan Liu <[email protected]>
AuthorDate: Fri Feb 6 20:28:25 2026 +0800

    [fix][broker] Fix httpProxyTimeout config (#25223)
    
    Co-authored-by: Copilot <[email protected]>
    (cherry picked from commit 2d6ef6f288b7a105c59c176f59d5b3705d106e1b)
---
 .../pulsar/proxy/server/AdminProxyHandler.java     | 10 +++++++---
 .../pulsar/proxy/server/AdminProxyHandlerTest.java | 22 +++++++++++++++++++---
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/AdminProxyHandler.java
 
b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/AdminProxyHandler.java
index 3a21da53d93..7f91141a93f 100644
--- 
a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/AdminProxyHandler.java
+++ 
b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/AdminProxyHandler.java
@@ -96,7 +96,6 @@ class AdminProxyHandler extends ProxyServlet {
         this.functionWorkerWebServiceUrl = config.isTlsEnabledWithBroker() ? 
config.getFunctionWorkerWebServiceURLTLS()
                 : config.getFunctionWorkerWebServiceURL();
 
-        super.setTimeout(config.getHttpProxyTimeout());
     }
 
     @Override
@@ -106,10 +105,15 @@ class AdminProxyHandler extends ProxyServlet {
         return httpClient;
     }
 
-    private void customizeHttpClient(HttpClient httpClient) {
+    protected void customizeHttpClient(HttpClient httpClient) {
         httpClient.setFollowRedirects(true);
+
         ProtocolHandlers protocolHandlers = httpClient.getProtocolHandlers();
-        protocolHandlers.put(new RedirectProtocolHandler(httpClient));
+        if (protocolHandlers != null) {
+            protocolHandlers.put(new RedirectProtocolHandler(httpClient));
+        }
+
+        setTimeout(config.getHttpProxyTimeout());
     }
 
     // This class allows the request body to be replayed, the default 
implementation
diff --git 
a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/AdminProxyHandlerTest.java
 
b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/AdminProxyHandlerTest.java
index 4f925618e8a..ffcca697c25 100644
--- 
a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/AdminProxyHandlerTest.java
+++ 
b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/AdminProxyHandlerTest.java
@@ -20,7 +20,9 @@ package org.apache.pulsar.proxy.server;
 
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
@@ -59,6 +61,20 @@ public class AdminProxyHandlerTest {
         adminProxyHandler.init(servletConfig);
     }
 
+    @Test
+    public void testRequestTimeout() {
+        ProxyConfiguration proxyConfiguration = spy(new ProxyConfiguration());
+        proxyConfiguration.setHttpProxyTimeout(120 * 1000);
+
+        adminProxyHandler = new AdminProxyHandler(proxyConfiguration,
+                mock(BrokerDiscoveryProvider.class), 
mock(Authentication.class));
+
+        HttpClient httpClient = mock(HttpClient.class);
+        adminProxyHandler.customizeHttpClient(httpClient);
+
+        assertEquals(adminProxyHandler.getTimeout(), 120 * 1000);
+    }
+
     @Test
     public void replayableProxyContentProviderTest() throws Exception {
         HttpServletRequest request = mock(HttpServletRequest.class);
@@ -102,10 +118,10 @@ public class AdminProxyHandlerTest {
         }
 
         // then
-        Assert.assertEquals(consumedBytes, requestBodySize);
+        assertEquals(consumedBytes, requestBodySize);
         Field field = 
replayableProxyContentProvider.getClass().getDeclaredField("bodyBufferMaxSizeReached");
         field.setAccessible(true);
-        Assert.assertEquals(((boolean) 
field.get(replayableProxyContentProvider)), true);
+        assertEquals(((boolean) field.get(replayableProxyContentProvider)), 
true);
     }
 
     @Test
@@ -138,7 +154,7 @@ public class AdminProxyHandlerTest {
             byte[] consumedBytes = new byte[consumeBuffer.limit()];
             consumeBuffer.get(consumedBytes);
             // then
-            Assert.assertEquals(consumedBytes, inputBuffer);
+            assertEquals(consumedBytes, inputBuffer, "i=" + i);
         }
     }
 }

Reply via email to