hgomez      2004/02/27 00:34:18

  Modified:    jk/native2/server/apache2 mod_jk2.c
               jk/native2/common jk_worker_lb.c
               jk/native2/include jk_worker.h
  Log:
  Fix problem with ErrorDocument and Apache 2.0.

  

  By default now, WE DON'T touch the headers
  
  Revision  Changes    Path
  1.68      +12 -5     jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk2.c
  
  Index: mod_jk2.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk2.c,v
  retrieving revision 1.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- mod_jk2.c 24 Feb 2004 08:44:42 -0000      1.67
  +++ mod_jk2.c 27 Feb 2004 08:34:18 -0000      1.68
  @@ -22,7 +22,7 @@
    ***************************************************************************/
   
   /*
  - * mod_jk: keeps all servlet/jakarta related ramblings together.
  + * mod_jk2: keeps all servlet/jakarta related ramblings together.
    */
   
   
  @@ -697,7 +697,7 @@
           env->l->jkLog(env, env->l, JK_LOG_ERROR, 
                         "mod_jk.handle() No worker for %s\n", r->uri); 
           workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );
  -        return 500;
  +        return HTTP_INTERNAL_SERVER_ERROR;
       }
   
       if( uriEnv->mbean->debug > 0 )
  @@ -752,9 +752,16 @@
       }
   
       env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                  "mod_jk.handler() Error connecting to tomcat %d\n", rc);
  +                  "mod_jk.handler() Error connecting to tomcat %d, status %d\n", 
rc, s->status);
  +                  
       workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );
  -    return 500;
  +
  +    /* In case of error, if service() set a status code, send it back */
  +    /* Else fallback to HTTP_INTERNAL_SERVER_ERROR (500). */
  +    if (s->status != 0)
  +        return s->status;
  +    else
  +        return HTTP_INTERNAL_SERVER_ERROR;  
   }
   
   /** Use the internal mod_jk mappings to find if this is a request for
  
  
  
  1.37      +24 -16    jakarta-tomcat-connectors/jk/native2/common/jk_worker_lb.c
  
  Index: jk_worker_lb.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_lb.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- jk_worker_lb.c    24 Feb 2004 08:44:40 -0000      1.36
  +++ jk_worker_lb.c    27 Feb 2004 08:34:18 -0000      1.37
  @@ -326,7 +326,7 @@
       }
   
       /* Initialize here the recovery POST buffer */
  -     s->reco_buf = jk2_msg_ajp_create( env, s->pool, 0);
  +    s->reco_buf = jk2_msg_ajp_create( env, s->pool, 0);
       s->reco_status = RECO_INITED;
       
       while(1) {
  @@ -356,17 +356,21 @@
                   s->status=lb->noWorkerCode; /* SERVICE_UNAVAILABLE is the default */
               }
   
  -            if( s->status == 302 ) {
  -                s->headers_out->put(env, s->headers_out,
  -                                    "Location", lb->noWorkerMsg, NULL);
  -                s->head(env, s );
  -            } else {
  -                s->headers_out->put(env, s->headers_out,
  -                                    "Content-Type", "text/html", NULL);
  -                s->head(env, s );
  -                s->jkprintf(env, s, lb->noWorkerMsg );
  -            }
  -            
  +            /* Don't touch headers if noErrorHeader set to TRUE, ie ErrorDocument 
in Apache via mod_alias */
  +            if (! lb->noErrorHeader) {
  +                /* XXX: I didn't understand the 302, since s->status is 
lb->hwBalanceErr or lb->noWorkerCode */
  +                /* Both could be set in workers2.properties so ..... */ 
  +                if( s->status == 302 ) {
  +                    s->headers_out->put(env, s->headers_out,
  +                                        "Location", lb->noWorkerMsg, NULL);
  +                    s->head(env, s );
  +                } else {
  +                    s->headers_out->put(env, s->headers_out,
  +                                        "Content-Type", "text/html", NULL);
  +                    s->head(env, s );
  +                    s->jkprintf(env, s, lb->noWorkerMsg );
  +                }
  +            }            
               s->afterRequest( env, s);
               lb_priv->error_time = time(NULL);
               return JK_ERR;
  @@ -473,10 +477,10 @@
   
   static char *jk2_worker_lb_multiValueInfo[]={"worker", NULL };
   static char *jk2_worker_lb_setAttributeInfo[]={"attempts", "stickySession", 
"recovery", "timeout",
  -                                               "hwBalanceErr", "noWorkerMsg", 
"noWorkerCode", "worker", NULL };
  +                                               "hwBalanceErr", "noErrorHeader", 
"noWorkerMsg", "noWorkerCode", "worker", NULL };
   
   static char *jk2_worker_lb_getAttributeInfo[]={"attempts", "stickySession", 
"recovery", "timeout",
  -                                               "hwBalanceErr", "noWorkerMsg", 
"noWorkerCode", "workers", NULL };
  +                                               "hwBalanceErr", "noErrorHeader", 
"noWorkerMsg", "noWorkerCode", "workers", NULL };
   
   
   static void * JK_METHOD jk2_lb_getAttribute(jk_env_t *env, jk_bean_t *mbean, 
  @@ -494,6 +498,8 @@
           return jk2_env_itoa( env, lb->noWorkerCode);
       } else if( strcmp( name, "hwBalanceErr") == 0 ) {
           return jk2_env_itoa( env, lb->hwBalanceErr);
  +    } else if( strcmp( name, "noErrorHeader") == 0 ) {
  +        return jk2_env_itoa( env, lb->noErrorHeader);
       } else if( strcmp( name, "timeout") == 0 ) {
           return jk2_env_itoa( env, lb_priv->timeout);
       } else if( strcmp( name, "recovery") == 0 ) {
  @@ -534,6 +540,8 @@
           lb->noWorkerCode=atoi( value );
       } else if( strcmp( name, "hwBalanceErr") == 0 ) {
           lb->hwBalanceErr=atoi( value );
  +    } else if( strcmp( name, "noErrorHeader") == 0 ) {
  +        lb->noErrorHeader=atoi( value );
       } else if( strcmp( name, "timeout") == 0 ) {
           lb_priv->timeout=atoi( value );
       } else if( strcmp( name, "recovery") == 0 ) {
  @@ -637,10 +645,10 @@
       w->hwBalanceErr=0;
       w->noWorkerCode=503;
       w->noWorkerMsg=NO_WORKER_MSG;
  -
  +    /* Let Apache handle the error via ErrorDocument and mod_alias */
  +    w->noErrorHeader=1;
       w->workerEnv=env->getByName( env, "workerEnv" );
       w->workerEnv->addWorker( env, w->workerEnv, w );
   
       return JK_OK;
   }
  -
  
  
  
  1.35      +6 -2      jakarta-tomcat-connectors/jk/native2/include/jk_worker.h
  
  Index: jk_worker.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_worker.h,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- jk_worker.h       24 Feb 2004 08:44:39 -0000      1.34
  +++ jk_worker.h       27 Feb 2004 08:34:18 -0000      1.35
  @@ -50,7 +50,6 @@
      in error state, we move to the next leve.
   */
   #define JK_LB_LEVELS 4
  -#define JK_LB_MAX_WORKERS 256
   
   /* XXX Separate this in 2 structures: jk_lb.h and jk_ajp.h.
      Using 'worker' as a generic term is confusing, the objects are very different.
  @@ -222,6 +221,11 @@
        */
       char *noWorkerMsg;
       int  noWorkerCode;
  +    
  +    /* jk2 shouldn't set headers if noErrorHeader (true by default) 
  +     * It will allow Apache 2.0 to handle correctly ErrorDocument
  +     */
  +    int  noErrorHeader;
       
       int workerCnt[JK_LB_LEVELS];
       jk_worker_t *workerTables[JK_LB_LEVELS][JK_LB_MAX_WORKERS];
  
  
  

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

Reply via email to