comparison src/http/ngx_http_upstream_round_robin.c @ 6099:6ff0ebd6fbf4

Upstream: track the number of active connections to upstreams. This also simplifies the implementation of the least_conn module.
author Ruslan Ermilov <ru@nginx.com>
date Fri, 10 Apr 2015 13:16:23 +0300
parents 575175ebf4b4
children c44459611d91
comparison
equal deleted inserted replaced
6098:ac34eff7e147 6099:6ff0ebd6fbf4
432 432
433 pc->sockaddr = peer->sockaddr; 433 pc->sockaddr = peer->sockaddr;
434 pc->socklen = peer->socklen; 434 pc->socklen = peer->socklen;
435 pc->name = &peer->name; 435 pc->name = &peer->name;
436 436
437 peer->conns++;
438
437 /* ngx_unlock_mutex(peers->mutex); */ 439 /* ngx_unlock_mutex(peers->mutex); */
438 440
439 return NGX_OK; 441 return NGX_OK;
440 442
441 failed: 443 failed:
561 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, 563 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0,
562 "free rr peer %ui %ui", pc->tries, state); 564 "free rr peer %ui %ui", pc->tries, state);
563 565
564 /* TODO: NGX_PEER_KEEPALIVE */ 566 /* TODO: NGX_PEER_KEEPALIVE */
565 567
568 peer = &rrp->peers->peer[rrp->current];
569
566 if (rrp->peers->single) { 570 if (rrp->peers->single) {
571
572 peer->conns--;
573
567 pc->tries = 0; 574 pc->tries = 0;
568 return; 575 return;
569 } 576 }
570
571 peer = &rrp->peers->peer[rrp->current];
572 577
573 if (state & NGX_PEER_FAILED) { 578 if (state & NGX_PEER_FAILED) {
574 now = ngx_time(); 579 now = ngx_time();
575 580
576 /* ngx_lock_mutex(rrp->peers->mutex); */ 581 /* ngx_lock_mutex(rrp->peers->mutex); */
600 if (peer->accessed < peer->checked) { 605 if (peer->accessed < peer->checked) {
601 peer->fails = 0; 606 peer->fails = 0;
602 } 607 }
603 } 608 }
604 609
610 peer->conns--;
611
605 if (pc->tries) { 612 if (pc->tries) {
606 pc->tries--; 613 pc->tries--;
607 } 614 }
608 615
609 /* ngx_unlock_mutex(rrp->peers->mutex); */ 616 /* ngx_unlock_mutex(rrp->peers->mutex); */