summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-08-23 19:06:12 +0200
committerGitHub <noreply@github.com>2017-08-23 19:06:12 +0200
commitf1376511dc20469576c0e3b2bceac151f9946054 (patch)
treeb98f0546d4ebefcc5d0cdeef2eda6e009a24a26e
parent05ac39ddf83a7bbba67500352042ac9fc7ce90ef (diff)
parent38c0f37f802ae99b459ee88dc2e1174e25815685 (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.java28
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) {}
+ }
}
}