Skip to content

Commit cb5c29a

Browse files
committed
optimizing fetching conf-server-ip, get random ip everytime when ip-list be cached
1 parent 05b51b4 commit cb5c29a

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/ngx_stream_upsync_module.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1650,6 +1650,8 @@ ngx_stream_upsync_etcd_parse_json(void *data)
16501650
if (errorCode != NULL) {
16511651
if (errorCode->valueint == 401) { // trigger reload, we've gone too far with index
16521652
upsync_server->index = 0;
1653+
1654+
ngx_del_timer(&upsync_server->upsync_timeout_ev);
16531655
ngx_add_timer(&upsync_server->upsync_ev, 0);
16541656
}
16551657
cJSON_Delete(root);
@@ -1663,7 +1665,10 @@ ngx_stream_upsync_etcd_parse_json(void *data)
16631665

16641666
if (ngx_memcmp(action->valuestring, "get", 3) != 0) {
16651667
upsync_server->index = 0;
1668+
1669+
ngx_del_timer(&upsync_server->upsync_timeout_ev);
16661670
ngx_add_timer(&upsync_server->upsync_ev, 0);
1671+
16671672
cJSON_Delete(root);
16681673
return NGX_ERROR;
16691674
}
@@ -2509,6 +2514,10 @@ ngx_stream_upsync_connect_handler(ngx_event_t *event)
25092514
ngx_log_error(NGX_LOG_ERR, event->log, 0,
25102515
"upsync_connect_handler: cannot connect to upsync_server: %V ",
25112516
upsync_server->pc.name);
2517+
2518+
ngx_del_timer(&upsync_server->upsync_timeout_ev);
2519+
ngx_add_timer(&upsync_server->upsync_ev, 0);
2520+
25122521
return;
25132522
}
25142523

@@ -2969,6 +2978,7 @@ ngx_stream_upsync_dump_server(ngx_stream_upsync_server_t *upsync_server)
29692978
static ngx_int_t
29702979
ngx_stream_upsync_init_server(ngx_event_t *event)
29712980
{
2981+
ngx_uint_t n = 0, r = 0, cur = 0;
29722982
ngx_pool_t *pool;
29732983
ngx_stream_upsync_ctx_t *ctx;
29742984
ngx_stream_upsync_server_t *upsync_server;
@@ -3029,12 +3039,27 @@ ngx_stream_upsync_init_server(ngx_event_t *event)
30293039
goto valid;
30303040
}
30313041

3042+
/* bad method: for get random server*/
3043+
for (rp = res; rp != NULL; rp = rp->ai_next) {
3044+
if (rp->ai_family != AF_INET) {
3045+
continue;
3046+
}
3047+
3048+
n++;
3049+
}
3050+
3051+
r = ngx_random() % n;
30323052
for (rp = res; rp != NULL; rp = rp->ai_next) {
30333053

30343054
if (rp->ai_family != AF_INET) {
30353055
continue;
30363056
}
30373057

3058+
if (cur != r) {
3059+
cur++;
3060+
continue;
3061+
}
3062+
30383063
sin = ngx_pcalloc(ctx->pool, rp->ai_addrlen);
30393064
if (sin == NULL) {
30403065
goto valid;
@@ -3051,7 +3076,6 @@ ngx_stream_upsync_init_server(ngx_event_t *event)
30513076
if (p == NULL) {
30523077
goto valid;
30533078
}
3054-
30553079
len = ngx_sock_ntop((struct sockaddr *) sin, rp->ai_addrlen, p, len, 1);
30563080

30573081
name = ngx_pcalloc(ctx->pool, sizeof(*name));

0 commit comments

Comments
 (0)