larryi      01/01/11 20:39:06

  Modified:    src/share/org/apache/tomcat/core Tag: tomcat_32
                        ContextManager.java Handler.java Response.java
                        ResponseImpl.java ServletWrapper.java
  Log:
  Update handling so that when an included servlet throws an
  UnavailableException that isn't handled, it doesn't mark the callers
  as unavailable too.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.100.2.21 +6 -2      
jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v
  retrieving revision 1.100.2.20
  retrieving revision 1.100.2.21
  diff -u -r1.100.2.20 -r1.100.2.21
  --- ContextManager.java       2001/01/04 21:23:59     1.100.2.20
  +++ ContextManager.java       2001/01/12 04:39:03     1.100.2.21
  @@ -1082,8 +1082,12 @@
            the client. AFAIK the trace is the _best_ debugger.
        */
        if (t instanceof UnavailableException) {
  -         int unavailableTime = ((UnavailableException)t).getUnavailableSeconds();
  -         if( unavailableTime > 0 ) {
  +         int unavailableTime = -1;
  +         if ( !((UnavailableException)t).isPermanent() ) {
  +             unavailableTime = ((UnavailableException)t).getUnavailableSeconds();
  +             // if unavailable time not known, use 1 second
  +             if ( unavailableTime <= 0 )
  +                 unavailableTime = 1;
                res.setHeader("Retry-After", Integer.toString(unavailableTime));
            }
            String msg=t.getMessage();
  
  
  
  1.7.2.8   +4 -3      jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java
  
  Index: Handler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v
  retrieving revision 1.7.2.7
  retrieving revision 1.7.2.8
  diff -u -r1.7.2.7 -r1.7.2.8
  --- Handler.java      2000/11/11 02:56:58     1.7.2.7
  +++ Handler.java      2001/01/12 04:39:03     1.7.2.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v 1.7.2.7 
2000/11/11 02:56:58 larryi Exp $
  - * $Revision: 1.7.2.7 $
  - * $Date: 2000/11/11 02:56:58 $
  + * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v 1.7.2.8 
2001/01/12 04:39:03 larryi Exp $
  + * $Revision: 1.7.2.8 $
  + * $Date: 2001/01/12 04:39:03 $
    *
    * ====================================================================
    *
  @@ -260,6 +260,7 @@
                }
                context.log("Exception in init  " + ex.getMessage(), ex );
                   if (res.isIncluded()) { // Only propogate on includes
  +                 res.setErrorException(ex);
                    // save error URI if necessary
                    contextM.saveErrorURI( req, res );
                       if (ex instanceof IOException)
  
  
  
  1.22.2.3  +10 -0     jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java
  
  Index: Response.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v
  retrieving revision 1.22.2.2
  retrieving revision 1.22.2.3
  diff -u -r1.22.2.2 -r1.22.2.3
  --- Response.java     2000/11/11 02:56:58     1.22.2.2
  +++ Response.java     2001/01/12 04:39:03     1.22.2.3
  @@ -143,6 +143,16 @@
        */
       public void setIncluded(boolean b);
   
  +    /** Set the error Exception that occurred during
  +     request processing.
  +     */
  +    public void setErrorException(Exception ex) ;
  +
  +    /** Get the Exception that occurred during request
  +     processing.
  +     */
  +    public Exception getErrorException() ;
  +
       /** Saves the request that originates an error.
        */
       public void setErrorURI(String uri) ;
  
  
  
  1.33.2.5  +12 -3     
jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ResponseImpl.java
  
  Index: ResponseImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ResponseImpl.java,v
  retrieving revision 1.33.2.4
  retrieving revision 1.33.2.5
  diff -u -r1.33.2.4 -r1.33.2.5
  --- ResponseImpl.java 2000/11/11 02:56:58     1.33.2.4
  +++ ResponseImpl.java 2001/01/12 04:39:04     1.33.2.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ResponseImpl.java,v 
1.33.2.4 2000/11/11 02:56:58 larryi Exp $
  - * $Revision: 1.33.2.4 $
  - * $Date: 2000/11/11 02:56:58 $
  + * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ResponseImpl.java,v 
1.33.2.5 2001/01/12 04:39:04 larryi Exp $
  + * $Revision: 1.33.2.5 $
  + * $Date: 2001/01/12 04:39:04 $
    *
    * ====================================================================
    *
  @@ -108,6 +108,7 @@
       protected boolean commited = false;
       
       boolean notIncluded=true;
  +    Exception errorException=null;
       String errorURI=null;
   
       // default implementation will just append everything here
  @@ -155,6 +156,14 @@
            // move back to normal behavior.
   
        }
  +    }
  +
  +    public void setErrorException(Exception ex) {
  +     errorException = ex;
  +    }
  +
  +    public Exception getErrorException() {
  +     return errorException;
       }
   
       public void setErrorURI(String uri) {
  
  
  
  1.60.2.5  +16 -5     
jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ServletWrapper.java
  
  Index: ServletWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Attic/ServletWrapper.java,v
  retrieving revision 1.60.2.4
  retrieving revision 1.60.2.5
  diff -u -r1.60.2.4 -r1.60.2.5
  --- ServletWrapper.java       2000/11/09 14:07:14     1.60.2.4
  +++ ServletWrapper.java       2001/01/12 04:39:05     1.60.2.5
  @@ -363,7 +363,7 @@
   
        if( unavailable!=null  ) {
            // check servlet availability, throw appropriate exception if not
  -         servletAvailable();
  +         servletAvailable(req,res);
        }
   
        // called only if unavailable==null or timer expired.
  @@ -374,9 +374,10 @@
               throw e;
        } catch ( UnavailableException e ) {
            // if unavailable not set, assume thrown from service(), not init()
  -         if (unavailable == null) {
  +         if (unavailable == null && res.getErrorException() != e) {
                synchronized(this) {
                    if (unavailable == null) {
  +                     res.setErrorException(e);
                        unavailable = e;
                        // XXX if the UnavailableException is permanent we are supposed
                        // to destroy the servlet.  Synchronization of this destruction
  @@ -403,6 +404,9 @@
        } else {
            servlet.service(req.getFacade(), res.getFacade());
        }
  +     // clear any error exception since none were thrown
  +     res.setErrorException(null);
  +     res.setErrorURI(null);
       }
   
       // -------------------- Reloading --------------------
  @@ -472,21 +476,28 @@
       // -------------------- Unavailable --------------------
       /** Check if we can try again an init
        */
  -    private void servletAvailable()
  +    private void servletAvailable(Request req, Response res)
           throws IOException, ServletException
       {
        // if permanently unavailable, rethrow exception
        if (unavailable instanceof UnavailableException &&
  -             ((UnavailableException)unavailable).isPermanent())
  +             ((UnavailableException)unavailable).isPermanent()) {
  +         res.setErrorException(unavailable);
  +         contextM.saveErrorURI( req, res );
            throw (UnavailableException)unavailable;
  +     }
        // we have a timer - maybe we can try again - how much
        // do we have to wait - (in mSec)
        long moreWaitTime=unavailableTime - System.currentTimeMillis();
        if( moreWaitTime > 0 ) {
            // get seconds left, rounded up to at least one second
            int secs = (int)((moreWaitTime + 999) / 1000);
  +         // set updated exception
  +         res.setErrorException(new UnavailableException(
  +                             unavailable.getMessage(), secs));
  +         contextM.saveErrorURI( req, res );
            // throw updated exception
  -         throw new UnavailableException(unavailable.getMessage(), secs);
  +         throw (UnavailableException)res.getErrorException();
        }
        // we can try again
        unavailable=null;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to