forked from cep21/healthcheck_nginx_upstreams
-
Notifications
You must be signed in to change notification settings - Fork 486
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'yaoweibin/master'
- Loading branch information
Showing
2 changed files
with
480 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,241 @@ | ||
diff --git src/http/modules/ngx_http_upstream_hash_module.c src/http/modules/ngx_http_upstream_hash_module.c | ||
--- src/http/modules/ngx_http_upstream_hash_module.c 2016-05-31 15:43:51.000000000 +0200 | ||
+++ src/http/modules/ngx_http_upstream_hash_module.c 2016-06-22 17:20:19.553955295 +0200 | ||
@@ -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 | ||
|
||
typedef struct { | ||
uint32_t hash; | ||
@@ -235,6 +238,16 @@ | ||
goto next; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | ||
+ "get hash peer, check_index: %ui", | ||
+ peer->check_index); | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ goto next; | ||
+ } | ||
+#endif | ||
+ | ||
+ | ||
if (peer->max_fails | ||
&& peer->fails >= peer->max_fails | ||
&& now - peer->checked <= peer->fail_timeout) | ||
@@ -535,6 +548,15 @@ | ||
continue; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | ||
+ "get consistent_hash peer, check_index: %ui", | ||
+ peer->check_index); | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ continue; | ||
+ } | ||
+#endif | ||
+ | ||
if (peer->server.len != server->len | ||
|| ngx_strncmp(peer->server.data, server->data, server->len) | ||
!= 0) | ||
diff --git src/http/modules/ngx_http_upstream_ip_hash_module.c src/http/modules/ngx_http_upstream_ip_hash_module.c | ||
--- src/http/modules/ngx_http_upstream_ip_hash_module.c 2016-05-31 15:43:51.000000000 +0200 | ||
+++ src/http/modules/ngx_http_upstream_ip_hash_module.c 2016-06-22 17:21:38.465741397 +0200 | ||
@@ -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 | ||
|
||
typedef struct { | ||
/* the round robin data must be first */ | ||
@@ -205,6 +208,15 @@ | ||
goto next; | ||
} | ||
|
||
+#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)) { | ||
+ goto next; | ||
+ } | ||
+#endif | ||
+ | ||
if (peer->max_fails | ||
&& peer->fails >= peer->max_fails | ||
&& now - peer->checked <= peer->fail_timeout) | ||
diff --git src/http/modules/ngx_http_upstream_least_conn_module.c src/http/modules/ngx_http_upstream_least_conn_module.c | ||
--- src/http/modules/ngx_http_upstream_least_conn_module.c 2016-05-31 15:43:51.000000000 +0200 | ||
+++ src/http/modules/ngx_http_upstream_least_conn_module.c 2016-06-22 17:23:04.165509237 +0200 | ||
@@ -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 | ||
+ | ||
|
||
static ngx_int_t ngx_http_upstream_init_least_conn_peer(ngx_http_request_t *r, | ||
ngx_http_upstream_srv_conf_t *us); | ||
@@ -148,6 +152,16 @@ | ||
continue; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | ||
+ "get least_conn peer, check_index: %ui", | ||
+ peer->check_index); | ||
+ | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ continue; | ||
+ } | ||
+#endif | ||
+ | ||
if (peer->max_fails | ||
&& peer->fails >= peer->max_fails | ||
&& now - peer->checked <= peer->fail_timeout) | ||
@@ -199,6 +213,16 @@ | ||
continue; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | ||
+ "get least_conn peer, check_index: %ui", | ||
+ peer->check_index); | ||
+ | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ continue; | ||
+ } | ||
+#endif | ||
+ | ||
if (peer->conns * best->weight != best->conns * peer->weight) { | ||
continue; | ||
} | ||
|
||
diff --git src/http/ngx_http_upstream_round_robin.c src/http/ngx_http_upstream_round_robin.c | ||
--- src/http/ngx_http_upstream_round_robin.c 2016-05-31 15:43:51.000000000 +0200 | ||
+++ src/http/ngx_http_upstream_round_robin.c 2016-06-22 17:27:03.200862423 +0200 | ||
@@ -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 | ||
|
||
#define ngx_http_upstream_tries(p) ((p)->number \ | ||
+ ((p)->next ? (p)->next->number : 0)) | ||
@@ -96,7 +99,14 @@ | ||
peer[n].fail_timeout = server[i].fail_timeout; | ||
peer[n].down = server[i].down; | ||
peer[n].server = server[i].name; | ||
- | ||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ if (!server[i].down) { | ||
+ peer[n].check_index = | ||
+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]); | ||
+ } else { | ||
+ peer[n].check_index = (ngx_uint_t) NGX_ERROR; | ||
+ } | ||
+#endif | ||
*peerp = &peer[n]; | ||
peerp = &peer[n].next; | ||
n++; | ||
@@ -159,7 +169,15 @@ | ||
peer[n].fail_timeout = server[i].fail_timeout; | ||
peer[n].down = server[i].down; | ||
peer[n].server = server[i].name; | ||
- | ||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ if (!server[i].down) { | ||
+ peer[n].check_index = | ||
+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]); | ||
+ } | ||
+ else { | ||
+ peer[n].check_index = (ngx_uint_t) NGX_ERROR; | ||
+ } | ||
+#endif | ||
*peerp = &peer[n]; | ||
peerp = &peer[n].next; | ||
n++; | ||
@@ -225,6 +243,9 @@ | ||
peer[i].current_weight = 0; | ||
peer[i].max_fails = 1; | ||
peer[i].fail_timeout = 10; | ||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ peer[i].check_index = (ngx_uint_t) NGX_ERROR; | ||
+#endif | ||
*peerp = &peer[i]; | ||
peerp = &peer[i].next; | ||
} | ||
@@ -339,6 +360,9 @@ | ||
peer[0].current_weight = 0; | ||
peer[0].max_fails = 1; | ||
peer[0].fail_timeout = 10; | ||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ peer[0].check_index = (ngx_uint_t) NGX_ERROR; | ||
+#endif | ||
peers->peer = peer; | ||
|
||
} else { | ||
@@ -381,6 +405,9 @@ | ||
peer[i].current_weight = 0; | ||
peer[i].max_fails = 1; | ||
peer[i].fail_timeout = 10; | ||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ peer[i].check_index = (ngx_uint_t) NGX_ERROR; | ||
+#endif | ||
*peerp = &peer[i]; | ||
peerp = &peer[i].next; | ||
} | ||
@@ -441,6 +468,12 @@ | ||
goto failed; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ goto failed; | ||
+ } | ||
+#endif | ||
+ | ||
rrp->current = peer; | ||
|
||
} else { | ||
@@ -542,6 +575,12 @@ | ||
continue; | ||
} | ||
|
||
+#if (NGX_HTTP_UPSTREAM_CHECK) | ||
+ if (ngx_http_upstream_check_peer_down(peer->check_index)) { | ||
+ continue; | ||
+ } | ||
+#endif | ||
+ | ||
if (peer->max_fails | ||
&& peer->fails >= peer->max_fails | ||
&& now - peer->checked <= peer->fail_timeout) | ||
diff --git src/http/ngx_http_upstream_round_robin.h src/http/ngx_http_upstream_round_robin.h | ||
--- src/http/ngx_http_upstream_round_robin.h 2016-05-31 15:43:51.000000000 +0200 | ||
+++ src/http/ngx_http_upstream_round_robin.h 2016-06-22 17:27:47.316743162 +0200 | ||
@@ -35,6 +35,10 @@ | ||
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) | ||
|
Oops, something went wrong.