Welcome! Log In Create A New Profile

Advanced

[nginx] svn commit: r4656 - in trunk/src/http: . modules

Anonymous User
June 03, 2012 07:24PM
Author: mdounin
Date: 2012-06-03 23:22:41 +0000 (Sun, 03 Jun 2012)
New Revision: 4656
URL: http://trac.nginx.org/nginx/changeset/4656/nginx

Log:
Upstream: weights support in ip_hash balancer.


Modified:
trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c
trunk/src/http/ngx_http_upstream_round_robin.c
trunk/src/http/ngx_http_upstream_round_robin.h

Modified: trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c
===================================================================
--- trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c 2012-06-03 23:21:26 UTC (rev 4655)
+++ trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c 2012-06-03 23:22:41 UTC (rev 4656)
@@ -140,6 +140,7 @@
ngx_http_upstream_ip_hash_peer_data_t *iphp = data;

time_t now;
+ ngx_int_t w;
uintptr_t m;
ngx_uint_t i, n, p, hash;
ngx_http_upstream_rr_peer_t *peer;
@@ -166,8 +167,22 @@
hash = (hash * 113 + iphp->addr[i]) % 6271;
}

- p = hash % iphp->rrp.peers->number;
+ if (!iphp->rrp.peers->weighted) {
+ p = hash % iphp->rrp.peers->number;

+ } else {
+ w = hash % iphp->rrp.peers->total_weight;
+
+ for (i = 0; i < iphp->rrp.peers->number; i++) {
+ w -= iphp->rrp.peers->peer[i].weight;
+ if (w < 0) {
+ break;
+ }
+ }
+
+ p = i;
+ }
+
n = p / (8 * sizeof(uintptr_t));
m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t));

@@ -229,6 +244,7 @@
uscf->peer.init_upstream = ngx_http_upstream_init_ip_hash;

uscf->flags = NGX_HTTP_UPSTREAM_CREATE
+ |NGX_HTTP_UPSTREAM_WEIGHT
|NGX_HTTP_UPSTREAM_MAX_FAILS
|NGX_HTTP_UPSTREAM_FAIL_TIMEOUT
|NGX_HTTP_UPSTREAM_DOWN;

Modified: trunk/src/http/ngx_http_upstream_round_robin.c
===================================================================
--- trunk/src/http/ngx_http_upstream_round_robin.c 2012-06-03 23:21:26 UTC (rev 4655)
+++ trunk/src/http/ngx_http_upstream_round_robin.c 2012-06-03 23:22:41 UTC (rev 4656)
@@ -30,7 +30,7 @@
ngx_http_upstream_srv_conf_t *us)
{
ngx_url_t u;
- ngx_uint_t i, j, n;
+ ngx_uint_t i, j, n, w;
ngx_http_upstream_server_t *server;
ngx_http_upstream_rr_peers_t *peers, *backup;

@@ -40,6 +40,7 @@
server = us->servers->elts;

n = 0;
+ w = 0;

for (i = 0; i < us->servers->nelts; i++) {
if (server[i].backup) {
@@ -47,6 +48,7 @@
}

n += server[i].naddrs;
+ w += server[i].naddrs * server[i].weight;
}

if (n == 0) {
@@ -64,6 +66,8 @@

peers->single = (n == 1);
peers->number = n;
+ peers->weighted = (w != n);
+ peers->total_weight = w;
peers->name = &us->host;

n = 0;
@@ -96,6 +100,7 @@
/* backup servers */

n = 0;
+ w = 0;

for (i = 0; i < us->servers->nelts; i++) {
if (!server[i].backup) {
@@ -103,6 +108,7 @@
}

n += server[i].naddrs;
+ w += server[i].naddrs * server[i].weight;
}

if (n == 0) {
@@ -118,6 +124,8 @@
peers->single = 0;
backup->single = 0;
backup->number = n;
+ backup->weighted = (w != n);
+ backup->total_weight = w;
backup->name = &us->host;

n = 0;
@@ -185,6 +193,8 @@

peers->single = (n == 1);
peers->number = n;
+ peers->weighted = 0;
+ peers->total_weight = n;
peers->name = &us->host;

for (i = 0; i < u.naddrs; i++) {

Modified: trunk/src/http/ngx_http_upstream_round_robin.h
===================================================================
--- trunk/src/http/ngx_http_upstream_round_robin.h 2012-06-03 23:21:26 UTC (rev 4655)
+++ trunk/src/http/ngx_http_upstream_round_robin.h 2012-06-03 23:22:41 UTC (rev 4656)
@@ -41,13 +41,17 @@
typedef struct ngx_http_upstream_rr_peers_s ngx_http_upstream_rr_peers_t;

struct ngx_http_upstream_rr_peers_s {
- ngx_uint_t single; /* unsigned single:1; */
ngx_uint_t number;
ngx_uint_t last_cached;

/* ngx_mutex_t *mutex; */
ngx_connection_t **cached;

+ ngx_uint_t total_weight;
+
+ unsigned single:1;
+ unsigned weighted:1;
+
ngx_str_t *name;

ngx_http_upstream_rr_peers_t *next;

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] svn commit: r4656 - in trunk/src/http: . modules

Anonymous User 993 June 03, 2012 07:24PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 192
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready