diff options
| author | Ruslan Ermilov <ru@nginx.com> | 2015-04-10 14:48:36 +0300 |
|---|---|---|
| committer | Ruslan Ermilov <ru@nginx.com> | 2015-04-10 14:48:36 +0300 |
| commit | 4d53631022f4c01878310298a9508cc7ee073012 (patch) | |
| tree | ae81bb342b2a026e17a4780324ec675c31b1489b /src/http/modules/ngx_http_upstream_least_conn_module.c | |
| parent | 18fa775b1060a663e15473161c795992926e60e1 (diff) | |
| download | nginx-4d53631022f4c01878310298a9508cc7ee073012.tar.gz nginx-4d53631022f4c01878310298a9508cc7ee073012.tar.bz2 | |
Upstream: store peers as a linked list.
This is an API change.
Diffstat (limited to 'src/http/modules/ngx_http_upstream_least_conn_module.c')
| -rw-r--r-- | src/http/modules/ngx_http_upstream_least_conn_module.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/http/modules/ngx_http_upstream_least_conn_module.c b/src/http/modules/ngx_http_upstream_least_conn_module.c index f2a4ec9eb..61b538631 100644 --- a/src/http/modules/ngx_http_upstream_least_conn_module.c +++ b/src/http/modules/ngx_http_upstream_least_conn_module.c @@ -130,7 +130,10 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data) p = 0; #endif - for (i = 0; i < peers->number; i++) { + for (peer = peers->peer, i = 0; + peer; + peer = peer->next, i++) + { n = i / (8 * sizeof(uintptr_t)); m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t)); @@ -139,8 +142,6 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data) continue; } - peer = &peers->peer[i]; - if (peer->down) { continue; } @@ -181,8 +182,10 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data) ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, "get least conn peer, many"); - for (i = p; i < peers->number; i++) { - + for (peer = best, i = p; + peer; + peer = peer->next, i++) + { n = i / (8 * sizeof(uintptr_t)); m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t)); @@ -190,8 +193,6 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data) continue; } - peer = &peers->peer[i]; - if (peer->down) { continue; } @@ -233,7 +234,7 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data) best->conns++; - rrp->current = p; + rrp->current = best; n = p / (8 * sizeof(uintptr_t)); m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t)); @@ -266,8 +267,8 @@ failed: /* all peers failed, mark them as live for quick recovery */ - for (i = 0; i < peers->number; i++) { - peers->peer[i].fails = 0; + for (peer = peers->peer; peer; peer = peer->next) { + peer->fails = 0; } pc->name = peers->name; |
