costin 02/05/14 13:41:35 Modified: jk/native2/common jk_worker_lb.c Log: Support for customizable error message ( or redirect ) in case all workers are down Revision Changes Path 1.15 +28 -3 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.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- jk_worker_lb.c 14 May 2002 17:23:31 -0000 1.14 +++ jk_worker_lb.c 14 May 2002 20:41:35 -0000 1.15 @@ -78,6 +78,8 @@ #define MAX_ATTEMPTS 3 +#define NO_WORKER_MSG "The servlet container is temporary unavailable or beeing upgraded\n"; + /** Find the best worker. In process, check if timeout expired for workers that failed in the past and give them another chance. @@ -321,8 +323,25 @@ /* NULL record, no more workers left ... */ env->l->jkLog(env, env->l, JK_LOG_ERROR, "lb_worker.service() all workers in error or disabled state\n"); - /* XXX set hwBalanceErr status */ - /* XXX nice message or redirect */ + /* set hwBalanceErr status */ + if( lb->hwBalanceErr != 0 ) { + s->status=lb->hwBalanceErr; + } else { + 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 ); + } + + s->afterRequest( env, s); return JK_ERR; } @@ -419,7 +438,7 @@ static char *jk2_worker_lb_multiValueInfo[]={"worker", NULL }; -static char *jk2_worker_lb_setAttributeInfo[]={"hwBalanceErr", NULL }; +static char *jk2_worker_lb_setAttributeInfo[]={"hwBalanceErr", "noWorkerMsg", "noWorkerCode", NULL }; static int JK_METHOD jk2_lb_setAttribute(jk_env_t *env, jk_bean_t *mbean, char *name, void *valueP) @@ -445,6 +464,10 @@ jk2_lb_refresh( env, lb ); return JK_OK; + } else if( strcmp( name, "noWorkerMsg") == 0 ) { + lb->noWorkerMsg=value; + } else if( strcmp( name, "noWorkerCode") == 0 ) { + lb->noWorkerCode=atoi( value ); } else if( strcmp( name, "hwBalanceErr") == 0 ) { lb->hwBalanceErr=atoi( value ); } @@ -525,6 +548,8 @@ w->mbean=result; w->hwBalanceErr=0; + w->noWorkerCode=503; + w->noWorkerMsg=NO_WORKER_MSG; w->workerEnv=env->getByName( env, "workerEnv" ); w->workerEnv->addWorker( env, w->workerEnv, w );
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>