Author: fhanik Date: Wed Aug 5 20:55:50 2009 New Revision: 801409 URL: http://svn.apache.org/viewvc?rev=801409&view=rev Log: a little more on the timeout part
Modified: tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/coyote/Adapter.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Modified: tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java?rev=801409&r1=801408&r2=801409&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java Wed Aug 5 20:55:50 2009 @@ -43,7 +43,7 @@ public class AsyncContextImpl implements AsyncContext { public static enum AsyncState { - NOT_STARTED, STARTED, DISPATCHING, DISPATCHED, COMPLETING + NOT_STARTED, STARTED, DISPATCHING, DISPATCHED, COMPLETING, TIMING_OUT } protected static Log log = LogFactory.getLog(AsyncContextImpl.class); @@ -220,7 +220,11 @@ } public void doInternalDispatch() throws ServletException, IOException { - if (this.state.compareAndSet(AsyncState.DISPATCHING, AsyncState.DISPATCHED)) { + if (this.state.compareAndSet(AsyncState.TIMING_OUT, AsyncState.DISPATCHED)) { + for (AsyncListenerWrapper listener : listeners) { + listener.fireOnTimeout(); + } + } else if (this.state.compareAndSet(AsyncState.DISPATCHING, AsyncState.DISPATCHED)) { if (this.dispatch!=null) { try { dispatch.run(); @@ -266,5 +270,13 @@ throw new IllegalStateException("Complete illegal. Invalid state:"+state.get()); } } + + public AsyncState getState() { + return state.get(); + } + + protected void setState(AsyncState st) { + state.set(st); + } } 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=801409&r1=801408&r2=801409&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Wed Aug 5 20:55:50 2009 @@ -251,7 +251,7 @@ } } - public boolean asyncDispatch(org.apache.coyote.Request req,org.apache.coyote.Response res) throws Exception { + public boolean asyncDispatch(org.apache.coyote.Request req,org.apache.coyote.Response res, SocketStatus status) throws Exception { Request request = (Request) req.getNote(ADAPTER_NOTES); Response response = (Response) res.getNote(ADAPTER_NOTES); @@ -267,6 +267,12 @@ request.setAttribute(Globals.DISPATCHER_TYPE_ATTR, DispatcherType.ASYNC); // Calling the container try { + if (status==SocketStatus.TIMEOUT) { + AsyncContextImpl asyncConImpl = (AsyncContextImpl)request.getAsyncContext(); + //TODO SERVLET3 - async + //configure settings for timed out + asyncConImpl.setState(AsyncContextImpl.AsyncState.TIMING_OUT); + } connector.getContainer().getPipeline().getFirst().invoke(request, response); }catch (RuntimeException x) { success = false; Modified: tomcat/trunk/java/org/apache/coyote/Adapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Adapter.java?rev=801409&r1=801408&r2=801409&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/Adapter.java (original) +++ tomcat/trunk/java/org/apache/coyote/Adapter.java Wed Aug 5 20:55:50 2009 @@ -50,6 +50,6 @@ public boolean event(Request req, Response res, SocketStatus status) throws Exception; - public boolean asyncDispatch(Request req,Response res) throws Exception; + public boolean asyncDispatch(Request req,Response res, SocketStatus status) throws Exception; } Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=801409&r1=801408&r2=801409&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Wed Aug 5 20:55:50 2009 @@ -799,7 +799,7 @@ final NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getAttachment(false); try { rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); - error = !adapter.asyncDispatch(request, response); + error = !adapter.asyncDispatch(request, response, status); if ( !error ) { if (attach != null) { attach.setComet(comet); @@ -861,6 +861,7 @@ error = false; keepAlive = true; comet = false; + async = false; long soTimeout = endpoint.getSoTimeout(); int keepAliveTimeout = endpoint.getKeepAliveTimeout(); @@ -870,7 +871,7 @@ boolean recycle = true; final KeyAttachment ka = (KeyAttachment)socket.getAttachment(false); - while (!error && keepAlive && !comet) { + while (!error && keepAlive && !comet && !async) { //always default to our soTimeout ka.setTimeout(soTimeout); // Parsing the request header @@ -1324,9 +1325,7 @@ NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getAttachment(false); long timeout = ((Long)param).longValue(); //if we are not piggy backing on a worker thread, set the timeout - RequestInfo rp = request.getRequestProcessor(); - if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) //async handling - attach.setTimeout(timeout); + attach.setTimeout(timeout); } else if (actionCode == ActionCode.ACTION_ASYNC_DISPATCH) { RequestInfo rp = request.getRequestProcessor(); if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) {//async handling Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=801409&r1=801408&r2=801409&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Aug 5 20:55:50 2009 @@ -1710,6 +1710,13 @@ long nextTime = now+(timeout-delta); nextExpiration = (nextTime < nextExpiration)?nextTime:nextExpiration; } + }else if (ka.isAsync()) { + long delta = now - ka.getLastAccess(); + long timeout = (ka.getTimeout()==-1)?((long) socketProperties.getSoTimeout()):(ka.getTimeout()); + boolean isTimedout = delta > timeout; + if (isTimedout) { + processSocket(ka.getChannel(), SocketStatus.TIMEOUT, true); + } }//end if }catch ( CancelledKeyException ckx ) { cancelledKey(key, SocketStatus.ERROR,false); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org