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]