Author: rjung Date: Sun Oct 23 18:52:24 2011 New Revision: 1187948 URL: http://svn.apache.org/viewvc?rev=1187948&view=rev Log: Refactor extension rule handling after config fixing to make it available from outside of the uri worker map.
Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c tomcat/jk/trunk/native/common/jk_uri_worker_map.h Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.c?rev=1187948&r1=1187947&r2=1187948&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original) +++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Sun Oct 23 18:52:24 2011 @@ -361,8 +361,7 @@ static int uri_worker_map_clear(jk_uri_w return JK_TRUE; } -static void extract_activation(jk_uri_worker_map_t *uw_map, - uri_worker_record_t *uwr, +static void extract_activation(jk_pool_t *p, lb_worker_t *lb, int *activations, char *workers, @@ -370,7 +369,6 @@ static void extract_activation(jk_uri_wo jk_logger_t *l) { unsigned int i; - jk_pool_t *p; char *worker; #ifdef _MT_CODE_PTHREAD char *lasts; @@ -378,10 +376,6 @@ static void extract_activation(jk_uri_wo JK_TRACE_ENTER(l); - if (uwr->source_type == SOURCE_TYPE_URIMAP) - p = &IND_NEXT(uw_map->p_dyn); - else - p = &uw_map->p; worker = jk_pool_strdup(p, workers); #ifdef _MT_CODE_PTHREAD @@ -413,14 +407,14 @@ static void extract_activation(jk_uri_wo } -static void extract_fail_on_status(jk_uri_worker_map_t *uw_map, - uri_worker_record_t *uwr, - jk_logger_t *l) +static void extension_fix_fail_on_status(jk_pool_t *p, + const char *name, + rule_extension_t *extensions, + jk_logger_t *l) { unsigned int i; int j; int cnt = 1; - jk_pool_t *p; char *status; #ifdef _MT_CODE_PTHREAD char *lasts; @@ -428,33 +422,30 @@ static void extract_fail_on_status(jk_ur JK_TRACE_ENTER(l); - for (i=0; i<strlen(uwr->extensions.fail_on_status_str); i++) { - if (uwr->extensions.fail_on_status_str[i] == ',' || - uwr->extensions.fail_on_status_str[i] == ' ') + for (i=0; i<strlen(extensions->fail_on_status_str); i++) { + if (extensions->fail_on_status_str[i] == ',' || + extensions->fail_on_status_str[i] == ' ') cnt++; } - uwr->extensions.fail_on_status_size = cnt; + extensions->fail_on_status_size = cnt; - if (uwr->source_type == SOURCE_TYPE_URIMAP) - p = &IND_NEXT(uw_map->p_dyn); - else - p = &uw_map->p; - status = jk_pool_strdup(p, uwr->extensions.fail_on_status_str); - uwr->extensions.fail_on_status = (int *)jk_pool_alloc(p, - uwr->extensions.fail_on_status_size * sizeof(int)); - if (!uwr->extensions.fail_on_status) { + status = jk_pool_strdup(p, extensions->fail_on_status_str); + extensions->fail_on_status = (int *)jk_pool_alloc(p, + extensions->fail_on_status_size * sizeof(int)); + if (!extensions->fail_on_status) { jk_log(l, JK_LOG_ERROR, - "can't alloc extensions fail_on_status list"); + "can't alloc extensions fail_on_status list for worker (%s)", + name); JK_TRACE_EXIT(l); return; } else if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, - "Allocated fail_on_status array of size %d for worker %s", - uwr->extensions.fail_on_status_size, uwr->worker_name); + "Allocated fail_on_status array of size %d for worker (%s)", + extensions->fail_on_status_size, name); - for (j=0; j<uwr->extensions.fail_on_status_size; j++) { - uwr->extensions.fail_on_status[j] = 0; + for (j=0; j<extensions->fail_on_status_size; j++) { + extensions->fail_on_status[j] = 0; } cnt = 0; @@ -464,7 +455,7 @@ static void extract_fail_on_status(jk_ur #else for (status = strtok(status, ", "); status; status = strtok(NULL, ", ")) { #endif - uwr->extensions.fail_on_status[cnt] = atoi(status); + extensions->fail_on_status[cnt] = atoi(status); cnt++; } @@ -472,6 +463,79 @@ static void extract_fail_on_status(jk_ur } +static void extension_fix_activation(jk_pool_t *p, const char *name, jk_worker_t *jw, + rule_extension_t *extensions, jk_logger_t *l) +{ + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "Checking extension for worker %s of type %s (%d)", + name, wc_get_name_for_type(jw->type,l), jw->type); + + if (jw->type == JK_LB_WORKER_TYPE && + (extensions->active || extensions->disabled || extensions->stopped)) { + int j; + lb_worker_t *lb = (lb_worker_t *)jw->worker_private; + if (!extensions->activation) { + extensions->activation_size = lb->num_of_workers; + extensions->activation = (int *)jk_pool_alloc(p, + extensions->activation_size * sizeof(int)); + if (!extensions->activation) { + jk_log(l, JK_LOG_ERROR, + "can't alloc extensions activation list"); + return; + } else if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "Allocated activations array of size %d for lb worker %s", + extensions->activation_size, name); + for (j=0; j<extensions->activation_size; j++) { + extensions->activation[j] = JK_LB_ACTIVATION_UNSET; + } + } + if (extensions->active) + extract_activation(p, lb, extensions->activation, + extensions->active, JK_LB_ACTIVATION_ACTIVE, l); + if (extensions->disabled) + extract_activation(p, lb, extensions->activation, + extensions->disabled, JK_LB_ACTIVATION_DISABLED, l); + if (extensions->stopped) + extract_activation(p, lb, extensions->activation, + extensions->stopped, JK_LB_ACTIVATION_STOPPED, l); + } + else if (extensions->active) { + jk_log(l, JK_LOG_WARNING, + "Worker %s is not of type lb, activation extension " + JK_UWMAP_EXTENSION_ACTIVE " for %s ignored", + name, extensions->active); + } + else if (extensions->disabled) { + jk_log(l, JK_LOG_WARNING, + "Worker %s is not of type lb, activation extension " + JK_UWMAP_EXTENSION_DISABLED " for %s ignored", + name, extensions->disabled); + } + else if (extensions->stopped) { + jk_log(l, JK_LOG_WARNING, + "Worker %s is not of type lb, activation extension " + JK_UWMAP_EXTENSION_STOPPED " for %s ignored", + name, extensions->stopped); + } +} + +void extension_fix(jk_pool_t *p, const char *name, + rule_extension_t *extensions, jk_logger_t *l) +{ + jk_worker_t *jw = wc_get_worker_for_name(name, l); + if(!jw) { + jk_log(l, JK_LOG_ERROR, + "Could not find worker with name '%s' in uri map post processing.", + name); + } + extension_fix_activation(p, name, jw, extensions, l); + if (extensions->fail_on_status_str) { + extension_fix_fail_on_status(p, name, extensions, l); + } +} + void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l) { int new_index; @@ -500,77 +564,14 @@ void uri_worker_map_ext(jk_uri_worker_ma for (i = 0; i < IND_NEXT(uw_map->size); i++) { uri_worker_record_t *uwr = IND_NEXT(uw_map->maps)[i]; - jk_worker_t *jw; + jk_pool_t *p; if(uwr->match_type & MATCH_TYPE_NO_MATCH) continue; - jw = wc_get_worker_for_name(uwr->worker_name, l); - if(!jw) { - jk_log(l, JK_LOG_ERROR, - "Could not find worker with name '%s' in uri map post processing.", - uwr->worker_name); - continue; - } - if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, - "Checking extension for worker %d: %s of type %s (%d)", - i, uwr->worker_name, wc_get_name_for_type(jw->type,l), jw->type); - - if (jw->type == JK_LB_WORKER_TYPE && - (uwr->extensions.active || uwr->extensions.disabled || uwr->extensions.stopped)) { - int j; - lb_worker_t *lb = (lb_worker_t *)jw->worker_private; - jk_pool_t *p; - if (!uwr->extensions.activation) { - uwr->extensions.activation_size = lb->num_of_workers; - if (uwr->source_type == SOURCE_TYPE_URIMAP) - p = &IND_NEXT(uw_map->p_dyn); - else - p = &uw_map->p; - uwr->extensions.activation = (int *)jk_pool_alloc(p, - uwr->extensions.activation_size * sizeof(int)); - if (!uwr->extensions.activation) { - jk_log(l, JK_LOG_ERROR, - "can't alloc extensions activation list"); - continue; - } else if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, - "Allocated activations array of size %d for lb worker %s", - uwr->extensions.activation_size, uwr->worker_name); - for (j=0; j<uwr->extensions.activation_size; j++) { - uwr->extensions.activation[j] = JK_LB_ACTIVATION_UNSET; - } - } - if (uwr->extensions.active) - extract_activation(uw_map, uwr, lb, uwr->extensions.activation, - uwr->extensions.active, JK_LB_ACTIVATION_ACTIVE, l); - if (uwr->extensions.disabled) - extract_activation(uw_map, uwr, lb, uwr->extensions.activation, - uwr->extensions.disabled, JK_LB_ACTIVATION_DISABLED, l); - if (uwr->extensions.stopped) - extract_activation(uw_map, uwr, lb, uwr->extensions.activation, - uwr->extensions.stopped, JK_LB_ACTIVATION_STOPPED, l); - } - else if (uwr->extensions.active) { - jk_log(l, JK_LOG_WARNING, - "Worker %s is not of type lb, activation extension " - JK_UWMAP_EXTENSION_ACTIVE " for %s ignored", - uwr->worker_name, uwr->extensions.active); - } - else if (uwr->extensions.disabled) { - jk_log(l, JK_LOG_WARNING, - "Worker %s is not of type lb, activation extension " - JK_UWMAP_EXTENSION_DISABLED " for %s ignored", - uwr->worker_name, uwr->extensions.disabled); - } - else if (uwr->extensions.stopped) { - jk_log(l, JK_LOG_WARNING, - "Worker %s is not of type lb, activation extension " - JK_UWMAP_EXTENSION_STOPPED " for %s ignored", - uwr->worker_name, uwr->extensions.stopped); - } - if (uwr->extensions.fail_on_status_str) { - extract_fail_on_status(uw_map, uwr, l); - } + if (uwr->source_type == SOURCE_TYPE_URIMAP) + p = &IND_NEXT(uw_map->p_dyn); + else + p = &uw_map->p; + extension_fix(p, uwr->worker_name, &uwr->extensions, l); } if (JK_IS_DEBUG_LEVEL(l)) uri_worker_map_dump(uw_map, "after extension stripping", l); Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.h URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.h?rev=1187948&r1=1187947&r2=1187948&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original) +++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Sun Oct 23 18:52:24 2011 @@ -168,6 +168,12 @@ struct jk_uri_worker_map }; typedef struct jk_uri_worker_map jk_uri_worker_map_t; +void extension_fix(jk_pool_t *p, const char *name, + rule_extension_t *extensions, jk_logger_t *l); + +void parse_rule_extensions(char *rule, rule_extension_t *extensions, + jk_logger_t *l); + const char *uri_worker_map_get_source(uri_worker_record_t *uwr, jk_logger_t *l); char *uri_worker_map_get_match(uri_worker_record_t *uwr, char *buf, jk_logger_t *l); @@ -184,9 +190,6 @@ void uri_worker_map_switch(jk_uri_worker void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l); -void parse_rule_extensions(char *rule, rule_extension_t *extensions, - jk_logger_t *l); - int uri_worker_map_add(jk_uri_worker_map_t *uw_map, const char *puri, const char *worker, unsigned int source_type, jk_logger_t *l); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org