You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2011/09/13 19:26:58 UTC

svn commit: r1170256 - in /httpd/httpd/trunk/modules/proxy: balancers/mod_lbmethod_bybusyness.c balancers/mod_lbmethod_byrequests.c balancers/mod_lbmethod_bytraffic.c examples/mod_lbmethod_rr.c mod_proxy.h

Author: jim
Date: Tue Sep 13 17:26:57 2011
New Revision: 1170256

URL: http://svn.apache.org/viewvc?rev=1170256&view=rev
Log:
Implement draining capability for proxy workers... only accept
sticky on these puppies.

Modified:
    httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bybusyness.c
    httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_byrequests.c
    httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bytraffic.c
    httpd/httpd/trunk/modules/proxy/examples/mod_lbmethod_rr.c
    httpd/httpd/trunk/modules/proxy/mod_proxy.h

Modified: httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bybusyness.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bybusyness.c?rev=1170256&r1=1170255&r2=1170256&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bybusyness.c (original)
+++ httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bybusyness.c Tue Sep 13 17:26:57 2011
@@ -52,12 +52,13 @@ static proxy_worker *find_best_bybusynes
                     if ((*worker)->s->lbset > max_lbset)
                         max_lbset = (*worker)->s->lbset;
                 }
-
-                if ((*worker)->s->lbset != cur_lbset)
-                    continue;
-
-                if ( (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) )
+                if (
+                    ((*worker)->s->lbset != cur_lbset) ||
+                    (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) ||
+                    (PROXY_WORKER_IS_DRAINING(*worker))
+                    ) {
                     continue;
+                }
 
                 /* If the worker is in error state run
                  * retry on that worker. It will be marked as

Modified: httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_byrequests.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_byrequests.c?rev=1170256&r1=1170255&r2=1170256&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_byrequests.c (original)
+++ httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_byrequests.c Tue Sep 13 17:26:57 2011
@@ -94,10 +94,14 @@ static proxy_worker *find_best_byrequest
                     if ((*worker)->s->lbset > max_lbset)
                         max_lbset = (*worker)->s->lbset;
                 }
-                if ((*worker)->s->lbset != cur_lbset)
-                    continue;
-                if ( (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) )
+                if (
+                    ((*worker)->s->lbset != cur_lbset) ||
+                    (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) ||
+                    (PROXY_WORKER_IS_DRAINING(*worker))
+                    ) {
                     continue;
+                }
+
                 /* If the worker is in error state run
                  * retry on that worker. It will be marked as
                  * operational if the retry timeout is elapsed.

Modified: httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bytraffic.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bytraffic.c?rev=1170256&r1=1170255&r2=1170256&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bytraffic.c (original)
+++ httpd/httpd/trunk/modules/proxy/balancers/mod_lbmethod_bytraffic.c Tue Sep 13 17:26:57 2011
@@ -66,10 +66,14 @@ static proxy_worker *find_best_bytraffic
                     if ((*worker)->s->lbset > max_lbset)
                         max_lbset = (*worker)->s->lbset;
                 }
-                if ((*worker)->s->lbset != cur_lbset)
-                    continue;
-                if ( (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) )
+                if (
+                    ((*worker)->s->lbset != cur_lbset) ||
+                    (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) ||
+                    (PROXY_WORKER_IS_DRAINING(*worker))
+                    ) {
                     continue;
+                }
+
                 /* If the worker is in error state run
                  * retry on that worker. It will be marked as
                  * operational if the retry timeout is elapsed.

Modified: httpd/httpd/trunk/modules/proxy/examples/mod_lbmethod_rr.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/examples/mod_lbmethod_rr.c?rev=1170256&r1=1170255&r2=1170256&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/examples/mod_lbmethod_rr.c (original)
+++ httpd/httpd/trunk/modules/proxy/examples/mod_lbmethod_rr.c Tue Sep 13 17:26:57 2011
@@ -75,8 +75,12 @@ static proxy_worker *find_best_roundrobi
         for (i = 0; i < balancer->workers->nelts; i++, worker++) {
             if (i < ctx->index)
                 continue;
-            if ( (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) )
+            if (
+                (checking_standby ? !PROXY_WORKER_IS_STANDBY(*worker) : PROXY_WORKER_IS_STANDBY(*worker)) ||
+                (PROXY_WORKER_IS_DRAINING(*worker))
+                ) {
                 continue;
+            }
             if (!PROXY_WORKER_IS_USABLE(*worker))
                 ap_proxy_retry_worker("BALANCER", *worker, r->server);
             if (PROXY_WORKER_IS_USABLE(*worker)) {

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=1170256&r1=1170255&r2=1170256&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Tue Sep 13 17:26:57 2011
@@ -292,6 +292,8 @@ PROXY_WORKER_DISABLED | PROXY_WORKER_STO
 #define PROXY_WORKER_IS_USABLE(f)   ( ( !( (f)->s->status & PROXY_WORKER_NOT_USABLE_BITMAP) ) && \
   PROXY_WORKER_IS_INITIALIZED(f) )
 
+#define PROXY_WORKER_IS_DRAINING(f)   ( (f)->s->status &  PROXY_WORKER_DRAIN )
+
 /* default worker retry timeout in seconds */
 #define PROXY_WORKER_DEFAULT_RETRY    60
 



Re: svn commit: r1170256 - in /httpd/httpd/trunk/modules/proxy: balancers/mod_lbmethod_bybusyness.c balancers/mod_lbmethod_byrequests.c balancers/mod_lbmethod_bytraffic.c examples/mod_lbmethod_rr.c mod_proxy.h

Posted by Jim Jagielski <ji...@jaguNET.com>.
It doesn't "fix" 48841 but it provides the functionality they
desire.

On Sep 13, 2011, at 4:57 PM, Stefan Fritsch wrote:

> On Tuesday 13 September 2011, jim@apache.org wrote:
>> Author: jim
>> Date: Tue Sep 13 17:26:57 2011
>> New Revision: 1170256
>> 
>> URL: http://svn.apache.org/viewvc?rev=1170256&view=rev
>> Log:
>> Implement draining capability for proxy workers... only accept
>> sticky on these puppies.
> 
> Does this fix PR 48841? If yes, a CHANGES entry would be nice.
> 


Re: svn commit: r1170256 - in /httpd/httpd/trunk/modules/proxy: balancers/mod_lbmethod_bybusyness.c balancers/mod_lbmethod_byrequests.c balancers/mod_lbmethod_bytraffic.c examples/mod_lbmethod_rr.c mod_proxy.h

Posted by Stefan Fritsch <sf...@sfritsch.de>.
On Tuesday 13 September 2011, jim@apache.org wrote:
> Author: jim
> Date: Tue Sep 13 17:26:57 2011
> New Revision: 1170256
> 
> URL: http://svn.apache.org/viewvc?rev=1170256&view=rev
> Log:
> Implement draining capability for proxy workers... only accept
> sticky on these puppies.

Does this fix PR 48841? If yes, a CHANGES entry would be nice.