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;