sort upstream weights
Igor Sysoev
13 years ago
8 | 8 | #include <ngx_http.h> |
9 | 9 | |
10 | 10 | |
11 | static int ngx_http_upstream_cmp_servers(const void *one, const void *two); | |
11 | 12 | static ngx_uint_t |
12 | 13 | ngx_http_upstream_get_peer(ngx_http_upstream_rr_peers_t *peers); |
13 | 14 | |
68 | 69 | |
69 | 70 | us->peer.data = peers; |
70 | 71 | |
72 | ngx_sort(&peers->peer[0], (size_t) n, | |
73 | sizeof(ngx_http_upstream_rr_peer_t), | |
74 | ngx_http_upstream_cmp_servers); | |
75 | ||
71 | 76 | /* backup servers */ |
72 | 77 | |
73 | 78 | n = 0; |
117 | 122 | |
118 | 123 | peers->next = backup; |
119 | 124 | |
125 | ngx_sort(&backup->peer[0], (size_t) n, | |
126 | sizeof(ngx_http_upstream_rr_peer_t), | |
127 | ngx_http_upstream_cmp_servers); | |
128 | ||
120 | 129 | return NGX_OK; |
121 | 130 | } |
122 | 131 | |
178 | 187 | } |
179 | 188 | |
180 | 189 | |
190 | static int | |
191 | ngx_http_upstream_cmp_servers(const void *one, const void *two) | |
192 | { | |
193 | ngx_http_upstream_rr_peer_t *first, *second; | |
194 | ||
195 | first = (ngx_http_upstream_rr_peer_t *) one; | |
196 | second = (ngx_http_upstream_rr_peer_t *) two; | |
197 | ||
198 | return (first->weight < second->weight); | |
199 | } | |
200 | ||
201 | ||
181 | 202 | ngx_int_t |
182 | 203 | ngx_http_upstream_init_round_robin_peer(ngx_http_request_t *r, |
183 | 204 | ngx_http_upstream_srv_conf_t *us) |