diff --git a/src/sf_connection_manager.c b/src/sf_connection_manager.c index e260d32..57be9c7 100644 --- a/src/sf_connection_manager.c +++ b/src/sf_connection_manager.c @@ -557,6 +557,7 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, cm->alive_detect.bg_thread_enabled = bg_thread_enabled; cm->max_servers_per_group = 0; cm->extra = NULL; + cm->exclude_server_id = 0; cm->ops.get_connection = get_connection; cm->ops.get_server_connection = get_server_connection; @@ -789,6 +790,10 @@ static int get_group_servers_by_all(SFConnectionManager *cm, end = group->all.servers + group->all.count; for (server=group->all.servers; serverid == cm->exclude_server_id) { + continue; + } + if ((conn=make_connection(cm, server->addr_array, &result)) == NULL) { diff --git a/src/sf_connection_manager.h b/src/sf_connection_manager.h index 80e08cf..8c78346 100644 --- a/src/sf_connection_manager.h +++ b/src/sf_connection_manager.h @@ -103,8 +103,9 @@ typedef struct sf_cm_operations { } SFCMOperations; typedef struct sf_connection_manager { - short server_group_index; - short max_servers_per_group; + int exclude_server_id; //for server side + uint16_t max_servers_per_group; + uint8_t server_group_index; struct { bool bg_thread_enabled; struct common_blocked_queue queue; @@ -141,6 +142,12 @@ static inline int sf_connection_manager_init(SFConnectionManager *cm, connect_done_callback, args, NULL, bg_thread_enabled); } +static inline void sf_connection_manager_set_exclude_server_id( + SFConnectionManager *cm, const int exclude_server_id) +{ + cm->exclude_server_id = exclude_server_id; +} + int sf_connection_manager_add(SFConnectionManager *cm, const int group_id, FCServerInfo **servers, const int count);