diff --git a/src/sf_connection_manager.c b/src/sf_connection_manager.c index 96bd2c6..e260d32 100644 --- a/src/sf_connection_manager.c +++ b/src/sf_connection_manager.c @@ -435,6 +435,23 @@ static ConnectionInfo *get_leader_connection(SFConnectionManager *cm, if ((conn=get_spec_connection(cm, &leader.conn, err_no)) == NULL) { + if (cm->server_cfg != NULL) { + FCServerInfo *ls; + if ((ls=fc_server_get_by_id(cm->server_cfg, + leader.server_id)) != NULL) + { + if (ls->group_addrs[cm->server_group_index]. + address_array.count > 1) + { + if ((conn=get_server_connection(cm, ls, + err_no)) != NULL) + { + return conn; + } + } + } + } + break; } @@ -501,7 +518,8 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, const int group_count, const int server_group_index, const int server_count, const int max_count_per_entry, const int max_idle_time, fc_connection_callback_func - connect_done_callback, void *args, const bool bg_thread_enabled) + connect_done_callback, void *args, FCServerConfig *server_cfg, + const bool bg_thread_enabled) { const int socket_domain = AF_INET; int htable_init_capacity; @@ -535,6 +553,7 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, cm->server_group_index = server_group_index; cm->module_name = module_name; cm->common_cfg = common_cfg; + cm->server_cfg = server_cfg; cm->alive_detect.bg_thread_enabled = bg_thread_enabled; cm->max_servers_per_group = 0; cm->extra = NULL; diff --git a/src/sf_connection_manager.h b/src/sf_connection_manager.h index 467c689..80e08cf 100644 --- a/src/sf_connection_manager.h +++ b/src/sf_connection_manager.h @@ -115,6 +115,7 @@ typedef struct sf_connection_manager { ConnectionPool cpool; struct fast_mblock_man sptr_array_allocator; //element: SFCMServerPtrArray SFCMOperations ops; + FCServerConfig *server_cfg; void *extra; //for simple connection manager } SFConnectionManager; @@ -123,7 +124,8 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, const int group_count, const int server_group_index, const int server_count, const int max_count_per_entry, const int max_idle_time, fc_connection_callback_func - connect_done_callback, void *args, const bool bg_thread_enabled); + connect_done_callback, void *args, FCServerConfig *server_cfg, + const bool bg_thread_enabled); static inline int sf_connection_manager_init(SFConnectionManager *cm, const char *module_name, const SFClientCommonConfig *common_cfg, @@ -136,7 +138,7 @@ static inline int sf_connection_manager_init(SFConnectionManager *cm, return sf_connection_manager_init_ex(cm, module_name, common_cfg, group_count, server_group_index, server_count, max_count_per_entry, max_idle_time, - connect_done_callback, args, bg_thread_enabled); + connect_done_callback, args, NULL, bg_thread_enabled); } int sf_connection_manager_add(SFConnectionManager *cm, const int group_id,