ConnectionCallbacks struct changed

support_rdma
YuQing 2023-09-12 07:53:34 +08:00
parent d24023aee7
commit c9687df03a
2 changed files with 60 additions and 21 deletions

View File

@ -23,10 +23,9 @@
#include "sched_thread.h"
#include "connection_pool.h"
ConnectionCallbacks g_connection_callbacks[2] = {
{NULL, NULL, NULL, conn_pool_connect_server_ex1,
conn_pool_disconnect_server, NULL},
{NULL, NULL, NULL, NULL, NULL, NULL}
ConnectionCallbacks g_connection_callbacks = {
{{conn_pool_connect_server_ex1, conn_pool_disconnect_server},
{NULL, NULL}}, {NULL}
};
static int node_init_for_socket(ConnectionNode *node,
@ -119,7 +118,7 @@ static int coon_pool_close_connections(const int index,
deleted = node;
node = node->next;
g_connection_callbacks[deleted->conn->comm_type].
G_COMMON_CONNECTION_CALLBACKS[deleted->conn->comm_type].
close_connection(deleted->conn);
fast_mblock_free_object(&cp->node_allocator, deleted);
}
@ -307,7 +306,7 @@ ConnectionInfo *conn_pool_get_connection_ex(ConnectionPool *cp,
node->conn->socket_domain = cp->socket_domain;
node->conn->sock = -1;
node->conn->validate_flag = false;
*err_no = g_connection_callbacks[conn->comm_type].
*err_no = G_COMMON_CONNECTION_CALLBACKS[conn->comm_type].
make_connection(node->conn, service_name,
cp->connect_timeout, NULL, true);
if (*err_no == 0 && cp->connect_done_callback.func != NULL)
@ -317,7 +316,7 @@ ConnectionInfo *conn_pool_get_connection_ex(ConnectionPool *cp,
}
if (*err_no != 0)
{
g_connection_callbacks[conn->comm_type].
G_COMMON_CONNECTION_CALLBACKS[conn->comm_type].
close_connection(node->conn);
pthread_mutex_lock(&cm->lock);
cm->total_count--; //rollback
@ -383,7 +382,8 @@ ConnectionInfo *conn_pool_get_connection_ex(ConnectionPool *cp,
(current_time - node->atime), cp->max_idle_time,
cm->total_count, cm->free_count);
g_connection_callbacks[ci->comm_type].close_connection(ci);
G_COMMON_CONNECTION_CALLBACKS[ci->comm_type].
close_connection(ci);
fast_mblock_free_object(&cp->node_allocator, node);
continue;
}
@ -441,7 +441,8 @@ int conn_pool_close_connection_ex(ConnectionPool *cp, ConnectionInfo *conn,
__LINE__, conn->ip_addr, conn->port,
conn->sock, cm->total_count, cm->free_count);
g_connection_callbacks[conn->comm_type].close_connection(conn);
G_COMMON_CONNECTION_CALLBACKS[conn->comm_type].
close_connection(conn);
fast_mblock_free_object(&cp->node_allocator, node);
node = cm->head;
@ -571,8 +572,8 @@ int conn_pool_load_server_info(IniContext *pIniContext, const char *filename,
#define LOAD_API(callbacks, fname) \
do { \
callbacks->fname = dlsym(dlhandle, API_PREFIX_NAME#fname); \
if (callbacks->fname == NULL) { \
callbacks.fname = dlsym(dlhandle, API_PREFIX_NAME#fname); \
if (callbacks.fname == NULL) { \
logError("file: "__FILE__", line: %d, " \
"dlsym api %s fail, error info: %s", \
__LINE__, API_PREFIX_NAME#fname, dlerror()); \
@ -583,7 +584,6 @@ int conn_pool_load_server_info(IniContext *pIniContext, const char *filename,
int conn_pool_global_init_for_rdma()
{
const char *library = "libfastrdma.so";
ConnectionCallbacks *callbacks;
void *dlhandle;
dlhandle = dlopen(library, RTLD_LAZY);
@ -594,13 +594,22 @@ int conn_pool_global_init_for_rdma()
return EFAULT;
}
callbacks = g_connection_callbacks + fc_comm_type_rdma;
LOAD_API(callbacks, alloc_pd);
LOAD_API(callbacks, get_connection_size);
LOAD_API(callbacks, init_connection);
LOAD_API(callbacks, make_connection);
LOAD_API(callbacks, close_connection);
LOAD_API(callbacks, destroy_connection);
LOAD_API(G_COMMON_CONNECTION_CALLBACKS[fc_comm_type_rdma],
make_connection);
LOAD_API(G_COMMON_CONNECTION_CALLBACKS[fc_comm_type_rdma],
close_connection);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, alloc_pd);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, get_connection_size);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, init_connection);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, make_connection);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, close_connection);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, destroy_connection);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, get_buffer);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, request_by_buf1);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, request_by_buf2);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, request_by_iov);
LOAD_API(G_RDMA_CONNECTION_CALLBACKS, request_by_mix);
return 0;
}

View File

@ -69,6 +69,24 @@ typedef int (*fc_make_connection_callback)(ConnectionInfo *conn,
typedef void (*fc_close_connection_callback)(ConnectionInfo *conn);
typedef void (*fc_destroy_connection_callback)(ConnectionInfo *conn);
typedef BufferInfo *(*fc_rdma_get_buffer_callback)(ConnectionInfo *conn);
typedef int (*fc_rdma_request_by_buf1_callback)(ConnectionInfo *conn,
const char *data, const int length, const int timeout_ms);
typedef int (*fc_rdma_request_by_buf2_callback)(ConnectionInfo *conn,
const char *data1, const int length1, const char *data2,
const int length2, const int timeout_ms);
typedef int (*fc_rdma_request_by_iov_callback)(ConnectionInfo *conn,
const struct iovec *iov, const int iovcnt,
const int timeout_ms);
typedef int (*fc_rdma_request_by_mix_callback)(ConnectionInfo *conn,
const char *data, const int length, const struct iovec *iov,
const int iovcnt, const int timeout_ms);
typedef struct {
fc_make_connection_callback make_connection;
fc_close_connection_callback close_connection;
} CommonConnectionCallbacks;
typedef struct {
fc_alloc_pd_callback alloc_pd;
fc_get_connection_size_callback get_connection_size;
@ -76,6 +94,17 @@ typedef struct {
fc_make_connection_callback make_connection;
fc_close_connection_callback close_connection;
fc_destroy_connection_callback destroy_connection;
fc_rdma_get_buffer_callback get_buffer;
fc_rdma_request_by_buf1_callback request_by_buf1;
fc_rdma_request_by_buf2_callback request_by_buf2;
fc_rdma_request_by_iov_callback request_by_iov;
fc_rdma_request_by_mix_callback request_by_mix;
} RDMAConnectionCallbacks;
typedef struct {
CommonConnectionCallbacks common_callbacks[2];
RDMAConnectionCallbacks rdma_callbacks;
} ConnectionCallbacks;
typedef struct {
@ -131,11 +160,12 @@ typedef struct tagConnectionPool {
ConnectionExtraParams extra_params;
} ConnectionPool;
extern ConnectionCallbacks g_connection_callbacks[2];
extern ConnectionCallbacks g_connection_callbacks;
int conn_pool_global_init_for_rdma();
#define G_RDMA_CONNECTION_CALLBACKS g_connection_callbacks[fc_comm_type_rdma]
#define G_COMMON_CONNECTION_CALLBACKS g_connection_callbacks.common_callbacks
#define G_RDMA_CONNECTION_CALLBACKS g_connection_callbacks.rdma_callbacks
/**
* init ex function