Open
Description
When returning a large response using the Netty connector, a "Buffer overflow" error occurs. Switching from jersey-container-netty-http
to jersey-container-grizzly2-http
resolves the issue, so it appears to be specific to the netty connector.
Testing with a 521k response and Jersey 2.25.1, the buffer overflow occurs in org.glassfish.jersey.netty.connector.internal.JerseyChunkedInput#write at line 224. The revelant code is:
private void write(Provider<ByteBuffer> bufferSupplier) throws IOException {
checkClosed();
try {
boolean queued = queue.offer(bufferSupplier.get(), WRITE_TIMEOUT, TimeUnit.MILLISECONDS);
if (!queued) {
throw new IOException("Buffer overflow.");
}
} catch (InterruptedException e) {
throw new IOException(e);
}
}
The queue has a capacity of 8, and the offer timeout is 1000ms, which seems low.
Relevant portion of the stack trace:
Caused by: java.io.IOException: Buffer overflow.
at org.glassfish.jersey.netty.connector.internal.JerseyChunkedInput.write(JerseyChunkedInput.java:224)
at org.glassfish.jersey.netty.connector.internal.JerseyChunkedInput.write(JerseyChunkedInput.java:204)
at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:229)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:299)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
Environment
OpenJDK 1.8.0_121
Affected Versions
[2.25.1]