summaryrefslogtreecommitdiffhomepage
path: root/src/http/modules/ngx_http_upstream_least_conn_module.c
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2015-04-10 14:48:36 +0300
committerRuslan Ermilov <ru@nginx.com>2015-04-10 14:48:36 +0300
commit4d53631022f4c01878310298a9508cc7ee073012 (patch)
treeae81bb342b2a026e17a4780324ec675c31b1489b /src/http/modules/ngx_http_upstream_least_conn_module.c
parent18fa775b1060a663e15473161c795992926e60e1 (diff)
downloadnginx-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.c21
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;