get_leader_connection: failover on multi ip addresses

fstore_storage_engine
YuQing 2022-12-23 09:35:01 +08:00
parent a6c8c65371
commit ca3f14df6e
2 changed files with 24 additions and 3 deletions

View File

@ -435,6 +435,23 @@ static ConnectionInfo *get_leader_connection(SFConnectionManager *cm,
if ((conn=get_spec_connection(cm, &leader.conn, if ((conn=get_spec_connection(cm, &leader.conn,
err_no)) == NULL) 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; break;
} }
@ -501,7 +518,8 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm,
const int group_count, const int server_group_index, const int group_count, const int server_group_index,
const int server_count, const int max_count_per_entry, const int server_count, const int max_count_per_entry,
const int max_idle_time, fc_connection_callback_func 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; const int socket_domain = AF_INET;
int htable_init_capacity; int htable_init_capacity;
@ -535,6 +553,7 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm,
cm->server_group_index = server_group_index; cm->server_group_index = server_group_index;
cm->module_name = module_name; cm->module_name = module_name;
cm->common_cfg = common_cfg; cm->common_cfg = common_cfg;
cm->server_cfg = server_cfg;
cm->alive_detect.bg_thread_enabled = bg_thread_enabled; cm->alive_detect.bg_thread_enabled = bg_thread_enabled;
cm->max_servers_per_group = 0; cm->max_servers_per_group = 0;
cm->extra = NULL; cm->extra = NULL;

View File

@ -115,6 +115,7 @@ typedef struct sf_connection_manager {
ConnectionPool cpool; ConnectionPool cpool;
struct fast_mblock_man sptr_array_allocator; //element: SFCMServerPtrArray struct fast_mblock_man sptr_array_allocator; //element: SFCMServerPtrArray
SFCMOperations ops; SFCMOperations ops;
FCServerConfig *server_cfg;
void *extra; //for simple connection manager void *extra; //for simple connection manager
} SFConnectionManager; } SFConnectionManager;
@ -123,7 +124,8 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm,
const int group_count, const int server_group_index, const int group_count, const int server_group_index,
const int server_count, const int max_count_per_entry, const int server_count, const int max_count_per_entry,
const int max_idle_time, fc_connection_callback_func 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, static inline int sf_connection_manager_init(SFConnectionManager *cm,
const char *module_name, const SFClientCommonConfig *common_cfg, 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, return sf_connection_manager_init_ex(cm, module_name,
common_cfg, group_count, server_group_index, common_cfg, group_count, server_group_index,
server_count, max_count_per_entry, max_idle_time, 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, int sf_connection_manager_add(SFConnectionManager *cm, const int group_id,