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
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.
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.
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)) {
#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