Mercurial > hg > nginx
comparison src/http/modules/ngx_http_upstream_ip_hash_module.c @ 6102:3264b7828f72
Upstreams: locking.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 14 Apr 2015 19:01:23 +0300 |
parents | c44459611d91 |
children | 55dc5f7eb921 |
comparison
equal
deleted
inserted
replaced
6101:682d8222c6b1 | 6102:3264b7828f72 |
---|---|
159 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 159 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
160 "get ip hash peer, try: %ui", pc->tries); | 160 "get ip hash peer, try: %ui", pc->tries); |
161 | 161 |
162 /* TODO: cached */ | 162 /* TODO: cached */ |
163 | 163 |
164 ngx_http_upstream_rr_peers_wlock(iphp->rrp.peers); | |
165 | |
164 if (iphp->tries > 20 || iphp->rrp.peers->single) { | 166 if (iphp->tries > 20 || iphp->rrp.peers->single) { |
167 ngx_http_upstream_rr_peers_unlock(iphp->rrp.peers); | |
165 return iphp->get_rr_peer(pc, &iphp->rrp); | 168 return iphp->get_rr_peer(pc, &iphp->rrp); |
166 } | 169 } |
167 | 170 |
168 now = ngx_time(); | 171 now = ngx_time(); |
169 | 172 |
210 } | 213 } |
211 | 214 |
212 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 215 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
213 "get ip hash peer, hash: %ui %04XA", p, m); | 216 "get ip hash peer, hash: %ui %04XA", p, m); |
214 | 217 |
215 /* ngx_lock_mutex(iphp->rrp.peers->mutex); */ | |
216 | |
217 if (peer->down) { | 218 if (peer->down) { |
218 goto next_try; | 219 goto next_try; |
219 } | 220 } |
220 | 221 |
221 if (peer->max_fails | 222 if (peer->max_fails |
228 break; | 229 break; |
229 | 230 |
230 next_try: | 231 next_try: |
231 | 232 |
232 iphp->rrp.tried[n] |= m; | 233 iphp->rrp.tried[n] |= m; |
233 | |
234 /* ngx_unlock_mutex(iphp->rrp.peers->mutex); */ | |
235 | |
236 pc->tries--; | 234 pc->tries--; |
237 | 235 |
238 next: | 236 next: |
239 | 237 |
240 if (++iphp->tries > 20) { | 238 if (++iphp->tries > 20) { |
239 ngx_http_upstream_rr_peers_unlock(iphp->rrp.peers); | |
241 return iphp->get_rr_peer(pc, &iphp->rrp); | 240 return iphp->get_rr_peer(pc, &iphp->rrp); |
242 } | 241 } |
243 } | 242 } |
244 | 243 |
245 iphp->rrp.current = peer; | 244 iphp->rrp.current = peer; |
252 | 251 |
253 if (now - peer->checked > peer->fail_timeout) { | 252 if (now - peer->checked > peer->fail_timeout) { |
254 peer->checked = now; | 253 peer->checked = now; |
255 } | 254 } |
256 | 255 |
257 /* ngx_unlock_mutex(iphp->rrp.peers->mutex); */ | 256 ngx_http_upstream_rr_peers_unlock(iphp->rrp.peers); |
258 | 257 |
259 iphp->rrp.tried[n] |= m; | 258 iphp->rrp.tried[n] |= m; |
260 iphp->hash = hash; | 259 iphp->hash = hash; |
261 | 260 |
262 return NGX_OK; | 261 return NGX_OK; |