parent
							
								
									4ed5368641
								
							
						
					
					
						commit
						2224d73344
					
				| @ -0,0 +1,192 @@ | ||||
| diff --git a/src/http/modules/ngx_http_upstream_ip_hash_module.c b/src/http/modules/ngx_http_upstream_ip_hash_module.c
 | ||||
| index fd9ecbe..d3849b6 100644
 | ||||
| --- a/src/http/modules/ngx_http_upstream_ip_hash_module.c
 | ||||
| +++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c
 | ||||
| @@ -9,6 +9,10 @@
 | ||||
|  #include <ngx_core.h> | ||||
|  #include <ngx_http.h> | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +#include "ngx_http_upstream_check_module.h"
 | ||||
| +#endif
 | ||||
| +
 | ||||
| 
 | ||||
|  typedef struct { | ||||
|      /* the round robin data must be first */ | ||||
| @@ -182,6 +186,12 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
| 
 | ||||
|              if (!peer->down) { | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
 | ||||
| +                               "get ip_hash peer, check_index: %ui",
 | ||||
| +                               peer->check_index);
 | ||||
| +                if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
 | ||||
| +#endif
 | ||||
|                  if (peer->max_fails == 0 || peer->fails < peer->max_fails) { | ||||
|                      break; | ||||
|                  } | ||||
| @@ -190,6 +200,9 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
|                      peer->fails = 0; | ||||
|                      break; | ||||
|                  } | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                }
 | ||||
| +#endif
 | ||||
|              } | ||||
| 
 | ||||
|              iphp->rrp.tried[n] |= m; | ||||
| diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
 | ||||
| index afc9b2e..1c0344e 100644
 | ||||
| --- a/src/http/ngx_http_upstream_round_robin.c
 | ||||
| +++ b/src/http/ngx_http_upstream_round_robin.c
 | ||||
| @@ -9,6 +9,9 @@
 | ||||
|  #include <ngx_core.h> | ||||
|  #include <ngx_http.h> | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +#include "ngx_http_upstream_check_module.h"
 | ||||
| +#endif
 | ||||
| 
 | ||||
|  static ngx_int_t ngx_http_upstream_cmp_servers(const void *one, | ||||
|      const void *two); | ||||
| @@ -75,6 +78,17 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
 | ||||
|                  peers->peer[n].down = server[i].down; | ||||
|                  peers->peer[n].weight = server[i].down ? 0 : server[i].weight; | ||||
|                  peers->peer[n].current_weight = peers->peer[n].weight; | ||||
| +
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                if (!server[i].down) {
 | ||||
| +                    peers->peer[n].check_index =
 | ||||
| +                        ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
 | ||||
| +                }
 | ||||
| +                else {
 | ||||
| +                    peers->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
 | ||||
| +                }
 | ||||
| +#endif
 | ||||
| +
 | ||||
|                  n++; | ||||
|              } | ||||
|          } | ||||
| @@ -128,6 +142,17 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
 | ||||
|                  backup->peer[n].max_fails = server[i].max_fails; | ||||
|                  backup->peer[n].fail_timeout = server[i].fail_timeout; | ||||
|                  backup->peer[n].down = server[i].down; | ||||
| +
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                if (!server[i].down) {
 | ||||
| +                    backup->peer[n].check_index =
 | ||||
| +                        ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
 | ||||
| +                }
 | ||||
| +                else {
 | ||||
| +                    backup->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
 | ||||
| +                }
 | ||||
| +#endif
 | ||||
| +
 | ||||
|                  n++; | ||||
|              } | ||||
|          } | ||||
| @@ -186,6 +211,9 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
 | ||||
|          peers->peer[i].current_weight = 1; | ||||
|          peers->peer[i].max_fails = 1; | ||||
|          peers->peer[i].fail_timeout = 10; | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +        peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
 | ||||
| +#endif
 | ||||
|      } | ||||
| 
 | ||||
|      us->peer.data = peers; | ||||
| @@ -302,6 +330,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
 | ||||
|          peers->peer[0].current_weight = 1; | ||||
|          peers->peer[0].max_fails = 1; | ||||
|          peers->peer[0].fail_timeout = 10; | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +        peers->peer[0].check_index = (ngx_uint_t) NGX_ERROR;
 | ||||
| +#endif
 | ||||
| 
 | ||||
|      } else { | ||||
| 
 | ||||
| @@ -334,6 +365,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
 | ||||
|              peers->peer[i].current_weight = 1; | ||||
|              peers->peer[i].max_fails = 1; | ||||
|              peers->peer[i].fail_timeout = 10; | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +            peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
 | ||||
| +#endif
 | ||||
|          } | ||||
|      } | ||||
| 
 | ||||
| @@ -411,7 +445,11 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
| 
 | ||||
|      if (rrp->peers->single) { | ||||
|          peer = &rrp->peers->peer[0]; | ||||
| -
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +        if (ngx_http_upstream_check_peer_down(peer->check_index)) {
 | ||||
| +            return NGX_BUSY;
 | ||||
| +        }
 | ||||
| +#endif
 | ||||
|      } else { | ||||
| 
 | ||||
|          /* there are several peers */ | ||||
| @@ -438,6 +476,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
| 
 | ||||
|                      if (!peer->down) { | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
 | ||||
| +                                       "get rr peer, check_index: %ui",
 | ||||
| +                                       peer->check_index);
 | ||||
| +                        if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
 | ||||
| +#endif
 | ||||
|                          if (peer->max_fails == 0 | ||||
|                              || peer->fails < peer->max_fails) | ||||
|                          { | ||||
| @@ -448,6 +492,9 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
|                              peer->fails = 0; | ||||
|                              break; | ||||
|                          } | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                        }
 | ||||
| +#endif
 | ||||
| 
 | ||||
|                          peer->current_weight = 0; | ||||
| 
 | ||||
| @@ -486,6 +533,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
| 
 | ||||
|                      if (!peer->down) { | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
 | ||||
| +                                       "get rr peer2, check_index: %ui",
 | ||||
| +                                       peer->check_index);
 | ||||
| +                        if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
 | ||||
| +#endif
 | ||||
|                          if (peer->max_fails == 0 | ||||
|                              || peer->fails < peer->max_fails) | ||||
|                          { | ||||
| @@ -496,6 +549,9 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
 | ||||
|                              peer->fails = 0; | ||||
|                              break; | ||||
|                          } | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +                        }
 | ||||
| +#endif
 | ||||
| 
 | ||||
|                          peer->current_weight = 0; | ||||
| 
 | ||||
| diff --git a/src/http/ngx_http_upstream_round_robin.h b/src/http/ngx_http_upstream_round_robin.h
 | ||||
| index 6d285ab..354cca2 100644
 | ||||
| --- a/src/http/ngx_http_upstream_round_robin.h
 | ||||
| +++ b/src/http/ngx_http_upstream_round_robin.h
 | ||||
| @@ -28,6 +28,10 @@ typedef struct {
 | ||||
|      ngx_uint_t                      max_fails; | ||||
|      time_t                          fail_timeout; | ||||
| 
 | ||||
| +#if (NGX_HTTP_UPSTREAM_CHECK)
 | ||||
| +    ngx_uint_t                      check_index;
 | ||||
| +#endif
 | ||||
| +
 | ||||
|      ngx_uint_t                      down;          /* unsigned  down:1; */ | ||||
| 
 | ||||
|  #if (NGX_HTTP_SSL) | ||||
| @ -0,0 +1,23 @@ | ||||
| ngx_feature="ngx_http_upstream_check_module" | ||||
| ngx_feature_name= | ||||
| ngx_feature_run=no | ||||
| ngx_feature_incs= | ||||
| ngx_feature_libs="" | ||||
| ngx_feature_path="$ngx_addon_dir" | ||||
| ngx_feature_deps="$ngx_addon_dir/ngx_http_upstream_check_module.h" | ||||
| ngx_check_src="$ngx_addon_dir/ngx_http_upstream_check_module.c" | ||||
| ngx_feature_test="int a;" | ||||
| . auto/feature | ||||
| if [ $ngx_found = yes ]; then | ||||
|     have=NGX_HTTP_UPSTREAM_CHECK . auto/have | ||||
|     CORE_INCS="$CORE_INCS $ngx_feature_path" | ||||
|     ngx_addon_name=ngx_http_upstream_check_module | ||||
|     HTTP_MODULES="$HTTP_MODULES ngx_http_upstream_check_module" | ||||
|     NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_feature_deps" | ||||
|     NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_check_src" | ||||
| else | ||||
|     cat << END | ||||
|     $0: error: the ngx_http_upstream_check_module addon error. | ||||
| END | ||||
|     exit 1 | ||||
| fi | ||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,17 @@ | ||||
| #ifndef _NGX_HTTP_UPSTREAM_CHECK_MODELE_H_INCLUDED_ | ||||
| #define _NGX_HTTP_UPSTREAM_CHECK_MODELE_H_INCLUDED_ | ||||
| 
 | ||||
| #include <ngx_config.h> | ||||
| #include <ngx_core.h> | ||||
| #include <ngx_http.h> | ||||
| 
 | ||||
| ngx_uint_t ngx_http_upstream_check_add_peer(ngx_conf_t *cf, | ||||
|     ngx_http_upstream_srv_conf_t *us, ngx_addr_t *peer); | ||||
| 
 | ||||
| ngx_uint_t ngx_http_upstream_check_peer_down(ngx_uint_t index); | ||||
| 
 | ||||
| void ngx_http_upstream_check_get_peer(ngx_uint_t index); | ||||
| void ngx_http_upstream_check_free_peer(ngx_uint_t index); | ||||
| 
 | ||||
| 
 | ||||
| #endif //_NGX_HTTP_UPSTREAM_CHECK_MODELE_H_INCLUDED_
 | ||||
					Loading…
					
					
				
		Reference in new issue