MXS-1209: added blr_register_send_command()

MXS-1209: added blr_register_send_command()
This commit is contained in:
MassimilianoPinto
2017-05-02 09:11:15 +02:00
parent 5cef78b7d4
commit 3c6006a010

View File

@ -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);
} }