summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-10-14 15:51:23 +0200
committerGitHub <noreply@github.com>2020-10-14 15:51:23 +0200
commit5ab1a8b97842b3a87fc0d3fec5cb631b1d356ab9 (patch)
tree6b6b425d85c9f514dc2034880e2da5588f0819b3 /jdisc_http_service
parent5b94cf7c6c5df1284d42c84b0ca8b8b3f5f1eba4 (diff)
parentad379f928f476f92a235019e149074c400362105 (diff)
Merge pull request #14864 from vespa-engine/jonmv/async-doc-v1-take2
Jonmv/async doc v1 take2
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletRequestReader.java56
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();
}
}