diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-08-23 19:06:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-23 19:06:12 +0200 |
commit | f1376511dc20469576c0e3b2bceac151f9946054 (patch) | |
tree | b98f0546d4ebefcc5d0cdeef2eda6e009a24a26e | |
parent | 05ac39ddf83a7bbba67500352042ac9fc7ce90ef (diff) | |
parent | 38c0f37f802ae99b459ee88dc2e1174e25815685 (diff) |
Merge pull request #3194 from vespa-engine/bjorncs/jdisc-core-threaded-handler
Perform best-effort cleanup to stop JDisc from never closing connection
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/handler/ThreadedRequestHandler.java | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/handler/ThreadedRequestHandler.java b/jdisc_core/src/main/java/com/yahoo/jdisc/handler/ThreadedRequestHandler.java index 3351beb99be..d794b2345ab 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/handler/ThreadedRequestHandler.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/handler/ThreadedRequestHandler.java @@ -95,7 +95,12 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler { protected void handleRequest(Request request, BufferedContentChannel requestContent, ResponseHandler responseHandler) { - handleRequest(request, requestContent.toReadable(), responseHandler); + ReadableContentChannel readable = requestContent.toReadable(); + try { + handleRequest(request, readable, responseHandler); + } finally { + while (readable.read() != null) {} // consume all ignored content + } } /** @@ -110,7 +115,12 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler { protected void handleRequest(Request request, ReadableContentChannel requestContent, ResponseHandler responseHandler) { - handleRequest(request, requestContent.toStream(), responseHandler); + ContentInputStream inputStream = requestContent.toStream(); + try { + handleRequest(request, inputStream, responseHandler); + } finally { + while (inputStream.read() >= 0) {} // consume all ignored content + } } /** @@ -126,9 +136,6 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler { protected void handleRequest(Request request, ContentInputStream requestContent, ResponseHandler responseHandler) { - while (requestContent.read() >= 0) { - // drain content stream - } ResponseDispatch.newInstance(Response.Status.NOT_IMPLEMENTED).dispatch(responseHandler); } @@ -150,7 +157,18 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler { public void run() { try (final ResourceReference ref = requestReference) { ThreadedRequestHandler.this.handleRequest(request, content, responseHandler); + consumeRequestContent(); } } + + private void consumeRequestContent() { + if (content.isConnected()) return; + try { + ReadableContentChannel requestContent = content.toReadable(); + while (requestContent.read() != null) { + // consume all ignored content + } + } catch (IllegalStateException ignored) {} + } } } |