Author: markt
Date: Tue Oct 20 09:01:20 2015
New Revision: 1709546

URL: http://svn.apache.org/viewvc?rev=1709546&view=rev
Log:
Pull up comment processing code

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
    tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
    tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
    tomcat/trunk/java/org/apache/coyote/Processor.java
    
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
    
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
    tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
    tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Oct 20 
09:01:20 2015
@@ -22,7 +22,6 @@ import java.util.concurrent.Executor;
 
 import javax.servlet.RequestDispatcher;
 
-import org.apache.juli.logging.Log;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
@@ -280,6 +279,4 @@ public abstract class AbstractProcessor
      *         current request has completed
      */
     protected abstract SocketState dispatchEndRequest();
-
-    protected abstract Log getLog();
 }

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java Tue Oct 20 
09:01:20 2015
@@ -22,7 +22,9 @@ import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.juli.logging.Log;
 import org.apache.tomcat.util.net.DispatchType;
+import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapperBase;
 
 /**
@@ -36,9 +38,62 @@ public abstract class AbstractProcessorL
 
 
     @Override
-    public SocketState process(SocketWrapperBase<?> socketWrapper) throws 
IOException {
-        // TODO Auto-generated method stub
-        return null;
+    public SocketState process(SocketWrapperBase<?> socketWrapper, 
SocketStatus status)
+            throws IOException {
+
+        SocketState state = SocketState.CLOSED;
+        Iterator<DispatchType> dispatches = null;
+        do {
+            if (status == SocketStatus.CLOSE_NOW) {
+                errorDispatch();
+                state = SocketState.CLOSED;
+            } else if (dispatches != null) {
+                DispatchType nextDispatch = dispatches.next();
+                state = dispatch(nextDispatch.getSocketStatus());
+            } else if (status == SocketStatus.DISCONNECT) {
+                // Do nothing here, just wait for it to get recycled
+            } else if (isAsync() || isUpgrade()) {
+                state = dispatch(status);
+            } else if (state == SocketState.ASYNC_END) {
+                state = dispatch(status);
+                // TODO: In case this request takes a long time to process
+                //       remove the TBD (socket/processor/something else) from
+                //       the waiting requests now else the async timeout will
+                //       fire
+                if (state == SocketState.OPEN) {
+                    // There may be pipe-lined data to read. If the data
+                    // isn't processed now, execution will exit this
+                    // loop and call release() which will recycle the
+                    // processor (and input buffer) deleting any
+                    // pipe-lined data. To avoid this, process it now.
+                    state = service(socketWrapper);
+                }
+            } else if (status == SocketStatus.OPEN_WRITE) {
+                // Extra write event likely after async, ignore
+                state = SocketState.LONG;
+            } else {
+                state = service(socketWrapper);
+            }
+
+            if (state != SocketState.CLOSED && isAsync()) {
+                state = asyncPostProcess();
+            }
+
+            if (getLog().isDebugEnabled()) {
+                getLog().debug("Socket: [" + socketWrapper +
+                        "], Status in: [" + status +
+                        "], State out: [" + state + "]");
+            }
+
+            if (dispatches == null || !dispatches.hasNext()) {
+                // Only returns non-null iterator if there are
+                // dispatches to process.
+                dispatches = getIteratorAndClearDispatches();
+            }
+        } while (state == SocketState.ASYNC_END ||
+                dispatches != null && state != SocketState.CLOSED);
+
+        return state;
     }
 
 
@@ -75,4 +130,7 @@ public abstract class AbstractProcessorL
             dispatches.clear();
         }
     }
+
+
+    protected abstract Log getLog();
 }

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Tue Oct 20 
09:01:20 2015
@@ -19,7 +19,6 @@ package org.apache.coyote;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.nio.ByteBuffer;
-import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -40,7 +39,6 @@ import org.apache.tomcat.util.collection
 import org.apache.tomcat.util.modeler.Registry;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler;
-import org.apache.tomcat.util.net.DispatchType;
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapperBase;
 import org.apache.tomcat.util.res.StringManager;
@@ -631,8 +629,7 @@ public abstract class AbstractProtocol<S
 
 
         @Override
-        public SocketState process(SocketWrapperBase<S> wrapper,
-                SocketStatus status) {
+        public SocketState process(SocketWrapperBase<S> wrapper, SocketStatus 
status) {
             if (wrapper == null) {
                 // Nothing to do. Socket has been closed.
                 return SocketState.CLOSED;
@@ -685,52 +682,16 @@ public abstract class AbstractProtocol<S
                 processor.setSslSupport(
                         
wrapper.getSslSupport(getProtocol().getClientCertProvider()));
 
+                // Associate the processor with the connection
+                connections.put(socket, processor);
+
                 SocketState state = SocketState.CLOSED;
-                Iterator<DispatchType> dispatches = null;
                 do {
-                    if (status == SocketStatus.CLOSE_NOW) {
-                        processor.errorDispatch();
-                        state = SocketState.CLOSED;
-                    } else if (dispatches != null) {
-                        // Associate the processor with the connection as
-                        // these calls may result in a nested call to process()
-                        connections.put(socket, processor);
-                        DispatchType nextDispatch = dispatches.next();
-                        state = 
processor.dispatch(nextDispatch.getSocketStatus());
-                    } else if (status == SocketStatus.DISCONNECT) {
-                        // Do nothing here, just wait for it to get recycled
-                    } else if (processor.isAsync() || processor.isUpgrade()) {
-                        state = processor.dispatch(status);
-                    } else if (state == SocketState.ASYNC_END) {
-                        state = processor.dispatch(status);
-                        // release() won't get called so in case this request
-                        // takes a long time to process remove the socket from
-                        // the waiting requests now else the async timeout will
-                        // fire
-                        
getProtocol().getEndpoint().removeWaitingRequest(wrapper);
-                        if (state == SocketState.OPEN) {
-                            // There may be pipe-lined data to read. If the 
data
-                            // isn't processed now, execution will exit this
-                            // loop and call release() which will recycle the
-                            // processor (and input buffer) deleting any
-                            // pipe-lined data. To avoid this, process it now.
-                            state = processor.service(wrapper);
-                        }
-                    } else if (status == SocketStatus.OPEN_WRITE) {
-                        // Extra write event likely after async, ignore
-                        state = SocketState.LONG;
-                    } else {
-                        state = processor.service(wrapper);
-                    }
-
-                    if (state != SocketState.CLOSED && processor.isAsync()) {
-                        state = processor.asyncPostProcess();
-                    }
+                    state = processor.process(wrapper, status);
 
                     if (state == SocketState.UPGRADING) {
                         // Get the HTTP upgrade handler
-                        HttpUpgradeHandler httpUpgradeHandler =
-                                processor.getHttpUpgradeHandler();
+                        HttpUpgradeHandler httpUpgradeHandler = 
processor.getHttpUpgradeHandler();
                         // Retrieve leftover input
                         ByteBuffer leftoverInput = 
processor.getLeftoverInput();
                         // Release the Http11 processor to be re-used
@@ -750,19 +711,7 @@ public abstract class AbstractProtocol<S
                         // it.
                         httpUpgradeHandler.init((WebConnection) processor);
                     }
-                    if (getLog().isDebugEnabled()) {
-                        getLog().debug("Socket: [" + wrapper +
-                                "], Status in: [" + status +
-                                "], State out: [" + state + "]");
-                    }
-                    if (dispatches == null || !dispatches.hasNext()) {
-                        // Only returns non-null iterator if there are
-                        // dispatches to process.
-                        dispatches = processor.getIteratorAndClearDispatches();
-                    }
-                } while (state == SocketState.ASYNC_END ||
-                        state == SocketState.UPGRADING ||
-                        dispatches != null && state != SocketState.CLOSED);
+                } while ( state == SocketState.UPGRADING);
 
                 if (state == SocketState.LONG) {
                     // In the middle of processing a request/response. Keep the
@@ -823,8 +772,7 @@ public abstract class AbstractProtocol<S
                 // any other exception or error is odd. Here we log it
                 // with "ERROR" level, so it will show up even on
                 // less-than-verbose logs.
-                getLog().error(
-                        sm.getString("abstractConnectionHandler.error"), e);
+                
getLog().error(sm.getString("abstractConnectionHandler.error"), e);
             } finally {
                 ContainerThreadMarker.clear();
             }

Modified: tomcat/trunk/java/org/apache/coyote/Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Processor.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Processor.java Tue Oct 20 09:01:20 2015
@@ -43,6 +43,8 @@ public interface Processor {
      * not currently being processed.
      *
      * @param socketWrapper The connection to process
+     * @param status The status of the connection that triggered this 
additional
+     *               processing
      *
      * @return The state the caller should put the socket in when this method
      *         returns
@@ -50,7 +52,7 @@ public interface Processor {
      * @throws IOException If an I/O error occurs during the processing of the
      *         request
      */
-    SocketState process(SocketWrapperBase<?> socketWrapper) throws IOException;
+    SocketState process(SocketWrapperBase<?> socketWrapper, SocketStatus 
status) throws IOException;
 
     /**
      * Service a 'standard' HTTP request. This method is called for both new

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
 (original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorExternal.java
 Tue Oct 20 09:01:20 2015
@@ -55,6 +55,12 @@ public class UpgradeProcessorExternal ex
     }
 
 
+    @Override
+    protected Log getLog() {
+        return log;
+    }
+
+
     // --------------------------------------------------- AutoCloseable 
methods
 
     @Override

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
 (original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
 Tue Oct 20 09:01:20 2015
@@ -23,12 +23,16 @@ import javax.servlet.ServletInputStream;
 import javax.servlet.ServletOutputStream;
 
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.net.SSLSupport;
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapperBase;
 
 public class UpgradeProcessorInternal extends UpgradeProcessorBase {
 
+    private static final Log log = 
LogFactory.getLog(UpgradeProcessorInternal.class);
+
     private final InternalHttpUpgradeHandler internalHttpUpgradeHandler;
 
     public UpgradeProcessorInternal(SocketWrapperBase<?> wrapper, ByteBuffer 
leftOverInput,
@@ -63,6 +67,12 @@ public class UpgradeProcessorInternal ex
     }
 
 
+    @Override
+    protected Log getLog() {
+        return log;
+    }
+
+
     // --------------------------------------------------- AutoCloseable 
methods
 
     @Override

Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Tue Oct 
20 09:01:20 2015
@@ -77,8 +77,6 @@ stream.outputBuffer.flush.debug=Connecti
 streamProcessor.error.connection=Connection [{0}], Stream [{1}], An error 
occurred during processing that was fatal to the connection
 streamProcessor.error.stream=Connection [{0}], Stream [{1}], An error occurred 
during processing that was fatal to the stream
 streamProcessor.httpupgrade.notsupported=HTTP upgrade is not supported within 
HTTP/2 streams
-streamProcessor.process.loopend=Connection [{0}], Stream [{1}], loop end, 
state [{2}], dispatches [{3}]
-streamProcessor.process.loopstart=Connection [{0}], Stream [{1}], loop start, 
status [{2}], dispatches [{3}]
 streamProcessor.ssl.error=Unable to retrieve SSL request attributes
 
 streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed 
from [{2}] to [{3}]

Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1709546&r1=1709545&r2=1709546&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Tue Oct 20 
09:01:20 2015
@@ -18,7 +18,6 @@ package org.apache.coyote.http2;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.servlet.http.HttpUpgradeHandler;
@@ -60,51 +59,12 @@ public class StreamProcessor extends Abs
 
     @Override
     public synchronized void run() {
-        SocketStatus status = SocketStatus.OPEN_READ;
-
         // HTTP/2 equivalent of AbstractConnectionHandler#process() without the
         // socket <-> processor mapping
         ContainerThreadMarker.set();
         SocketState state = SocketState.CLOSED;
         try {
-            Iterator<DispatchType> dispatches = 
getIteratorAndClearDispatches();
-            do {
-                if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("streamProcessor.process.loopstart",
-                            stream.getConnectionId(), stream.getIdentifier(), 
status, dispatches));
-                }
-                if (status == SocketStatus.CLOSE_NOW) {
-                    setErrorState(ErrorState.CLOSE_NOW, null);
-                    state = SocketState.CLOSED;
-                } else if (dispatches != null) {
-                    DispatchType nextDispatch = dispatches.next();
-                    state = dispatch(nextDispatch.getSocketStatus());
-                } else if (isAsync()) {
-                    state = dispatch(status);
-                } else if (state == SocketState.ASYNC_END) {
-                    state = dispatch(status);
-                } else if (status == SocketStatus.DISCONNECT) {
-                    // Should never happen
-                    throw new IllegalStateException();
-                } else {
-                    state = service((SocketWrapperBase<?>) null);
-                }
-
-                if (state != SocketState.CLOSED && isAsync()) {
-                    state = asyncStateMachine.asyncPostProcess();
-                }
-
-                if (dispatches == null || !dispatches.hasNext()) {
-                    // Only returns non-null iterator if there are
-                    // dispatches to process.
-                    dispatches = getIteratorAndClearDispatches();
-                }
-                if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("streamProcessor.process.loopend",
-                            stream.getConnectionId(), stream.getIdentifier(), 
state, dispatches));
-                }
-            } while (state == SocketState.ASYNC_END ||
-                    dispatches != null && state != SocketState.CLOSED);
+            state = process(socketWrapper, SocketStatus.OPEN_READ);
 
             if (state == SocketState.CLOSED) {
                 if (!getErrorState().isConnectionIoAllowed()) {



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

Reply via email to