Skip to content

Commit 669f88d

Browse files
committed
Merge pull request yaoweibin#40 from saravsars/master
Retain correct fall and rise count for same IP address in different upstreams while reloading
2 parents c3d6e7a + 0ca7f3b commit 669f88d

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

ngx_http_upstream_check_handler.c

+15-13
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ static ngx_int_t ngx_http_check_get_shm_name(ngx_str_t *shm_name,
5555
static ngx_shm_zone_t * ngx_shared_memory_find(ngx_cycle_t *cycle,
5656
ngx_str_t *name, void *tag);
5757
static ngx_http_check_peer_shm_t * ngx_http_check_find_shm_peer(
58-
ngx_http_check_peers_shm_t *peers_shm, ngx_addr_t *addr);
58+
ngx_http_check_peers_shm_t *peers_shm, ngx_addr_t *addr,ngx_str_t *upstream_name);
5959
static void ngx_http_check_set_shm_peer(ngx_http_check_peer_shm_t *peer_shm,
60-
ngx_http_check_peer_shm_t *opeer_shm, ngx_uint_t init_down);
60+
ngx_http_check_peer_shm_t *opeer_shm, ngx_uint_t init_down,ngx_str_t *upstream_name);
6161
static ngx_int_t ngx_http_upstream_check_init_shm_zone(
6262
ngx_shm_zone_t *shm_zone, void *data);
6363

@@ -1443,21 +1443,19 @@ ngx_http_upstream_check_init_shm_zone(ngx_shm_zone_t *shm_zone, void *data)
14431443

14441444
if (opeers_shm) {
14451445

1446-
opeer_shm = ngx_http_check_find_shm_peer(opeers_shm,
1447-
peer[i].peer_addr);
1446+
opeer_shm = ngx_http_check_find_shm_peer(opeers_shm,peer[i].peer_addr,peer[i].upstream_name);
14481447
if (opeer_shm) {
14491448
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, shm_zone->shm.log, 0,
14501449
"http upstream check: inherit opeer:%V",
14511450
&peer[i].peer_addr->name);
14521451

1453-
ngx_http_check_set_shm_peer(peer_shm, opeer_shm, 0);
1454-
1452+
ngx_http_check_set_shm_peer(peer_shm, opeer_shm, 0,peer[i].upstream_name);
14551453
continue;
14561454
}
14571455
}
14581456

14591457
ucscf = peer[i].conf;
1460-
ngx_http_check_set_shm_peer(peer_shm, NULL, ucscf->default_down);
1458+
ngx_http_check_set_shm_peer(peer_shm, NULL, ucscf->default_down,peer[i].upstream_name);
14611459
}
14621460

14631461
peers->peers_shm = peers_shm;
@@ -1475,7 +1473,8 @@ ngx_http_upstream_check_init_shm_zone(ngx_shm_zone_t *shm_zone, void *data)
14751473

14761474
static ngx_http_check_peer_shm_t *
14771475
ngx_http_check_find_shm_peer(ngx_http_check_peers_shm_t *peers_shm,
1478-
ngx_addr_t *addr)
1476+
ngx_addr_t *addr,
1477+
ngx_str_t *upstream_name)
14791478
{
14801479
ngx_uint_t i;
14811480
ngx_http_check_peer_shm_t *peer_shm;
@@ -1484,11 +1483,12 @@ ngx_http_check_find_shm_peer(ngx_http_check_peers_shm_t *peers_shm,
14841483

14851484
peer_shm = &peers_shm->peers[i];
14861485

1487-
if (addr->socklen != peer_shm->socklen) {
1488-
continue;
1486+
if (addr->socklen != peer_shm->socklen) {
1487+
continue;
14891488
}
1490-
1491-
if (ngx_memcmp(addr->sockaddr, peer_shm->sockaddr, addr->socklen) == 0) {
1489+
1490+
if (ngx_memcmp(addr->sockaddr, peer_shm->sockaddr, addr->socklen) == 0 && ngx_strcmp(upstream_name->data,peer_shm->upstream_name->data) == 0)
1491+
{
14921492
return peer_shm;
14931493
}
14941494
}
@@ -1500,7 +1500,8 @@ ngx_http_check_find_shm_peer(ngx_http_check_peers_shm_t *peers_shm,
15001500
static void
15011501
ngx_http_check_set_shm_peer(ngx_http_check_peer_shm_t *peer_shm,
15021502
ngx_http_check_peer_shm_t *opeer_shm,
1503-
ngx_uint_t init_down)
1503+
ngx_uint_t init_down,
1504+
ngx_str_t *upstream_name)
15041505
{
15051506

15061507
if (opeer_shm) {
@@ -1523,6 +1524,7 @@ ngx_http_check_set_shm_peer(ngx_http_check_peer_shm_t *peer_shm,
15231524

15241525
peer_shm->down = init_down;
15251526
}
1527+
peer_shm->upstream_name = upstream_name;
15261528
}
15271529

15281530

ngx_http_upstream_check_handler.h

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ typedef struct {
7272
ngx_atomic_t down;
7373

7474
ngx_uint_t access_count;
75+
ngx_str_t *upstream_name;
7576

7677
struct sockaddr *sockaddr;
7778
socklen_t socklen;

0 commit comments

Comments
 (0)