Repository: asterixdb Updated Branches: refs/heads/master b5112d4b3 -> f94f63d3f
[ASTERIXDB-2018][NET] Add HTTP close channel listener - user model changes: no - storage format changes: no - interface changes: no Details: Add a listener on HTTP channel to notify waiters when the channel is closed. Change-Id: I08e4890880a70d42e3e181366a5b0252102d0ea2 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1917 Reviewed-by: abdullah alamoudi <[email protected]> Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/f94f63d3 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/f94f63d3 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/f94f63d3 Branch: refs/heads/master Commit: f94f63d3f8e52cdb099cce365b9fb053050969cf Parents: b5112d4 Author: Murtadha Hubail <[email protected]> Authored: Fri Aug 4 20:54:52 2017 +0300 Committer: Murtadha Hubail <[email protected]> Committed: Fri Aug 4 12:33:03 2017 -0700 ---------------------------------------------------------------------- .../http/server/ChunkedNettyOutputStream.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f94f63d3/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java index 6509dcc..3456343 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java @@ -40,6 +40,12 @@ public class ChunkedNettyOutputStream extends OutputStream { this.response = response; this.ctx = ctx; buffer = ctx.alloc().buffer(chunkSize); + // register listener for channel closed + ctx.channel().closeFuture().addListener(futureListener -> { + synchronized (ChunkedNettyOutputStream.this) { + ChunkedNettyOutputStream.this.notifyAll(); + } + }); } @Override @@ -76,8 +82,11 @@ public class ChunkedNettyOutputStream extends OutputStream { public void close() throws IOException { if (!closed) { if (response.isHeaderSent() || response.status() != HttpResponseStatus.OK) { - flush(); - buffer.release(); + try { + flush(); + } finally { + buffer.release(); + } } else { response.fullReponse(buffer); } @@ -121,6 +130,9 @@ public class ChunkedNettyOutputStream extends OutputStream { while (!ctx.channel().isWritable()) { try { ctx.flush(); + if (!ctx.channel().isOpen()) { + throw new IOException("Closed channel"); + } wait(); } catch (InterruptedException e) { Thread.currentThread().interrupt();
