This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-4.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 3b39c7b52efeb0b1e17212697ade9f33481ba4b8 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 08f87f3d08a..090f2f4a384 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 @@ -109,7 +109,6 @@ class AdminProxyHandler extends ProxyServlet { TimeUnit.SECONDS); } } - super.setTimeout(config.getHttpProxyTimeout()); } @Override @@ -119,10 +118,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 fdf9242c9f3..151ffc79f0b 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); } } }
