Commit b850c3de authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Implement draining capability for proxy workers... only accept

sticky on these puppies.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1170256 13f79535-47bb-0310-9956-ffa450edef68
parent 62555f72
Loading
Loading
Loading
Loading
+6 −5
Changes for modules/proxy/balancers/mod_lbmethod_bybusyness.c: 6 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -52,12 +52,13 @@ static proxy_worker *find_best_bybusyness(proxy_balancer *balancer,
                    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
+7 −3
Changes for modules/proxy/balancers/mod_lbmethod_byrequests.c: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -94,10 +94,14 @@ static proxy_worker *find_best_byrequests(proxy_balancer *balancer,
                    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.
+7 −3
Changes for modules/proxy/balancers/mod_lbmethod_bytraffic.c: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -66,10 +66,14 @@ static proxy_worker *find_best_bytraffic(proxy_balancer *balancer,
                    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.
+5 −1
Changes for modules/proxy/examples/mod_lbmethod_rr.c: 5 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -75,8 +75,12 @@ static proxy_worker *find_best_roundrobin(proxy_balancer *balancer,
        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)) {
+2 −0
Changes for modules/proxy/mod_proxy.h: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -292,6 +292,8 @@ PROXY_WORKER_DISABLED | PROXY_WORKER_STOPPED | PROXY_WORKER_IN_ERROR )
#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