Don't send 503 if endpoint is paused and we
authorrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 25 Sep 2011 21:54:13 +0000 (21:54 +0000)
committerrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 25 Sep 2011 21:54:13 +0000 (21:54 +0000)
just answered an AJP CPING.

If CPING works, mod_jk expects the main request
to work too. If we don't want to process the
main request we need to fail the CPING received
directly before.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1175594 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/ajp/AjpAprProcessor.java
java/org/apache/coyote/ajp/AjpNioProcessor.java
java/org/apache/coyote/ajp/AjpProcessor.java

index 1ef9ed4..db45590 100644 (file)
@@ -113,6 +113,7 @@ public class AjpAprProcessor extends AbstractAjpProcessor<Long> {
         long socketRef = socket.getSocket().longValue();
         Socket.setrbb(socketRef, inputBuffer);
         Socket.setsbb(socketRef, outputBuffer);
+        boolean cping = false;
 
         // Error flag
         error = false;
@@ -137,6 +138,7 @@ public class AjpAprProcessor extends AbstractAjpProcessor<Long> {
                         recycle(true);
                         break;
                     }
+                    cping = true;
                     if (Socket.send(socketRef, pongMessageArray, 0,
                             pongMessageArray.length) < 0) {
                         error = true;
@@ -180,12 +182,13 @@ public class AjpAprProcessor extends AbstractAjpProcessor<Long> {
                 }
             }
 
-            if (endpoint.isPaused()) {
+            if (!cping && endpoint.isPaused()) {
                 // 503 - Service unavailable
                 response.setStatus(503);
                 adapter.log(request, response, 0);
                 error = true;
             }
+            cping = false;
 
             // Process the request in the adapter
             if (!error) {
index ae93736..4940a38 100644 (file)
@@ -98,6 +98,7 @@ public class AjpNioProcessor extends AbstractAjpProcessor<NioChannel> {
         this.socket = socket.getSocket();
         
         long soTimeout = endpoint.getSoTimeout();
+        boolean cping = false;
 
         // Error flag
         error = false;
@@ -122,6 +123,7 @@ public class AjpNioProcessor extends AbstractAjpProcessor<NioChannel> {
                         recycle(true);
                         break;
                     }
+                    cping = true;
                     try {
                         output(pongMessageArray, 0, pongMessageArray.length);
                     } catch (IOException e) {
@@ -167,12 +169,13 @@ public class AjpNioProcessor extends AbstractAjpProcessor<NioChannel> {
                 }
             }
 
-            if (endpoint.isPaused()) {
+            if (!cping && endpoint.isPaused()) {
                 // 503 - Service unavailable
                 response.setStatus(503);
                 adapter.log(request, response, 0);
                 error = true;
             }
+            cping = false;
 
             // Process the request in the adapter
             if (!error) {
index d1c0002..3941f18 100644 (file)
@@ -111,6 +111,7 @@ public class AjpProcessor extends AbstractAjpProcessor<Socket> {
         if (keepAliveTimeout > 0) {
             soTimeout = socket.getSocket().getSoTimeout();
         }
+        boolean cping = false;
 
         // Error flag
         error = false;
@@ -140,6 +141,7 @@ public class AjpProcessor extends AbstractAjpProcessor<Socket> {
                         recycle(true);
                         break;
                     }
+                    cping = true;
                     try {
                         output.write(pongMessageArray);
                     } catch (IOException e) {
@@ -183,12 +185,13 @@ public class AjpProcessor extends AbstractAjpProcessor<Socket> {
                 }
             }
 
-            if (endpoint.isPaused()) {
+            if (!cping && endpoint.isPaused()) {
                 // 503 - Service unavailable
                 response.setStatus(503);
                 adapter.log(request, response, 0);
                 error = true;
             }
+            cping = false;
 
             // Process the request in the adapter
             if (!error) {