Rename schemarouter structures

Renamed structures to remove confusion with readwritesplit structures.
This commit is contained in:
Markus Mäkelä
2017-03-17 14:08:03 +02:00
parent 0e9abda06f
commit 58130b5773
2 changed files with 79 additions and 81 deletions

View File

@ -75,7 +75,7 @@ static void handleError(MXS_ROUTER* instance,
DCB* backend_dcb, DCB* backend_dcb,
mxs_error_action_t action, mxs_error_action_t action,
bool* succp); bool* succp);
static backend_ref_t* get_bref_from_dcb(ROUTER_CLIENT_SES* rses, DCB* dcb); static backend_ref_t* get_bref_from_dcb(SCHEMAROUTER_SESSION* rses, DCB* dcb);
static route_target_t get_shard_route_target(qc_query_type_t qtype, static route_target_t get_shard_route_target(qc_query_type_t qtype,
bool trx_active, bool trx_active,
@ -86,22 +86,22 @@ static uint64_t getCapabilities(MXS_ROUTER* instance);
static bool connect_backend_servers(backend_ref_t* backend_ref, static bool connect_backend_servers(backend_ref_t* backend_ref,
int router_nservers, int router_nservers,
MXS_SESSION* session, MXS_SESSION* session,
ROUTER_INSTANCE* router); SCHEMAROUTER* router);
static bool get_shard_dcb(DCB** dcb, static bool get_shard_dcb(DCB** dcb,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
char* name); char* name);
static bool rses_begin_locked_router_action(ROUTER_CLIENT_SES* rses); static bool rses_begin_locked_router_action(SCHEMAROUTER_SESSION* rses);
static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses); static void rses_end_locked_router_action(SCHEMAROUTER_SESSION* rses);
static void mysql_sescmd_done(mysql_sescmd_t* sescmd); static void mysql_sescmd_done(mysql_sescmd_t* sescmd);
static mysql_sescmd_t* mysql_sescmd_init(rses_property_t* rses_prop, static mysql_sescmd_t* mysql_sescmd_init(rses_property_t* rses_prop,
GWBUF* sescmd_buf, GWBUF* sescmd_buf,
unsigned char packet_type, unsigned char packet_type,
ROUTER_CLIENT_SES* rses); SCHEMAROUTER_SESSION* rses);
static rses_property_t* mysql_sescmd_get_property(mysql_sescmd_t* scmd); static rses_property_t* mysql_sescmd_get_property(mysql_sescmd_t* scmd);
static rses_property_t* rses_property_init(rses_property_type_t prop_type); static rses_property_t* rses_property_init(rses_property_type_t prop_type);
static void rses_property_add(ROUTER_CLIENT_SES* rses, static void rses_property_add(SCHEMAROUTER_SESSION* rses,
rses_property_t* prop); rses_property_t* prop);
static void rses_property_done(rses_property_t* prop); static void rses_property_done(rses_property_t* prop);
static mysql_sescmd_t* rses_property_get_sescmd(rses_property_t* prop); static mysql_sescmd_t* rses_property_get_sescmd(rses_property_t* prop);
@ -116,43 +116,43 @@ static GWBUF* sescmd_cursor_clone_querybuf(sescmd_cursor_t* scur);
static mysql_sescmd_t* sescmd_cursor_get_command(sescmd_cursor_t* scur); static mysql_sescmd_t* sescmd_cursor_get_command(sescmd_cursor_t* scur);
static bool sescmd_cursor_next(sescmd_cursor_t* scur); static bool sescmd_cursor_next(sescmd_cursor_t* scur);
static GWBUF* sescmd_cursor_process_replies(GWBUF* replybuf, backend_ref_t* bref); static GWBUF* sescmd_cursor_process_replies(GWBUF* replybuf, backend_ref_t* bref);
static void tracelog_routed_query(ROUTER_CLIENT_SES* rses, static void tracelog_routed_query(SCHEMAROUTER_SESSION* rses,
char* funcname, char* funcname,
backend_ref_t* bref, backend_ref_t* bref,
GWBUF* buf); GWBUF* buf);
static bool route_session_write(ROUTER_CLIENT_SES* router_client_ses, static bool route_session_write(SCHEMAROUTER_SESSION* router_client_ses,
GWBUF* querybuf, GWBUF* querybuf,
ROUTER_INSTANCE* inst, SCHEMAROUTER* inst,
unsigned char packet_type, unsigned char packet_type,
qc_query_type_t qtype); qc_query_type_t qtype);
static void bref_clear_state(backend_ref_t* bref, bref_state_t state); static void bref_clear_state(backend_ref_t* bref, bref_state_t state);
static void bref_set_state(backend_ref_t* bref, bref_state_t state); static void bref_set_state(backend_ref_t* bref, bref_state_t state);
static sescmd_cursor_t* backend_ref_get_sescmd_cursor (backend_ref_t* bref); static sescmd_cursor_t* backend_ref_get_sescmd_cursor (backend_ref_t* bref);
static int router_handle_state_switch(DCB* dcb, DCB_REASON reason, void* data); static int router_handle_state_switch(DCB* dcb, DCB_REASON reason, void* data);
static bool handle_error_new_connection(ROUTER_INSTANCE* inst, static bool handle_error_new_connection(SCHEMAROUTER* inst,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
DCB* backend_dcb, DCB* backend_dcb,
GWBUF* errmsg); GWBUF* errmsg);
static void handle_error_reply_client(MXS_SESSION* ses, static void handle_error_reply_client(MXS_SESSION* ses,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
DCB* backend_dcb, DCB* backend_dcb,
GWBUF* errmsg); GWBUF* errmsg);
static SPINLOCK instlock; static SPINLOCK instlock;
static ROUTER_INSTANCE* instances; static SCHEMAROUTER* instances;
bool detect_show_shards(GWBUF* query); bool detect_show_shards(GWBUF* query);
int process_show_shards(ROUTER_CLIENT_SES* rses); int process_show_shards(SCHEMAROUTER_SESSION* rses);
static int hashkeyfun(const void* key); static int hashkeyfun(const void* key);
static int hashcmpfun(const void *, const void *); static int hashcmpfun(const void *, const void *);
void write_error_to_client(DCB* dcb, int errnum, const char* mysqlstate, const char* errmsg); void write_error_to_client(DCB* dcb, int errnum, const char* mysqlstate, const char* errmsg);
int inspect_backend_mapping_states(ROUTER_CLIENT_SES *router_cli_ses, int inspect_backend_mapping_states(SCHEMAROUTER_SESSION *router_cli_ses,
backend_ref_t *bref, backend_ref_t *bref,
GWBUF** wbuf); GWBUF** wbuf);
bool handle_default_db(ROUTER_CLIENT_SES *router_cli_ses); bool handle_default_db(SCHEMAROUTER_SESSION *router_cli_ses);
void route_queued_query(ROUTER_CLIENT_SES *router_cli_ses); void route_queued_query(SCHEMAROUTER_SESSION *router_cli_ses);
void synchronize_shard_map(ROUTER_CLIENT_SES *client); void synchronize_shard_map(SCHEMAROUTER_SESSION *client);
static int hashkeyfun(const void* key) static int hashkeyfun(const void* key)
{ {
@ -279,7 +279,7 @@ char* get_lenenc_str(void* data)
* @return 1 if a complete response was received, 0 if a partial response was received * @return 1 if a complete response was received, 0 if a partial response was received
* and -1 if a database was found on more than one server. * and -1 if a database was found on more than one server.
*/ */
showdb_response_t parse_showdb_response(ROUTER_CLIENT_SES* rses, backend_ref_t* bref, GWBUF** buffer) showdb_response_t parse_showdb_response(SCHEMAROUTER_SESSION* rses, backend_ref_t* bref, GWBUF** buffer)
{ {
unsigned char* ptr; unsigned char* ptr;
char* target = bref->bref_backend->server->unique_name; char* target = bref->bref_backend->server->unique_name;
@ -400,7 +400,7 @@ showdb_response_t parse_showdb_response(ROUTER_CLIENT_SES* rses, backend_ref_t*
* @param session Router client session * @param session Router client session
* @return 1 if all writes to backends were succesful and 0 if one or more errors occurred * @return 1 if all writes to backends were succesful and 0 if one or more errors occurred
*/ */
int gen_databaselist(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* session) int gen_databaselist(SCHEMAROUTER* inst, SCHEMAROUTER_SESSION* session)
{ {
DCB* dcb; DCB* dcb;
const char* query = "SHOW DATABASES"; const char* query = "SHOW DATABASES";
@ -451,8 +451,8 @@ int gen_databaselist(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* session)
* @param buffer Query to inspect * @param buffer Query to inspect
* @return Name of the backend or NULL if the query contains no known databases. * @return Name of the backend or NULL if the query contains no known databases.
*/ */
char* get_shard_target_name(ROUTER_INSTANCE* router, char* get_shard_target_name(SCHEMAROUTER* router,
ROUTER_CLIENT_SES* client, SCHEMAROUTER_SESSION* client,
GWBUF* buffer, GWBUF* buffer,
qc_query_type_t qtype) qc_query_type_t qtype)
{ {
@ -571,7 +571,7 @@ char* get_shard_target_name(ROUTER_INSTANCE* router,
* @param shard Shard to check * @param shard Shard to check
* @return True if the backend server is running * @return True if the backend server is running
*/ */
bool check_shard_status(ROUTER_INSTANCE* router, char* shard) bool check_shard_status(SCHEMAROUTER* router, char* shard)
{ {
for (SERVER_REF *ref = router->service->dbref; ref; ref = ref->next) for (SERVER_REF *ref = router->service->dbref; ref; ref = ref->next)
{ {
@ -651,11 +651,11 @@ MXS_MODULE* MXS_CREATE_MODULE()
*/ */
static MXS_ROUTER* createInstance(SERVICE *service, char **options) static MXS_ROUTER* createInstance(SERVICE *service, char **options)
{ {
ROUTER_INSTANCE* router; SCHEMAROUTER* router;
MXS_CONFIG_PARAMETER* conf; MXS_CONFIG_PARAMETER* conf;
MXS_CONFIG_PARAMETER* param; MXS_CONFIG_PARAMETER* param;
if ((router = MXS_CALLOC(1, sizeof(ROUTER_INSTANCE))) == NULL) if ((router = MXS_CALLOC(1, sizeof(SCHEMAROUTER))) == NULL)
{ {
return NULL; return NULL;
} }
@ -824,7 +824,7 @@ static MXS_ROUTER* createInstance(SERVICE *service, char **options)
* @param map Shard map to update * @param map Shard map to update
* @return Current state of the shard map * @return Current state of the shard map
*/ */
enum shard_map_state shard_map_update_state(shard_map_t *self, ROUTER_INSTANCE* router) enum shard_map_state shard_map_update_state(shard_map_t *self, SCHEMAROUTER* router)
{ {
spinlock_acquire(&self->lock); spinlock_acquire(&self->lock);
double tdiff = difftime(time(NULL), self->last_updated); double tdiff = difftime(time(NULL), self->last_updated);
@ -850,8 +850,8 @@ enum shard_map_state shard_map_update_state(shard_map_t *self, ROUTER_INSTANCE*
static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* router_inst, MXS_SESSION* session) static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* router_inst, MXS_SESSION* session)
{ {
backend_ref_t* backend_ref; /*< array of backend references (DCB, BACKEND, cursor) */ backend_ref_t* backend_ref; /*< array of backend references (DCB, BACKEND, cursor) */
ROUTER_CLIENT_SES* client_rses = NULL; SCHEMAROUTER_SESSION* client_rses = NULL;
ROUTER_INSTANCE* router = (ROUTER_INSTANCE *)router_inst; SCHEMAROUTER* router = (SCHEMAROUTER *)router_inst;
bool succp; bool succp;
int router_nservers = 0; /*< # of servers in total */ int router_nservers = 0; /*< # of servers in total */
char db[MYSQL_DATABASE_MAXLEN + 1] = ""; char db[MYSQL_DATABASE_MAXLEN + 1] = "";
@ -878,7 +878,7 @@ static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* router_inst, MXS_SESSION* sess
MXS_INFO("Client'%s' connecting with empty database.", data->user); MXS_INFO("Client'%s' connecting with empty database.", data->user);
} }
client_rses = (ROUTER_CLIENT_SES *)MXS_CALLOC(1, sizeof(ROUTER_CLIENT_SES)); client_rses = (SCHEMAROUTER_SESSION *)MXS_CALLOC(1, sizeof(SCHEMAROUTER_SESSION));
if (client_rses == NULL) if (client_rses == NULL)
{ {
@ -1042,8 +1042,8 @@ static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* router_inst, MXS_SESSION* sess
*/ */
static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_session) static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_session)
{ {
ROUTER_CLIENT_SES* router_cli_ses; SCHEMAROUTER_SESSION* router_cli_ses;
ROUTER_INSTANCE* inst; SCHEMAROUTER* inst;
backend_ref_t* backend_ref; backend_ref_t* backend_ref;
MXS_DEBUG("%lu [schemarouter:closeSession]", pthread_self()); MXS_DEBUG("%lu [schemarouter:closeSession]", pthread_self());
@ -1056,7 +1056,7 @@ static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_sessio
{ {
return; return;
} }
router_cli_ses = (ROUTER_CLIENT_SES *)router_session; router_cli_ses = (SCHEMAROUTER_SESSION *)router_session;
CHK_CLIENT_RSES(router_cli_ses); CHK_CLIENT_RSES(router_cli_ses);
inst = router_cli_ses->router; inst = router_cli_ses->router;
@ -1137,7 +1137,7 @@ static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_sessio
static void freeSession(MXS_ROUTER* router_instance, MXS_ROUTER_SESSION* router_client_session) static void freeSession(MXS_ROUTER* router_instance, MXS_ROUTER_SESSION* router_client_session)
{ {
ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_client_session; SCHEMAROUTER_SESSION* router_cli_ses = (SCHEMAROUTER_SESSION *)router_client_session;
for (int i = 0; i < router_cli_ses->rses_nbackends; i++) for (int i = 0; i < router_cli_ses->rses_nbackends; i++)
{ {
@ -1186,7 +1186,7 @@ static void freeSession(MXS_ROUTER* router_instance, MXS_ROUTER_SESSION* router_
* @return True if proper DCB was found, false otherwise. * @return True if proper DCB was found, false otherwise.
*/ */
static bool get_shard_dcb(DCB** p_dcb, static bool get_shard_dcb(DCB** p_dcb,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
char* name) char* name)
{ {
backend_ref_t* backend_ref; backend_ref_t* backend_ref;
@ -1285,7 +1285,7 @@ void check_drop_tmp_table(MXS_ROUTER* instance,
char** tbl = NULL; char** tbl = NULL;
char *hkey, *dbname; char *hkey, *dbname;
ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_session; SCHEMAROUTER_SESSION* router_cli_ses = (SCHEMAROUTER_SESSION *)router_session;
rses_property_t* rses_prop_tmp; rses_property_t* rses_prop_tmp;
rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES]; rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES];
@ -1341,7 +1341,7 @@ qc_query_type_t is_read_tmp_table(MXS_ROUTER* instance,
char** tbl = NULL; char** tbl = NULL;
char *hkey, *dbname; char *hkey, *dbname;
ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_session; SCHEMAROUTER_SESSION* router_cli_ses = (SCHEMAROUTER_SESSION *)router_session;
qc_query_type_t qtype = type; qc_query_type_t qtype = type;
rses_property_t* rses_prop_tmp; rses_property_t* rses_prop_tmp;
@ -1415,7 +1415,7 @@ void check_create_tmp_table(MXS_ROUTER* instance,
int klen = 0; int klen = 0;
char *hkey, *dbname; char *hkey, *dbname;
ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_session; SCHEMAROUTER_SESSION* router_cli_ses = (SCHEMAROUTER_SESSION *)router_session;
rses_property_t* rses_prop_tmp; rses_property_t* rses_prop_tmp;
HASHTABLE* h; HASHTABLE* h;
@ -1546,7 +1546,7 @@ RESULT_ROW *result_set_cb(struct resultset * rset, void *data)
* @param client Router client session * @param client Router client session
* @return True if the sending of the database list was successful, otherwise false * @return True if the sending of the database list was successful, otherwise false
*/ */
bool send_database_list(ROUTER_INSTANCE* router, ROUTER_CLIENT_SES* client) bool send_database_list(SCHEMAROUTER* router, SCHEMAROUTER_SESSION* client)
{ {
bool rval = false; bool rval = false;
spinlock_acquire(&client->shardmap->lock); spinlock_acquire(&client->shardmap->lock);
@ -1611,17 +1611,15 @@ bool send_database_list(ROUTER_INSTANCE* router, ROUTER_CLIENT_SES* client)
* an error message is sent to the client. * an error message is sent to the client.
* *
*/ */
static int routeQuery(MXS_ROUTER* instance, static int routeQuery(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_session, GWBUF* qbuf)
MXS_ROUTER_SESSION* router_session,
GWBUF* qbuf)
{ {
qc_query_type_t qtype = QUERY_TYPE_UNKNOWN; qc_query_type_t qtype = QUERY_TYPE_UNKNOWN;
mysql_server_cmd_t packet_type; mysql_server_cmd_t packet_type;
uint8_t* packet; uint8_t* packet;
int i, ret = 0; int ret = 0;
DCB* target_dcb = NULL; DCB* target_dcb = NULL;
ROUTER_INSTANCE* inst = (ROUTER_INSTANCE *)instance; SCHEMAROUTER* inst = (SCHEMAROUTER *)instance;
ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_session; SCHEMAROUTER_SESSION* router_cli_ses = (SCHEMAROUTER_SESSION *)router_session;
bool rses_is_closed = false; bool rses_is_closed = false;
bool change_successful = false; bool change_successful = false;
route_target_t route_target = TARGET_UNDEFINED; route_target_t route_target = TARGET_UNDEFINED;
@ -2126,7 +2124,7 @@ retblock:
* *
*/ */
static bool rses_begin_locked_router_action( static bool rses_begin_locked_router_action(
ROUTER_CLIENT_SES* rses) SCHEMAROUTER_SESSION* rses)
{ {
bool succp = false; bool succp = false;
@ -2162,7 +2160,7 @@ return_succp:
* @details (write detailed description here) * @details (write detailed description here)
* *
*/ */
static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses) static void rses_end_locked_router_action(SCHEMAROUTER_SESSION* rses)
{ {
CHK_CLIENT_RSES(rses); CHK_CLIENT_RSES(rses);
spinlock_release(&rses->rses_lock); spinlock_release(&rses->rses_lock);
@ -2178,7 +2176,7 @@ static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses)
*/ */
static void diagnostic(MXS_ROUTER *instance, DCB *dcb) static void diagnostic(MXS_ROUTER *instance, DCB *dcb)
{ {
ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance; SCHEMAROUTER *router = (SCHEMAROUTER *)instance;
int i = 0; int i = 0;
double sescmd_pct = router->stats.n_sescmd != 0 ? double sescmd_pct = router->stats.n_sescmd != 0 ?
@ -2243,12 +2241,12 @@ static void clientReply(MXS_ROUTER* instance,
DCB* backend_dcb) DCB* backend_dcb)
{ {
DCB* client_dcb; DCB* client_dcb;
ROUTER_CLIENT_SES* router_cli_ses; SCHEMAROUTER_SESSION* router_cli_ses;
sescmd_cursor_t* scur = NULL; sescmd_cursor_t* scur = NULL;
backend_ref_t* bref; backend_ref_t* bref;
GWBUF* writebuf = buffer; GWBUF* writebuf = buffer;
router_cli_ses = (ROUTER_CLIENT_SES *) router_session; router_cli_ses = (SCHEMAROUTER_SESSION *) router_session;
CHK_CLIENT_RSES(router_cli_ses); CHK_CLIENT_RSES(router_cli_ses);
/** /**
@ -2497,7 +2495,7 @@ static void clientReply(MXS_ROUTER* instance,
if ((ret = bref->bref_dcb->func.write(bref->bref_dcb, if ((ret = bref->bref_dcb->func.write(bref->bref_dcb,
gwbuf_clone(bref->bref_pending_cmd))) == 1) gwbuf_clone(bref->bref_pending_cmd))) == 1)
{ {
ROUTER_INSTANCE* inst = (ROUTER_INSTANCE *) instance; SCHEMAROUTER* inst = (SCHEMAROUTER *) instance;
atomic_add(&inst->stats.n_queries, 1); atomic_add(&inst->stats.n_queries, 1);
/** /**
* Add one query response waiter to backend reference * Add one query response waiter to backend reference
@ -2675,7 +2673,7 @@ static void bref_set_state(backend_ref_t* bref, bref_state_t state)
static bool connect_backend_servers(backend_ref_t* backend_ref, static bool connect_backend_servers(backend_ref_t* backend_ref,
int router_nservers, int router_nservers,
MXS_SESSION* session, MXS_SESSION* session,
ROUTER_INSTANCE* router) SCHEMAROUTER* router)
{ {
bool succp = true; bool succp = true;
/* /*
@ -2888,7 +2886,7 @@ static void rses_property_done(rses_property_t* prop)
* *
* Router client session must be locked. * Router client session must be locked.
*/ */
static void rses_property_add(ROUTER_CLIENT_SES* rses, static void rses_property_add(SCHEMAROUTER_SESSION* rses,
rses_property_t* prop) rses_property_t* prop)
{ {
rses_property_t* p; rses_property_t* p;
@ -2941,7 +2939,7 @@ static mysql_sescmd_t* rses_property_get_sescmd(rses_property_t* prop)
static mysql_sescmd_t* mysql_sescmd_init(rses_property_t* rses_prop, static mysql_sescmd_t* mysql_sescmd_init(rses_property_t* rses_prop,
GWBUF* sescmd_buf, GWBUF* sescmd_buf,
unsigned char packet_type, unsigned char packet_type,
ROUTER_CLIENT_SES* rses) SCHEMAROUTER_SESSION* rses)
{ {
mysql_sescmd_t* sescmd; mysql_sescmd_t* sescmd;
@ -3123,7 +3121,7 @@ static bool sescmd_cursor_history_empty(sescmd_cursor_t* scur)
static void sescmd_cursor_reset(sescmd_cursor_t* scur) static void sescmd_cursor_reset(sescmd_cursor_t* scur)
{ {
ROUTER_CLIENT_SES* rses; SCHEMAROUTER_SESSION* rses;
CHK_SESCMD_CUR(scur); CHK_SESCMD_CUR(scur);
CHK_CLIENT_RSES(scur->scmd_cur_rses); CHK_CLIENT_RSES(scur->scmd_cur_rses);
rses = scur->scmd_cur_rses; rses = scur->scmd_cur_rses;
@ -3334,9 +3332,9 @@ static uint64_t getCapabilities(MXS_ROUTER* instance)
* Return true if succeed, false is returned if router session was closed or * Return true if succeed, false is returned if router session was closed or
* if execute_sescmd_in_backend failed. * if execute_sescmd_in_backend failed.
*/ */
static bool route_session_write(ROUTER_CLIENT_SES* router_cli_ses, static bool route_session_write(SCHEMAROUTER_SESSION* router_cli_ses,
GWBUF* querybuf, GWBUF* querybuf,
ROUTER_INSTANCE* inst, SCHEMAROUTER* inst,
unsigned char packet_type, unsigned char packet_type,
qc_query_type_t qtype) qc_query_type_t qtype)
{ {
@ -3561,8 +3559,8 @@ static void handleError(MXS_ROUTER* instance,
{ {
ss_dassert(problem_dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER); ss_dassert(problem_dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER);
MXS_SESSION* session; MXS_SESSION* session;
ROUTER_INSTANCE* inst = (ROUTER_INSTANCE *)instance; SCHEMAROUTER* inst = (SCHEMAROUTER *)instance;
ROUTER_CLIENT_SES* rses = (ROUTER_CLIENT_SES *)router_session; SCHEMAROUTER_SESSION* rses = (SCHEMAROUTER_SESSION *)router_session;
CHK_DCB(problem_dcb); CHK_DCB(problem_dcb);
@ -3618,7 +3616,7 @@ static void handleError(MXS_ROUTER* instance,
static void handle_error_reply_client(MXS_SESSION* ses, static void handle_error_reply_client(MXS_SESSION* ses,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
DCB* backend_dcb, DCB* backend_dcb,
GWBUF* errmsg) GWBUF* errmsg)
{ {
@ -3652,7 +3650,7 @@ static void handle_error_reply_client(MXS_SESSION* ses,
* @return True if session has a single backend server in use that is running. * @return True if session has a single backend server in use that is running.
* False if no backends are in use or running. * False if no backends are in use or running.
*/ */
bool have_servers(ROUTER_CLIENT_SES* rses) bool have_servers(SCHEMAROUTER_SESSION* rses)
{ {
int i; int i;
@ -3681,8 +3679,8 @@ bool have_servers(ROUTER_CLIENT_SES* rses)
* *
* @return true if there are enough backend connections to continue, false if not * @return true if there are enough backend connections to continue, false if not
*/ */
static bool handle_error_new_connection(ROUTER_INSTANCE* inst, static bool handle_error_new_connection(SCHEMAROUTER* inst,
ROUTER_CLIENT_SES* rses, SCHEMAROUTER_SESSION* rses,
DCB* backend_dcb, DCB* backend_dcb,
GWBUF* errmsg) GWBUF* errmsg)
{ {
@ -3762,7 +3760,7 @@ return_succp:
* *
* @return backend reference pointer if succeed or NULL * @return backend reference pointer if succeed or NULL
*/ */
static backend_ref_t* get_bref_from_dcb(ROUTER_CLIENT_SES* rses, static backend_ref_t* get_bref_from_dcb(SCHEMAROUTER_SESSION* rses,
DCB* dcb) DCB* dcb)
{ {
backend_ref_t* bref; backend_ref_t* bref;
@ -3844,7 +3842,7 @@ bool detect_show_shards(GWBUF* query)
struct shard_list struct shard_list
{ {
HASHITERATOR* iter; HASHITERATOR* iter;
ROUTER_CLIENT_SES* rses; SCHEMAROUTER_SESSION* rses;
RESULTSET* rset; RESULTSET* rset;
}; };
@ -3874,7 +3872,7 @@ RESULT_ROW* shard_list_cb(struct resultset* rset, void* data)
* @param rses Router client session * @param rses Router client session
* @return 0 on success, -1 on error * @return 0 on success, -1 on error
*/ */
int process_show_shards(ROUTER_CLIENT_SES* rses) int process_show_shards(SCHEMAROUTER_SESSION* rses)
{ {
int rval = 0; int rval = 0;
@ -3940,7 +3938,7 @@ void write_error_to_client(DCB* dcb, int errnum, const char* mysqlstate, const c
* @param router_cli_ses * @param router_cli_ses
* @return * @return
*/ */
bool handle_default_db(ROUTER_CLIENT_SES *router_cli_ses) bool handle_default_db(SCHEMAROUTER_SESSION *router_cli_ses)
{ {
bool rval = false; bool rval = false;
char* target = NULL; char* target = NULL;
@ -4009,7 +4007,7 @@ bool handle_default_db(ROUTER_CLIENT_SES *router_cli_ses)
return rval; return rval;
} }
void route_queued_query(ROUTER_CLIENT_SES *router_cli_ses) void route_queued_query(SCHEMAROUTER_SESSION *router_cli_ses)
{ {
GWBUF* tmp = router_cli_ses->queue; GWBUF* tmp = router_cli_ses->queue;
router_cli_ses->queue = router_cli_ses->queue->next; router_cli_ses->queue = router_cli_ses->queue->next;
@ -4029,7 +4027,7 @@ void route_queued_query(ROUTER_CLIENT_SES *router_cli_ses)
* @param router_cli_ses Router client session * @param router_cli_ses Router client session
* @return 1 if mapping is done, 0 if it is still ongoing and -1 on error * @return 1 if mapping is done, 0 if it is still ongoing and -1 on error
*/ */
int inspect_backend_mapping_states(ROUTER_CLIENT_SES *router_cli_ses, int inspect_backend_mapping_states(SCHEMAROUTER_SESSION *router_cli_ses,
backend_ref_t *bref, backend_ref_t *bref,
GWBUF** wbuf) GWBUF** wbuf)
{ {
@ -4151,7 +4149,7 @@ void replace_shard_map(shard_map_t **target, shard_map_t **source)
* is discarded and the router's shard map is used. * is discarded and the router's shard map is used.
* @param client Router session * @param client Router session
*/ */
void synchronize_shard_map(ROUTER_CLIENT_SES *client) void synchronize_shard_map(SCHEMAROUTER_SESSION *client)
{ {
spinlock_acquire(&client->router->lock); spinlock_acquire(&client->router->lock);

View File

@ -110,7 +110,7 @@ typedef enum backend_type_t
BE_COUNT BE_COUNT
} backend_type_t; } backend_type_t;
struct router_instance; struct schemarouter_instance;
/** /**
* Route target types * Route target types
@ -132,7 +132,7 @@ typedef enum
#define TARGET_IS_ANY(t) (t & TARGET_ANY) #define TARGET_IS_ANY(t) (t & TARGET_ANY)
typedef struct rses_property_st rses_property_t; typedef struct rses_property_st rses_property_t;
typedef struct router_client_session ROUTER_CLIENT_SES; typedef struct schemarouter_session SCHEMAROUTER_SESSION;
/** /**
* Router session properties * Router session properties
@ -189,7 +189,7 @@ struct rses_property_st
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t rses_prop_chk_top; skygw_chk_t rses_prop_chk_top;
#endif #endif
ROUTER_CLIENT_SES* rses_prop_rsession; /*< Parent router session */ SCHEMAROUTER_SESSION* rses_prop_rsession; /*< Parent router session */
int rses_prop_refcount; /*< Reference count*/ int rses_prop_refcount; /*< Reference count*/
rses_property_type_t rses_prop_type; /*< Property type */ rses_property_type_t rses_prop_type; /*< Property type */
union rses_prop_data union rses_prop_data
@ -208,7 +208,7 @@ typedef struct sescmd_cursor_st
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t scmd_cur_chk_top; skygw_chk_t scmd_cur_chk_top;
#endif #endif
ROUTER_CLIENT_SES* scmd_cur_rses; /*< pointer to owning router session */ SCHEMAROUTER_SESSION* scmd_cur_rses; /*< pointer to owning router session */
rses_property_t** scmd_cur_ptr_property; /*< address of pointer to owner property */ rses_property_t** scmd_cur_ptr_property; /*< address of pointer to owner property */
mysql_sescmd_t* scmd_cur_cmd; /*< pointer to current session command */ mysql_sescmd_t* scmd_cur_cmd; /*< pointer to current session command */
bool scmd_cur_active; /*< true if command is being executed */ bool scmd_cur_active; /*< true if command is being executed */
@ -313,7 +313,7 @@ typedef struct
/** /**
* The client session structure used within this router. * The client session structure used within this router.
*/ */
struct router_client_session struct schemarouter_session
{ {
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t rses_chk_top; skygw_chk_t rses_chk_top;
@ -331,8 +331,8 @@ struct router_client_session
int rses_nbackends; /*< Number of backends */ int rses_nbackends; /*< Number of backends */
bool rses_autocommit_enabled; /*< Is autocommit enabled */ bool rses_autocommit_enabled; /*< Is autocommit enabled */
bool rses_transaction_active; /*< Is a transaction active */ bool rses_transaction_active; /*< Is a transaction active */
struct router_instance *router; /*< The router instance */ struct schemarouter_instance *router; /*< The router instance */
struct router_client_session* next; /*< List of router sessions */ struct schemarouter_session* next; /*< List of router sessions */
shard_map_t* shard_map_t*
shardmap; /*< Database hash containing names of the databases mapped to the servers that contain them */ shardmap; /*< Database hash containing names of the databases mapped to the servers that contain them */
char connect_db[MYSQL_DATABASE_MAXLEN + 1]; /*< Database the user was trying to connect to */ char connect_db[MYSQL_DATABASE_MAXLEN + 1]; /*< Database the user was trying to connect to */
@ -353,18 +353,18 @@ struct router_client_session
/** /**
* The per instance data for the router. * The per instance data for the router.
*/ */
typedef struct router_instance typedef struct schemarouter_instance
{ {
HASHTABLE* shard_maps; /*< Shard maps hashed by user name */ HASHTABLE* shard_maps; /*< Shard maps hashed by user name */
SERVICE* service; /*< Pointer to service */ SERVICE* service; /*< Pointer to service */
ROUTER_CLIENT_SES* connections; /*< List of client connections */ SCHEMAROUTER_SESSION* connections; /*< List of client connections */
SPINLOCK lock; /*< Lock for the instance data */ SPINLOCK lock; /*< Lock for the instance data */
schemarouter_config_t schemarouter_config; /*< expanded config info from SERVICE */ schemarouter_config_t schemarouter_config; /*< expanded config info from SERVICE */
int schemarouter_version;/*< version number for router's config */ int schemarouter_version;/*< version number for router's config */
unsigned int bitmask; /*< Bitmask to apply to server->status */ unsigned int bitmask; /*< Bitmask to apply to server->status */
unsigned int bitvalue; /*< Required value of server->status */ unsigned int bitvalue; /*< Required value of server->status */
ROUTER_STATS stats; /*< Statistics for this router */ ROUTER_STATS stats; /*< Statistics for this router */
struct router_instance* next; /*< Next router on the list */ struct schemarouter_instance* next; /*< Next router on the list */
bool available_slaves; /*< The router has some slaves available */ bool available_slaves; /*< The router has some slaves available */
HASHTABLE* ignored_dbs; /*< List of databases to ignore when the HASHTABLE* ignored_dbs; /*< List of databases to ignore when the
* database mapping finds multiple servers * database mapping finds multiple servers
@ -374,7 +374,7 @@ typedef struct router_instance
* if they are found on more than one server. */ * if they are found on more than one server. */
pcre2_match_data* ignore_match_data; pcre2_match_data* ignore_match_data;
} ROUTER_INSTANCE; } SCHEMAROUTER;
#define BACKEND_TYPE(b) (SERVER_IS_MASTER((b)->backend_server) ? BE_MASTER : \ #define BACKEND_TYPE(b) (SERVER_IS_MASTER((b)->backend_server) ? BE_MASTER : \
(SERVER_IS_SLAVE((b)->backend_server) ? BE_SLAVE : BE_UNDEFINED)); (SERVER_IS_SLAVE((b)->backend_server) ? BE_SLAVE : BE_UNDEFINED));