This part of code in jk 1.2/2.0 is really a spaghetti :[

I spent many times in it, and I think we should refactor it
at least in jk2.

Certainly after aplha release.

-
Henri Gomez                 ___[_]____
EMAIL : [EMAIL PROTECTED]        (. .)                     
PGP KEY : 697ECEDD    ...oOOo..(_)..oOOo...
PGP Fingerprint : 9DF8 1EA8 ED53 2F39 DC9B 904A 364F 80E6 



>-----Original Message-----
>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
>Sent: Wednesday, June 26, 2002 4:42 AM
>To: [EMAIL PROTECTED]
>Subject: cvs commit: jakarta-tomcat-connectors/jk/native2/common
>jk_worker_ajp13.c
>
>
>costin      2002/06/25 19:41:39
>
>  Modified:    jk/native2/common jk_worker_ajp13.c
>  Log:
>  Another attempt to fix the 'tomcat restart' problem.
>  
>  send ( with either write or send() ) doesn't detect if 
>tomcat is disconnected -
>  only the first receive does report the error.
>  
>  What we do is use the 'recoverable' field to mark if tomcat 
>has already
>  started to process the request ( i.e. we received at least 
>one packet -
>  probably the HEAD, in which case the error can't be recovered ).
>  
>  If this is just a tomcat restart, we'll save the post body ( 
>initial chunk ),
>  and resend it. The logic is a bit tricky - but I think I got 
>it right this
>  time ( it affected the case that a POST is made just after restart )
>  
>  Revision  Changes    Path
>  1.34      +17 -8     
>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.33
>  retrieving revision 1.34
>  diff -u -r1.33 -r1.34
>  --- jk_worker_ajp13.c        20 Jun 2002 18:45:01 -0000      1.33
>  +++ jk_worker_ajp13.c        26 Jun 2002 02:41:39 -0000      1.34
>  @@ -299,10 +299,12 @@
>   {
>       int err=JK_OK;
>       int attempt;
>  +    int has_post_body=JK_FALSE;
>  +    jk_channel_t *channel= worker->channel;
>   
>       e->recoverable = JK_TRUE;
>       s->is_recoverable_error = JK_TRUE;
>  -    
>  +
>       /*
>        * Try to send the request on a valid endpoint. If one endpoint
>        * fails, close the channel and try again ( maybe 
>tomcat was restarted )
>  @@ -311,7 +313,6 @@
>        * a load-balancing configuration 
>        */
>       for(attempt = 0 ; attempt < JK_RETRIES ;attempt++) {
>  -        jk_channel_t *channel= worker->channel;
>   
>           if( e->sd == -1 ) {
>               err=jk2_worker_ajp13_connect(env, e);
>  @@ -322,6 +323,9 @@
>                   e->worker->in_error_state=JK_TRUE;
>                   return err;
>               }
>  +            if( worker->mbean->debug > 0 )
>  +                env->l->jkLog(env, env->l, JK_LOG_INFO,
>  +                              "ajp13.service() connecting 
>to endpoint \n");
>           }
>   
>           err=e->worker->channel->send( env, e->worker->channel, e,
>  @@ -332,7 +336,6 @@
>           
>           if (err!=JK_OK ) {
>               /* Can't send - bad endpoint, try again */
>  -
>               env->l->jkLog(env, env->l, JK_LOG_ERROR,
>                             "ajp13.service() error sending, 
>reconnect %s %d %d %s\n",
>                             e->worker->channelName, err, 
>errno, strerror(errno));
>  @@ -346,7 +349,7 @@
>              request was sent ( we're receiving data from 
>client, can be slow, no
>              need to delay - we can do that in paralel. ( not 
>very sure this is
>              very usefull, and it brakes the protocol ) ! */
>  -        if (s->is_chunked || s->left_bytes_to_send > 0) {
>  +        if (has_post_body || s->is_chunked || 
>s->left_bytes_to_send > 0) {
>               /* We never sent any POST data and we check it 
>we have to send at
>                * least of block of data (max 8k). These data 
>will be kept in reply
>                * for resend if the remote Tomcat is down, a 
>fact we will learn only
>  @@ -354,6 +357,8 @@
>                */
>               if( attempt==0 )
>                   err=jk2_serialize_postHead( env, e->post, s, e );
>  +            else
>  +                err=JK_OK; /* We already have the initial 
>body chunk */
>               
>               if( e->worker->mbean->debug > 10 )
>                   e->request->dump( env, e->request, "Post head" );
>  @@ -363,17 +368,20 @@
>                   /* e->recoverable = JK_FALSE; */
>                   s->is_recoverable_error = JK_FALSE;
>                   env->l->jkLog(env, env->l, JK_LOG_ERROR,
>  -                              "ajp13.service() Error 
>receiving initial post \n");
>  +                              "ajp13.service() Error 
>receiving initial post %d %d %d\n", err, errno, attempt);
>                   return JK_ERR;
>               }
>  +            has_post_body=JK_TRUE;
>               err= e->worker->channel->send( env, 
>e->worker->channel, e,
>                                              e->post );
>               if( err != JK_OK ) {
>                   /* e->recoverable = JK_FALSE; */
>  -                s->is_recoverable_error = JK_FALSE;
>  +                /*                 s->is_recoverable_error 
>= JK_FALSE; */
>                   env->l->jkLog(env, env->l, JK_LOG_ERROR,
>  -                              "ajp13.service() Error 
>receiving initial post \n");
>  -                return JK_ERR;
>  +                              "ajp13.service() Error 
>sending initial post %d %d %d\n", err, errno, attempt);
>  +                jk2_close_endpoint(env, e);
>  +                continue;
>  +                /*  return JK_ERR; */
>               }
>           }
>   
>  @@ -399,6 +407,7 @@
>                             err);
>               jk2_close_endpoint(env, e ); 
>          }
>  +
>           if( err==JK_OK )
>               return err;
>       }
>  
>  
>  
>
>--
>To unsubscribe, e-mail:   
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to