hgomez 2004/02/23 07:44:26 Modified: jk/native2 CHANGES.txt jk/native2/common jk_workerEnv.c jk_worker_ajp13.c jk/native2/include jk_service.h Log: Port jk recovery strategy.
Need review and more tests Revision Changes Path 1.13 +2 -1 jakarta-tomcat-connectors/jk/native2/CHANGES.txt Index: CHANGES.txt =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/CHANGES.txt,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- CHANGES.txt 23 Feb 2004 13:57:27 -0000 1.12 +++ CHANGES.txt 23 Feb 2004 15:44:26 -0000 1.13 @@ -11,6 +11,7 @@ * Make default port configurable (9009 on Netware, 8009 elsewhere) * Fix problem when in Load-Balancing and POST [Henri Gomez]. * Add recovery_opts (recovery strategy) which help make POST recovery configurable [Henri Gomez]. + Changes with JK2 2.0.4: * Added the load balancer stickySession property. If set to 0 requests with servlet SESSION ID's can be routed to any Tomcat 1.63 +27 -10 jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c Index: jk_workerEnv.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- jk_workerEnv.c 25 Sep 2003 15:23:22 -0000 1.62 +++ jk_workerEnv.c 23 Feb 2004 15:44:26 -0000 1.63 @@ -468,7 +468,7 @@ int rc; jk_handler_t **handlerTable=wEnv->handlerTable; int maxHandler=wEnv->lastMessageId; - + int headeratclient=JK_FALSE; ep->currentRequest=req; /* Process reply - this is the main loop */ @@ -484,15 +484,27 @@ ep->worker->channel->mbean->name); msg->reset(env, msg); - + + /* Check for reply in timeout */ + if ( ep->worker->reply_timeout != 0) { + if (ep->worker->channel->hasinput(env, ep->worker->channel, ep, ep->worker->reply_timeout) != JK_TRUE) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "workerEnv.processCallbacks() no reply after %d ms waiting\n", timeout); + + return JK_ERR; + } + } + rc= ep->worker->channel->recv( env, ep->worker->channel, ep, msg); if( rc!=JK_OK ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, "workerEnv.processCallbacks() Error reading reply\n"); - /* It may be the first receive, let the caller decide if it's ok to retry - */ - /* ep->recoverable=JK_FALSE; */ + + /* Error is unrecoverable if tomcat failed (Tomcat allready got request) */ + if (ep->worker->recovery_opts & RECOVER_ABORT_IF_TCGETREQUEST) + ep->recoverable=JK_FALSE; + return rc; } @@ -537,16 +549,21 @@ msg ); if (rc < 0) { env->l->jkLog(env, env->l, JK_LOG_ERROR, - "ajp14.processCallbacks() error sending response data\n"); + "workerEnv.processCallbacks() error sending response data\n"); ep->recoverable = JK_FALSE; return rc; } break; case JK_HANDLER_ERROR: /* Normal error ( for example writing to the client failed ). - * The ajp connection is still in a stable state. + * The ajp connection is still in a stable state but if by configuration + * recoveryOpts is to 1 or 3, we should mark it at unrecoverable. */ - ep->recoverable = JK_TRUE; + if (ep->worker->recovery_opts & RECOVER_ABORT_IF_TCSENDHEADER) + ep->recoverable = JK_FALSE; + else + ep->recoverable = JK_TRUE; + return rc; case JK_HANDLER_FATAL: /* @@ -557,7 +574,7 @@ default: /* Unknown status */ env->l->jkLog(env, env->l, JK_LOG_ERROR, - "ajp14.processCallbacks() unknonwn status %d\n", rc); + "workerEnv.processCallbacks() unknown status %d\n", rc); ep->recoverable = JK_FALSE; return rc; } 1.57 +2 -2 jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c Index: jk_worker_ajp13.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- jk_worker_ajp13.c 23 Feb 2004 13:57:27 -0000 1.56 +++ jk_worker_ajp13.c 23 Feb 2004 15:44:26 -0000 1.57 @@ -123,7 +123,7 @@ return jk2_env_itoa( env, worker->reply_timeout); } else if (strcmp( name, "prepostTimeout" )==0 ) { return jk2_env_itoa( env, worker->prepost_timeout); - } else if (strcmp( name, "recovery_opts" )==0 ) { + } else if (strcmp( name, "recoveryOpts" )==0 ) { return jk2_env_itoa( env, worker->recovery_opts); } else if (strcmp( name, "disabled" )==0 ) { return jk2_env_itoa( env, bean->disabled ); @@ -162,7 +162,7 @@ ajp13->reply_timeout=atoi( value ); } else if( strcmp( name, "prepostTimeout" )==0 ) { ajp13->prepost_timeout=atoi( value ); - } else if( strcmp( name, "recovery_opts" )==0 ) { + } else if( strcmp( name, "recoveryOpts" )==0 ) { ajp13->recovery_opts=atoi( value ); } else if( strcmp( name, "disabled" )==0 ) { mbean->disabled=atoi( value ); 1.22 +13 -1 jakarta-tomcat-connectors/jk/native2/include/jk_service.h Index: jk_service.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_service.h,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- jk_service.h 13 Feb 2004 08:40:42 -0000 1.21 +++ jk_service.h 23 Feb 2004 15:44:26 -0000 1.22 @@ -140,6 +140,18 @@ #define RECO_INITED 0x01 #define RECO_FILLED 0x02 +/* + * RECOVERY STRATEGY + * + * The recovery strategy determine how web-server will handle tomcat crash after POST error. + * By default, we use the current strategy, which is to resend request to next tomcat. + * To abort if tomcat failed after receiving request, recovers_opts should be 1 or 3 + * To abort if tomcat failed after sending headers to client, recovers_opts should be 2 or 3 + */ + +#define RECOVER_ABORT_IF_TCGETREQUEST 0x0001 /* DONT RECOVER IF TOMCAT FAIL AFTER RECEIVING REQUEST */ +#define RECOVER_ABORT_IF_TCSENDHEADER 0x0002 /* DONT RECOVER IF TOMCAT FAIL AFTER SENDING HEADERS */ + /* * The web server service 'class'. An instance of this class is created --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]