mturk       2005/02/14 23:25:41

  Modified:    jk/native/common jk_lb_worker.c
  Log:
  Add redirect rule to load balancer. Like domain if redirect is set and there
  is sticky session it will be redirected to that worker. This will work only if
  the worker is disabled, meaning not accepting new sessions.
  
  Revision  Changes    Path
  1.49      +40 -14    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.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- jk_lb_worker.c    14 Feb 2005 17:22:35 -0000      1.48
  +++ jk_lb_worker.c    15 Feb 2005 07:25:41 -0000      1.49
  @@ -43,12 +43,12 @@
   #define WORKER_RECOVER_TIME ("recover_time")
   
   static const char *search_types[] = {
  -    "none",
  +    "any",
       "sticky",
  +    "redirect",
       "sticky domain",
       "local",
       "local domain",
  -    "any",
       NULL
   };
   
  @@ -180,28 +180,33 @@
                                  jk_logger_t *l)
   {
       switch (search_id) {
  +        case 0:
  +            return JK_TRUE;
           case 1:
               if (strcmp(search_string, wr->s->name) == 0) {
                   return JK_TRUE;
               }
           break;
           case 2:
  -            if (strcmp(search_string, wr->s->domain) == 0) {
  +            if (strcmp(search_string, wr->s->name) == 0) {
                   return JK_TRUE;
               }
           break;
           case 3:
  -            if (wr->s->is_local_worker) {
  +            if (strcmp(search_string, wr->s->domain) == 0) {
                   return JK_TRUE;
               }
           break;
           case 4:
  -            if (wr->s->is_local_domain) {
  +            if (wr->s->is_local_worker) {
                   return JK_TRUE;
               }
           break;
           case 5:
  -            return JK_TRUE;
  +            if (wr->s->is_local_domain) {
  +                return JK_TRUE;
  +            }
  +        break;
       }
       return JK_FALSE;
   }
  @@ -237,12 +242,19 @@
                 search_type, search_string);
   
       for (i = start; i < stop; i++) {
  +        if (search_id < 3 && p->lb_workers[i].s->is_disabled) {
  +
  +            continue;
  +        }
           if (is_worker_candidate(&(p->lb_workers[i]), search_id, 
search_string, l)) {
               if (JK_IS_DEBUG_LEVEL(l))
                  jk_log(l, JK_LOG_DEBUG,
                         "found candidate worker %s (%d) for match with %s 
(%s)",
                         p->lb_workers[i].s->name, i, search_type, 
search_string);
  -            if (search_id == 1) {
  +            if (search_id == 1 && strlen(p->lb_workers[i].s->redirect)) {
  +                *domain_id = i;
  +            }
  +            else if (search_id == 2) {
                   *domain_id = i;
               }
               if (!p->lb_workers[i].s->in_error_state || 
!p->lb_workers[i].s->in_recovering) {
  @@ -353,6 +365,20 @@
                   JK_TRACE_EXIT(l);
                   return rc;
               }
  +            if (domain_id >= 0 && domain_id < (int)p->num_of_workers) {
  +                session_domain = p->lb_workers[domain_id].s->domain;
  +                if (JK_IS_DEBUG_LEVEL(l))
  +                    jk_log(l, JK_LOG_DEBUG,
  +                           "found redirect %s in route %s",
  +                           session_domain, session_route);
  +
  +                rc = get_suitable_worker(p, 2, session_domain, 0, 
p->num_of_workers,
  +                                         0, &domain_id, l);
  +                if (rc) {
  +                    JK_TRACE_EXIT(l);
  +                    return rc;
  +                }
  +            }
   
               if (domain_id >= 0 && domain_id < (int)p->num_of_workers) {
                   session_domain = p->lb_workers[domain_id].s->domain;
  @@ -365,7 +391,7 @@
                          "found domain %s in route %s",
                          session_domain, session_route);
   
  -            rc = get_suitable_worker(p, 2, session_domain, 0, 
p->num_of_workers,
  +            rc = get_suitable_worker(p, 3, session_domain, 0, 
p->num_of_workers,
                                        1, &domain_id, l);
               if (rc) {
                   JK_TRACE_EXIT(l);
  @@ -378,7 +404,7 @@
   
   
       if (p->num_of_local_workers) {
  -        rc = get_suitable_worker(p, 3, "any", 0, p->num_of_local_workers,
  +        rc = get_suitable_worker(p, 4, "any", 0, p->num_of_local_workers,
                                    1, &domain_id, l);
           if (rc) {
               JK_TRACE_EXIT(l);
  @@ -390,14 +416,14 @@
               return NULL;
           }
   
  -        rc = get_suitable_worker(p, 4, "any", p->num_of_local_workers,
  +        rc = get_suitable_worker(p, 5, "any", p->num_of_local_workers,
                                    p->num_of_workers, 1, &domain_id, l);
           if (rc) {
               JK_TRACE_EXIT(l);
               return rc;
           }
       }
  -    rc = get_suitable_worker(p, 5, "any", p->num_of_local_workers, 
p->num_of_workers,
  +    rc = get_suitable_worker(p, 0, "any", p->num_of_local_workers, 
p->num_of_workers,
                                1, &domain_id, l);
       JK_TRACE_EXIT(l);
       return rc;
  @@ -459,7 +485,7 @@
                           return JK_TRUE;
                       }
                   }
  -
  +                rec->s->errors++;
                   /*
                    * Service failed !!!
                    *
  @@ -676,7 +702,7 @@
   
       pThis->retries = jk_get_worker_retries(props, p->s->name,
                                              JK_RETRIES);
  -
  +    p->s->retries = pThis->retries;
       if (jk_get_worker_int_prop(props, p->s->name,
                                  WORKER_RECOVER_TIME,
                                  &i))
  
  
  

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

Reply via email to