MXS-1156: Disable heartbeat if value is set to 0
MXS-1156: Disable heartbeat if value is set to 0. A warning log is written in maxscale log file when heartbeat is not set.
This commit is contained in:
@ -647,7 +647,7 @@ createInstance(SERVICE *service, char **options)
|
|||||||
{
|
{
|
||||||
int h_val = (int)strtol(value, NULL, 10);
|
int h_val = (int)strtol(value, NULL, 10);
|
||||||
|
|
||||||
if (h_val <= 0 ||
|
if (h_val < 0 ||
|
||||||
(errno == ERANGE) ||
|
(errno == ERANGE) ||
|
||||||
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
||||||
{
|
{
|
||||||
@ -658,6 +658,13 @@ createInstance(SERVICE *service, char **options)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (h_val == 0)
|
||||||
|
{
|
||||||
|
MXS_WARNING("%s: %s",
|
||||||
|
inst->service->name,
|
||||||
|
"MASTER_HEARTBEAT_PERIOD has been set to 0 (disabled): "
|
||||||
|
"a master network inactivity will not be handled.");
|
||||||
|
}
|
||||||
inst->heartbeat = h_val;
|
inst->heartbeat = h_val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1570,8 +1577,9 @@ diagnostics(MXS_ROUTER *router, DCB *dcb)
|
|||||||
|
|
||||||
dcb_printf(dcb, "\tBinlog directory: %s\n",
|
dcb_printf(dcb, "\tBinlog directory: %s\n",
|
||||||
router_inst->binlogdir);
|
router_inst->binlogdir);
|
||||||
dcb_printf(dcb, "\tHeartbeat period (seconds): %lu\n",
|
dcb_printf(dcb, "\tHeartbeat period (seconds): %lu%s\n",
|
||||||
router_inst->heartbeat);
|
router_inst->heartbeat,
|
||||||
|
router_inst->heartbeat ? "" : "(disabled)");
|
||||||
dcb_printf(dcb, "\tNumber of master connects: %d\n",
|
dcb_printf(dcb, "\tNumber of master connects: %d\n",
|
||||||
router_inst->stats.n_masterstarts);
|
router_inst->stats.n_masterstarts);
|
||||||
dcb_printf(dcb, "\tNumber of delayed reconnects: %d\n",
|
dcb_printf(dcb, "\tNumber of delayed reconnects: %d\n",
|
||||||
|
@ -103,7 +103,7 @@ void blr_notify_all_slaves(ROUTER_INSTANCE *router);
|
|||||||
extern bool blr_notify_waiting_slave(ROUTER_SLAVE *slave);
|
extern bool blr_notify_waiting_slave(ROUTER_SLAVE *slave);
|
||||||
extern bool blr_save_mariadb_gtid(ROUTER_INSTANCE *inst);
|
extern bool blr_save_mariadb_gtid(ROUTER_INSTANCE *inst);
|
||||||
static void blr_register_serverid(ROUTER_INSTANCE *router, GWBUF *buf);
|
static void blr_register_serverid(ROUTER_INSTANCE *router, GWBUF *buf);
|
||||||
static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf);
|
static bool 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);
|
||||||
@ -2328,11 +2328,15 @@ void blr_notify_all_slaves(ROUTER_INSTANCE *router)
|
|||||||
* Handles previous reply from Master and sends
|
* Handles previous reply from Master and sends
|
||||||
* SET @master_heartbeat_period to master
|
* SET @master_heartbeat_period to master
|
||||||
*
|
*
|
||||||
|
* The statement is sent only if router->heartbeat > 0
|
||||||
|
*
|
||||||
* @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
|
||||||
* registration command
|
* registration command
|
||||||
|
* @return True if hearbeat request has been sent
|
||||||
|
* false otherwise (router->heartbeat = 0)
|
||||||
*/
|
*/
|
||||||
static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
static bool blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||||
{
|
{
|
||||||
char query[BLRM_SET_HEARTBEAT_QUERY_LEN];
|
char query[BLRM_SET_HEARTBEAT_QUERY_LEN];
|
||||||
char *val = blr_extract_column(buf, 2);
|
char *val = blr_extract_column(buf, 2);
|
||||||
@ -2359,6 +2363,9 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
}
|
}
|
||||||
MXS_FREE(val);
|
MXS_FREE(val);
|
||||||
|
|
||||||
|
/* Send Heartbeat request ony if router->heartbeat is set */
|
||||||
|
if (router->heartbeat > 0)
|
||||||
|
{
|
||||||
// Prepare new registration message
|
// Prepare new registration message
|
||||||
sprintf(query,
|
sprintf(query,
|
||||||
"SET @master_heartbeat_period = %lu000000000",
|
"SET @master_heartbeat_period = %lu000000000",
|
||||||
@ -2366,6 +2373,9 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
blr_register_send_command(router, query, BLRM_HBPERIOD);
|
blr_register_send_command(router, query, BLRM_HBPERIOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return router->heartbeat != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Slave Protocol registration to Master:
|
* Slave Protocol registration to Master:
|
||||||
*
|
*
|
||||||
@ -2378,11 +2388,18 @@ 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)
|
||||||
{
|
{
|
||||||
// Response from master should be stored
|
/**
|
||||||
|
* Response from master (set heartbeat reply) should be stored
|
||||||
|
* only if router->heartbeat is set
|
||||||
|
*/
|
||||||
|
if (router->heartbeat > 0)
|
||||||
|
{
|
||||||
blr_register_cache_response(router,
|
blr_register_cache_response(router,
|
||||||
&router->saved_master.heartbeat,
|
&router->saved_master.heartbeat,
|
||||||
"heartbeat",
|
"heartbeat",
|
||||||
buf);
|
buf);
|
||||||
|
}
|
||||||
|
|
||||||
// New registration message
|
// New registration message
|
||||||
blr_register_send_command(router,
|
blr_register_send_command(router,
|
||||||
"SET @master_binlog_checksum ="
|
"SET @master_binlog_checksum ="
|
||||||
@ -2858,8 +2875,11 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
router->retry_backoff = 1;
|
router->retry_backoff = 1;
|
||||||
break;
|
break;
|
||||||
case BLRM_SERVERID:
|
case BLRM_SERVERID:
|
||||||
blr_register_heartbeat(router, buf);
|
// If set heartbeat is not being sent, next state is BLRM_HBPERIOD
|
||||||
|
if (blr_register_heartbeat(router, buf))
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case BLRM_HBPERIOD:
|
case BLRM_HBPERIOD:
|
||||||
blr_register_setchecksum(router, buf);
|
blr_register_setchecksum(router, buf);
|
||||||
break;
|
break;
|
||||||
@ -3146,6 +3166,8 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
/**
|
/**
|
||||||
* Set heartbeat check task
|
* Set heartbeat check task
|
||||||
*/
|
*/
|
||||||
|
if (router->heartbeat > 0)
|
||||||
|
{
|
||||||
snprintf(task_name,
|
snprintf(task_name,
|
||||||
BLRM_TASK_NAME_LEN,
|
BLRM_TASK_NAME_LEN,
|
||||||
"%s heartbeat",
|
"%s heartbeat",
|
||||||
@ -3154,6 +3176,7 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
blr_check_last_master_event,
|
blr_check_last_master_event,
|
||||||
router,
|
router,
|
||||||
router->heartbeat);
|
router->heartbeat);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3949,7 +3949,7 @@ int blr_handle_change_master(ROUTER_INSTANCE* router,
|
|||||||
{
|
{
|
||||||
int h_val = (int)strtol(master_heartbeat, NULL, 10);
|
int h_val = (int)strtol(master_heartbeat, NULL, 10);
|
||||||
|
|
||||||
if (h_val <= 0 ||
|
if (h_val < 0 ||
|
||||||
(errno == ERANGE) ||
|
(errno == ERANGE) ||
|
||||||
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
||||||
{
|
{
|
||||||
@ -3973,6 +3973,13 @@ int blr_handle_change_master(ROUTER_INSTANCE* router,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (h_val == 0)
|
||||||
|
{
|
||||||
|
MXS_WARNING("%s: %s",
|
||||||
|
router->service->name,
|
||||||
|
"MASTER_HEARTBEAT_PERIOD has been set to 0 (disabled): "
|
||||||
|
"a master network inactivity will not be handled.");
|
||||||
|
}
|
||||||
router->heartbeat = h_val;
|
router->heartbeat = h_val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user