Upstream: simplified ip_hash and hash peer selection code.

Now that peers are stored as a list, the weighted and unweighted
cases became nearly identical.
This commit is contained in:
Ruslan Ermilov 2015-04-21 19:09:04 +03:00
parent b6517ea696
commit 673941f81d
3 changed files with 23 additions and 65 deletions

View File

@ -170,7 +170,7 @@ ngx_http_upstream_get_hash_peer(ngx_peer_connection_t *pc, void *data)
uint32_t hash; uint32_t hash;
ngx_int_t w; ngx_int_t w;
uintptr_t m; uintptr_t m;
ngx_uint_t i, n, p; ngx_uint_t n, p;
ngx_http_upstream_rr_peer_t *peer; ngx_http_upstream_rr_peer_t *peer;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
@ -211,28 +211,14 @@ ngx_http_upstream_get_hash_peer(ngx_peer_connection_t *pc, void *data)
hp->hash += hash; hp->hash += hash;
hp->rehash++; hp->rehash++;
if (!hp->rrp.peers->weighted) {
p = hp->hash % hp->rrp.peers->number;
peer = hp->rrp.peers->peer;
for (i = 0; i < p; i++) {
peer = peer->next;
}
} else {
w = hp->hash % hp->rrp.peers->total_weight; w = hp->hash % hp->rrp.peers->total_weight;
peer = hp->rrp.peers->peer;
p = 0;
for (peer = hp->rrp.peers->peer, i = 0; while (w >= peer->weight) {
peer;
peer = peer->next, i++)
{
w -= peer->weight; w -= peer->weight;
if (w < 0) { peer = peer->next;
break; p++;
}
}
p = i;
} }
n = p / (8 * sizeof(uintptr_t)); n = p / (8 * sizeof(uintptr_t));

View File

@ -181,28 +181,14 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)
hash = (hash * 113 + iphp->addr[i]) % 6271; hash = (hash * 113 + iphp->addr[i]) % 6271;
} }
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; w = hash % iphp->rrp.peers->total_weight;
peer = iphp->rrp.peers->peer;
p = 0;
for (peer = iphp->rrp.peers->peer, i = 0; while (w >= peer->weight) {
peer;
peer = peer->next, i++)
{
w -= peer->weight; w -= peer->weight;
if (w < 0) { peer = peer->next;
break; p++;
}
}
p = i;
} }
n = p / (8 * sizeof(uintptr_t)); n = p / (8 * sizeof(uintptr_t));

View File

@ -164,7 +164,7 @@ ngx_stream_upstream_get_hash_peer(ngx_peer_connection_t *pc, void *data)
uint32_t hash; uint32_t hash;
ngx_int_t w; ngx_int_t w;
uintptr_t m; uintptr_t m;
ngx_uint_t i, n, p; ngx_uint_t n, p;
ngx_stream_upstream_rr_peer_t *peer; ngx_stream_upstream_rr_peer_t *peer;
ngx_log_debug1(NGX_LOG_DEBUG_STREAM, pc->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_STREAM, pc->log, 0,
@ -204,28 +204,14 @@ ngx_stream_upstream_get_hash_peer(ngx_peer_connection_t *pc, void *data)
hp->hash += hash; hp->hash += hash;
hp->rehash++; hp->rehash++;
if (!hp->rrp.peers->weighted) {
p = hp->hash % hp->rrp.peers->number;
peer = hp->rrp.peers->peer;
for (i = 0; i < p; i++) {
peer = peer->next;
}
} else {
w = hp->hash % hp->rrp.peers->total_weight; w = hp->hash % hp->rrp.peers->total_weight;
peer = hp->rrp.peers->peer;
p = 0;
for (peer = hp->rrp.peers->peer, i = 0; while (w >= peer->weight) {
peer;
peer = peer->next, i++)
{
w -= peer->weight; w -= peer->weight;
if (w < 0) { peer = peer->next;
break; p++;
}
}
p = i;
} }
n = p / (8 * sizeof(uintptr_t)); n = p / (8 * sizeof(uintptr_t));