Author: markt
Date: Thu Nov 30 10:20:16 2017
New Revision: 1816698

URL: http://svn.apache.org/viewvc?rev=1816698&view=rev
Log:
Refactoring: HTTP/1.1 - HTTP/2 alignment

Add flush() to HttpOutputBuffer and chain filter implementations

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/HttpOutputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java
    tomcat/trunk/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
    tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java
    tomcat/trunk/java/org/apache/coyote/http11/filters/VoidOutputFilter.java
    tomcat/trunk/test/org/apache/coyote/http11/filters/TesterOutputBuffer.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java Thu Nov 
30 10:20:16 2017
@@ -210,32 +210,41 @@ public class Http11OutputBuffer implemen
     }
 
 
-    // --------------------------------------------------------- Public Methods
+    // ----------------------------------------------- HttpOutputBuffer Methods
 
     /**
      * Flush the response.
      *
      * @throws IOException an underlying I/O error occurred
      */
+    @Override
     public void flush() throws IOException {
-        // go through the filters and if there is gzip filter
-        // invoke it to flush
-        for (int i = 0; i <= lastActiveFilter; i++) {
-            if (activeFilters[i] instanceof GzipOutputFilter) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Flushing the gzip filter at position " + i +
-                            " of the filter chain...");
-                }
-                ((GzipOutputFilter) activeFilters[i]).flush();
-                break;
-            }
+        if (lastActiveFilter == -1) {
+            outputStreamOutputBuffer.flush();
+        } else {
+            activeFilters[lastActiveFilter].flush();
+        }
+    }
+
+
+    @Override
+    public void end() throws IOException {
+        if (responseFinished) {
+            return;
         }
 
-        // Flush the current buffer(s)
-        flushBuffer(isBlocking());
+        if (lastActiveFilter == -1) {
+            outputStreamOutputBuffer.end();
+        } else {
+            activeFilters[lastActiveFilter].end();
+        }
+
+        responseFinished = true;
     }
 
 
+    // --------------------------------------------------------- Public Methods
+
     /**
      * Reset the header buffer if an error occurs during the writing of the
      * headers so the error response can be written.
@@ -276,22 +285,6 @@ public class Http11OutputBuffer implemen
     }
 
 
-    @Override
-    public void end() throws IOException {
-        if (responseFinished) {
-            return;
-        }
-
-        if (lastActiveFilter == -1) {
-            outputStreamOutputBuffer.end();
-        } else {
-            activeFilters[lastActiveFilter].end();
-        }
-
-        responseFinished = true;
-    }
-
-
     public void init(SocketWrapperBase<?> socketWrapper) {
         this.socketWrapper = socketWrapper;
     }
@@ -563,5 +556,10 @@ public class Http11OutputBuffer implemen
         public void end() throws IOException {
             socketWrapper.flush(true);
         }
+
+        @Override
+        public void flush() throws IOException {
+            socketWrapper.flush(isBlocking());
+        }
     }
 }

Modified: tomcat/trunk/java/org/apache/coyote/http11/HttpOutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/HttpOutputBuffer.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/HttpOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/HttpOutputBuffer.java Thu Nov 30 
10:20:16 2017
@@ -30,4 +30,11 @@ public interface HttpOutputBuffer extend
      * @throws IOException If an I/O error occurs while writing to the client
      */
     public void end() throws IOException;
+
+    /**
+     * Flushes any unwritten data to the client.
+     *
+     * @throws IOException If an I/O error occurs while flushing
+     */
+    public void flush() throws IOException;
 }

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java 
Thu Nov 30 10:20:16 2017
@@ -152,6 +152,13 @@ public class ChunkedOutputFilter impleme
 
 
     @Override
+    public void flush() throws IOException {
+        // No data buffered in this filter. Flush next buffer.
+        buffer.flush();
+    }
+
+
+    @Override
     public void end() throws IOException {
 
         Supplier<Map<String,String>> trailerFieldsSupplier = 
response.getTrailerFields();

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/GzipOutputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/GzipOutputFilter.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/filters/GzipOutputFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/GzipOutputFilter.java 
Thu Nov 30 10:20:16 2017
@@ -87,7 +87,8 @@ public class GzipOutputFilter implements
     /**
      * Added to allow flushing to happen for the gzip'ed outputstream
      */
-    public void flush() {
+    @Override
+    public void flush() throws IOException {
         if (compressionStream != null) {
             try {
                 if (log.isDebugEnabled()) {
@@ -100,6 +101,7 @@ public class GzipOutputFilter implements
                 }
             }
         }
+        buffer.flush();
     }
 
 

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java 
(original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java 
Thu Nov 30 10:20:16 2017
@@ -112,6 +112,13 @@ public class IdentityOutputFilter implem
 
 
     @Override
+    public void flush() throws IOException {
+        // No data buffered in this filter. Flush next buffer.
+        buffer.flush();
+    }
+
+
+    @Override
     public void end() throws IOException {
         buffer.end();
     }

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/VoidOutputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/VoidOutputFilter.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/filters/VoidOutputFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/VoidOutputFilter.java 
Thu Nov 30 10:20:16 2017
@@ -60,6 +60,12 @@ public class VoidOutputFilter implements
 
 
     @Override
+    public void flush() throws IOException {
+        // NO-OP
+    }
+
+
+    @Override
     public void recycle() {
         // NOOP: Nothing to recycle
     }

Modified: 
tomcat/trunk/test/org/apache/coyote/http11/filters/TesterOutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/filters/TesterOutputBuffer.java?rev=1816698&r1=1816697&r2=1816698&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/filters/TesterOutputBuffer.java 
(original)
+++ tomcat/trunk/test/org/apache/coyote/http11/filters/TesterOutputBuffer.java 
Thu Nov 30 10:20:16 2017
@@ -114,6 +114,12 @@ public class TesterOutputBuffer extends
             return byteCount;
         }
 
+
+        @Override
+        public void flush() throws IOException {
+            // NO-OP: Unused
+        }
+
         @Override
         public void end() throws IOException {
             // NO-OP: Unused



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to