Merge branch 'develop' into MXS-1075

This commit is contained in:
MassimilianoPinto
2017-03-15 18:12:00 +01:00
27 changed files with 677 additions and 705 deletions

View File

@ -1173,7 +1173,7 @@ closeSession(MXS_ROUTER *instance, MXS_ROUTER_SESSION *router_session)
MXS_NOTICE("%s: Slave %s:%d, server id %d, disconnected after %ld seconds. "
"%d SQL commands, %d events sent (%lu bytes), binlog '%s', "
"last position %lu",
router->service->name, slave->dcb->remote, ntohs((slave->dcb->ipv4).sin_port),
router->service->name, slave->dcb->remote, dcb_get_port(slave->dcb),
slave->serverid,
time(0) - slave->connect_time,
slave->stats.n_queries,
@ -1581,7 +1581,7 @@ diagnostics(MXS_ROUTER *router, DCB *dcb)
}
dcb_printf(dcb,
"\t\tSlave_host_port: %s:%d\n",
session->dcb->remote, ntohs((session->dcb->ipv4).sin_port));
session->dcb->remote, dcb_get_port(session->dcb));
dcb_printf(dcb,
"\t\tUsername: %s\n",
session->dcb->user);

View File

@ -736,14 +736,15 @@ typedef struct binlog_pos_fix
#define BLRM_SERVER_VARS 0x0016
#define BLRM_BINLOG_VARS 0x0017
#define BLRM_LOWER_CASE_TABLES 0x0018
#define BLRM_REGISTER 0x0019
#define BLRM_CHECK_SEMISYNC 0x001A
#define BLRM_REQUEST_SEMISYNC 0x001B
#define BLRM_REQUEST_BINLOGDUMP 0x001C
#define BLRM_BINLOGDUMP 0x001D
#define BLRM_SLAVE_STOPPED 0x001E
#define BLRM_REGISTER_READY 0x0019
#define BLRM_REGISTER 0x001A
#define BLRM_CHECK_SEMISYNC 0x001B
#define BLRM_REQUEST_SEMISYNC 0x001C
#define BLRM_REQUEST_BINLOGDUMP 0x001D
#define BLRM_BINLOGDUMP 0x001E
#define BLRM_SLAVE_STOPPED 0x001F
#define BLRM_MAXSTATE 0x001E
#define BLRM_MAXSTATE 0x001F
static char *blrm_states[] =
{
@ -772,6 +773,7 @@ static char *blrm_states[] =
"Query server variables",
"Query binlog variables",
"Query @@lower_case_table_names",
"Ready to Register",
"Register slave",
"Semi-Sync Support retrivial",
"Request Semi-Sync Replication",

View File

@ -714,43 +714,80 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
router->saved_master.map = buf;
blr_cache_response(router, "map", buf);
// Query for Server Variables
buf = blr_make_query(router->master, MYSQL_CONNECTOR_SERVER_VARS_QUERY);
router->master_state = BLRM_SERVER_VARS;
router->master->func.write(router->master, buf);
break;
if (router->maxwell_compat)
{
// Query for Server Variables
buf = blr_make_query(router->master, MYSQL_CONNECTOR_SERVER_VARS_QUERY);
router->master_state = BLRM_SERVER_VARS;
router->master->func.write(router->master, buf);
break;
}
else
{
// Continue: ready for the registration, nothing to write/read
router->master_state = BLRM_REGISTER_READY;
}
case BLRM_SERVER_VARS:
if (router->saved_master.server_vars)
/**
* This branch could be reached as fallthrough from BLRM_MAP
* with new state BLRM_REGISTER_READY
* Go ahead if maxwell_compat is not set
*/
if (router->maxwell_compat)
{
GWBUF_CONSUME_ALL(router->saved_master.server_vars);
}
router->saved_master.server_vars = buf;
blr_cache_response(router, "server_vars", buf);
if (router->saved_master.server_vars)
{
GWBUF_CONSUME_ALL(router->saved_master.server_vars);
}
router->saved_master.server_vars = buf;
blr_cache_response(router, "server_vars", buf);
buf = blr_make_query(router->master, "SELECT IF(@@global.log_bin, 'ON', 'OFF'), @@global.binlog_format, @@global.binlog_row_image");
router->master_state = BLRM_BINLOG_VARS;
router->master->func.write(router->master, buf);
break;
buf = blr_make_query(router->master,
"SELECT IF(@@global.log_bin, 'ON', 'OFF'), "
"@@global.binlog_format, @@global.binlog_row_image");
router->master_state = BLRM_BINLOG_VARS;
router->master->func.write(router->master, buf);
break;
}
case BLRM_BINLOG_VARS:
if (router->saved_master.binlog_vars)
/**
* This branch could be reached as fallthrough from BLRM_MAP
* with new state BLRM_REGISTER_READY.
* Go ahead if maxwell_compat is not set
*/
if (router->maxwell_compat)
{
GWBUF_CONSUME_ALL(router->saved_master.binlog_vars);
}
router->saved_master.binlog_vars = buf;
blr_cache_response(router, "binlog_vars", buf);
if (router->saved_master.binlog_vars)
{
GWBUF_CONSUME_ALL(router->saved_master.binlog_vars);
}
router->saved_master.binlog_vars = buf;
blr_cache_response(router, "binlog_vars", buf);
buf = blr_make_query(router->master, "select @@lower_case_table_names");
router->master_state = BLRM_LOWER_CASE_TABLES;
router->master->func.write(router->master, buf);
break;
buf = blr_make_query(router->master, "select @@lower_case_table_names");
router->master_state = BLRM_LOWER_CASE_TABLES;
router->master->func.write(router->master, buf);
break;
}
case BLRM_LOWER_CASE_TABLES:
if (router->saved_master.lower_case_tables)
/**
* This branch could be reached as fallthrough from BLRM_MAP
* with new state BLRM_REGISTER_READY.
* Go ahead if maxwell_compat is not set
*/
if (router->maxwell_compat)
{
GWBUF_CONSUME_ALL(router->saved_master.lower_case_tables);
if (router->saved_master.lower_case_tables)
{
GWBUF_CONSUME_ALL(router->saved_master.lower_case_tables);
}
router->saved_master.lower_case_tables = buf;
blr_cache_response(router, "lower_case_tables", buf);
router->master_state = BLRM_REGISTER_READY;
// Continue: ready for the registration, nothing to write/read
}
router->saved_master.lower_case_tables = buf;
blr_cache_response(router, "lower_case_tables", buf);
case BLRM_REGISTER_READY:
// Prepare registration
buf = blr_make_registration(router);
router->master_state = BLRM_REGISTER;
router->master->func.write(router->master, buf);
@ -2448,7 +2485,7 @@ bool blr_send_event(blr_thread_role_t role,
"the event has already been sent by thread %lu in the role of %s. "
"%u bytes buffered for writing in DCB %p. %lu events received from master.",
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
binlog_name,
binlog_pos,
@ -2511,7 +2548,7 @@ bool blr_send_event(blr_thread_role_t role,
{
MXS_ERROR("Failed to send an event of %u bytes to slave at %s:%d.",
hdr->event_size, slave->dcb->remote,
ntohs(slave->dcb->ipv4.sin_port));
dcb_get_port(slave->dcb));
}
return rval;
}

View File

@ -2262,7 +2262,7 @@ blr_slave_binlog_dump(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue
"Latest safe position %lu, end of binlog file %lu",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
(unsigned long)slave->binlog_pos,
@ -2382,7 +2382,7 @@ blr_slave_binlog_dump(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue
MXS_NOTICE("%s: Slave %s:%d, server id %d requested binlog file %s from position %lu",
router->service->name, slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile, (unsigned long)slave->binlog_pos);
@ -2546,7 +2546,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
}
MXS_ERROR("Slave %s:%i, server-id %d, binlog '%s': blr_slave_catchup "
"failed to open binlog file",
slave->dcb->remote, ntohs((slave->dcb->ipv4).sin_port), slave->serverid,
slave->dcb->remote, dcb_get_port(slave->dcb), slave->serverid,
slave->binlogfile);
slave->cstate &= ~CS_BUSY;
@ -2675,7 +2675,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
MXS_ERROR("Slave %s:%i, server-id %d, binlog '%s': blr_slave_catchup "
"failed to open binlog file in rotate event",
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile);
@ -2719,7 +2719,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
MXS_WARNING("Slave %s:%i, server-id %d, binlog '%s, position %u: "
"Slave-thread could not send event to slave, closing connection.",
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
binlog_name,
binlog_pos);
@ -2754,7 +2754,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
MXS_ERROR("%s Slave %s:%i, server-id %d, binlog '%s', %s",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
read_errmsg);
@ -2765,7 +2765,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
MXS_ERROR("%s Slave %s:%i, server-id %d, binlog '%s', %s",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
read_errmsg);
@ -2787,7 +2787,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
MXS_ERROR("%s Slave %s:%i, server-id %d, binlog '%s', %s",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
read_errmsg);
@ -2822,7 +2822,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
"current committed transaction event being sent: %lu, %s",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
slave->stats.n_events - events_before,
@ -2897,7 +2897,7 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
"previous failure of the master.",
router->service->name,
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile, (unsigned long)slave->binlog_pos,
router->binlog_name, router->binlog_position);
@ -3142,7 +3142,7 @@ blr_slave_read_fde(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
{
MXS_ERROR("Slave %s:%i, server-id %d, binlog '%s', blr_read_binlog failure: %s",
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
err_msg);
@ -6104,7 +6104,7 @@ blr_slave_read_ste(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, uint32_t fde_en
{
MXS_ERROR("Slave %s:%i, server-id %d, binlog '%s', blr_read_binlog failure: %s",
slave->dcb->remote,
ntohs((slave->dcb->ipv4).sin_port),
dcb_get_port(slave->dcb),
slave->serverid,
slave->binlogfile,
err_msg);