Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 43 additions & 3 deletions cdb2api/cdb2api.c
Original file line number Diff line number Diff line change
Expand Up @@ -3213,7 +3213,22 @@ static int cdb2_socket_pool_get_ll(cdb2_hndl_tp *hndl, const char *typestr, int
* success. Don't support local cache since it may not return fd */
int cdb2_socket_pool_get_fd(cdb2_hndl_tp *hndl, const char *typestr, int dbnum, int *port)
{
int fd = cdb2_socket_pool_get_ll(hndl, typestr, dbnum, port);
void *callbackrc;
int overwrite_rc = 0;
cdb2_event *e = NULL;
int fd = -1;

while ((e = cdb2_next_callback(hndl, CDB2_BEFORE_SOCKPOOL, e)) != NULL) {
callbackrc = cdb2_invoke_callback(hndl, e, 0);
PROCESS_EVENT_CTRL_BEFORE(hndl, e, overwrite_rc, callbackrc, overwrite_rc);
}
if (!overwrite_rc)
fd = cdb2_socket_pool_get_ll(hndl, typestr, dbnum, port);

while ((e = cdb2_next_callback(hndl, CDB2_AFTER_SOCKPOOL, e)) != NULL) {
callbackrc = cdb2_invoke_callback(hndl, e, 1, CDB2_RETURN_VALUE, (intptr_t)fd);
PROCESS_EVENT_CTRL_AFTER(hndl, e, overwrite_rc, callbackrc);
}
LOG_CALL("%s(%s,%d,%p): fd=%d\n", __func__, typestr, dbnum, port, fd);
return fd;
}
Expand All @@ -3236,8 +3251,8 @@ static int typestr_type_is_default(const char *typestr)
/* Get the sbuf of a socket matching the given type string from
* the pool. Returns NULL if none is available or the sbuf on
* success. */
static COMDB2BUF *cdb2_socket_pool_get(cdb2_hndl_tp *hndl, const char *typestr, int dbnum, int *port,
int *was_from_local_cache)
static COMDB2BUF *cdb2_socket_pool_get_int(cdb2_hndl_tp *hndl, const char *typestr, int dbnum, int *port,
int *was_from_local_cache)
{
COMDB2BUF *sb = NULL;

Expand Down Expand Up @@ -3295,6 +3310,31 @@ static COMDB2BUF *cdb2_socket_pool_get(cdb2_hndl_tp *hndl, const char *typestr,
return sb;
}

static COMDB2BUF *cdb2_socket_pool_get(cdb2_hndl_tp *hndl, const char *typestr, int dbnum, int *port,
int *was_from_local_cache)
{
void *callbackrc;
int overwrite_rc = 0;
cdb2_event *e = NULL;
COMDB2BUF *sb = NULL;

while ((e = cdb2_next_callback(hndl, CDB2_BEFORE_SOCKPOOL, e)) != NULL) {
callbackrc = cdb2_invoke_callback(hndl, e, 0);
PROCESS_EVENT_CTRL_BEFORE(hndl, e, overwrite_rc, callbackrc, overwrite_rc);
}
if (overwrite_rc)
goto after_callback;

sb = cdb2_socket_pool_get_int(hndl, typestr, dbnum, port, was_from_local_cache);

after_callback:
while ((e = cdb2_next_callback(hndl, CDB2_AFTER_SOCKPOOL, e)) != NULL) {
callbackrc = cdb2_invoke_callback(hndl, e, 1, CDB2_RETURN_VALUE, (intptr_t)sb);
PROCESS_EVENT_CTRL_AFTER(hndl, e, overwrite_rc, callbackrc);
}
return sb;
}

#ifndef CDB2API_SERVER
static
#endif
Expand Down
10 changes: 6 additions & 4 deletions cdb2api/cdb2api.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,14 +276,16 @@ typedef enum cdb2_event_type {
CDB2_BEFORE_TCP_CONNECT = 1 << 10,
CDB2_AFTER_TCP_CONNECT = 1 << 11,
CDB2_AT_RECEIVE_HEARTBEAT = 1 << 12,
CDB2_BEFORE_SOCKPOOL = 1 << 13,
CDB2_AFTER_SOCKPOOL = 1 << 14,

/* Logical operation events.
A logicial operation event typically
consists of multiple network events. */
CDB2_AT_ENTER_RUN_STATEMENT = 1 << 13,
CDB2_AT_EXIT_RUN_STATEMENT = 1 << 14,
CDB2_AT_ENTER_NEXT_RECORD = 1 << 15,
CDB2_AT_EXIT_NEXT_RECORD = 1 << 16,
CDB2_AT_ENTER_RUN_STATEMENT = 1 << 20,
CDB2_AT_EXIT_RUN_STATEMENT = 1 << 21,
CDB2_AT_ENTER_NEXT_RECORD = 1 << 22,
CDB2_AT_EXIT_NEXT_RECORD = 1 << 23,

/* Lifecycle events */
CDB2_AFTER_HNDL_ALLOC = 1 << 26,
Expand Down
Loading