MXS-1209: added blr_register_send_command()
MXS-1209: added blr_register_send_command()
This commit is contained in:
@ -134,16 +134,14 @@ static void blr_register_getsemisync(ROUTER_INSTANCE *router, GWBUF *buf);
|
|||||||
static bool blr_register_setsemisync(ROUTER_INSTANCE *router, GWBUF *buf);
|
static bool blr_register_setsemisync(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_mxw_handlelowercase(ROUTER_INSTANCE *router,
|
static void blr_register_mxw_handlelowercase(ROUTER_INSTANCE *router,
|
||||||
GWBUF *buf);
|
GWBUF *buf);
|
||||||
static void blr_register_mxw_servervars(ROUTER_INSTANCE *router, GWBUF *buf);
|
|
||||||
static void blr_register_set_latin1(ROUTER_INSTANCE *router, GWBUF *buf);
|
|
||||||
static void blr_register_cache_map(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_cache_map(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_cache_utf8(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_cache_utf8(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_cache_utf8(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_cache_utf8(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_cache_slaveuuid(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_cache_slaveuuid(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_cache_mariadb10(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_cache_mariadb10(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_send_select1(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_send_command(ROUTER_INSTANCE *router,
|
||||||
static void blr_register_mxw_sqlmode(ROUTER_INSTANCE *router, GWBUF *buf);
|
const char *command,
|
||||||
static void blr_register_mxw_charset(ROUTER_INSTANCE *router, GWBUF *buf);
|
unsigned int state);
|
||||||
|
|
||||||
static void worker_cb_start_master(int worker_id, void* data);
|
static void worker_cb_start_master(int worker_id, void* data);
|
||||||
static void blr_start_master_in_main(void* data);
|
static void blr_start_master_in_main(void* data);
|
||||||
@ -572,7 +570,9 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
case BLRM_MARIADB10:
|
case BLRM_MARIADB10:
|
||||||
blr_register_cache_mariadb10(router, buf);
|
blr_register_cache_mariadb10(router, buf);
|
||||||
// Skip SERVER_UUID fetch and SET slave UUID
|
// Skip SERVER_UUID fetch and SET slave UUID
|
||||||
blr_register_set_latin1(router, buf);
|
blr_register_send_command(router,
|
||||||
|
"SET NAMES latin1",
|
||||||
|
BLRM_LATIN1);
|
||||||
break;
|
break;
|
||||||
case BLRM_GTIDMODE: // MySQL 5.6/7 only
|
case BLRM_GTIDMODE: // MySQL 5.6/7 only
|
||||||
blr_register_serveruuid(router, buf);
|
blr_register_serveruuid(router, buf);
|
||||||
@ -582,29 +582,37 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
break;
|
break;
|
||||||
case BLRM_SUUID: // MySQL 5.6/7 only
|
case BLRM_SUUID: // MySQL 5.6/7 only
|
||||||
blr_register_cache_slaveuuid(router, buf);
|
blr_register_cache_slaveuuid(router, buf);
|
||||||
blr_register_set_latin1(router, buf);
|
blr_register_send_command(router,
|
||||||
|
"SET NAMES latin1",
|
||||||
|
BLRM_LATIN1);
|
||||||
break;
|
break;
|
||||||
case BLRM_LATIN1:
|
case BLRM_LATIN1:
|
||||||
blr_register_utf8(router, buf);
|
blr_register_utf8(router, buf);
|
||||||
break;
|
break;
|
||||||
case BLRM_UTF8:
|
case BLRM_UTF8:
|
||||||
blr_register_cache_utf8(router, buf);
|
blr_register_cache_utf8(router, buf);
|
||||||
if (router->maxwell_compat)
|
|
||||||
{
|
{
|
||||||
blr_register_mxw_charset(router, buf);
|
unsigned int state = router->maxwell_compat ?
|
||||||
}
|
BLRM_RESULTS_CHARSET :
|
||||||
else
|
BLRM_SELECT1;
|
||||||
{
|
const char *command = router->maxwell_compat ?
|
||||||
blr_register_send_select1(router, buf);
|
"SET character_set_results = NULL" :
|
||||||
}
|
"SELECT 1";
|
||||||
|
|
||||||
|
blr_register_send_command(router, command, state);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case BLRM_RESULTS_CHARSET:
|
case BLRM_RESULTS_CHARSET:
|
||||||
gwbuf_free(buf); // Discard server reply, don't save it
|
gwbuf_free(buf); // Discard server reply, don't save it
|
||||||
blr_register_mxw_sqlmode(router, buf);
|
blr_register_send_command(router,
|
||||||
|
MYSQL_CONNECTOR_SQL_MODE_QUERY,
|
||||||
|
BLRM_SQL_MODE);
|
||||||
break;
|
break;
|
||||||
case BLRM_SQL_MODE:
|
case BLRM_SQL_MODE:
|
||||||
gwbuf_free(buf); // Discard server reply, don't save it
|
gwbuf_free(buf); // Discard server reply, don't save it
|
||||||
blr_register_send_select1(router, buf);
|
blr_register_send_command(router,
|
||||||
|
"SELECT 1",
|
||||||
|
BLRM_SELECT1);
|
||||||
break;
|
break;
|
||||||
case BLRM_SELECT1:
|
case BLRM_SELECT1:
|
||||||
blr_register_selectversion(router, buf);
|
blr_register_selectversion(router, buf);
|
||||||
@ -622,7 +630,9 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
blr_register_cache_map(router, buf);
|
blr_register_cache_map(router, buf);
|
||||||
if (router->maxwell_compat)
|
if (router->maxwell_compat)
|
||||||
{
|
{
|
||||||
blr_register_mxw_servervars(router, buf);
|
blr_register_send_command(router,
|
||||||
|
MYSQL_CONNECTOR_SERVER_VARS_QUERY,
|
||||||
|
BLRM_SERVER_VARS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3126,15 +3136,6 @@ static void blr_register_mxw_handlelowercase(ROUTER_INSTANCE *router,
|
|||||||
router->master_state = BLRM_REGISTER_READY;
|
router->master_state = BLRM_REGISTER_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Slave Protocol registration to Master:
|
|
||||||
*
|
|
||||||
* Saves previous reply from Master (Max Allowed Packet)
|
|
||||||
*
|
|
||||||
* @param router Current router instance
|
|
||||||
* @param buf GWBUF with server reply to previous
|
|
||||||
* registration command
|
|
||||||
*/
|
|
||||||
static void blr_register_cache_map(ROUTER_INSTANCE *router,
|
static void blr_register_cache_map(ROUTER_INSTANCE *router,
|
||||||
GWBUF *buf)
|
GWBUF *buf)
|
||||||
{
|
{
|
||||||
@ -3147,23 +3148,6 @@ static void blr_register_cache_map(ROUTER_INSTANCE *router,
|
|||||||
blr_cache_response(router, "map", buf);
|
blr_cache_response(router, "map", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Slave Protocol registration to Master (MaxWell compatibility):
|
|
||||||
*
|
|
||||||
* Sends MYSQL_CONNECTOR_SERVER_VARS_QUERY to Master
|
|
||||||
*
|
|
||||||
* @param router Current router instance
|
|
||||||
* @param buf GWBUF to fill with new request
|
|
||||||
*/
|
|
||||||
static void blr_register_mxw_servervars(ROUTER_INSTANCE *router, GWBUF *buf)
|
|
||||||
{
|
|
||||||
// New registration message
|
|
||||||
buf = blr_make_query(router->master, MYSQL_CONNECTOR_SERVER_VARS_QUERY);
|
|
||||||
// Set the new state
|
|
||||||
router->master_state = BLRM_SERVER_VARS;
|
|
||||||
router->master->func.write(router->master, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Slave Protocol registration to Master:
|
* Slave Protocol registration to Master:
|
||||||
*
|
*
|
||||||
@ -3184,22 +3168,6 @@ static void blr_register_cache_utf8(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
blr_cache_response(router, "utf8", buf);
|
blr_cache_response(router, "utf8", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Slave Protocol registration to Master:
|
|
||||||
*
|
|
||||||
* Sends SET NAMES latin1 to Master
|
|
||||||
*
|
|
||||||
* @param router Current router instance
|
|
||||||
* @param buf GWBUF to fill with new request
|
|
||||||
*/
|
|
||||||
static void blr_register_set_latin1(ROUTER_INSTANCE *router, GWBUF *buf)
|
|
||||||
{
|
|
||||||
buf = blr_make_query(router->master, "SET NAMES latin1");
|
|
||||||
// Set the new state
|
|
||||||
router->master_state = BLRM_LATIN1;
|
|
||||||
router->master->func.write(router->master, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Slave Protocol registration to Master:
|
* Slave Protocol registration to Master:
|
||||||
*
|
*
|
||||||
@ -3239,51 +3207,23 @@ static void blr_register_cache_mariadb10(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
router->saved_master.mariadb10 = buf;
|
router->saved_master.mariadb10 = buf;
|
||||||
blr_cache_response(router, "mariadb10", buf);
|
blr_cache_response(router, "mariadb10", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Slave Protocol registration to Master:
|
* Slave Protocol registration to Master: generic send command
|
||||||
*
|
*
|
||||||
* Sends SELECT 1 to Master
|
* Sends a SQL statement to Master server
|
||||||
*
|
*
|
||||||
* @param router Current router instance
|
* @param router Current router instance
|
||||||
* @param buf GWBUF to fill with new request
|
* @param command The SQL command to send
|
||||||
|
* @param state The next registration state value
|
||||||
*/
|
*/
|
||||||
static void blr_register_send_select1(ROUTER_INSTANCE *router, GWBUF *buf)
|
static void blr_register_send_command(ROUTER_INSTANCE *router,
|
||||||
|
const char *command,
|
||||||
|
unsigned int state)
|
||||||
{
|
{
|
||||||
buf = blr_make_query(router->master, "SELECT 1");
|
// Create MySQL protocol packet
|
||||||
// Set the new state
|
GWBUF *buf = blr_make_query(router->master, (char *)command);
|
||||||
router->master_state = BLRM_SELECT1;
|
// Set the next registration phase state
|
||||||
router->master->func.write(router->master, buf);
|
router->master_state = state;
|
||||||
}
|
// Send the packet
|
||||||
|
|
||||||
/**
|
|
||||||
* Slave Protocol registration to Master (MaxWell compatibility):
|
|
||||||
*
|
|
||||||
* Sends MYSQL_CONNECTOR_SQL_MODE_QUERY to Master
|
|
||||||
*
|
|
||||||
* @param router Current router instance
|
|
||||||
* @param buf GWBUF to fill with new request
|
|
||||||
*/
|
|
||||||
static void blr_register_mxw_sqlmode(ROUTER_INSTANCE *router, GWBUF *buf)
|
|
||||||
{
|
|
||||||
buf = blr_make_query(router->master, MYSQL_CONNECTOR_SQL_MODE_QUERY);
|
|
||||||
// Set the new state
|
|
||||||
router->master_state = BLRM_SQL_MODE;
|
|
||||||
router->master->func.write(router->master, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Slave Protocol registration to Master (MaxWell compatibility):
|
|
||||||
*
|
|
||||||
* Sends SET character_set_results = NULL to Master
|
|
||||||
*
|
|
||||||
* @param router Current router instance
|
|
||||||
* @param buf GWBUF to fill with new request
|
|
||||||
*/
|
|
||||||
static void blr_register_mxw_charset(ROUTER_INSTANCE *router, GWBUF *buf)
|
|
||||||
{
|
|
||||||
buf = blr_make_query(router->master, "SET character_set_results = NULL");
|
|
||||||
// Set the new state
|
|
||||||
router->master_state = BLRM_RESULTS_CHARSET;
|
|
||||||
router->master->func.write(router->master, buf);
|
router->master->func.write(router->master, buf);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user