You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Igor Galić <i....@brainsware.org> on 2011/11/29 22:25:37 UTC

Re: svn commit: r1208068 - in /httpd/httpd/trunk/modules/proxy: mod_proxy.c mod_proxy.h proxy_util.c


----- Original Message -----
> Author: jim
> Date: Tue Nov 29 21:14:08 2011
> New Revision: 1208068
> 
> URL: http://svn.apache.org/viewvc?rev=1208068&view=rev
> Log:
> Some optimization... we have a hash, use it. Quicker than all
> these string comparisons.
> 
> Modified:
>     httpd/httpd/trunk/modules/proxy/mod_proxy.c
>     httpd/httpd/trunk/modules/proxy/mod_proxy.h
>     httpd/httpd/trunk/modules/proxy/proxy_util.c
> 
> Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=1208068&r1=1208067&r2=1208068&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Tue Nov 29 21:14:08
> 2011
> @@ -1464,6 +1464,7 @@ static const char *
>              if (err)
>                  return apr_pstrcat(cmd->temp_pool, "ProxyPass ",
>                  err, NULL);
>          }
> +        new->balancer = balancer;
>      }
>      else {
>          proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool,
>          NULL, conf, r);
> 
> Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=1208068&r1=1208067&r2=1208068&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Tue Nov 29 21:14:08
> 2011
> @@ -88,6 +88,11 @@ enum enctype {
>   */
>  #define DEFAULT_MAX_FORWARDS    -1
>  
> +typedef struct proxy_balancer  proxy_balancer;
> +typedef struct proxy_worker    proxy_worker;
> +typedef struct proxy_conn_pool proxy_conn_pool;
> +typedef struct proxy_balancer_method proxy_balancer_method;

Shouldn't those be _t?

> +
>  /* static information about a remote proxy */
>  struct proxy_remote {
>      const char *scheme;     /* the schemes handled by this proxy, or
>      '*' */
> @@ -105,6 +110,7 @@ struct proxy_alias {
>      const char  *fake;
>      ap_regex_t  *regex;
>      unsigned int flags;
> +    proxy_balancer *balancer; /* only valid for reverse-proxys */
>  };
>  
>  struct dirconn_entry {
> @@ -119,11 +125,6 @@ struct noproxy_entry {
>      struct apr_sockaddr_t *addr;
>  };
>  
> -typedef struct proxy_balancer  proxy_balancer;
> -typedef struct proxy_worker    proxy_worker;
> -typedef struct proxy_conn_pool proxy_conn_pool;
> -typedef struct proxy_balancer_method proxy_balancer_method;
> -
>  typedef struct {
>      apr_array_header_t *proxies;
>      apr_array_header_t *sec_proxy;
> @@ -408,7 +409,7 @@ typedef struct {
>      apr_time_t      wupdated;     /* timestamp of last change to
>      workers list */
>      int             max_attempts;     /* Number of attempts before
>      failing */
>      int             index;      /* shm array index */
> -    int hash;
> +    unsigned int hash;
>      unsigned int    sticky_force:1;   /* Disable failover for sticky
>      sessions */
>      unsigned int    scolonsep:1;      /* true if ';' seps sticky
>      session paths */
>      unsigned int    max_attempts_set:1;
> @@ -427,7 +428,7 @@ struct proxy_balancer {
>      ap_slotmem_provider_t *storage;
>      int growth;                   /* number of post-config workers
>      can added */
>      int max_workers;              /* maximum number of allowed
>      workers */
> -    int hash;
> +    unsigned int hash;
>      apr_time_t      wupdated;    /* timestamp of last change to
>      workers list */
>      proxy_balancer_method *lbmethod;
>      apr_global_mutex_t  *gmutex; /* global lock for updating list of
>      workers */
> 
> Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=1208068&r1=1208067&r2=1208068&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
> +++ httpd/httpd/trunk/modules/proxy/proxy_util.c Tue Nov 29 21:14:08
> 2011
> @@ -1298,6 +1298,7 @@ PROXY_DECLARE(proxy_balancer *) ap_proxy
>      proxy_balancer *balancer;
>      char *c, *uri = apr_pstrdup(p, url);
>      int i;
> +    unsigned int hash;
>  
>      c = strchr(uri, ':');
>      if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') {
> @@ -1307,9 +1308,10 @@ PROXY_DECLARE(proxy_balancer *) ap_proxy
>      if ((c = strchr(c + 3, '/'))) {
>          *c = '\0';
>      }
> +    hash = ap_proxy_hashfunc(uri, PROXY_HASHFUNC_DEFAULT);
>      balancer = (proxy_balancer *)conf->balancers->elts;
>      for (i = 0; i < conf->balancers->nelts; i++) {
> -        if (strcasecmp(balancer->s->name, uri) == 0) {
> +        if (balancer->hash == hash) {
>              if (!care || !balancer->s->inactive) {
>                  return balancer;
>              }
> @@ -1410,6 +1412,7 @@ PROXY_DECLARE(char *) ap_proxy_define_ba
>      }
>  
>      (*balancer)->s = bshared;
> +    (*balancer)->sconf = conf;
>  
>      return ap_proxy_update_balancer(p, *balancer, alias);
>  }
> 
> 
> 

-- 
Igor Galić

Tel: +43 (0) 664 886 22 883
Mail: i.galic@brainsware.org
URL: http://brainsware.org/
GPG: 6880 4155 74BD FD7C B515  2EA5 4B1D 9E08 A097 C9AE


Re: svn commit: r1208068 - in /httpd/httpd/trunk/modules/proxy: mod_proxy.c mod_proxy.h proxy_util.c

Posted by Jim Jagielski <ji...@jaguNET.com>.
On Nov 29, 2011, at 4:25 PM, Igor Galić wrote:
>> --- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
>> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Tue Nov 29 21:14:08
>> 2011
>> @@ -88,6 +88,11 @@ enum enctype {
>>  */
>> #define DEFAULT_MAX_FORWARDS    -1
>> 
>> +typedef struct proxy_balancer  proxy_balancer;
>> +typedef struct proxy_worker    proxy_worker;
>> +typedef struct proxy_conn_pool proxy_conn_pool;
>> +typedef struct proxy_balancer_method proxy_balancer_method;
> 
> Shouldn't those be _t?
>> 
>> -typedef struct proxy_balancer  proxy_balancer;
>> -typedef struct proxy_worker    proxy_worker;
>> -typedef struct proxy_conn_pool proxy_conn_pool;
>> -typedef struct proxy_balancer_method proxy_balancer_method;
>> -

They were just moved...