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]>