sf_connection_manager.[hc]: get connection functions add parameter shared

use_iouring
YuQing 2025-01-27 10:59:57 +08:00
parent 03974ff302
commit b6e24d0548
2 changed files with 34 additions and 30 deletions

View File

@ -35,14 +35,14 @@ static int get_group_servers(SFConnectionManager *cm,
SFCMConnGroupEntry *group); SFCMConnGroupEntry *group);
static ConnectionInfo *get_spec_connection(SFConnectionManager *cm, static ConnectionInfo *get_spec_connection(SFConnectionManager *cm,
const ConnectionInfo *target, int *err_no) const ConnectionInfo *target, const bool shared, int *err_no)
{ {
return conn_pool_get_connection_ex(&cm->cpool, return conn_pool_get_connection_ex(&cm->cpool,
target, cm->module_name, err_no); target, cm->module_name, shared, err_no);
} }
static ConnectionInfo *make_connection(SFConnectionManager *cm, static ConnectionInfo *make_connection(SFConnectionManager *cm,
FCAddressPtrArray *addr_array, int *err_no) FCAddressPtrArray *addr_array, const bool shared, int *err_no)
{ {
FCAddressInfo **current; FCAddressInfo **current;
FCAddressInfo **addr; FCAddressInfo **addr;
@ -56,7 +56,7 @@ static ConnectionInfo *make_connection(SFConnectionManager *cm,
current = addr_array->addrs + addr_array->index; current = addr_array->addrs + addr_array->index;
if ((conn=get_spec_connection(cm, &(*current)->conn, if ((conn=get_spec_connection(cm, &(*current)->conn,
err_no)) != NULL) shared, err_no)) != NULL)
{ {
return conn; return conn;
} }
@ -72,7 +72,7 @@ static ConnectionInfo *make_connection(SFConnectionManager *cm,
} }
if ((conn=get_spec_connection(cm, &(*addr)->conn, if ((conn=get_spec_connection(cm, &(*addr)->conn,
err_no)) != NULL) shared, err_no)) != NULL)
{ {
addr_array->index = addr - addr_array->addrs; addr_array->index = addr - addr_array->addrs;
return conn; return conn;
@ -83,13 +83,13 @@ static ConnectionInfo *make_connection(SFConnectionManager *cm,
} }
static ConnectionInfo *get_server_connection(SFConnectionManager *cm, static ConnectionInfo *get_server_connection(SFConnectionManager *cm,
FCServerInfo *server, int *err_no) FCServerInfo *server, const bool shared, int *err_no)
{ {
FCAddressPtrArray *addr_array; FCAddressPtrArray *addr_array;
ConnectionInfo *conn; ConnectionInfo *conn;
addr_array = &server->group_addrs[cm->server_group_index].address_array; addr_array = &server->group_addrs[cm->server_group_index].address_array;
if ((conn=make_connection(cm, addr_array, err_no)) == NULL) { if ((conn=make_connection(cm, addr_array, shared, err_no)) == NULL) {
logError("file: "__FILE__", line: %d, " logError("file: "__FILE__", line: %d, "
"%s server id: %d, address count: %d, get_server_connection fail", "%s server id: %d, address count: %d, get_server_connection fail",
__LINE__, cm->module_name, server->id, addr_array->count); __LINE__, cm->module_name, server->id, addr_array->count);
@ -98,7 +98,7 @@ static ConnectionInfo *get_server_connection(SFConnectionManager *cm,
} }
static ConnectionInfo *get_connection(SFConnectionManager *cm, static ConnectionInfo *get_connection(SFConnectionManager *cm,
const int group_index, int *err_no) const int group_index, const bool shared, int *err_no)
{ {
SFCMServerArray *server_array; SFCMServerArray *server_array;
ConnectionInfo *conn; ConnectionInfo *conn;
@ -110,7 +110,7 @@ static ConnectionInfo *get_connection(SFConnectionManager *cm,
server_hash_code = rand(); server_hash_code = rand();
server_index = server_hash_code % server_array->count; server_index = server_hash_code % server_array->count;
if ((conn=make_connection(cm, server_array->servers[server_index]. if ((conn=make_connection(cm, server_array->servers[server_index].
addr_array, err_no)) != NULL) addr_array, shared, err_no)) != NULL)
{ {
return conn; return conn;
} }
@ -122,7 +122,7 @@ static ConnectionInfo *get_connection(SFConnectionManager *cm,
} }
if ((conn=make_connection(cm, server_array->servers[i]. if ((conn=make_connection(cm, server_array->servers[i].
addr_array, err_no)) != NULL) addr_array, shared, err_no)) != NULL)
{ {
return conn; return conn;
} }
@ -225,7 +225,7 @@ static int remove_from_alives(SFConnectionManager *cm,
} }
static inline ConnectionInfo *make_master_connection(SFConnectionManager *cm, static inline ConnectionInfo *make_master_connection(SFConnectionManager *cm,
SFCMConnGroupEntry *group, int *err_no) SFCMConnGroupEntry *group, const bool shared, int *err_no)
{ {
SFCMServerEntry *master; SFCMServerEntry *master;
ConnectionInfo *conn; ConnectionInfo *conn;
@ -234,7 +234,7 @@ static inline ConnectionInfo *make_master_connection(SFConnectionManager *cm,
master = (SFCMServerEntry *)FC_ATOMIC_GET(group->master); master = (SFCMServerEntry *)FC_ATOMIC_GET(group->master);
if (master != NULL) { if (master != NULL) {
if ((conn=make_connection(cm, master->addr_array, if ((conn=make_connection(cm, master->addr_array,
err_no)) != NULL) shared, err_no)) != NULL)
{ {
alives = (SFCMServerPtrArray *)FC_ATOMIC_GET(group->alives); alives = (SFCMServerPtrArray *)FC_ATOMIC_GET(group->alives);
set_connection_params(conn, master, alives); set_connection_params(conn, master, alives);
@ -254,12 +254,12 @@ static inline ConnectionInfo *make_master_connection(SFConnectionManager *cm,
static inline ConnectionInfo *make_readable_connection(SFConnectionManager *cm, static inline ConnectionInfo *make_readable_connection(SFConnectionManager *cm,
SFCMConnGroupEntry *group, SFCMServerPtrArray *alives, SFCMConnGroupEntry *group, SFCMServerPtrArray *alives,
const int index, int *err_no) const int index, const bool shared, int *err_no)
{ {
ConnectionInfo *conn; ConnectionInfo *conn;
if ((conn=make_connection(cm, alives->servers[index]-> if ((conn=make_connection(cm, alives->servers[index]->
addr_array, err_no)) == NULL) addr_array, shared, err_no)) == NULL)
{ {
remove_from_alives(cm, group, alives, alives->servers[index]); remove_from_alives(cm, group, alives, alives->servers[index]);
} else { } else {
@ -270,7 +270,7 @@ static inline ConnectionInfo *make_readable_connection(SFConnectionManager *cm,
} }
static ConnectionInfo *get_master_connection(SFConnectionManager *cm, static ConnectionInfo *get_master_connection(SFConnectionManager *cm,
const int group_index, int *err_no) const int group_index, const bool shared, int *err_no)
{ {
SFCMConnGroupEntry *group; SFCMConnGroupEntry *group;
ConnectionInfo *conn; ConnectionInfo *conn;
@ -283,7 +283,7 @@ static ConnectionInfo *get_master_connection(SFConnectionManager *cm,
&cm->common_cfg->net_retry_cfg.connect); &cm->common_cfg->net_retry_cfg.connect);
retry_count = 0; retry_count = 0;
while (1) { while (1) {
if ((conn=make_master_connection(cm, group, err_no)) != NULL) { if ((conn=make_master_connection(cm, group, shared, err_no)) != NULL) {
return conn; return conn;
} }
@ -313,7 +313,7 @@ static ConnectionInfo *get_master_connection(SFConnectionManager *cm,
} }
static ConnectionInfo *get_readable_connection(SFConnectionManager *cm, static ConnectionInfo *get_readable_connection(SFConnectionManager *cm,
const int group_index, int *err_no) const int group_index, const bool shared, int *err_no)
{ {
SFCMConnGroupEntry *group; SFCMConnGroupEntry *group;
SFCMServerPtrArray *alives; SFCMServerPtrArray *alives;
@ -326,7 +326,7 @@ static ConnectionInfo *get_readable_connection(SFConnectionManager *cm,
if ((cm->common_cfg->read_rule == sf_data_read_rule_master_only) || if ((cm->common_cfg->read_rule == sf_data_read_rule_master_only) ||
(group->all.count == 1)) (group->all.count == 1))
{ {
return get_master_connection(cm, group_index, err_no); return get_master_connection(cm, group_index, shared, err_no);
} }
sf_init_net_retry_interval_context(&net_retry_ctx, sf_init_net_retry_interval_context(&net_retry_ctx,
@ -338,14 +338,14 @@ static ConnectionInfo *get_readable_connection(SFConnectionManager *cm,
if (alives->count > 0) { if (alives->count > 0) {
index = rand() % alives->count; index = rand() % alives->count;
if ((conn=make_readable_connection(cm, group, alives, if ((conn=make_readable_connection(cm, group, alives,
index, err_no)) != NULL) index, shared, err_no)) != NULL)
{ {
return conn; return conn;
} }
} }
if (cm->common_cfg->read_rule == sf_data_read_rule_slave_first) { if (cm->common_cfg->read_rule == sf_data_read_rule_slave_first) {
if ((conn=make_master_connection(cm, group, err_no)) != NULL) { if ((conn=make_master_connection(cm, group, shared, err_no)) != NULL) {
return conn; return conn;
} }
} }
@ -400,7 +400,7 @@ static void close_connection(SFConnectionManager *cm, ConnectionInfo *conn)
} }
static ConnectionInfo *get_leader_connection(SFConnectionManager *cm, static ConnectionInfo *get_leader_connection(SFConnectionManager *cm,
FCServerInfo *server, int *err_no) FCServerInfo *server, const bool shared, int *err_no)
{ {
ConnectionInfo *conn; ConnectionInfo *conn;
SFClientServerEntry leader; SFClientServerEntry leader;
@ -416,7 +416,7 @@ static ConnectionInfo *get_leader_connection(SFConnectionManager *cm,
while (1) { while (1) {
do { do {
if ((conn=get_server_connection(cm, server, if ((conn=get_server_connection(cm, server,
err_no)) == NULL) shared, err_no)) == NULL)
{ {
connect_fails++; connect_fails++;
break; break;
@ -433,8 +433,9 @@ static ConnectionInfo *get_leader_connection(SFConnectionManager *cm,
return conn; return conn;
} }
release_connection(cm, conn); release_connection(cm, conn);
if ((conn=get_spec_connection(cm, &leader.conn, if ((conn=get_spec_connection(cm, &leader.conn,
err_no)) == NULL) shared, err_no)) == NULL)
{ {
if (cm->server_cfg != NULL) { if (cm->server_cfg != NULL) {
FCServerInfo *ls; FCServerInfo *ls;
@ -445,7 +446,7 @@ static ConnectionInfo *get_leader_connection(SFConnectionManager *cm,
address_array.count > 1) address_array.count > 1)
{ {
if ((conn=get_server_connection(cm, ls, if ((conn=get_server_connection(cm, ls,
err_no)) != NULL) shared, err_no)) != NULL)
{ {
return conn; return conn;
} }
@ -777,6 +778,7 @@ static int do_get_group_servers(SFConnectionManager *cm,
static int get_group_servers_by_active(SFConnectionManager *cm, static int get_group_servers_by_active(SFConnectionManager *cm,
SFCMConnGroupEntry *group) SFCMConnGroupEntry *group)
{ {
const bool shared = true;
SFCMServerPtrArray *alives; SFCMServerPtrArray *alives;
SFCMServerEntry **server; SFCMServerEntry **server;
SFCMServerEntry **end; SFCMServerEntry **end;
@ -792,7 +794,7 @@ static int get_group_servers_by_active(SFConnectionManager *cm,
end = alives->servers + alives->count; end = alives->servers + alives->count;
for (server=alives->servers; server<end; server++) { for (server=alives->servers; server<end; server++) {
if ((conn=make_connection(cm, (*server)->addr_array, if ((conn=make_connection(cm, (*server)->addr_array,
&result)) == NULL) shared, &result)) == NULL)
{ {
continue; continue;
} }
@ -810,6 +812,7 @@ static int get_group_servers_by_active(SFConnectionManager *cm,
static int get_group_servers_by_all(SFConnectionManager *cm, static int get_group_servers_by_all(SFConnectionManager *cm,
SFCMConnGroupEntry *group) SFCMConnGroupEntry *group)
{ {
const bool shared = true;
SFCMServerEntry *server; SFCMServerEntry *server;
SFCMServerEntry *end; SFCMServerEntry *end;
ConnectionInfo *conn; ConnectionInfo *conn;
@ -827,7 +830,7 @@ static int get_group_servers_by_all(SFConnectionManager *cm,
} }
if ((conn=make_connection(cm, server->addr_array, if ((conn=make_connection(cm, server->addr_array,
&result)) == NULL) shared, &result)) == NULL)
{ {
continue; continue;
} }

View File

@ -26,16 +26,17 @@
struct sf_connection_manager; struct sf_connection_manager;
typedef ConnectionInfo *(*sf_get_connection_func)( typedef ConnectionInfo *(*sf_get_connection_func)(
struct sf_connection_manager *cm, struct sf_connection_manager *cm, const int group_index,
const int group_index, int *err_no); const bool shared, int *err_no);
typedef ConnectionInfo *(*sf_get_server_connection_func)( typedef ConnectionInfo *(*sf_get_server_connection_func)(
struct sf_connection_manager *cm, struct sf_connection_manager *cm,
FCServerInfo *server, int *err_no); FCServerInfo *server, const bool shared, int *err_no);
typedef ConnectionInfo *(*sf_get_spec_connection_func)( typedef ConnectionInfo *(*sf_get_spec_connection_func)(
struct sf_connection_manager *cm, struct sf_connection_manager *cm,
const ConnectionInfo *target, int *err_no); const ConnectionInfo *target,
const bool shared, int *err_no);
typedef void (*sf_release_connection_func)( typedef void (*sf_release_connection_func)(
struct sf_connection_manager *cm, ConnectionInfo *conn); struct sf_connection_manager *cm, ConnectionInfo *conn);