comparison src/http/modules/ngx_http_upstream_least_conn_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
comparison
equal deleted inserted replaced
6099:6ff0ebd6fbf4 6100:c44459611d91
128 #if (NGX_SUPPRESS_WARN) 128 #if (NGX_SUPPRESS_WARN)
129 many = 0; 129 many = 0;
130 p = 0; 130 p = 0;
131 #endif 131 #endif
132 132
133 for (i = 0; i < peers->number; i++) { 133 for (peer = peers->peer, i = 0;
134 peer;
135 peer = peer->next, i++)
136 {
134 137
135 n = i / (8 * sizeof(uintptr_t)); 138 n = i / (8 * sizeof(uintptr_t));
136 m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t)); 139 m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t));
137 140
138 if (rrp->tried[n] & m) { 141 if (rrp->tried[n] & m) {
139 continue; 142 continue;
140 } 143 }
141
142 peer = &peers->peer[i];
143 144
144 if (peer->down) { 145 if (peer->down) {
145 continue; 146 continue;
146 } 147 }
147 148
179 180
180 if (many) { 181 if (many) {
181 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, 182 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0,
182 "get least conn peer, many"); 183 "get least conn peer, many");
183 184
184 for (i = p; i < peers->number; i++) { 185 for (peer = best, i = p;
185 186 peer;
187 peer = peer->next, i++)
188 {
186 n = i / (8 * sizeof(uintptr_t)); 189 n = i / (8 * sizeof(uintptr_t));
187 m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t)); 190 m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t));
188 191
189 if (rrp->tried[n] & m) { 192 if (rrp->tried[n] & m) {
190 continue; 193 continue;
191 } 194 }
192
193 peer = &peers->peer[i];
194 195
195 if (peer->down) { 196 if (peer->down) {
196 continue; 197 continue;
197 } 198 }
198 199
231 pc->socklen = best->socklen; 232 pc->socklen = best->socklen;
232 pc->name = &best->name; 233 pc->name = &best->name;
233 234
234 best->conns++; 235 best->conns++;
235 236
236 rrp->current = p; 237 rrp->current = best;
237 238
238 n = p / (8 * sizeof(uintptr_t)); 239 n = p / (8 * sizeof(uintptr_t));
239 m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t)); 240 m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t));
240 241
241 rrp->tried[n] |= m; 242 rrp->tried[n] |= m;
264 } 265 }
265 } 266 }
266 267
267 /* all peers failed, mark them as live for quick recovery */ 268 /* all peers failed, mark them as live for quick recovery */
268 269
269 for (i = 0; i < peers->number; i++) { 270 for (peer = peers->peer; peer; peer = peer->next) {
270 peers->peer[i].fails = 0; 271 peer->fails = 0;
271 } 272 }
272 273
273 pc->name = peers->name; 274 pc->name = peers->name;
274 275
275 return NGX_BUSY; 276 return NGX_BUSY;