changed stop/start slave error message

changed stop/start slave error message including
errors code and status message

ERROR 1254 (HY000): Slave connection is already running
ERROR 1199 (HY000): Slave connection is not running
This commit is contained in:
MassimilianoPinto
2015-05-28 11:14:59 +02:00
parent 453dd64273
commit f54fcc7e4e
2 changed files with 57 additions and 3 deletions

View File

@ -58,6 +58,7 @@
#include <log_manager.h>
#include <version.h>
extern void blr_master_close(ROUTER_INSTANCE* router);
static uint32_t extract_field(uint8_t *src, int bits);
static void encode_value(unsigned char *data, unsigned int value, int len);
static int blr_slave_query(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue);
@ -86,6 +87,7 @@ static int blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *sl
static int blr_slave_send_ok(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave);
static int blr_stop_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave);
static int blr_start_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave);
static void blr_slave_send_error_packet(ROUTER_SLAVE *slave, char *msg, unsigned int err_num, char *status);
extern int lm_enabled_logfiles_bitmask;
extern size_t log_ses_count[];
@ -2198,7 +2200,7 @@ blr_stop_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave)
return blr_slave_send_ok(router, slave);
} else {
blr_slave_send_error(router, slave, "Slave connection is not running");
blr_slave_send_error_packet(slave, "Slave connection is not running", (unsigned int)1199, NULL);
return 1;
}
}
@ -2230,7 +2232,59 @@ blr_start_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave)
return blr_slave_send_ok(router, slave);
} else {
blr_slave_send_error(router, slave, "Slave connection is already running");
blr_slave_send_error_packet(slave, "Slave connection is already running", (unsigned int)1254, NULL);
return 1;
}
}
/**
* Construct an error packet reply with specified code and status
*
* @param slave The slave server instance
* @param msg The error message to send
* @param err_num The error number to send
* @param status The error status
*/
static void
blr_slave_send_error_packet(ROUTER_SLAVE *slave, char *msg, unsigned int err_num, char *status)
{
GWBUF *pkt;
unsigned char *data;
int len;
unsigned int mysql_errno = 0;
char *mysql_state;
uint8_t mysql_err[2];
if ((pkt = gwbuf_alloc(strlen(msg) + 13)) == NULL)
return;
if (status != NULL)
mysql_state = status;
else
mysql_state = "HY000";
if (err_num > 0)
mysql_errno = err_num;
else
mysql_errno = (unsigned int)2003;
data = GWBUF_DATA(pkt);
len = strlen(msg) + 9;
encode_value(&data[0], len, 24); // Payload length
data[3] = 1; // Sequence id
data[4] = 0xff; // Error indicator
encode_value(&data[5], mysql_errno, 16);// Error Code
data[7] = '#'; // Status message first char
strncpy((char *)&data[8], mysql_state, 5); // Status message
memcpy(&data[13], msg, strlen(msg)); // Error Message
slave->dcb->func.write(slave->dcb, pkt);
}