diff src/http/modules/ngx_http_upstream_least_conn_module.c @ 6100:c44459611d91

Upstream: store peers as a linked list. This is an API change.
author Ruslan Ermilov <ru@nginx.com>
date Fri, 10 Apr 2015 14:48:36 +0300
parents 6ff0ebd6fbf4
children 3264b7828f72
line wrap: on
line diff
--- 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(ng
     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(ng
             continue;
         }
 
-        peer = &peers->peer[i];
-
         if (peer->down) {
             continue;
         }
@@ -181,8 +182,10 @@ ngx_http_upstream_get_least_conn_peer(ng
         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(ng
                 continue;
             }
 
-            peer = &peers->peer[i];
-
             if (peer->down) {
                 continue;
             }
@@ -233,7 +234,7 @@ ngx_http_upstream_get_least_conn_peer(ng
 
     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;