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();

Reply via email to