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:
parent
5b2cfac3cb
commit
0f5f9f8228
@ -647,7 +647,7 @@ createInstance(SERVICE *service, char **options)
|
||||
{
|
||||
int h_val = (int)strtol(value, NULL, 10);
|
||||
|
||||
if (h_val <= 0 ||
|
||||
if (h_val < 0 ||
|
||||
(errno == ERANGE) ||
|
||||
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
||||
{
|
||||
@ -658,6 +658,13 @@ createInstance(SERVICE *service, char **options)
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -1570,8 +1577,9 @@ diagnostics(MXS_ROUTER *router, DCB *dcb)
|
||||
|
||||
dcb_printf(dcb, "\tBinlog directory: %s\n",
|
||||
router_inst->binlogdir);
|
||||
dcb_printf(dcb, "\tHeartbeat period (seconds): %lu\n",
|
||||
router_inst->heartbeat);
|
||||
dcb_printf(dcb, "\tHeartbeat period (seconds): %lu%s\n",
|
||||
router_inst->heartbeat,
|
||||
router_inst->heartbeat ? "" : "(disabled)");
|
||||
dcb_printf(dcb, "\tNumber of master connects: %d\n",
|
||||
router_inst->stats.n_masterstarts);
|
||||
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_save_mariadb_gtid(ROUTER_INSTANCE *inst);
|
||||
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_getchecksum(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
|
||||
* SET @master_heartbeat_period to master
|
||||
*
|
||||
* The statement is sent only if router->heartbeat > 0
|
||||
*
|
||||
* @param router Current router instance
|
||||
* @param buf GWBUF with server reply to previous
|
||||
* 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 *val = blr_extract_column(buf, 2);
|
||||
@ -2359,11 +2363,17 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||
}
|
||||
MXS_FREE(val);
|
||||
|
||||
// Prepare new registration message
|
||||
sprintf(query,
|
||||
"SET @master_heartbeat_period = %lu000000000",
|
||||
router->heartbeat);
|
||||
blr_register_send_command(router, query, BLRM_HBPERIOD);
|
||||
/* Send Heartbeat request ony if router->heartbeat is set */
|
||||
if (router->heartbeat > 0)
|
||||
{
|
||||
// Prepare new registration message
|
||||
sprintf(query,
|
||||
"SET @master_heartbeat_period = %lu000000000",
|
||||
router->heartbeat);
|
||||
blr_register_send_command(router, query, BLRM_HBPERIOD);
|
||||
}
|
||||
|
||||
return router->heartbeat != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2378,11 +2388,18 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||
*/
|
||||
static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||
{
|
||||
// Response from master should be stored
|
||||
blr_register_cache_response(router,
|
||||
&router->saved_master.heartbeat,
|
||||
"heartbeat",
|
||||
buf);
|
||||
/**
|
||||
* Response from master (set heartbeat reply) should be stored
|
||||
* only if router->heartbeat is set
|
||||
*/
|
||||
if (router->heartbeat > 0)
|
||||
{
|
||||
blr_register_cache_response(router,
|
||||
&router->saved_master.heartbeat,
|
||||
"heartbeat",
|
||||
buf);
|
||||
}
|
||||
|
||||
// New registration message
|
||||
blr_register_send_command(router,
|
||||
"SET @master_binlog_checksum ="
|
||||
@ -2858,8 +2875,11 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||
router->retry_backoff = 1;
|
||||
break;
|
||||
case BLRM_SERVERID:
|
||||
blr_register_heartbeat(router, buf);
|
||||
break;
|
||||
// If set heartbeat is not being sent, next state is BLRM_HBPERIOD
|
||||
if (blr_register_heartbeat(router, buf))
|
||||
{
|
||||
break;
|
||||
}
|
||||
case BLRM_HBPERIOD:
|
||||
blr_register_setchecksum(router, buf);
|
||||
break;
|
||||
@ -3146,14 +3166,17 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
||||
/**
|
||||
* Set heartbeat check task
|
||||
*/
|
||||
snprintf(task_name,
|
||||
BLRM_TASK_NAME_LEN,
|
||||
"%s heartbeat",
|
||||
router->service->name);
|
||||
hktask_add(task_name,
|
||||
blr_check_last_master_event,
|
||||
router,
|
||||
router->heartbeat);
|
||||
if (router->heartbeat > 0)
|
||||
{
|
||||
snprintf(task_name,
|
||||
BLRM_TASK_NAME_LEN,
|
||||
"%s heartbeat",
|
||||
router->service->name);
|
||||
hktask_add(task_name,
|
||||
blr_check_last_master_event,
|
||||
router,
|
||||
router->heartbeat);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -3949,7 +3949,7 @@ int blr_handle_change_master(ROUTER_INSTANCE* router,
|
||||
{
|
||||
int h_val = (int)strtol(master_heartbeat, NULL, 10);
|
||||
|
||||
if (h_val <= 0 ||
|
||||
if (h_val < 0 ||
|
||||
(errno == ERANGE) ||
|
||||
h_val > BLR_HEARTBEAT_MAX_INTERVAL)
|
||||
{
|
||||
@ -3973,6 +3973,13 @@ int blr_handle_change_master(ROUTER_INSTANCE* router,
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user