svn commit: r1519369 - /tomcat/trunk/webapps/docs/config/cluster-channel.xml
Author: kfujino Date: Mon Sep 2 09:17:45 2013 New Revision: 1519369 URL: http://svn.apache.org/r1519369 Log: Add document for org.apache.catalina.tribes.group.GroupChannel. Modified: tomcat/trunk/webapps/docs/config/cluster-channel.xml Modified: tomcat/trunk/webapps/docs/config/cluster-channel.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/cluster-channel.xml?rev=1519369&r1=1519368&r2=1519369&view=diff == --- tomcat/trunk/webapps/docs/config/cluster-channel.xml (original) +++ tomcat/trunk/webapps/docs/config/cluster-channel.xml Mon Sep 2 09:17:45 2013 @@ -96,6 +96,30 @@ + + + + + + Flag whether the channel manages its own heartbeat. + If set to true, the channel start a local thread for the heart beat. + If set this flag to false, you must set SimpleTcpCluster#heartbeatBackgroundEnabled + to true. default value is true. + + + +If heartbeat == true, specifies the interval of heartbeat thread in milliseconds. + + + +If set to true, the GroupChannel will check the option flags that each +interceptor is using. Reports an error if two interceptor share the same +flag. + + + + + - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519373 - in /tomcat/tc7.0.x/trunk/webapps/docs: changelog.xml config/cluster-channel.xml
Author: kfujino Date: Mon Sep 2 09:20:41 2013 New Revision: 1519373 URL: http://svn.apache.org/r1519373 Log: Add document for org.apache.catalina.tribes.group.GroupChannel. Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1519373&r1=1519372&r2=1519373&view=diff == --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Sep 2 09:20:41 2013 @@ -305,6 +305,10 @@ The WebSocket examples in the examples web application have been changed to use the new JSR-356 Java WebSocket 1.0 implementation. (markt) + +Add document for +org.apache.catalina.tribes.group.GroupChannel. (kfujino) + Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml?rev=1519373&r1=1519372&r2=1519373&view=diff == --- tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml Mon Sep 2 09:20:41 2013 @@ -96,6 +96,30 @@ + + + + + + Flag whether the channel manages its own heartbeat. + If set to true, the channel start a local thread for the heart beat. + If set this flag to false, you must set SimpleTcpCluster#heartbeatBackgroundEnabled + to true. default value is true. + + + +If heartbeat == true, specifies the interval of heartbeat thread in milliseconds. + + + +If set to true, the GroupChannel will check the option flags that each +interceptor is using. Reports an error if two interceptor share the same +flag. + + + + + - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519384 - in /tomcat/trunk/java/org/apache/catalina/tribes: group/interceptors/MessageDispatch15Interceptor.java util/TcclThreadFactory.java
Author: kfujino Date: Mon Sep 2 10:45:02 2013 New Revision: 1519384 URL: http://svn.apache.org/r1519384 Log: More definite thread name for MessageDispatch15Interceptor. Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java?rev=1519384&r1=1519383&r2=1519384&view=diff == --- tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java Mon Sep 2 10:45:02 2013 @@ -83,7 +83,8 @@ public class MessageDispatch15Intercepto public void startQueue() { if ( run ) return; executor = ExecutorFactory.newThreadPool(maxSpareThreads, maxThreads, -keepAliveTime, TimeUnit.MILLISECONDS, new TcclThreadFactory()); +keepAliveTime, TimeUnit.MILLISECONDS, +new TcclThreadFactory("MessageDispatch15Interceptor.MessageDispatchThread")); run = true; } Modified: tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java?rev=1519384&r1=1519383&r2=1519384&view=diff == --- tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java Mon Sep 2 10:45:02 2013 @@ -39,15 +39,18 @@ public class TcclThreadFactory implement private final String namePrefix; public TcclThreadFactory() { +this("pool-" + poolNumber.getAndIncrement() + "-thread-"); +} + +public TcclThreadFactory(String namePrefix) { SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); -namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-"; +this.namePrefix = namePrefix; } @Override public Thread newThread(Runnable r) { -final Thread t = new Thread(group, r, namePrefix + -threadNumber.getAndIncrement()); +final Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement()); if (IS_SECURITY_ENABLED) { AccessController.doPrivileged(new PrivilegedAction() { - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519385 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java java/org/apache/catalina/tribes/util/TcclThreadFactory.java webapp
Author: kfujino Date: Mon Sep 2 10:48:09 2013 New Revision: 1519385 URL: http://svn.apache.org/r1519385 Log: More definite thread name for MessageDispatch15Interceptor. Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java?rev=1519385&r1=1519384&r2=1519385&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java Mon Sep 2 10:48:09 2013 @@ -83,7 +83,8 @@ public class MessageDispatch15Intercepto public void startQueue() { if ( run ) return; executor = ExecutorFactory.newThreadPool(maxSpareThreads, maxThreads, -keepAliveTime, TimeUnit.MILLISECONDS, new TcclThreadFactory()); +keepAliveTime, TimeUnit.MILLISECONDS, +new TcclThreadFactory("MessageDispatch15Interceptor.MessageDispatchThread")); run = true; } Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java?rev=1519385&r1=1519384&r2=1519385&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java Mon Sep 2 10:48:09 2013 @@ -39,9 +39,13 @@ public class TcclThreadFactory implement private final String namePrefix; public TcclThreadFactory() { +this("pool-" + poolNumber.getAndIncrement() + "-thread-"); +} + +public TcclThreadFactory(String namePrefix) { SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); -namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-"; +this.namePrefix = namePrefix; } @Override Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1519385&r1=1519384&r2=1519385&view=diff == --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Sep 2 10:48:09 2013 @@ -283,6 +283,10 @@ 55332: Fix NPE in FileMessageFactory.main when specify empty file as arguments. (kfujino) + +More definite thread name for MessageDispatch15Interceptor. +(kfujino) + - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519392 - in /tomcat/trunk/java/org/apache: catalina/connector/CoyoteAdapter.java coyote/ajp/AbstractAjpProcessor.java coyote/http11/AbstractHttp11Processor.java
Author: markt Date: Mon Sep 2 11:15:01 2013 New Revision: 1519392 URL: http://svn.apache.org/r1519392 Log: Fix Gump failure (hopefully) Move the log failure to the adapter so that the logging occurs before the request and response are recycled. This should improve the information that appears in the logs. The failure was caused because Gump runs with access logs enabled so when the failure occurred the context had been set to null. This meant the the default access logging kicked in which found the standard host level log and logged the issue there rather than in the context level TesterAccessLog. Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1519392&r1=1519391&r2=1519392&view=diff == --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Mon Sep 2 11:15:01 2013 @@ -439,6 +439,14 @@ public class CoyoteAdapter implements Ad success = false; log.error(sm.getString("coyoteAdapter.asyncDispatch"), t); } finally { +if (!success) { +res.setStatus(500); +long time = 0; +if (req.getStartTime() != -1) { +time = System.currentTimeMillis() - req.getStartTime(); +} +log(req, res, time); +} req.getRequestProcessor().setWorkerThreadName(null); // Recycle the wrapper request and response if (!success || (!comet && !request.isAsync())) { Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519392&r1=1519391&r2=1519392&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 11:15:01 2013 @@ -554,12 +554,6 @@ public abstract class AbstractAjpProcess ExceptionUtils.handleThrowable(t); getLog().error(sm.getString("http11processor.request.process"), t); error = true; -} finally { -if (error) { -// 500 - Internal Server Error -response.setStatus(500); -getAdapter().log(request, response, 0); -} } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1519392&r1=1519391&r2=1519392&view=diff == --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Mon Sep 2 11:15:01 2013 @@ -1604,16 +1604,6 @@ public abstract class AbstractHttp11Proc ExceptionUtils.handleThrowable(t); getLog().error(sm.getString("http11processor.request.process"), t); error = true; -} finally { -if (error) { -// 500 - Internal Server Error -response.setStatus(500); -long time = 0; -if (request.getStartTime() != -1) { -time = System.currentTimeMillis() - request.getStartTime(); -} -getAdapter().log(request, response, time); -} } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519403 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
Author: markt Date: Mon Sep 2 12:08:03 2013 New Revision: 1519403 URL: http://svn.apache.org/r1519403 Log: Add the keptAlive flag to BIO. It is unused but adding it brings BIO closer to the other connectors which will aid refactoring. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519403&r1=1519402&r2=1519403&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep 2 12:08:03 2013 @@ -108,11 +108,13 @@ public class AjpProcessor extends Abstra // Error flag error = false; +boolean keptAlive = false; + while (!error && !endpoint.isPaused()) { // Parsing the request header try { // Get first message of the request -if (!readMessage(requestHeaderMessage, true)) { +if (!readMessage(requestHeaderMessage, !keptAlive)) { // This means a connection timeout break; } @@ -144,6 +146,7 @@ public class AjpProcessor extends Abstra error = true; break; } +keptAlive = true; request.setStartTime(System.currentTimeMillis()); } catch (IOException e) { error = true; - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519409 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
Author: markt Date: Mon Sep 2 12:16:54 2013 New Revision: 1519409 URL: http://svn.apache.org/r1519409 Log: Remove comment to align with BIO and NIO to aid future refactoring Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519409&r1=1519408&r2=1519409&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 12:16:54 2013 @@ -122,9 +122,6 @@ public class AjpAprProcessor extends Abs try { // Get first message of the request if (!readMessage(requestHeaderMessage, !keptAlive)) { -// This means that no data is available right now -// (long keepalive), so that the processor should be recycled -// and the method should return true break; } // Set back timeout if keep alive timeout is enabled - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519411 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
Author: markt Date: Mon Sep 2 12:17:32 2013 New Revision: 1519411 URL: http://svn.apache.org/r1519411 Log: Remove unnecessary call to recycle. recycle will be called by Ptoocol as part of releasing the connection. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519411&r1=1519410&r2=1519411&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep 2 12:17:32 2013 @@ -132,7 +132,6 @@ public class AjpNioProcessor extends Abs log.debug("Unexpected message: " + type); } error = true; -recycle(true); break; } keptAlive = true; - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519413 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
Author: markt Date: Mon Sep 2 12:27:37 2013 New Revision: 1519413 URL: http://svn.apache.org/r1519413 Log: Use output methods to write PONG packet. Aligns APR/native with BIO and NIO to aid future refactoring. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519413&r1=1519412&r2=1519413&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 12:27:37 2013 @@ -137,10 +137,12 @@ public class AjpAprProcessor extends Abs break; } cping = true; -if (Socket.send(socketRef, pongMessageArray, 0, -pongMessageArray.length) < 0) { +try { +output(pongMessageArray, 0, pongMessageArray.length); +} catch (IOException e) { error = true; } +recycle(false); continue; } else if(type != Constants.JK_AJP13_FORWARD_REQUEST) { // Unexpected packet type. Unread body packets should have - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519423 - in /tomcat/trunk/java/org/apache/coyote/ajp: AbstractAjpProcessor.java AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java
Author: markt Date: Mon Sep 2 12:56:43 2013 New Revision: 1519423 URL: http://svn.apache.org/r1519423 Log: Refactoring. Pull up process method. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519423&r1=1519422&r2=1519423&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 12:56:43 2013 @@ -576,6 +576,165 @@ public abstract class AbstractAjpProcess } +/** + * Process pipelined HTTP requests using the specified input and output + * streams. + * + * @throws IOException error during an I/O operation + */ +@Override +public SocketState process(SocketWrapper socket) throws IOException { + +RequestInfo rp = request.getRequestProcessor(); +rp.setStage(org.apache.coyote.Constants.STAGE_PARSE); + +// Setting up the socket +this.socketWrapper = socket; + +setupSocket(socket); + +int soTimeout = endpoint.getSoTimeout(); +boolean cping = false; + +// Error flag +error = false; + +boolean keptAlive = false; + +while (!error && !endpoint.isPaused()) { +// Parsing the request header +try { +// Get first message of the request +if (!readMessage(requestHeaderMessage, !keptAlive)) { +break; +} +// Set back timeout if keep alive timeout is enabled +if (keepAliveTimeout > 0) { +setTimeout(socketWrapper, soTimeout); +} +// Check message type, process right away and break if +// not regular request processing +int type = requestHeaderMessage.getByte(); +if (type == Constants.JK_AJP13_CPING_REQUEST) { +if (endpoint.isPaused()) { +recycle(true); +break; +} +cping = true; +try { +output(pongMessageArray, 0, pongMessageArray.length); +} catch (IOException e) { +error = true; +} +recycle(false); +continue; +} else if(type != Constants.JK_AJP13_FORWARD_REQUEST) { +// Unexpected packet type. Unread body packets should have +// been swallowed in finish(). +if (getLog().isDebugEnabled()) { +getLog().debug("Unexpected message: " + type); +} +error = true; +break; +} +keptAlive = true; +request.setStartTime(System.currentTimeMillis()); +} catch (IOException e) { +error = true; +break; +} catch (Throwable t) { +ExceptionUtils.handleThrowable(t); +getLog().debug(sm.getString("ajpprocessor.header.error"), t); +// 400 - Bad Request +response.setStatus(400); +getAdapter().log(request, response, 0); +error = true; +} + +if (!error) { +// Setting up filters, and parse some request headers +rp.setStage(org.apache.coyote.Constants.STAGE_PREPARE); +try { +prepareRequest(); +} catch (Throwable t) { +ExceptionUtils.handleThrowable(t); + getLog().debug(sm.getString("ajpprocessor.request.prepare"), t); +// 400 - Internal Server Error +response.setStatus(400); +getAdapter().log(request, response, 0); +error = true; +} +} + +if (!error && !cping && endpoint.isPaused()) { +// 503 - Service unavailable +response.setStatus(503); +getAdapter().log(request, response, 0); +error = true; +} +cping = false; + +// Process the request in the adapter +if (!error) { +try { +rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); +getAdapter().service(request, response); +} ca
svn commit: r1519424 - in /tomcat/trunk/java/org/apache/coyote/ajp: AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java
Author: markt Date: Mon Sep 2 13:02:03 2013 New Revision: 1519424 URL: http://svn.apache.org/r1519424 Log: Clean-up. Remove comments that add zero value. Make spacing more consistent. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519424&r1=1519423&r2=1519424&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 13:02:03 2013 @@ -29,7 +29,6 @@ import org.apache.tomcat.util.net.AprEnd import org.apache.tomcat.util.net.SocketStatus; import org.apache.tomcat.util.net.SocketWrapper; - /** * Processes AJP requests. * @@ -43,18 +42,12 @@ import org.apache.tomcat.util.net.Socket */ public class AjpAprProcessor extends AbstractAjpProcessor { - -/** - * Logger. - */ private static final Log log = LogFactory.getLog(AjpAprProcessor.class); @Override protected Log getLog() { return log; } -// --- Constructors - public AjpAprProcessor(int packetSize, AprEndpoint endpoint) { @@ -69,8 +62,6 @@ public class AjpAprProcessor extends Abs } -// - Instance Variables - /** * Direct buffer used for input. */ @@ -83,8 +74,6 @@ public class AjpAprProcessor extends Abs protected final ByteBuffer outputBuffer; -// - ActionHook Methods - /** * Send an action to the connector. * @@ -112,8 +101,6 @@ public class AjpAprProcessor extends Abs } -// -- Protected Methods - @Override protected void setupSocket(SocketWrapper socketWrapper) { long socketRef = socketWrapper.getSocket().longValue(); @@ -330,7 +317,6 @@ public class AjpAprProcessor extends Abs inputBuffer.get(message.getBuffer(), headerLength, messageLength); return true; } - } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519424&r1=1519423&r2=1519424&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep 2 13:02:03 2013 @@ -31,24 +31,17 @@ import org.apache.tomcat.util.net.NioSel import org.apache.tomcat.util.net.SocketStatus; import org.apache.tomcat.util.net.SocketWrapper; - /** * Processes AJP requests using NIO. */ public class AjpNioProcessor extends AbstractAjpProcessor { - -/** - * Logger. - */ private static final Log log = LogFactory.getLog(AjpNioProcessor.class); @Override protected Log getLog() { return log; } -// --- Constructors - public AjpNioProcessor(int packetSize, NioEndpoint endpoint) { @@ -60,16 +53,12 @@ public class AjpNioProcessor extends Abs } -// - Instance Variables - /** * Selector pool for the associated endpoint. */ protected final NioSelectorPool pool; -// - ActionHook Methods - /** * Send an action to the connector. * @@ -95,13 +84,12 @@ public class AjpNioProcessor extends Abs } else if (actionCode == ActionCode.ASYNC_DISPATCH) { if (asyncStateMachine.asyncDispatch()) { ((NioEndpoint)endpoint).dispatchForEvent( -socketWrapper.getSocket(), SocketStatus.OPEN_READ, true);} +socketWrapper.getSocket(), SocketStatus.OPEN_READ, true); } } +} -// -- Protected Methods - @Override protected void setupSocket(SocketWrapper socketWrapper) throws IOException { @@ -135,15 +123,17 @@ public class AjpNioProcessor extends Abs Selector selector = null; try { selector = pool.get(); -} catch ( IOException x ) { +} catch (IOException x) { //ignore } try { pool.write(writeBuffer, socketWrapper.getSocket(), selector, writeTimeout, true); -}
svn commit: r1519429 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Author: markt Date: Mon Sep 2 13:16:31 2013 New Revision: 1519429 URL: http://svn.apache.org/r1519429 Log: Fix spacing Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519429&r1=1519428&r2=1519429&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 13:16:31 2013 @@ -451,7 +451,6 @@ public abstract class AbstractAjpProcess // needs to be done here } else if (actionCode == ActionCode.REQ_LOCAL_ADDR_ATTRIBUTE) { - // Copy from local name for now, which should simply be an address request.localAddr().setString(request.localName().toString()); @@ -466,7 +465,6 @@ public abstract class AbstractAjpProcess // needs to be done here } else if (actionCode == ActionCode.REQ_SET_BODY_REPLAY) { - // Set the given bytes as the content ByteChunk bc = (ByteChunk) param; int length = bc.getLength(); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519431 - in /tomcat/trunk/java/org/apache/coyote/ajp: AjpNioProcessor.java AjpProcessor.java
Author: markt Date: Mon Sep 2 13:17:26 2013 New Revision: 1519431 URL: http://svn.apache.org/r1519431 Log: Aligning the readMessage() method implementation and the read() method signature between BIO and NIo to aid future refactoring Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519431&r1=1519430&r2=1519431&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep 2 13:17:26 2013 @@ -141,7 +141,7 @@ public class AjpNioProcessor extends Abs /** * Read the specified amount of bytes, and place them in the input buffer. */ -protected int read(byte[] buf, int pos, int n, boolean blockFirstRead) +protected boolean read(byte[] buf, int pos, int n, boolean blockFirstRead) throws IOException { int read = 0; @@ -153,13 +153,13 @@ public class AjpNioProcessor extends Abs if (res > 0) { read += res; } else if (res == 0 && !block) { -break; +return false; } else { throw new IOException(sm.getString("ajpprocessor.failedread")); } block = true; } -return read; +return true; } @@ -205,13 +205,6 @@ public class AjpNioProcessor extends Abs } -/** - * Read an AJP message. - * - * @return true if a message was read, otherwise false - * - * @throws IOException any other failure, including incomplete reads - */ @Override protected boolean readMessage(AjpMessage message, boolean blockFirstRead) throws IOException { @@ -219,9 +212,7 @@ public class AjpNioProcessor extends Abs byte[] buf = message.getBuffer(); int headerLength = message.getHeaderLength(); -int bytesRead = read(buf, 0, headerLength, blockFirstRead); - -if (bytesRead == 0) { +if (!read(buf, 0, headerLength, blockFirstRead)) { return false; } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519431&r1=1519430&r2=1519431&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep 2 13:17:26 2013 @@ -124,8 +124,20 @@ public class AjpProcessor extends Abstra /** * Read at least the specified amount of bytes, and place them * in the input buffer. + * + * @param buf Buffer to read data into + * @param pos Start position + * @param n Number of bytes to read + * @param blockFirstReadShould the first read block? + * + * @return If blockFirstRead is false, the connector supports non-blocking + * IO and the first read does not return any data, this method + * reads no data into the buffer returns false. Otherwise, blocking + * reads are used read the specified number of bytes into the + * buffer. + * @throws IOException */ -protected boolean read(byte[] buf, int pos, int n) +protected boolean read(byte[] buf, int pos, int n, boolean blockFirstRead) throws IOException { int read = 0; @@ -143,23 +155,16 @@ public class AjpProcessor extends Abstra } -/** - * Read an AJP message. - * - * @param message The message to populate - * @param ignored Not used in BIO - * @return true if the message has been read, false if the short read - * didn't return anything - * @throws IOException any other failure, including incomplete reads - */ @Override -protected boolean readMessage(AjpMessage message, boolean ignored) +protected boolean readMessage(AjpMessage message, boolean block) throws IOException { byte[] buf = message.getBuffer(); int headerLength = message.getHeaderLength(); -read(buf, 0, headerLength); +if (!read(buf, 0, headerLength, block)) { +return false; +} int messageLength = message.processHeader(true); if (messageLength < 0) { @@ -180,7 +185,7 @@ public class AjpProcessor extends Abstra Integer.valueOf(messageLength), Integer.valueOf(buf.length))); } -read(buf, headerLength, messageLength); +read(buf, headerLength, messageLength, true);
svn commit: r1519432 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
Author: markt Date: Mon Sep 2 13:18:28 2013 New Revision: 1519432 URL: http://svn.apache.org/r1519432 Log: Start to align the APR/native readMessage() method implementation with BIO and NIO to aid future refactoring. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519432&r1=1519431&r2=1519432&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 13:18:28 2013 @@ -273,32 +273,23 @@ public class AjpAprProcessor extends Abs } -/** - * Read an AJP message. - * - * @param block If there is no data available to read when this method is - * called, should this call block until data becomes available? - - * @return true if the message has been read, false if no data was read - * - * @throws IOException any other failure, including incomplete reads - */ @Override protected boolean readMessage(AjpMessage message, boolean block) throws IOException { +byte[] buf = message.getBuffer(); int headerLength = message.getHeaderLength(); if (!read(headerLength, block)) { return false; } -inputBuffer.get(message.getBuffer(), 0, headerLength); +inputBuffer.get(buf, 0, headerLength); int messageLength = message.processHeader(true); if (messageLength < 0) { // Invalid AJP header signature -// TODO: Throw some exception and close the connection to frontend. -return false; +throw new IOException(sm.getString("ajpmessage.invalidLength", +Integer.valueOf(messageLength))); } else if (messageLength == 0) { // Zero length message. @@ -311,10 +302,10 @@ public class AjpAprProcessor extends Abs throw new IllegalArgumentException(sm.getString( "ajpprocessor.header.tooLong", Integer.valueOf(messageLength), -Integer.valueOf(message.getBuffer().length))); +Integer.valueOf(buf.length))); } read(messageLength, true); -inputBuffer.get(message.getBuffer(), headerLength, messageLength); +inputBuffer.get(buf, headerLength, messageLength); return true; } } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519435 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
Author: markt Date: Mon Sep 2 13:24:10 2013 New Revision: 1519435 URL: http://svn.apache.org/r1519435 Log: Move the copying from the inputBuffer to the message buffer into the read() method to align read() in APR/native with BIO and NIO. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519435&r1=1519434&r2=1519435&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 13:24:10 2013 @@ -194,7 +194,8 @@ public class AjpAprProcessor extends Abs * @return * @throws IOException */ -protected boolean read(int n, boolean block) throws IOException { +protected boolean read(byte[] buf, int pos, int n, boolean block) +throws IOException { boolean nextReadBlocks = block; @@ -224,6 +225,7 @@ public class AjpAprProcessor extends Abs } } +inputBuffer.get(buf, pos, n); return true; } @@ -280,11 +282,10 @@ public class AjpAprProcessor extends Abs byte[] buf = message.getBuffer(); int headerLength = message.getHeaderLength(); -if (!read(headerLength, block)) { +if (!read(buf, 0, headerLength, block)) { return false; } -inputBuffer.get(buf, 0, headerLength); int messageLength = message.processHeader(true); if (messageLength < 0) { // Invalid AJP header signature @@ -304,8 +305,7 @@ public class AjpAprProcessor extends Abs Integer.valueOf(messageLength), Integer.valueOf(buf.length))); } -read(messageLength, true); -inputBuffer.get(buf, headerLength, messageLength); +read(buf, headerLength, messageLength, true); return true; } } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519453 - in /tomcat/trunk/java/org/apache/coyote/ajp: AbstractAjpProcessor.java AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java
Author: markt Date: Mon Sep 2 14:35:31 2013 New Revision: 1519453 URL: http://svn.apache.org/r1519453 Log: Refactoring. Pull up readMessage() Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519453&r1=1519452&r2=1519453&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 14:35:31 2013 @@ -800,13 +800,31 @@ public abstract class AbstractAjpProcess protected abstract void setupSocket(SocketWrapper socketWrapper) throws IOException; +protected abstract void setTimeout(SocketWrapper socketWrapper, +int timeout) throws IOException; + // Methods called by prepareResponse() protected abstract void output(byte[] src, int offset, int length) throws IOException; -// Methods used by process -protected abstract void setTimeout(SocketWrapper socketWrapper, -int timeout) throws IOException; +// Methods used by readMessage +/** + * Read at least the specified amount of bytes, and place them + * in the input buffer. Note that if any data is available to read then this + * method will always block until at least the specified number of bytes + * have been read. + * + * @param buf Buffer to read data into + * @param pos Start position + * @param n The minimum number of bytes to read + * @param block If there is no data available to read when this method is + * called, should this call block until data becomes available? + * @return true if the requested number of bytes were read + * else false + * @throws IOException + */ +protected abstract boolean read(byte[] buf, int pos, int n, boolean block) +throws IOException; // Methods used by SocketInputBuffer /** Receive a chunk of data. Called to implement the @@ -848,8 +866,40 @@ public abstract class AbstractAjpProcess * * @throws IOException any other failure, including incomplete reads */ -protected abstract boolean readMessage(AjpMessage message, -boolean blockOnFirstRead) throws IOException; +protected boolean readMessage(AjpMessage message, boolean block) +throws IOException { + +byte[] buf = message.getBuffer(); +int headerLength = message.getHeaderLength(); + +if (!read(buf, 0, headerLength, block)) { +return false; +} + +int messageLength = message.processHeader(true); +if (messageLength < 0) { +// Invalid AJP header signature +throw new IOException(sm.getString("ajpmessage.invalidLength", +Integer.valueOf(messageLength))); +} +else if (messageLength == 0) { +// Zero length message. +return true; +} +else { +if (messageLength > message.getBuffer().length) { +// Message too long for the buffer +// Need to trigger a 400 response +throw new IllegalArgumentException(sm.getString( +"ajpprocessor.header.tooLong", +Integer.valueOf(messageLength), +Integer.valueOf(buf.length))); +} +read(buf, headerLength, messageLength, true); +return true; +} +} + @Override public final boolean isComet() { Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519453&r1=1519452&r2=1519453&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 14:35:31 2013 @@ -182,18 +182,7 @@ public class AjpAprProcessor extends Abs } -/** - * Read at least the specified amount of bytes, and place them - * in the input buffer. Note that if any data is available to read then this - * method will always block until at least the specified number of bytes - * have been read. - * - * @param n The minimum number of bytes to read - * @param block If there is no data available to read when this method is - * called, should this call block until data becomes availa
svn commit: r1519456 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Author: markt Date: Mon Sep 2 14:56:00 2013 New Revision: 1519456 URL: http://svn.apache.org/r1519456 Log: Researched the TODOs from the review of the AJP code against the list of actions. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519456&r1=1519455&r2=1519456&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 14:56:00 2013 @@ -380,8 +380,6 @@ public abstract class AbstractAjpProcess } else if (actionCode == ActionCode.RESET) { // NO-OP -// TODO Check if this is really a NO-OP for AJP or if something -// needs to be done here } else if (actionCode == ActionCode.REQ_SSL_ATTRIBUTE ) { @@ -429,7 +427,6 @@ public abstract class AbstractAjpProcess // AJP as the reverse proxy controls that connection. } else if (actionCode == ActionCode.REQ_HOST_ATTRIBUTE) { - // Get remote host name using a DNS resolution if (request.remoteHost().isNull()) { try { @@ -442,13 +439,11 @@ public abstract class AbstractAjpProcess } else if (actionCode == ActionCode.REQ_HOST_ADDR_ATTRIBUTE) { // NO-OP -// TODO Check if this is really a NO-OP for AJP or if something -// needs to be done here +// Automatically populated during prepareRequest() } else if (actionCode == ActionCode.REQ_LOCAL_NAME_ATTRIBUTE) { // NO-OP -// TODO Check if this is really a NO-OP for AJP or if something -// needs to be done here +// Automatically populated during prepareRequest() } else if (actionCode == ActionCode.REQ_LOCAL_ADDR_ATTRIBUTE) { // Copy from local name for now, which should simply be an address @@ -456,13 +451,11 @@ public abstract class AbstractAjpProcess } else if (actionCode == ActionCode.REQ_REMOTEPORT_ATTRIBUTE) { // NO-OP -// TODO Check if this is really a NO-OP for AJP or if something -// needs to be done here +// This information is not available when using the AJP protocol } else if (actionCode == ActionCode.REQ_LOCALPORT_ATTRIBUTE) { // NO-OP -// TODO Check if this is really a NO-OP for AJP or if something -// needs to be done here +// Automatically populated during prepareRequest() } else if (actionCode == ActionCode.REQ_SET_BODY_REPLAY) { // Set the given bytes as the content - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519465 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Author: markt Date: Mon Sep 2 15:44:31 2013 New Revision: 1519465 URL: http://svn.apache.org/r1519465 Log: Enable AJP to work with Servlet 3.1 non-blocking reads. This is not a true non-blocking implementation. That requires further investigation marked by the TODOs in the code. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519465&r1=1519464&r2=1519465&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 15:44:31 2013 @@ -44,6 +44,7 @@ import org.apache.tomcat.util.http.HttpM import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; +import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SSLSupport; import org.apache.tomcat.util.net.SocketStatus; import org.apache.tomcat.util.net.SocketWrapper; @@ -515,17 +516,34 @@ public abstract class AbstractAjpProcess sm.getString("ajpprocessor.comet.notsupported")); } else if (actionCode == ActionCode.AVAILABLE) { -// TODO +// Web Server only sends data when asked so unless end of stream has +// been reached, there should be data available. +// TODO Figure out if a 'true' non-blocking approach is possible +// for AJP and what changes would be required to support it. +if (!endOfStream) { +request.setAvailable(1); +} + } else if (actionCode == ActionCode.NB_WRITE_INTEREST) { -// TODO +// Assume it is always possible write data. +// TODO Investigate 'true' non-blocking IO for AJP. +AtomicBoolean isReady = (AtomicBoolean)param; +isReady.set(true); + } else if (actionCode == ActionCode.NB_READ_INTEREST) { // TODO +System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST"); + } else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) { -// TODO +AtomicBoolean result = (AtomicBoolean) param; +result.set(endOfStream); + } else if (actionCode == ActionCode.DISPATCH_READ) { -// TODO +socketWrapper.addDispatch(DispatchType.NON_BLOCKING_READ); + } else if (actionCode == ActionCode.DISPATCH_WRITE) { -// TODO +socketWrapper.addDispatch(DispatchType.NON_BLOCKING_WRITE); + } else { actionInternal(actionCode, param); } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 55383] Improve markup and design of Tomcat's HTML pages
https://issues.apache.org/bugzilla/show_bug.cgi?id=55383 --- Comment #27 from Konstantin Preißer --- Created attachment 30793 --> https://issues.apache.org/bugzilla/attachment.cgi?id=30793&action=edit Part 3 of updated documentation XMLs Hi, here is another part of updated Documentation XMLs. I modified the CSS so that a table with class="detail-table" looks the same as class="defaultTable". If you don't like it, you (or I) can change it so that a detail-table has different colors. When working through the documentation, I found the following page (and others in appdev): http://tomcat.apache.org/tomcat-8.0-doc/appdev/installation.html which seemed a bit outdated, as it mentioned Tomcat 7 and Java 6 (I updated it to Tomcat 8 and Java 7), but it also mentions CVS (I guess this was written before SVN existed). Furthermore, this example web.xml: http://tomcat.apache.org/tomcat-8.0-doc/appdev/web.xml.txt declares itself as "Web Application 2.3" instead of 3.1. Note, that I also modified the HTTP and AJP configuration pages so that the Connector Comparison Chart is now using a , instead of plain text, as it is tabular data. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519478 - /tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java
Author: markt Date: Mon Sep 2 17:11:27 2013 New Revision: 1519478 URL: http://svn.apache.org/r1519478 Log: Ensure available() is consistent with isFinished() Modified: tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java Modified: tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java?rev=1519478&r1=1519477&r2=1519478&view=diff == --- tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java Mon Sep 2 17:11:27 2013 @@ -123,7 +123,11 @@ public class VoidInputFilter implements @Override public int available() { -return 0; +if (read) { +return 0; +} else { +return 1; +} } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1519481 - in /tomcat/trunk/webapps/examples: WEB-INF/classes/nonblocking/NumberWriter.java WEB-INF/web.xml servlets/index.html
Author: markt Date: Mon Sep 2 17:31:15 2013 New Revision: 1519481 URL: http://svn.apache.org/r1519481 Log: Simple non-blocking write example. Primarily written to have something to test AJP with. Sequential were chosen as it makes it easy to spot output corruption. Added: tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java (with props) Modified: tomcat/trunk/webapps/examples/WEB-INF/web.xml tomcat/trunk/webapps/examples/servlets/index.html Added: tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java?rev=1519481&view=auto == --- tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java (added) +++ tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java Mon Sep 2 17:31:15 2013 @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package nonblocking; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.servlet.AsyncContext; +import javax.servlet.ReadListener; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * This doesn't do anything particularly useful - it just writes a series of + * numbers to the response body while demonstrating how to perform non-blocking + * writes. + */ +public class NumberWriter extends HttpServlet { + +private static final long serialVersionUID = 1L; + +@Override +protected void doGet(HttpServletRequest req, HttpServletResponse resp) +throws ServletException, IOException { + +resp.setContentType("text/plain"); +resp.setCharacterEncoding("UTF-8"); + +// Non-blocking IO requires async +AsyncContext ac = req.startAsync(); + +// Use a single listener for read and write. Listeners often need to +// share state to coordinate reads and writes and this is much easier as +// a single object. +@SuppressWarnings("unused") +NumberWriterListener listener = new NumberWriterListener( +ac, req.getInputStream(), resp.getOutputStream()); + +} + + +/** + * Keep in mind that each call may well be on a different thread to the + * previous call. Ensure that changes in values will be visible across + * threads. There should only ever be one container thread at a time calling + * the listener. + */ +private static class NumberWriterListener implements ReadListener, +WriteListener { + +private static final int LIMIT = 1000; + +private final AsyncContext ac; +private final ServletInputStream sis; +private final ServletOutputStream sos; +private final AtomicInteger counter = new AtomicInteger(0); + +private volatile boolean readFinished = false; +private byte[] buffer = new byte[8192]; + +private NumberWriterListener(AsyncContext ac, ServletInputStream sis, +ServletOutputStream sos) { +this.ac = ac; +this.sis = sis; +this.sos = sos; + +// In Tomcat, the order the listeners are set controls the order +// that the first calls are made. In this case, the read listener +// will be called before the write listener. +sis.setReadListener(this); +sos.setWriteListener(this); +} + +@Override +public void onDataAvailable() throws IOException { + +// There should be no data to read + +int read = 0; +// Loop as long as there is data to read. If isReady() returns false +// the socket will be added to the poller and onDataAvailable() will +// be called again as soon as there is more data to read. +while
svn commit: r1519501 - /tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
Author: markt Date: Mon Sep 2 19:23:49 2013 New Revision: 1519501 URL: http://svn.apache.org/r1519501 Log: Prevent NPE if dispatch results in a nested call to process() Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1519501&r1=1519500&r2=1519501&view=diff == --- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Mon Sep 2 19:23:49 2013 @@ -618,6 +618,9 @@ public abstract class AbstractProtocol i SocketState state = SocketState.CLOSED; do { if (wrapper.hasNextDispatch()) { +// Associate with the processor with the connection as +// these calls may result in a nested call to process() +connections.put(socket, processor); DispatchType nextDispatch = wrapper.getNextDispatch(); state = processor.asyncDispatch( nextDispatch.getSocketStatus()); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1519353 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/ma
2013/9/2 : > Author: olamy > Date: Mon Sep 2 06:11:10 2013 > New Revision: 1519353 > > URL: http://svn.apache.org/r1519353 > Log: > display the reason phrase too > > Modified: > > tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties > > tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java > > tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java > > Modified: > tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties > URL: > http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519353&r1=1519352&r2=1519353&view=diff > == > --- > tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties > (original) > +++ > tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties > Mon Sep 2 06:11:10 2013 > @@ -112,4 +112,4 @@ AbstractI18NTomcat6Mojo.tomcatHttStatusE > > #AbstractTomcat7Mojo > > -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: > {0} > +AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: > {0}, Reason Phrase: {1} 1. Typo in message key: s/ Htt / Http / ? 2. The file below references "AbstractI18NTomcat6Mojo.tomcatHttStatusError", but the message above is "Tomcat7" one. Haven't you forgotten to change "Tomcat6" message as well? Best regards, Konstantin Kolinko > > Modified: > tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java > URL: > http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff > == > --- > tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java > (original) > +++ > tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java > Mon Sep 2 06:11:10 2013 > @@ -68,10 +68,12 @@ public abstract class AbstractI18NTomcat > > if ( statusCode >= 400 ) > { > -getLog().error( messagesProvider.getMessage( > "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) ); > +getLog().error( messagesProvider.getMessage( > "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, > + > tomcatResponse.getReasonPhrase() ) ); > > throw new MojoExecutionException( > -messagesProvider.getMessage( > "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) + ": " > +messagesProvider.getMessage( > "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, > + > tomcatResponse.getReasonPhrase() ) + ": " > + tomcatResponse.getHttpResponseBody() ); > } > } > > Modified: > tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java > URL: > http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff > == > --- > tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java > (original) > +++ > tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java > Mon Sep 2 06:11:10 2013 > @@ -43,7 +43,7 @@ public abstract class AbstractTomcat7Moj > * The webapp context path to use for the web application being run. > This must always start with a forward-slash > * ('/'). > */ > -@Parameter( defaultValue = "/${project.artifactId}", property = > "maven.tomcat.path", required = true ) > +@Parameter(defaultValue = "/${project.artifactId}", property = > "maven.tomcat.path", required = true) > protected String path; > > > @@ -56,7 +56,8 @@ public abstract class AbstractTomcat7Moj > * Check response of Tomcat to know if ok or not. > * > * @param tomcatResponse response of tomcat return by TomcatManager cla
svn commit: r1519508 - in /tomcat/trunk/java/org/apache: coyote/ajp/ coyote/http11/ tomcat/util/net/
Author: markt Date: Mon Sep 2 19:47:14 2013 New Revision: 1519508 URL: http://svn.apache.org/r1519508 Log: Ensure that when multiple dispatches are requested (e.g. one for write and one for read) if the first calls AsyncContext.complete() that the second dispatch is not processed. Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 19:47:14 2013 @@ -525,14 +525,13 @@ public abstract class AbstractAjpProcess } } else if (actionCode == ActionCode.NB_WRITE_INTEREST) { -// Assume it is always possible write data. -// TODO Investigate 'true' non-blocking IO for AJP. +// Until 'true' non-blocking IO is implemented, assume it is always +// possible write data. AtomicBoolean isReady = (AtomicBoolean)param; isReady.set(true); } else if (actionCode == ActionCode.NB_READ_INTEREST) { -// TODO -System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST"); +// NO-OP. Not required until 'true' non-blocking IO is implemented. } else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) { AtomicBoolean result = (AtomicBoolean) param; Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2 19:47:14 2013 @@ -84,6 +84,7 @@ public class AjpAprProcessor extends Abs protected void actionInternal(ActionCode actionCode, Object param) { if (actionCode == ActionCode.ASYNC_COMPLETE) { +socketWrapper.clearDispatches(); if (asyncStateMachine.asyncComplete()) { ((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketStatus.OPEN_READ); Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep 2 19:47:14 2013 @@ -69,9 +69,10 @@ public class AjpNioProcessor extends Abs protected void actionInternal(ActionCode actionCode, Object param) { if (actionCode == ActionCode.ASYNC_COMPLETE) { +socketWrapper.clearDispatches(); if (asyncStateMachine.asyncComplete()) { ((NioEndpoint)endpoint).dispatchForEvent( -socketWrapper.getSocket(), SocketStatus.OPEN_READ, false); +socketWrapper.getSocket(), SocketStatus.OPEN_READ, true); } } else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) { if (param == null) return; Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff == --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep 2 19:47:14 2013 @@ -81,6 +81,7 @@ public class AjpProcessor extends Abstra protected void actionInternal(ActionCode actionCode, Object param) { if (actionCode == ActionCode.ASYNC_COMPLETE) { +socketWrapper.clearDispatches(); if (asyncStateMachine.asyncComplete()) { ((JIoEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketS
Re: Need a tc-native 1.1.28 release
On 27/08/2013 10:54, jean-frederic clere wrote: > On 08/27/2013 10:00 AM, Mark Thomas wrote: >> On 27/08/2013 04:07, Violeta Georgieva wrote: >>> 2013/8/23 Mark Thomas wrote: Tomcat 8 needs tc-native with the fix for non-blocking IO [1]. Any takers for rolling the release? >>> >>> Mark, >>> >>> Do we need this for Tomcat 7 as well? >> >> Yes. It affects the JSR-356 WebSocket implementation. > > Mladen or I should be able to do that next week. Great. Do you have a better estimate than sometime this week? Cheers, Mark - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 55511] Reduce contention on WebappClassLoader
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511 Mark Thomas changed: What|Removed |Added Attachment #30789|0 |1 is patch|| --- Comment #2 from Mark Thomas --- Comment on attachment 30789 --> https://issues.apache.org/bugzilla/attachment.cgi?id=30789 Patch diff to WebappClassLoader to enable concurrent read of cache Mark as patch -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 55511] Reduce contention on WebappClassLoader
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511 --- Comment #3 from Mark Thomas --- The patch doesn't apply cleanly with either Eclipse (which can be fussy) or TortoiseSVN (which is usually quite tolerant). I'd like to see some performance numbers before considering this patch given the problems any solution that didn't sync the whole method has demonstrated in the past. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 55511] Reduce contention on WebappClassLoader
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511 --- Comment #4 from Konstantin Kolinko --- > @Override > - public synchronized Class loadClass(String name, boolean resolve) > + public Class loadClass(String name, boolean resolve) The method that is overridden here is marked as synchronized in java.lang.ClassLoader in Java 6. Thus it is synchronized in Tomcat as well. That method is not synchronized in Java 7, but as far as I remember, you need to jump through some hoops such as "registerAsParallelCapable()" to make use of parallel execution. See discussion in bug 48903 (esp. comments 2 and 6). Discussion in issue 48903 was three years ago when Java 7 was still beta. I am not aware of what is the current state of affairs in that API. -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[jira] [Commented] (MTOMCAT-235) War file is being uploaded twice - Cookie rejected
[ https://issues.apache.org/jira/browse/MTOMCAT-235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13756290#comment-13756290 ] Olivier Lamy (*$^¨%`£) commented on MTOMCAT-235: using ProxyPassReverseCookiePath could help you? > War file is being uploaded twice - Cookie rejected > --- > > Key: MTOMCAT-235 > URL: https://issues.apache.org/jira/browse/MTOMCAT-235 > Project: Apache Tomcat Maven Plugin > Issue Type: Bug > Components: tomcat6 >Affects Versions: 2.1 > Environment: Linux >Reporter: George Smith >Assignee: Olivier Lamy (*$^¨%`£) > > When I run maven task for (re)deploy, the file is always being uploaded > twice. I think the problem is related to manager path. > In front of Tomcat there is a Apache server (from security reasons), which > redirects requests from /manager-server-app to /manager on Tomcat server. > Plugin should deal with it. > {code} > [INFO] Deploying war to http://192.168.191.83/server-app > Uploading: > http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app > Uploaded: > http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app (13788 KB > at 468.1 KB/sec) > 28.8.2013 8:44:35 org.apache.http.client.protocol.ResponseProcessCookies > processCookies > WARNING: Cookie rejected: "[version: 0][name: JSESSIONID][value: > 7ACBBD27F97F86C3477C988006B02073][domain: 192.168.191.83][path: > /manager][expiry: null]". Illegal path attribute "/manager". Path of origin: > "/server-app//deploy" > Uploading: http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app > Uploaded: http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app > (13788 KB at 332.8 KB/sec) > {code} > After second automatic upload it's deployed successfully. > The htaccess file content: > {code} > RewriteEngine On > RewriteRule ^manager-server-app/(.*)$ ajp://localhost:8010/manager/$1 [P,NE] > RewriteRule ^manager-server-app$ /manager/ [L,R] > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1519353 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/ma
On 3 September 2013 05:43, Konstantin Kolinko wrote: > 2013/9/2 : >> Author: olamy >> Date: Mon Sep 2 06:11:10 2013 >> New Revision: 1519353 >> >> URL: http://svn.apache.org/r1519353 >> Log: >> display the reason phrase too >> >> Modified: >> >> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties >> >> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java >> >> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java >> >> Modified: >> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties >> URL: >> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519353&r1=1519352&r2=1519353&view=diff >> == >> --- >> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties >> (original) >> +++ >> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties >> Mon Sep 2 06:11:10 2013 >> @@ -112,4 +112,4 @@ AbstractI18NTomcat6Mojo.tomcatHttStatusE >> >> #AbstractTomcat7Mojo >> >> -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: >> {0} >> +AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: >> {0}, Reason Phrase: {1} > > 1. Typo in message key: > s/ Htt / Http / ? > > 2. The file below references > "AbstractI18NTomcat6Mojo.tomcatHttStatusError", > > but the message above is "Tomcat7" one. > Haven't you forgotten to change "Tomcat6" message as well? Yup I missed to move to only one key as it's the same message. Just fixed. Thanks for the review! Olivier > > Best regards, > Konstantin Kolinko > >> >> Modified: >> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java >> URL: >> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff >> == >> --- >> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java >> (original) >> +++ >> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java >> Mon Sep 2 06:11:10 2013 >> @@ -68,10 +68,12 @@ public abstract class AbstractI18NTomcat >> >> if ( statusCode >= 400 ) >> { >> -getLog().error( messagesProvider.getMessage( >> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) ); >> +getLog().error( messagesProvider.getMessage( >> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, >> + >> tomcatResponse.getReasonPhrase() ) ); >> >> throw new MojoExecutionException( >> -messagesProvider.getMessage( >> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) + ": " >> +messagesProvider.getMessage( >> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, >> + >> tomcatResponse.getReasonPhrase() ) + ": " >> + tomcatResponse.getHttpResponseBody() ); >> } >> } >> >> Modified: >> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java >> URL: >> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff >> == >> --- >> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java >> (original) >> +++ >> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java >> Mon Sep 2 06:11:10 2013 >> @@ -43,7 +43,7 @@ public abstract class AbstractTomcat7Moj >> * The webapp context path to use for the web application being run. >> This must always start with a forward-slash >> * ('/'). >> */ >> -@Parameter( defaultValue = "/${project.artifactId}", property = >> "maven.tomcat.path", required = true ) >> +@Parameter(defaultValue = "/${project.artifactId}", property = >> "m
svn commit: r1519539 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/
Author: olamy Date: Tue Sep 3 01:54:53 2013 New Revision: 1519539 URL: http://svn.apache.org/r1519539 Log: unify error message key Modified: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java Modified: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519539&r1=1519538&r2=1519539&view=diff == --- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties (original) +++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties Tue Sep 3 01:54:53 2013 @@ -106,10 +106,6 @@ UndeployMojo.undeployError = Cannot unde ReloadMojo.reloadingApp = Reloading application at {0} -# AbstractI18NTomcat6Mojo +# -AbstractI18NTomcat6Mojo.tomcatHttStatusError = Tomcat return http status error: {0} - -#AbstractTomcat7Mojo - -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: {0}, Reason Phrase: {1} +tomcatHttpStatusError = Tomcat return http status error: {0}, Reason Phrase: {1} Modified: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties?rev=1519539&r1=1519538&r2=1519539&view=diff == --- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties (original) +++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties Tue Sep 3 01:54:53 2013 @@ -106,10 +106,4 @@ UndeployMojo.undeployError = N'a pas pu ReloadMojo.reloadingApp = Rechargement de l'application sur {0} -# AbstractI18NTomcat6Mojo - -AbstractI18NTomcat6Mojo.tomcatHttStatusError = Tomcat a retourn\u00E9 un code HTTP en erreur: {0} - -#AbstractTomcat7Mojo - -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat a retourn\u00E9 un code HTTP en erreur: {0} \ No newline at end of file +tomcatHttpStatusError = Tomcat a retourn\u00E9 un code HTTP en erreur: {0}, raison: {1} \ No newline at end of file Modified: tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519539&r1=1519538&r2=1519539&view=diff == --- tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java (original) +++ tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java Tue Sep 3 01:54:53 2013 @@ -68,11 +68,11 @@ public abstract class AbstractI18NTomcat if ( statusCode >= 400 ) { -getLog().error( messagesProvider.getMessage( "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, +getLog().error( messagesProvider.getMessage( "tomcatHttpStatusError", statusCode, tomcatResponse.getReasonPhrase() ) ); throw new MojoExecutionException( -messagesProvider.getMessage( "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode, +messagesProvider.getMessage( "tomcatHttpStatusError", statusCode, tomcatResponse.getReasonPhrase() ) + ": " + tomcatResponse.getHttpResponseBody() ); } Modified: tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/Ab
[GUMP@vmgump]: Project tomcat-trunk-test (in module tomcat-trunk) failed
To whom it may engage... This is an automated request, but not an unsolicited one. For more information please visit http://gump.apache.org/nagged.html, and/or contact the folk at gene...@gump.apache.org. Project tomcat-trunk-test has an issue affecting its community integration. This issue affects 1 projects, and has been outstanding for 74 runs. The current state of this project is 'Failed', with reason 'Build Failed'. For reference only, the following projects are affected by this: - tomcat-trunk-test : Tomcat 8.x, a web server implementing the Java Servlet 3.1, ... Full details are available at: http://vmgump.apache.org/gump/public/tomcat-trunk/tomcat-trunk-test/index.html That said, some information snippets are provided here. The following annotations (debug/informational/warning/error messages) were provided: -DEBUG- Dependency on junit exists, no need to add for property hamcrest.jar. -DEBUG- Dependency on commons-daemon exists, no need to add for property commons-daemon.native.src.tgz. -DEBUG- Dependency on commons-daemon exists, no need to add for property tomcat-native.tar.gz. -DEBUG- Dependency on tomcat-trunk exists, no need to add for property tomcat-dbcp.home. -INFO- Failed with reason build failed -INFO- Project Reports in: /srv/gump/public/workspace/tomcat-trunk/output/build/logs The following work was performed: http://vmgump.apache.org/gump/public/tomcat-trunk/tomcat-trunk-test/gump_work/build_tomcat-trunk_tomcat-trunk-test.html Work Name: build_tomcat-trunk_tomcat-trunk-test (Type: Build) Work ended in a state of : Failed Elapsed: 53 mins 11 secs Command Line: /usr/lib/jvm/java-7-oracle/bin/java -Djava.awt.headless=true -Dbuild.sysclasspath=only org.apache.tools.ant.Main -Dgump.merge=/srv/gump/public/gump/work/merge.xml -Djunit.jar=/srv/gump/public/workspace/junit/dist/junit-20130903.jar -Dobjenesis.jar=/srv/gump/public/workspace/objenesis/main/target/objenesis-2.1-SNAPSHOT.jar -Dtomcat-native.tar.gz=/srv/gump/public/workspace/apache-commons/daemon/dist/bin/commons-daemon-20130903-native-src.tar.gz -Dexamples.sources.skip=true -Dtomcat-dbcp.home=/srv/gump/public/workspace/tomcat-trunk/tomcat-deps -Djdt.jar=/srv/gump/packages/eclipse/plugins/org.eclipse.jdt.core_3.4.2/jdtcore.jar -Dcommons-daemon.jar=/srv/gump/public/workspace/apache-commons/daemon/dist/commons-daemon-20130903.jar -Dcommons-daemon.native.src.tgz=/srv/gump/public/workspace/apache-commons/daemon/dist/bin/commons-daemon-20130903-native-src.tar.gz -Dtest.accesslog=true -Dcommons-pool.home=/srv/gump/public/workspace/apache-commons/pool -Dcommons-dbcp.home=/ srv/gump/public/workspace/apache-commons/dbcp -Deasymock.jar=/srv/gump/public/workspace/easymock/easymock/target/easymock-3.3-SNAPSHOT.jar -Dhamcrest.jar=/srv/gump/public/workspace/junit/dist/junit-20130903.jar -Dcglib.jar=/srv/gump/packages/cglib/cglib-nodep-2.2.jar test [Working Directory: /srv/gump/public/workspace/tomcat-trunk] CLASSPATH: /usr/lib/jvm/java-7-oracle/lib/tools.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/webapps/examples/WEB-INF/classes:/srv/gump/public/workspace/tomcat-trunk/output/testclasses:/srv/gump/public/workspace/ant/dist/lib/ant.jar:/srv/gump/public/workspace/ant/dist/lib/ant-launcher.jar:/srv/gump/public/workspace/ant/dist/lib/ant-jmf.jar:/srv/gump/public/workspace/ant/dist/lib/ant-junit.jar:/srv/gump/public/workspace/ant/dist/lib/ant-junit4.jar:/srv/gump/public/workspace/ant/dist/lib/ant-swing.jar:/srv/gump/public/workspace/ant/dist/lib/ant-apache-resolver.jar:/srv/gump/public/workspace/ant/dist/lib/ant-apache-xalan2.jar:/srv/gump/public/workspace/xml-commons/java/build/resolver.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/bin/bootstrap.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/bin/tomcat-juli.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/annotations-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/servle t-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jsp-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/el-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/websocket-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-ant.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-storeconfig.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-coyote.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jasper.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jasper-el.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-tribes.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-ha.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-jni.jar:/srv/gump/public/workspace/tomcat -trunk/output/build/lib/tomcat-s