diff src/http/modules/ngx_http_upstream_ip_hash_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_ip_hash_module.c
+++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c
@@ -181,11 +181,19 @@ ngx_http_upstream_get_ip_hash_peer(ngx_p
         if (!iphp->rrp.peers->weighted) {
             p = hash % iphp->rrp.peers->number;
 
+            peer = iphp->rrp.peers->peer;
+            for (i = 0; i < p; i++) {
+                peer = peer->next;
+            }
+
         } else {
             w = hash % iphp->rrp.peers->total_weight;
 
-            for (i = 0; i < iphp->rrp.peers->number; i++) {
-                w -= iphp->rrp.peers->peer[i].weight;
+            for (peer = iphp->rrp.peers->peer, i = 0;
+                 peer;
+                 peer = peer->next, i++)
+            {
+                w -= peer->weight;
                 if (w < 0) {
                     break;
                 }
@@ -204,8 +212,6 @@ ngx_http_upstream_get_ip_hash_peer(ngx_p
         ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0,
                        "get ip hash peer, hash: %ui %04XA", p, m);
 
-        peer = &iphp->rrp.peers->peer[p];
-
         /* ngx_lock_mutex(iphp->rrp.peers->mutex); */
 
         if (peer->down) {
@@ -236,7 +242,7 @@ ngx_http_upstream_get_ip_hash_peer(ngx_p
         }
     }
 
-    iphp->rrp.current = p;
+    iphp->rrp.current = peer;
 
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;