MXS-1209: blr_register_send_command() in use for all registration phases

blr_register_send_command() in use for all registration phases
This commit is contained in:
MassimilianoPinto
2017-05-02 11:10:55 +02:00
parent 3c6006a010
commit 1b5bf65260

View File

@ -119,8 +119,6 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_getchecksum(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_getchecksum(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_handle_checksum(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_handle_checksum(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_mariadb10(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_mysqlgtid(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_serveruuid(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_serveruuid(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_slaveuuid(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_slaveuuid(ROUTER_INSTANCE *router, GWBUF *buf);
static void blr_register_utf8(ROUTER_INSTANCE *router, GWBUF *buf); static void blr_register_utf8(ROUTER_INSTANCE *router, GWBUF *buf);
@ -268,10 +266,10 @@ blr_start_master(void* data)
* *
* Next states are handled by blr_master_response() * Next states are handled by blr_master_response()
*/ */
router->master->func.write(router->master,
blr_make_query(router->master, blr_register_send_command(router,
"SELECT UNIX_TIMESTAMP()")); "SELECT UNIX_TIMESTAMP()",
router->master_state = BLRM_TIMESTAMP; BLRM_TIMESTAMP);
router->stats.n_masterstarts++; router->stats.n_masterstarts++;
} }
@ -543,7 +541,15 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
switch (router->master_state) switch (router->master_state)
{ {
case BLRM_TIMESTAMP: case BLRM_TIMESTAMP:
blr_register_serverid(router, buf); /**
* Previous state was BLRM_TIMESTAMP
* No need to save the server reply
*/
gwbuf_free(buf);
blr_register_send_command(router,
"SHOW VARIABLES LIKE 'SERVER_ID'",
BLRM_SERVERID);
router->retry_backoff = 1;
break; break;
case BLRM_SERVERID: case BLRM_SERVERID:
blr_register_heartbeat(router, buf); blr_register_heartbeat(router, buf);
@ -558,13 +564,15 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
// Set router->master_chksum based on server reply // Set router->master_chksum based on server reply
blr_register_getchecksum(router, buf); blr_register_getchecksum(router, buf);
// Next state is BLRM_MARIADB10 or BLRM_GTIDMODE // Next state is BLRM_MARIADB10 or BLRM_GTIDMODE
if (router->mariadb10_compat)
{ {
blr_register_mariadb10(router, buf); unsigned int state = router->mariadb10_compat ?
} BLRM_MARIADB10 :
else BLRM_GTIDMODE;
{ const char *command = router->mariadb10_compat ?
blr_register_mysqlgtid(router, buf); "SET @mariadb_slave_capability=4" :
"SELECT @@GLOBAL.GTID_MODE";
blr_register_send_command(router, command, state);
} }
break; break;
case BLRM_MARIADB10: case BLRM_MARIADB10:
@ -591,6 +599,8 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
break; break;
case BLRM_UTF8: case BLRM_UTF8:
blr_register_cache_utf8(router, buf); blr_register_cache_utf8(router, buf);
// Next state is MAXWELL BLRM_RESULTS_CHARSET or
// BLRM_SELECT1
{ {
unsigned int state = router->maxwell_compat ? unsigned int state = router->maxwell_compat ?
BLRM_RESULTS_CHARSET : BLRM_RESULTS_CHARSET :
@ -2561,33 +2571,6 @@ void blr_notify_all_slaves(ROUTER_INSTANCE *router)
} }
} }
/**
* Slave Protocol registration to Master:
*
* Handles previous reply from Master and sends
* SHOW VARIABLES LIKE 'SERVER_ID to master
*
* @param router Current router instance
* @param buf GWBUF with server reply to previous
* registration command
*/
static void blr_register_serverid(ROUTER_INSTANCE *router, GWBUF *buf)
{
/**
* Previous state was BLRM_TIMESTAMP
* No need to save the server reply
*/
gwbuf_free(buf);
// Prepare the new message
buf = blr_make_query(router->master, "SHOW VARIABLES LIKE 'SERVER_ID'");
// Set the new state
router->master_state = BLRM_SERVERID;
router->master->func.write(router->master, buf);
router->retry_backoff = 1;
}
/** /**
* Slave Protocol registration to Master: * Slave Protocol registration to Master:
* *
@ -2660,12 +2643,10 @@ static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf)
blr_cache_response(router, "heartbeat", buf); blr_cache_response(router, "heartbeat", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, blr_register_send_command(router,
"SET @master_binlog_checksum = @@global.binlog_checksum"); "SET @master_binlog_checksum ="
" @@global.binlog_checksum",
// Set the new state BLRM_CHKSUM1);
router->master_state = BLRM_CHKSUM1;
router->master->func.write(router->master, buf);
} }
/** /**
@ -2689,11 +2670,9 @@ static void blr_register_getchecksum(ROUTER_INSTANCE *router, GWBUF *buf)
blr_cache_response(router, "chksum1", buf); blr_cache_response(router, "chksum1", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SELECT @master_binlog_checksum"); blr_register_send_command(router,
"SELECT @master_binlog_checksum",
// Set the new state BLRM_CHKSUM2);
router->master_state = BLRM_CHKSUM2;
router->master->func.write(router->master, buf);
} }
/** /**
@ -2731,43 +2710,8 @@ static void blr_register_handlechecksum(ROUTER_INSTANCE *router, GWBUF *buf)
/** /**
* Slave Protocol registration to Master: * Slave Protocol registration to Master:
* *
* Send SET @mariadb_slave_capability=4 to MariaDB10 Master * Handles the reply from Master and
* * sends SHOW VARIABLES LIKE 'SERVER_UUID' to MySQL 5.6/5.7 Master
* @param router Current router instance
* @param buf GWBUF with server reply to previous
* registration command
*/
static void blr_register_mariadb10(ROUTER_INSTANCE *router, GWBUF *buf)
{
// New registration message
buf = blr_make_query(router->master, "SET @mariadb_slave_capability=4");
// Set the new state
router->master_state = BLRM_MARIADB10;
router->master->func.write(router->master, buf);
}
/**
* Slave Protocol registration to Master:
*
* Send SELECT @@GLOBAL.GTID_MODE to MySQL 5.6/5.7 Master
*
* @param router Current router instance
* @param buf GWBUF with server reply to previous
* registration command
*/
static void blr_register_mysqlgtid(ROUTER_INSTANCE *router, GWBUF *buf)
{
// New registration message
buf = blr_make_query(router->master, "SELECT @@GLOBAL.GTID_MODE");
// Set the new state
router->master_state = BLRM_GTIDMODE;
router->master->func.write(router->master, buf);
}
/**
* Slave Protocol registration to Master:
*
* Send SHOW VARIABLES LIKE 'SERVER_UUID' to MySQL 5.6/5.7 Master
* *
* @param router Current router instance * @param router Current router instance
* @param buf GWBUF with server reply to previous * @param buf GWBUF with server reply to previous
@ -2782,11 +2726,11 @@ static void blr_register_serveruuid(ROUTER_INSTANCE *router, GWBUF *buf)
} }
router->saved_master.gtid_mode = buf; router->saved_master.gtid_mode = buf;
blr_cache_response(router, "gtidmode", buf); blr_cache_response(router, "gtidmode", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SHOW VARIABLES LIKE 'SERVER_UUID'"); blr_register_send_command(router,
// Set the new state "SHOW VARIABLES LIKE 'SERVER_UUID'",
router->master_state = BLRM_MUUID; BLRM_MUUID);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2829,11 +2773,11 @@ static void blr_register_slaveuuid(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.uuid = buf; router->saved_master.uuid = buf;
blr_cache_response(router, "uuid", buf); blr_cache_response(router, "uuid", buf);
sprintf(query, "SET @slave_uuid='%s'", router->uuid); sprintf(query, "SET @slave_uuid='%s'", router->uuid);
// New registration message // New registration message
buf = blr_make_query(router->master, query); blr_register_send_command(router,
// Set the new state query,
router->master_state = BLRM_SUUID; BLRM_SUUID);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2855,10 +2799,9 @@ static void blr_register_utf8(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.setnames = buf; router->saved_master.setnames = buf;
blr_cache_response(router, "setnames", buf); blr_cache_response(router, "setnames", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SET NAMES utf8"); blr_register_send_command(router,
// Set the new state "SET NAMES utf8",
router->master_state = BLRM_UTF8; BLRM_UTF8);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2881,10 +2824,9 @@ static void blr_register_selectversion(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.select1 = buf; router->saved_master.select1 = buf;
blr_cache_response(router, "select1", buf); blr_cache_response(router, "select1", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SELECT VERSION()"); blr_register_send_command(router,
// Set the new state "SELECT VERSION()",
router->master_state = BLRM_SELECTVER; BLRM_SELECTVER);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2907,10 +2849,9 @@ static void blr_register_selectvercomment(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.selectver = buf; router->saved_master.selectver = buf;
blr_cache_response(router, "selectver", buf); blr_cache_response(router, "selectver", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SELECT @@version_comment limit 1"); blr_register_send_command(router,
// Set the new state "SELECT @@version_comment limit 1",
router->master_state = BLRM_SELECTVERCOM; BLRM_SELECTVERCOM);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2933,10 +2874,9 @@ static void blr_register_selecthostname(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.selectvercom = buf; router->saved_master.selectvercom = buf;
blr_cache_response(router, "selectvercom", buf); blr_cache_response(router, "selectvercom", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SELECT @@hostname"); blr_register_send_command(router,
// Set the new state "SELECT @@hostname",
router->master_state = BLRM_SELECTHOSTNAME; BLRM_SELECTHOSTNAME);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2959,10 +2899,9 @@ static void blr_register_selectmap(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.selecthostname = buf; router->saved_master.selecthostname = buf;
blr_cache_response(router, "selecthostname", buf); blr_cache_response(router, "selecthostname", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "SELECT @@max_allowed_packet"); blr_register_send_command(router,
// Set the new state "SELECT @@max_allowed_packet",
router->master_state = BLRM_MAP; BLRM_MAP);
router->master->func.write(router->master, buf);
} }
/** /**
@ -2985,12 +2924,10 @@ static void blr_register_mxw_binlogvars(ROUTER_INSTANCE *router, GWBUF *buf)
blr_cache_response(router, "server_vars", buf); blr_cache_response(router, "server_vars", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, blr_register_send_command(router,
"SELECT IF(@@global.log_bin, 'ON', 'OFF'), " "SELECT IF(@@global.log_bin, 'ON', 'OFF'), "
"@@global.binlog_format, @@global.binlog_row_image"); "@@global.binlog_format, @@global.binlog_row_image",
// Set the new state BLRM_BINLOG_VARS);
router->master_state = BLRM_BINLOG_VARS;
router->master->func.write(router->master, buf);
} }
/** /**
@ -3014,10 +2951,9 @@ static void blr_register_mxw_tables(ROUTER_INSTANCE *router, GWBUF *buf)
blr_cache_response(router, "binlog_vars", buf); blr_cache_response(router, "binlog_vars", buf);
// New registration message // New registration message
buf = blr_make_query(router->master, "select @@lower_case_table_names"); blr_register_send_command(router,
// Set the new state "select @@lower_case_table_names",
router->master_state = BLRM_LOWER_CASE_TABLES; BLRM_LOWER_CASE_TABLES);
router->master->func.write(router->master, buf);
} }
/** /**
@ -3039,10 +2975,9 @@ static void blr_register_getsemisync(ROUTER_INSTANCE *router, GWBUF *buf)
router->service->dbref->server->port); router->service->dbref->server->port);
// New registration message // New registration message
buf = blr_make_query(router->master, "SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled'"); blr_register_send_command(router,
// Set the new state "SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled'",
router->master_state = BLRM_CHECK_SEMISYNC; BLRM_CHECK_SEMISYNC);
router->master->func.write(router->master, buf);
} }
/** /**
@ -3100,11 +3035,10 @@ static bool blr_register_setsemisync(ROUTER_INSTANCE *router, GWBUF *buf)
router->service->dbref->server->port); router->service->dbref->server->port);
} }
buf = blr_make_query(router->master, "SET @rpl_semi_sync_slave = 1");
router->master_state = BLRM_REQUEST_SEMISYNC;
router->master->func.write(router->master, buf);
/* Request semisync */ /* Request semisync */
blr_register_send_command(router,
"SET @rpl_semi_sync_slave = 1",
BLRM_REQUEST_SEMISYNC);
return true; return true;
} }
} }