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_ip_hash_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_ip_hash_module.c')
| -rw-r--r-- | src/http/modules/ngx_http_upstream_ip_hash_module.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/http/modules/ngx_http_upstream_ip_hash_module.c b/src/http/modules/ngx_http_upstream_ip_hash_module.c index 638e0778b..2c6506d6f 100644 --- 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_peer_connection_t *pc, void *data) 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_peer_connection_t *pc, void *data) 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_peer_connection_t *pc, void *data) } } - iphp->rrp.current = p; + iphp->rrp.current = peer; pc->sockaddr = peer->sockaddr; pc->socklen = peer->socklen; |
