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

lhotari 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 2d6ef6f288b [fix][broker] Fix httpProxyTimeout config (#25223)
2d6ef6f288b is described below

commit 2d6ef6f288b7a105c59c176f59d5b3705d106e1b
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]>
---
 .../pulsar/proxy/server/AdminProxyHandler.java     | 10 ++++++---
 .../pulsar/proxy/server/AdminProxyHandlerTest.java | 24 ++++++++++++++++++----
 2 files changed, 27 insertions(+), 7 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 528fbcd47b9..622b1b034aa 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
@@ -107,7 +107,6 @@ class AdminProxyHandler extends ProxyServlet {
                         TimeUnit.SECONDS);
             }
         }
-        super.setTimeout(config.getHttpProxyTimeout());
     }
 
     @Override
@@ -117,10 +116,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 cb3536968a9..c1eaeb1b171 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.InputStream;
 import java.lang.reflect.Field;
@@ -58,6 +60,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);
@@ -70,7 +86,7 @@ public class AdminProxyHandlerTest {
                             1024);
             Field field = 
replayableProxyContentProvider.getClass().getDeclaredField("bodyBuffer");
             field.setAccessible(true);
-            Assert.assertEquals(((ByteBuffer) 
field.get(replayableProxyContentProvider)).position(), 0);
+            assertEquals(((ByteBuffer) 
field.get(replayableProxyContentProvider)).position(), 0);
         } catch (IllegalArgumentException e) {
             Assert.fail("IllegalArgumentException should not be thrown");
         }
@@ -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
@@ -140,7 +156,7 @@ public class AdminProxyHandlerTest {
             byte[] consumedBytes = new byte[consumeBuffer.remaining()];
             consumeBuffer.get(consumedBytes);
             // then
-            Assert.assertEquals(consumedBytes, inputBuffer, "i=" + i);
+            assertEquals(consumedBytes, inputBuffer, "i=" + i);
         }
     }
 }

Reply via email to