Skip to content
This repository is currently being migrated. It's locked while the migration is in progress.

Commit da50d14

Browse files
authored
Merge pull request #4 from zenedge/feature/openresty_76_reload_check_upstream_name
Check upstream name when peer data is restored from shared memory after reload
2 parents f81a903 + 2885ced commit da50d14

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

ngx_http_upstream_check_module.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ typedef struct {
7777

7878
ngx_pid_t owner;
7979

80+
ngx_str_t *upstream_name;
81+
8082
ngx_msec_t access_time;
8183

8284
ngx_uint_t fall_count;
@@ -90,7 +92,7 @@ typedef struct {
9092

9193
ngx_atomic_t down;
9294

93-
u_char padding[64];
95+
u_char padding[56];
9496
} ngx_http_upstream_check_peer_shm_t;
9597

9698

@@ -222,6 +224,7 @@ typedef struct {
222224

223225

224226
struct ngx_http_upstream_check_srv_conf_s {
227+
ngx_http_upstream_srv_conf_t *upstream_srv_conf;
225228
ngx_uint_t port;
226229
ngx_uint_t fall_count;
227230
ngx_uint_t rise_count;
@@ -482,7 +485,8 @@ static ngx_int_t ngx_http_upstream_check_get_shm_name(ngx_str_t *shm_name,
482485
static ngx_shm_zone_t *ngx_shared_memory_find(ngx_cycle_t *cycle,
483486
ngx_str_t *name, void *tag);
484487
static ngx_http_upstream_check_peer_shm_t *
485-
ngx_http_upstream_check_find_shm_peer(ngx_http_upstream_check_peers_shm_t *peers_shm,
488+
ngx_http_upstream_check_find_shm_peer(
489+
ngx_http_upstream_check_peers_shm_t *peers_shm, ngx_str_t *us_name,
486490
ngx_addr_t *addr);
487491

488492
static ngx_int_t ngx_http_upstream_check_init_shm_peer(
@@ -3728,6 +3732,7 @@ ngx_http_upstream_check_create_srv_conf(ngx_conf_t *cf)
37283732
return NULL;
37293733
}
37303734

3735+
ucscf->upstream_srv_conf = NGX_CONF_UNSET_PTR;
37313736
ucscf->port = NGX_CONF_UNSET_UINT;
37323737
ucscf->fall_count = NGX_CONF_UNSET_UINT;
37333738
ucscf->rise_count = NGX_CONF_UNSET_UINT;
@@ -3770,6 +3775,10 @@ ngx_http_upstream_check_init_srv_conf(ngx_conf_t *cf, void *conf)
37703775

37713776
ucscf = ngx_http_conf_upstream_srv_conf(us, ngx_http_upstream_check_module);
37723777

3778+
if (ucscf->upstream_srv_conf == NGX_CONF_UNSET_PTR) {
3779+
ucscf->upstream_srv_conf = us;
3780+
}
3781+
37733782
if (ucscf->port == NGX_CONF_UNSET_UINT) {
37743783
ucscf->port = 0;
37753784
}
@@ -4028,10 +4037,14 @@ ngx_http_upstream_check_init_shm_zone(ngx_shm_zone_t *shm_zone, void *data)
40284037
ngx_memcpy(peer_shm->sockaddr, peer[i].peer_addr->sockaddr,
40294038
peer_shm->socklen);
40304039

4040+
ucscf = peer[i].conf;
4041+
4042+
peer_shm->upstream_name = &ucscf->upstream_srv_conf->host;
4043+
40314044
if (opeers_shm) {
40324045

4033-
opeer_shm = ngx_http_upstream_check_find_shm_peer(opeers_shm,
4034-
peer[i].peer_addr);
4046+
opeer_shm = ngx_http_upstream_check_find_shm_peer(
4047+
opeers_shm, peer[i].upstream_name, peer[i].peer_addr);
40354048
if (opeer_shm) {
40364049
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, shm_zone->shm.log, 0,
40374050
"http upstream check, inherit opeer: %V ",
@@ -4047,7 +4060,6 @@ ngx_http_upstream_check_init_shm_zone(ngx_shm_zone_t *shm_zone, void *data)
40474060
}
40484061
}
40494062

4050-
ucscf = peer[i].conf;
40514063
rc = ngx_http_upstream_check_init_shm_peer(peer_shm, NULL,
40524064
ucscf->default_down, pool,
40534065
&peer[i].peer_addr->name);
@@ -4112,14 +4124,22 @@ ngx_shared_memory_find(ngx_cycle_t *cycle, ngx_str_t *name, void *tag)
41124124

41134125
static ngx_http_upstream_check_peer_shm_t *
41144126
ngx_http_upstream_check_find_shm_peer(ngx_http_upstream_check_peers_shm_t *p,
4115-
ngx_addr_t *addr)
4127+
ngx_str_t *us_name, ngx_addr_t *addr)
41164128
{
41174129
ngx_uint_t i;
41184130
ngx_http_upstream_check_peer_shm_t *peer_shm;
4131+
ngx_str_t *shm_us_name;
4132+
41194133

41204134
for (i = 0; i < p->number; i++) {
41214135

41224136
peer_shm = &p->peers[i];
4137+
shm_us_name = peer_shm->upstream_name;
4138+
4139+
if (us_name->len != shm_us_name->len ||
4140+
ngx_strncmp(us_name, shm_us_name, us_name->len) != 0) {
4141+
continue;
4142+
}
41234143

41244144
if (addr->socklen != peer_shm->socklen) {
41254145
continue;

0 commit comments

Comments
 (0)