mturk       2005/02/25 23:16:54

  Modified:    jk/native/common jk_lb_worker.c
  Log:
  Add failover for hot standby. This allows new sessions to use failover
  worker or worker group. Limit is that you can not have two different
  failover workers or workers groups.
  
  Revision  Changes    Path
  1.72      +37 -23    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.71
  retrieving revision 1.72
  diff -u -r1.71 -r1.72
  --- jk_lb_worker.c    22 Feb 2005 08:59:57 -0000      1.71
  +++ jk_lb_worker.c    26 Feb 2005 07:16:54 -0000      1.72
  @@ -281,11 +281,8 @@
           }
       }
   
  -    if (candidate) {
  +    if (candidate)
           candidate->s->lb_value -= total_factor;
  -        candidate->r = &(candidate->s->name[0]);
  -    }
  -
       return candidate;
   }
   
  @@ -320,27 +317,9 @@
               }
           }
       }    
  -    if (candidate)
  -        candidate->r = &(candidate->s->name[0]);
       return candidate;
   }
   
  -static worker_record_t *find_best_worker(lb_worker_t * p,
  -                                         jk_logger_t *l)
  -{
  -    worker_record_t *rc = NULL;
  -
  -    if (p->lbmethod == JK_LB_BYREQUESTS)
  -        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;
  -}
  -
   static worker_record_t *find_bysession_route(lb_worker_t *p, 
                                                const char *name,
                                                jk_logger_t *l)
  @@ -395,6 +374,41 @@
       return candidate;
   }
   
  +static worker_record_t *find_failover_worker(lb_worker_t * p,
  +                                             jk_logger_t *l)
  +{
  +    worker_record_t *rc = NULL;
  +    unsigned int i;
  +    const char *redirect = NULL;    
  +
  +    for (i = 0; i < p->num_of_workers; i++) {
  +        if (strlen(p->lb_workers[i].s->redirect)) {
  +            redirect = &(p->lb_workers[i].s->redirect[0]);
  +            break;
  +        }
  +    }
  +    if (redirect)
  +        rc = find_bysession_route(p, redirect, l);
  +    return rc;
  +}
  +
  +static worker_record_t *find_best_worker(lb_worker_t * p,
  +                                         jk_logger_t *l)
  +{
  +    worker_record_t *rc = NULL;
  +
  +    if (p->lbmethod == JK_LB_BYREQUESTS)
  +        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]);
  +    else
  +        rc = find_failover_worker(p, l);
  +    return rc;
  +}
  +
   static worker_record_t *get_most_suitable_worker(lb_worker_t * p,
                                                    jk_ws_service_t *s,
                                                    int attempt,
  
  
  

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

Reply via email to