Mercurial > hg > nginx-quic
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; |