diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-10-14 15:48:11 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-10-14 15:48:11 +0200 |
commit | ad379f928f476f92a235019e149074c400362105 (patch) | |
tree | 2900b3d2c95550e69ef76bf6b751be43dd91a09a /jdisc_http_service | |
parent | 3ad3556fd9c5d1162ad948916872b6122f8f4452 (diff) |
Update expectation to complete writing stuff to request content channel earlier
Diffstat (limited to 'jdisc_http_service')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java index 9e7912f2dc1..1882448757a 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java @@ -111,37 +111,37 @@ class ServletRequestReader implements ReadListener { public void onDataAvailable() throws IOException { while (servletInputStream.isReady()) { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; - final int numBytesRead = servletInputStream.read(buffer); - if (numBytesRead < 0) { - // End of stream; there should be no more data available, ever. - return; + int numBytesRead; + + synchronized (monitor) { + numBytesRead = servletInputStream.read(buffer); + if (numBytesRead < 0) { + // End of stream; there should be no more data available, ever. + return; + } + if (state != State.READING) { + //We have a failure, so no point in giving the buffer to the user. + assert finishedFuture.isCompletedExceptionally(); + return; + } + //wait for both + // - requestContentChannel.write to finish + // - the write completion handler to be called + numberOfOutstandingUserCalls += 2; + bytesRead += numBytesRead; } - writeRequestContent(ByteBuffer.wrap(buffer, 0, numBytesRead)); - } - } - private void writeRequestContent(final ByteBuffer buf) { - synchronized (monitor) { - if (state != State.READING) { - //We have a failure, so no point in giving the buffer to the user. - assert finishedFuture.isCompletedExceptionally(); - return; + try { + requestContentChannel.write(ByteBuffer.wrap(buffer, 0, numBytesRead), writeCompletionHandler); + metricReporter.successfulRead(numBytesRead); + } + catch (Throwable t) { + finishedFuture.completeExceptionally(t); + } + finally { + //decrease due to this method completing. + decreaseOutstandingUserCallsAndCloseRequestContentChannelConditionally(); } - //wait for both - // - requestContentChannel.write to finish - // - the write completion handler to be called - numberOfOutstandingUserCalls += 2; - } - try { - int bytesReceived = buf.remaining(); - requestContentChannel.write(buf, writeCompletionHandler); - metricReporter.successfulRead(bytesReceived); - bytesRead += bytesReceived; - } catch (Throwable t) { - finishedFuture.completeExceptionally(t); - } finally { - //decrease due to this method completing. - decreaseOutstandingUserCallsAndCloseRequestContentChannelConditionally(); } } |