pero        2005/04/26 08:28:18

  Modified:    jk/native/common jk_lb_worker.c jk_shm.h jk_status.c
                        jk_uri_worker_map.h jk_util.c jk_util.h
  Log:
  Add stopped flag for better cluster support to worker.
  Many thanks to Mladen :->
  
  Revision  Changes    Path
  1.79      +11 -9     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.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- jk_lb_worker.c    24 Apr 2005 09:54:47 -0000      1.78
  +++ jk_lb_worker.c    26 Apr 2005 15:28:18 -0000      1.79
  @@ -40,8 +40,8 @@
   /*
    * Time to wait before retry...
    */
  -#define JK_WORKER_IN_ERROR(w) ((w)->in_error_state && !(w)->is_disabled && 
!(w)->is_busy)
  -#define JK_WORKER_USABLE(w)   (!(w)->in_error_state && !(w)->is_disabled && 
!(w)->is_busy)
  +#define JK_WORKER_IN_ERROR(w) ((w)->in_error_state  && !(w)->is_disabled && 
!(w)->is_busy)
  +#define JK_WORKER_USABLE(w)   (!(w)->in_error_state && !(w)->is_stopped && 
!(w)->is_disabled && !(w)->is_busy)
   
   struct lb_endpoint
   {
  @@ -235,7 +235,7 @@
               strcmp(p->lb_workers[i].s->domain, domain))
               continue;
           /* Take into calculation only the workers that are
  -         * not in error state or not disabled.
  +         * not in error state, stopped or not disabled.
            */
           if (JK_WORKER_USABLE(p->lb_workers[i].s)) {
               if (p->lbmethod == JK_LB_BYREQUESTS) {
  @@ -252,7 +252,7 @@
                       curmin = mytraffic;
                   }
               }
  -        }
  +        }        
       }
   
       if (candidate) {
  @@ -284,7 +284,7 @@
               retry_worker(&p->lb_workers[i], p->s->recover_wait_time, l);
           }
           /* Take into calculation only the workers that are
  -         * not in error state or not disabled.
  +         * not in error state, stopped or not disabled.
            */
           if (JK_WORKER_USABLE(p->lb_workers[i].s)) {
               p->lb_workers[i].s->lb_value += p->lb_workers[i].s->lb_factor;
  @@ -319,7 +319,7 @@
               retry_worker(&p->lb_workers[i], p->s->recover_wait_time, l);
           }
           /* Take into calculation only the workers that are
  -         * not in error state or not disabled.
  +         * not in error state, stopped or not disabled.
            */
           if (JK_WORKER_USABLE(p->lb_workers[i].s)) {
               mytraffic = 
(p->lb_workers[i].s->transferred/p->lb_workers[i].s->lb_factor) +
  @@ -351,8 +351,8 @@
           if (JK_WORKER_IN_ERROR(candidate->s)) {
               retry_worker(candidate, p->s->recover_wait_time, l);
           }
  -        if (candidate->s->in_error_state) {
  -            /* We have a worker that is error state.
  +        if (candidate->s->in_error_state || candidate->s->is_stopped ) {
  +            /* We have a worker that is error state or stopped.
                * If it has a redirection set use that redirection worker.
                * This enables to safely remove the member from the
                * balancer. Of course you will need a some kind of
  @@ -780,6 +780,8 @@
                   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]);
  +                /* Worker can be initaly deactive as cold standby */
  +                p->lb_workers[i].s->is_stopped = 
jk_get_is_worker_stopped(props, worker_names[i]);
                   if (!wc_create_worker(p->lb_workers[i].s->name,
                                         props,
                                         &(p->lb_workers[i].w),
  
  
  
  1.19      +2 -1      jakarta-tomcat-connectors/jk/native/common/jk_shm.h
  
  Index: jk_shm.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- jk_shm.h  11 Apr 2005 06:36:02 -0000      1.18
  +++ jk_shm.h  26 Apr 2005 15:28:18 -0000      1.19
  @@ -64,6 +64,7 @@
       char    redirect[JK_SHM_STR_SIZ+1];
       /* current status of the worker */
       volatile int is_disabled;
  +    volatile int is_stopped;
       volatile int is_busy;
       /* Current lb factor */
       volatile int lb_factor;
  
  
  
  1.38      +17 -6     jakarta-tomcat-connectors/jk/native/common/jk_status.c
  
  Index: jk_status.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_status.c,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- jk_status.c       13 Apr 2005 11:03:37 -0000      1.37
  +++ jk_status.c       26 Apr 2005 15:28:18 -0000      1.38
  @@ -218,9 +218,11 @@
           return "True";
   }
   
  -static const char *status_val_status(int d, int e, int r, int b)
  +static const char *status_val_status(int s, int d, int e, int r, int b)
   {
  -    if (d)
  +    if (s)
  +        return "Stopped";
  +    else if (d)
           return "Disabled";
       else if (r)
           return "Recovering";
  @@ -234,7 +236,9 @@
   
   static const char *status_val_match(unsigned int match)
   {
  -    if (match & MATCH_TYPE_DISABLED)
  +    if (match & MATCH_TYPE_STOPPED)
  +        return "Stopped";
  +    else if (match & MATCH_TYPE_DISABLED)
           return "Disabled";
       else if (match & MATCH_TYPE_NO_MATCH)
           return "Unmount";
  @@ -459,7 +463,8 @@
                           "</td>", NULL);
                   /* TODO: descriptive status */
                   jk_putv(s, "<td>",
  -                        status_val_status(wr->s->is_disabled,
  +                        status_val_status(wr->s->is_stopped,
  +                                          wr->s->is_disabled,
                                             wr->s->in_error_state,
                                             wr->s->in_recovering,
                                             wr->s->is_busy),
  @@ -512,6 +517,10 @@
                   if (wr->s->is_disabled)
                       jk_puts(s, "  checked=\"checked\"");
                   jk_puts(s, "/></td></tr>\n");
  +                jk_puts(s, "<tr><td>Stopped:</td><td><input name=\"ws\" 
type=\"checkbox\"");
  +                if (wr->s->is_stopped)
  +                    jk_puts(s, "  checked=\"checked\"");
  +                jk_puts(s, "/></td></tr>\n");
                   jk_puts(s, "</td></tr>\n</table>\n");
                   jk_puts(s, "<br/><input type=\"submit\" value=\"Update 
Worker\"/>\n</form>\n");
   
  @@ -631,7 +640,8 @@
                   a->host,
                   a->port,
                   jk_dump_hinfo(&a->worker_inet_addr, buf),
  -                status_val_status(wr->s->is_disabled,
  +                status_val_status(wr->s->is_stopped,
  +                                  wr->s->is_disabled,
                                     wr->s->in_error_state,
                                     wr->s->in_recovering,
                                     wr->s->is_busy) );
  @@ -716,6 +726,7 @@
           else
               memset(wr->s->domain, 0, JK_SHM_STR_SIZ);
           wr->s->is_disabled = status_bool("wd", s->query_string);
  +        wr->s->is_stopped = status_bool("ws", s->query_string);
           i = status_int("wf", s->query_string, wr->s->lb_factor);
           if (i > 0)
               wr->s->lb_factor = i;
  
  
  
  1.19      +2 -1      
jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h
  
  Index: jk_uri_worker_map.h
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- jk_uri_worker_map.h       13 Apr 2005 11:03:37 -0000      1.18
  +++ jk_uri_worker_map.h       26 Apr 2005 15:28:18 -0000      1.19
  @@ -50,6 +50,7 @@
   #define MATCH_TYPE_WILDCHAR_PATH    0x0040
   #define MATCH_TYPE_NO_MATCH         0x1000
   #define MATCH_TYPE_DISABLED         0x2000
  +#define MATCH_TYPE_STOPPED          0x4000
   
   struct uri_worker_record
   {
  
  
  
  1.63      +17 -1     jakarta-tomcat-connectors/jk/native/common/jk_util.c
  
  Index: jk_util.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.c,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- jk_util.c 21 Apr 2005 10:36:58 -0000      1.62
  +++ jk_util.c 26 Apr 2005 15:28:18 -0000      1.63
  @@ -67,6 +67,7 @@
   #define MOUNT_OF_WORKER             ("mount")
   #define METHOD_OF_WORKER            ("method")
   #define IS_WORKER_DISABLED          ("disabled")
  +#define IS_WORKER_STOPPED           ("stopped")
   #define WORKER_RECOVER_TIME         ("recover_time")
   
   
  @@ -689,6 +690,20 @@
       return rc;
   }
   
  +int jk_get_is_worker_stopped(jk_map_t *m, const char *wname)
  +{
  +    int rc = JK_TRUE;
  +    char buf[1024];
  +    if (m && wname) {
  +        int value;
  +        sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, IS_WORKER_STOPPED);
  +        value = jk_map_get_bool(m, buf, 0);
  +        if (!value)
  +            rc = JK_FALSE;
  +    }
  +    return rc;
  +}
  +
   void jk_set_log_format(const char *logformat)
   {
       jk_log_fmt = (logformat) ? logformat : JK_TIME_FORMAT;
  @@ -1004,6 +1019,7 @@
       MOUNT_OF_WORKER,
       METHOD_OF_WORKER,
       IS_WORKER_DISABLED,
  +    IS_WORKER_STOPPED,
       WORKER_RECOVER_TIME,
       SECRET_KEY_OF_WORKER,
       RETRIES_OF_WORKER,
  
  
  
  1.32      +3 -1      jakarta-tomcat-connectors/jk/native/common/jk_util.h
  
  Index: jk_util.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.h,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- jk_util.h 21 Apr 2005 10:36:58 -0000      1.31
  +++ jk_util.h 26 Apr 2005 15:28:18 -0000      1.32
  @@ -84,6 +84,8 @@
   
   int jk_get_is_worker_disabled(jk_map_t *m, const char *wname);
   
  +int jk_get_is_worker_stopped(jk_map_t *m, const char *wname);
  +
   void jk_set_log_format(const char *logformat);
   
   int jk_get_worker_list(jk_map_t *m, char ***list, unsigned *num_of_wokers);
  
  
  

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

Reply via email to