Skip to content

Commit 2499922

Browse files
[KNOX-3248] Knox Gateway + Livy HA mode gzip exception results in duplicated requests and unneeded failovers (#1143)
1 parent 420b65b commit 2499922

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public void streamResponse( InputStream input, OutputStream output ) throws IOEx
187187
inBuffer.reset();
188188

189189
final InputStream unFilteredStream;
190-
if(isGzip || "gzip".equalsIgnoreCase(contentEncoding)) {
190+
if(isGzip) {
191191
unFilteredStream = new GzipCompressorInputStream(inBuffer, true);
192192
outStream = new GZIPOutputStream(output, STREAM_BUFFER_SIZE);
193193
} else if ("deflate".equalsIgnoreCase(contentEncoding)) {

gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/UrlRewriteResponseTest.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,45 @@ public void testStreamResponse() throws IOException {
165165
testStreamResponse(content, rewriteResponse, "deflate");
166166
}
167167

168+
@Test
169+
public void testStreamEmptyGzipResponse() throws IOException {
170+
UrlRewriteProcessor rewriter = EasyMock.createNiceMock(UrlRewriteProcessor.class);
171+
EasyMock.expect(rewriter.getConfig()).andReturn(null).anyTimes();
172+
173+
ServletContext context = EasyMock.createNiceMock(ServletContext.class);
174+
EasyMock.expect(context.getAttribute(
175+
UrlRewriteServletContextListener.PROCESSOR_ATTRIBUTE_NAME))
176+
.andReturn(rewriter).anyTimes();
177+
178+
FilterConfig config = EasyMock.createNiceMock(FilterConfig.class);
179+
EasyMock.expect(config.getInitParameter(
180+
UrlRewriteServletFilter.RESPONSE_BODY_FILTER_PARAM))
181+
.andReturn("test-filter").anyTimes();
182+
EasyMock.expect(config.getServletContext()).andReturn(context).anyTimes();
183+
184+
HttpServletRequest request = EasyMock.createNiceMock(HttpServletRequest.class);
185+
EasyMock.expect(request.getContentType()).andReturn("application/json").anyTimes();
186+
187+
HttpServletResponse response = EasyMock.createNiceMock(HttpServletResponse.class);
188+
EasyMock.expect(response.getContentType()).andReturn("application/json").anyTimes();
189+
190+
EasyMock.replay(rewriter, context, config, request, response);
191+
192+
UrlRewriteResponse rewriteResponse =
193+
new UrlRewriteResponse(config, request, response);
194+
195+
rewriteResponse.setHeader("Content-Encoding", "gzip");
196+
197+
Path emptyInput = Files.createTempFile("empty", "input");
198+
Path output = Files.createTempFile("output", "test");
199+
200+
try (InputStream in = Files.newInputStream(emptyInput);
201+
OutputStream out = Files.newOutputStream(output)) {
202+
203+
rewriteResponse.streamResponse(in, out);
204+
}
205+
}
206+
168207
private void testStreamResponse(String content, UrlRewriteResponse rewriteResponse, String contentType) throws IOException {
169208
Path inputFile = Files.createTempFile("input", "test");
170209
Path outputFile = Files.createTempFile("output", "test");

0 commit comments

Comments
 (0)