From f7ac5262844b999c169aaf6deaf3d7a3ac128ef6 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Sun, 21 Feb 2021 21:20:36 +0800 Subject: [PATCH] connection_manager support option: bg_thread_enabled --- src/sf_connection_manager.c | 15 +++++++++++---- src/sf_connection_manager.h | 38 +++++++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/sf_connection_manager.c b/src/sf_connection_manager.c index 1d5c502..210a6f8 100644 --- a/src/sf_connection_manager.c +++ b/src/sf_connection_manager.c @@ -473,11 +473,12 @@ static int init_group_array(SFConnectionManager *cm, return 0; } -int sf_connection_manager_init(SFConnectionManager *cm, +int sf_connection_manager_init_ex(SFConnectionManager *cm, const SFClientCommonConfig *common_cfg, 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) + fc_connection_callback_func connect_done_callback, void *args, + const bool bg_thread_enabled) { const int socket_domain = AF_INET; int htable_init_capacity; @@ -502,7 +503,9 @@ int sf_connection_manager_init(SFConnectionManager *cm, cm->server_group_index = server_group_index; cm->common_cfg = common_cfg; + cm->bg_thread_enabled = bg_thread_enabled; cm->max_servers_per_group = 0; + cm->extra = NULL; cm->ops.get_connection = get_connection; cm->ops.get_server_connection = get_server_connection; @@ -817,6 +820,10 @@ int sf_connection_manager_start(SFConnectionManager *cm) __sync_bool_compare_and_swap(&group->alives, NULL, sptr_array); } - return fc_create_thread(&tid, connection_manager_thread_func, - cm, SF_G_THREAD_STACK_SIZE); + if (cm->bg_thread_enabled) { + return fc_create_thread(&tid, connection_manager_thread_func, + cm, SF_G_THREAD_STACK_SIZE); + } else { + return 0; + } } diff --git a/src/sf_connection_manager.h b/src/sf_connection_manager.h index 790d86e..88779f7 100644 --- a/src/sf_connection_manager.h +++ b/src/sf_connection_manager.h @@ -101,33 +101,51 @@ typedef struct sf_cm_operations { sf_get_connection_parameters get_connection_params; } SFCMOperations; +typedef struct sf_cm_simple_extra { + /* master connection cache */ + struct { + ConnectionInfo *conn; + ConnectionInfo holder; + } master_cache; + void *args[2]; +} SFCMSimpleExtra; + typedef struct sf_connection_manager { - int server_group_index; - int max_servers_per_group; + short server_group_index; + short max_servers_per_group; + bool bg_thread_enabled; const SFClientCommonConfig *common_cfg; SFCMConnGroupArray groups; ConnectionPool cpool; struct fast_mblock_man sptr_array_allocator; //element: SFCMServerPtrArray SFCMOperations ops; + SFCMSimpleExtra *extra; //for simple } SFConnectionManager; -int sf_connection_manager_init(SFConnectionManager *cm, +int sf_connection_manager_init_ex(SFConnectionManager *cm, const SFClientCommonConfig *common_cfg, 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); + fc_connection_callback_func connect_done_callback, void *args, + const bool bg_thread_enabled); + +static inline int sf_connection_manager_init(SFConnectionManager *cm, + const SFClientCommonConfig *common_cfg, 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 = true; + return sf_connection_manager_init_ex(cm, common_cfg, group_count, + server_group_index, server_count, max_count_per_entry, + max_idle_time, connect_done_callback, args, bg_thread_enabled); +} int sf_connection_manager_add(SFConnectionManager *cm, const int group_id, FCServerInfo **servers, const int count); int sf_connection_manager_start(SFConnectionManager *cm); -ConnectionInfo *sf_connection_manager_get_master(SFConnectionManager *cm, - const int group_index, int *err_no); - -ConnectionInfo *sf_connection_manager_get_readable(SFConnectionManager *cm, - const int group_index, int *err_no); - #ifdef __cplusplus extern "C" { #endif