| 424 | } |
| 425 | |
| 426 | static void force_recovery(proxy_balancer *balancer, server_rec *s) |
| 427 | { |
| 428 | int i; |
| 429 | int ok = 0; |
| 430 | proxy_worker **worker; |
| 431 | |
| 432 | worker = (proxy_worker **)balancer->workers->elts; |
| 433 | for (i = 0; i < balancer->workers->nelts; i++, worker++) { |
| 434 | if (!((*worker)->s->status & PROXY_WORKER_IN_ERROR)) { |
| 435 | ok = 1; |
| 436 | break; |
| 437 | } |
| 438 | else { |
| 439 | /* Try if we can recover */ |
| 440 | ap_proxy_retry_worker_fn("BALANCER", *worker, s); |
| 441 | if (!((*worker)->s->status & PROXY_WORKER_IN_ERROR)) { |
| 442 | ok = 1; |
| 443 | break; |
| 444 | } |
| 445 | } |
| 446 | } |
| 447 | if (!ok && balancer->s->forcerecovery) { |
| 448 | /* If all workers are in error state force the recovery. |
| 449 | */ |
| 450 | worker = (proxy_worker **)balancer->workers->elts; |
| 451 | for (i = 0; i < balancer->workers->nelts; i++, worker++) { |
| 452 | ++(*worker)->s->retries; |
| 453 | (*worker)->s->status &= ~PROXY_WORKER_IN_ERROR; |
| 454 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01165) |
| 455 | "%s: Forcing recovery for worker (%s:%d)", |
| 456 | balancer->s->name, (*worker)->s->hostname_ex, |
| 457 | (int)(*worker)->s->port); |
| 458 | } |
| 459 | } |
| 460 | } |
| 461 | |
| 462 | static apr_status_t decrement_busy_count(void *worker_) |
| 463 | { |
no test coverage detected