mturk       2005/02/16 23:16:32

  Modified:    jk/native/common jk_lb_worker.c jk_lb_worker.h
  Log:
  Set service route to either worker name or worker domain, depending
  on how the worker has been elected.
  
  Revision  Changes    Path
  1.57      +27 -19    jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c
  
  Index: jk_lb_worker.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- jk_lb_worker.c    16 Feb 2005 15:09:21 -0000      1.56
  +++ jk_lb_worker.c    17 Feb 2005 07:16:32 -0000      1.57
  @@ -173,13 +173,13 @@
       if (elapsed <= recover_wait_time) {
           if (JK_IS_DEBUG_LEVEL(l))
               jk_log(l, JK_LOG_DEBUG,
  -                    "worker %s is in error state - will not yet recover (%d 
< %d)",
  -                    w->s->name, elapsed, recover_wait_time);
  +                    "worker %s will recover in %d seconds",
  +                    w->s->name, recover_wait_time - elapsed);
       }
       else {
           if (JK_IS_DEBUG_LEVEL(l))
               jk_log(l, JK_LOG_DEBUG,
  -                    "worker %s is in error state - will recover",
  +                    "worker %s is marked for recover",
                       w->s->name);
           w->s->in_recovering  = JK_TRUE;
           w->s->in_error_state = JK_FALSE;
  @@ -247,6 +247,7 @@
       if (candidate) {
           if (p->lbmethod == JK_LB_BYREQUESTS)
               candidate->s->lb_value -= total_factor;
  +        candidate->r = &(candidate->s->domain[0]);
       }
   
       return candidate;
  @@ -286,6 +287,7 @@
   
       if (candidate) {
           candidate->s->lb_value -= total_factor;
  +        candidate->r = &(candidate->s->name[0]);
       }
   
       return candidate;
  @@ -337,6 +339,9 @@
           rc = find_best_byrequests(p, l);
       else if (p->lbmethod == JK_LB_BYTRAFFIC)
           rc = find_best_bytraffic(p, l);
  +    /* By default use worker name as session route */
  +    if (rc)
  +        rc->r = &(rc->s->name[0]);
   
       return rc;
   }
  @@ -485,7 +490,7 @@
           lb_endpoint_t *p = e->endpoint_private;
           int attempt = 0;
           int num_of_workers = p->worker->num_of_workers;
  -        /* you can not recover on another load balancer */
  +        /* Set returned error to OK */
           *is_error = JK_HTTP_OK;
   
           /* set the recovery post, for LB mode */
  @@ -505,10 +510,15 @@
   
               if (rec) {
                   int is_service_error = JK_HTTP_OK;
  +                int service_ok = JK_FALSE;
                   jk_endpoint_t *end = NULL;
  -
  -                s->jvm_route = jk_pool_strdup(s->pool, rec->s->name);
  -
  +                
  +                /* XXX: No need to strdup here ? */
  +#if 0
  +                s->jvm_route = jk_pool_strdup(s->pool, rec->r);
  +#else
  +                s->jvm_route = rec->r;
  +#endif
                   rc = rec->w->get_endpoint(rec->w, &end, l);
   
                   if (JK_IS_DEBUG_LEVEL(l))
  @@ -517,17 +527,16 @@
                              rec->s->name, s->jvm_route, rc);
                   rec->s->elected++;
                   if (rc && end) {
  -                    int src;
                       /* Reset endpoint read and write sizes for
                        * this request.
                        */
                       end->rd = end->wr = 0;                    
  -                    src = end->service(end, s, l, &is_service_error);
  +                    service_ok = end->service(end, s, l, &is_service_error);
                       /* Update partial reads and writes if any */
                       rec->s->readed += end->rd;
                       rec->s->transferred += end->wr;
                       end->done(&end, l);
  -                    if (src) {
  +                    if (service_ok) {
                           rec->s->in_error_state = JK_FALSE;
                           rec->s->in_recovering = JK_FALSE;
                           rec->s->error_time = 0;
  @@ -535,7 +544,7 @@
                           return JK_TRUE;
                       }
                   }
  -                if (end) {
  +                if (!service_ok) {
                       /*
                       * Service failed !!!
                       *
  @@ -560,6 +569,9 @@
                           JK_TRACE_EXIT(l);
                           return JK_FALSE;
                       }
  +                    jk_log(l, JK_LOG_INFO,
  +                           "service failed, worker %s is in error state",
  +                           rec->s->name);
                   }
                   else {
                       /* If we can not get the endpoint from the worker
  @@ -588,8 +600,7 @@
               }
           }
           jk_log(l, JK_LOG_INFO,
  -               "All tomcat instances are busy, no more endpoints left. "
  -               "Rise cache_size to match the load");
  +               "All tomcat instances are busy or in error state");
           JK_TRACE_EXIT(l);
           /* Set error to Server busy */
           *is_error = JK_HTTP_SERVER_BUSY;
  @@ -675,14 +686,11 @@
                       strncpy(p->lb_workers[i].s->domain, s, JK_SHM_STR_SIZ);
                   if ((s = jk_get_worker_redirect(props, worker_names[i], 
NULL)))
                       strncpy(p->lb_workers[i].s->redirect, s, JK_SHM_STR_SIZ);
  -                /* 
  -                 * Allow using lb in fault-tolerant mode.
  -                 * A value of 0 means the worker will be used for all 
requests without
  -                 * sessions
  -                 */
  +
                   p->lb_workers[i].s->lb_value = p->lb_workers[i].s->lb_factor;
                   p->lb_workers[i].s->in_error_state = JK_FALSE;
                   p->lb_workers[i].s->in_recovering = JK_FALSE;
  +                p->lb_workers[i].s->error_time = 0;
                   /* Worker can be initaly disabled as hot standby */
                   p->lb_workers[i].s->is_disabled = 
jk_get_is_worker_disabled(props, worker_names[i]);
                   if (!wc_create_worker(p->lb_workers[i].s->name,
  
  
  
  1.13      +3 -1      jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.h
  
  Index: jk_lb_worker.h
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- jk_lb_worker.h    16 Feb 2005 08:27:52 -0000      1.12
  +++ jk_lb_worker.h    17 Feb 2005 07:16:32 -0000      1.13
  @@ -47,6 +47,8 @@
       jk_worker_t     *w;
       /* Shared memory worker data */
       jk_shm_worker_t  *s;
  +    /* Current jvmRoute. Can be name or domain */
  +    const char       *r;
   };
   typedef struct worker_record worker_record_t;
   
  
  
  

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

Reply via email to