Good morning All. >From my source, a 302 code is "Found - the requested resource lies temporarily under a different URI", which doesn't seem to match very closely the text of the default noWorkerMsg. Speaking of which, the word 'temporary' in the #define noWorkerMsg should be 'temporarily'. Norm
> 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]