@@ -194,11 +194,15 @@ static ngx_int_t ngx_http_upsync_add_peers(ngx_cycle_t *cycle,
194
194
ngx_http_upsync_server_t * upsync_server );
195
195
static ngx_int_t ngx_http_upsync_del_peers (ngx_cycle_t * cycle ,
196
196
ngx_http_upsync_server_t * upsync_server );
197
+ static ngx_int_t ngx_http_upsync_replace_peers (ngx_cycle_t * cycle ,
198
+ ngx_http_upsync_server_t * upsync_server );
199
+ static void ngx_http_upsync_update_peer (ngx_http_upstream_rr_peers_t * peers ,
200
+ ngx_http_upstream_rr_peer_t * peer ,
201
+ ngx_http_upsync_conf_t * upstream_conf ,
202
+ ngx_uint_t * updated );
197
203
static void ngx_http_upsync_diff_filter (ngx_cycle_t * cycle ,
198
204
ngx_http_upsync_server_t * upsync_server ,
199
205
ngx_uint_t * diff );
200
- static ngx_int_t ngx_http_upsync_replace_peers (ngx_cycle_t * cycle ,
201
- ngx_http_upsync_server_t * upsync_server );
202
206
203
207
static void ngx_http_upsync_event_init (ngx_http_upstream_rr_peer_t * peer ,
204
208
ngx_http_upsync_server_t * upsync_server );
@@ -923,6 +927,7 @@ ngx_http_upsync_add_peers(ngx_cycle_t *cycle,
923
927
return NGX_ERROR ;
924
928
}
925
929
930
+
926
931
static void
927
932
ngx_http_upsync_update_peer (ngx_http_upstream_rr_peers_t * peers ,
928
933
ngx_http_upstream_rr_peer_t * peer ,
@@ -958,19 +963,21 @@ ngx_http_upsync_update_peer(ngx_http_upstream_rr_peers_t *peers,
958
963
return ;
959
964
}
960
965
966
+
961
967
static void
962
968
ngx_http_upsync_diff_filter (ngx_cycle_t * cycle ,
963
969
ngx_http_upsync_server_t * upsync_server ,
964
970
ngx_uint_t * diff )
965
971
{
966
972
ngx_uint_t i , j , len , updated ;
973
+ ngx_uint_t * flags = NULL ;
974
+ ngx_array_t flag_array ;
967
975
ngx_http_upsync_ctx_t * ctx ;
968
- ngx_http_upsync_conf_t * upstream_conf , * add_upstream , * del_upstream ;
976
+ ngx_http_upsync_conf_t * upstream_conf ;
977
+ ngx_http_upsync_conf_t * add_upstream , * del_upstream ;
969
978
ngx_http_upstream_rr_peer_t * peer = NULL ;
970
979
ngx_http_upstream_rr_peers_t * peers = NULL ;
971
980
ngx_http_upstream_srv_conf_t * uscf ;
972
- ngx_uint_t * flags = NULL ;
973
- ngx_array_t flag_array ;
974
981
975
982
* diff = 0 ;
976
983
ctx = & upsync_server -> ctx ;
@@ -983,14 +990,14 @@ ngx_http_upsync_diff_filter(ngx_cycle_t *cycle,
983
990
sizeof (* add_upstream )) != NGX_OK )
984
991
{
985
992
ngx_log_error (NGX_LOG_ERR , cycle -> log , 0 ,
986
- "upsync_add_check : alloc error" );
993
+ "upsync_diff_filter_add : alloc error" );
987
994
return ;
988
995
}
989
996
990
997
if (ngx_array_init (& ctx -> del_upstream , ctx -> pool , 16 ,
991
998
sizeof (* del_upstream )) != NGX_OK ) {
992
999
ngx_log_error (NGX_LOG_ERR , cycle -> log , 0 ,
993
- "upsync_del_check : alloc error" );
1000
+ "upsync_diff_filter_del : alloc error" );
994
1001
return ;
995
1002
}
996
1003
@@ -1000,12 +1007,11 @@ ngx_http_upsync_diff_filter(ngx_cycle_t *cycle,
1000
1007
}
1001
1008
1002
1009
peers = (ngx_http_upstream_rr_peers_t * )uscf -> peer .data ;
1003
-
1004
1010
if (peers -> number != 0 ) {
1005
1011
if (ngx_array_init (& flag_array , ctx -> pool , peers -> number ,
1006
1012
sizeof (* flags )) != NGX_OK ) {
1007
1013
ngx_log_error (NGX_LOG_ERR , cycle -> log , 0 ,
1008
- "upsync_del_flags : alloc error" );
1014
+ "upsync_diff_filter : alloc error" );
1009
1015
return ;
1010
1016
}
1011
1017
@@ -1021,17 +1027,17 @@ ngx_http_upsync_diff_filter(ngx_cycle_t *cycle,
1021
1027
if (* (flags + j ) == 1 ) {
1022
1028
continue ;
1023
1029
}
1024
-
1030
+
1025
1031
if (ngx_memn2cmp (peer -> name .data , upstream_conf -> sockaddr ,
1026
1032
peer -> name .len ,
1027
1033
ngx_strlen (upstream_conf -> sockaddr )) == 0 ) {
1028
1034
// update peer
1029
1035
ngx_http_upsync_update_peer (peers , peer , upstream_conf , & updated );
1030
1036
* diff |= updated ;
1031
-
1037
+
1032
1038
// set flag, not to be deleted
1033
1039
* (flags + j ) = 1 ;
1034
-
1040
+
1035
1041
break ;
1036
1042
}
1037
1043
}
@@ -1048,7 +1054,7 @@ ngx_http_upsync_diff_filter(ngx_cycle_t *cycle,
1048
1054
if (* (flags + j ) == 1 ) {
1049
1055
continue ;
1050
1056
}
1051
-
1057
+
1052
1058
del_upstream = ngx_array_push (& ctx -> del_upstream );
1053
1059
ngx_memzero (del_upstream , sizeof (* del_upstream ));
1054
1060
ngx_memcpy (& del_upstream -> sockaddr , peer -> name .data , peer -> name .len );
@@ -3485,7 +3491,7 @@ ngx_http_upsync_timeout_handler(ngx_event_t *event)
3485
3491
upsync_server = event -> data ;
3486
3492
3487
3493
ngx_log_error (NGX_LOG_ERR , event -> log , 0 ,
3488
- "upsync_timeout: timed out reading upsync_server: %V " ,
3494
+ "[WARN] upsync_timeout: timed out reading upsync_server: %V " ,
3489
3495
upsync_server -> pc .name );
3490
3496
3491
3497
ngx_http_upsync_clean_event (upsync_server );
@@ -3566,7 +3572,9 @@ static void
3566
3572
ngx_http_upsync_clear_all_events (ngx_cycle_t * cycle )
3567
3573
{
3568
3574
ngx_uint_t i ;
3575
+ ngx_queue_t * head , * next ;
3569
3576
ngx_connection_t * c ;
3577
+ ngx_delay_event_t * queue_event ;
3570
3578
ngx_upsync_conf_t * upsync_type_conf ;
3571
3579
ngx_http_upsync_server_t * upsync_server ;
3572
3580
@@ -3598,6 +3606,17 @@ ngx_http_upsync_clear_all_events(ngx_cycle_t *cycle)
3598
3606
}
3599
3607
ngx_del_timer (& upsync_server [i ].upsync_timeout_ev );
3600
3608
}
3609
+
3610
+ head = & upsync_server [i ].delete_ev ;
3611
+ for (next = ngx_queue_head (head );
3612
+ next != ngx_queue_sentinel (head );
3613
+ next = ngx_queue_next (next )) {
3614
+
3615
+ queue_event = ngx_queue_data (next , ngx_delay_event_t , delay_delete_ev );
3616
+ if (queue_event -> delay_delete_ev .timer_set ) {
3617
+ ngx_del_timer (& queue_event -> delay_delete_ev );
3618
+ }
3619
+ }
3601
3620
}
3602
3621
3603
3622
if (upsync_type_conf -> upsync_type == NGX_HTTP_UPSYNC_CONSUL
0 commit comments