@@ -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)
29692978static ngx_int_t
29702979ngx_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