This is an automated email from the ASF dual-hosted git repository.
smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 249992265 [KNOX-3248] Knox Gateway + Livy HA mode gzip exception
results in duplicated requests and unneeded failovers (#1143)
249992265 is described below
commit 2499922652646e5f4dcfac30de5121fe7619abf0
Author: nileshrathi345 <[email protected]>
AuthorDate: Mon Feb 9 13:57:17 2026 +0530
[KNOX-3248] Knox Gateway + Livy HA mode gzip exception results in
duplicated requests and unneeded failovers (#1143)
---
.../filter/rewrite/impl/UrlRewriteResponse.java | 2 +-
.../rewrite/impl/UrlRewriteResponseTest.java | 39 ++++++++++++++++++++++
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git
a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponse.java
b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponse.java
index 07b518a59..87663813b 100644
---
a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponse.java
+++
b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponse.java
@@ -187,7 +187,7 @@ public class UrlRewriteResponse extends
GatewayResponseWrapper implements Params
inBuffer.reset();
final InputStream unFilteredStream;
- if(isGzip || "gzip".equalsIgnoreCase(contentEncoding)) {
+ if(isGzip) {
unFilteredStream = new GzipCompressorInputStream(inBuffer, true);
outStream = new GZIPOutputStream(output, STREAM_BUFFER_SIZE);
} else if ("deflate".equalsIgnoreCase(contentEncoding)) {
diff --git
a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponseTest.java
b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponseTest.java
index 2c53928ce..ad665bdee 100644
---
a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponseTest.java
+++
b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponseTest.java
@@ -165,6 +165,45 @@ public class UrlRewriteResponseTest {
testStreamResponse(content, rewriteResponse, "deflate");
}
+ @Test
+ public void testStreamEmptyGzipResponse() throws IOException {
+ UrlRewriteProcessor rewriter =
EasyMock.createNiceMock(UrlRewriteProcessor.class);
+ EasyMock.expect(rewriter.getConfig()).andReturn(null).anyTimes();
+
+ ServletContext context = EasyMock.createNiceMock(ServletContext.class);
+ EasyMock.expect(context.getAttribute(
+ UrlRewriteServletContextListener.PROCESSOR_ATTRIBUTE_NAME))
+ .andReturn(rewriter).anyTimes();
+
+ FilterConfig config = EasyMock.createNiceMock(FilterConfig.class);
+ EasyMock.expect(config.getInitParameter(
+ UrlRewriteServletFilter.RESPONSE_BODY_FILTER_PARAM))
+ .andReturn("test-filter").anyTimes();
+ EasyMock.expect(config.getServletContext()).andReturn(context).anyTimes();
+
+ HttpServletRequest request =
EasyMock.createNiceMock(HttpServletRequest.class);
+
EasyMock.expect(request.getContentType()).andReturn("application/json").anyTimes();
+
+ HttpServletResponse response =
EasyMock.createNiceMock(HttpServletResponse.class);
+
EasyMock.expect(response.getContentType()).andReturn("application/json").anyTimes();
+
+ EasyMock.replay(rewriter, context, config, request, response);
+
+ UrlRewriteResponse rewriteResponse =
+ new UrlRewriteResponse(config, request, response);
+
+ rewriteResponse.setHeader("Content-Encoding", "gzip");
+
+ Path emptyInput = Files.createTempFile("empty", "input");
+ Path output = Files.createTempFile("output", "test");
+
+ try (InputStream in = Files.newInputStream(emptyInput);
+ OutputStream out = Files.newOutputStream(output)) {
+
+ rewriteResponse.streamResponse(in, out);
+ }
+ }
+
private void testStreamResponse(String content, UrlRewriteResponse
rewriteResponse, String contentType) throws IOException {
Path inputFile = Files.createTempFile("input", "test");
Path outputFile = Files.createTempFile("output", "test");