Addition of send_slave_heartbeat option
Addition of send_slave_heartbeat option
This commit is contained in:
@ -46,6 +46,7 @@
|
||||
* If set those values are sent to slaves instead of
|
||||
* saved master responses
|
||||
* 23/08/2015 Massimiliano Pinto Added strerror_r
|
||||
* 30/09/2015 Massimiliano Pinto Addition of send_slave_heartbeat option
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
@ -287,6 +288,7 @@ char task_name[BLRM_TASK_NAME_LEN+1] = "";
|
||||
inst->set_master_hostname = NULL;
|
||||
inst->set_master_uuid = NULL;
|
||||
inst->set_master_server_id = NULL;
|
||||
inst->send_slave_heartbeat = 0;
|
||||
|
||||
inst->serverid = 0;
|
||||
|
||||
@ -468,6 +470,10 @@ char task_name[BLRM_TASK_NAME_LEN+1] = "";
|
||||
inst->heartbeat = h_val;
|
||||
}
|
||||
}
|
||||
else if (strcmp(options[i], "send_slave_heartbeat") == 0)
|
||||
{
|
||||
inst->send_slave_heartbeat = atoi(value);
|
||||
}
|
||||
else if (strcmp(options[i], "binlogdir") == 0)
|
||||
{
|
||||
inst->binlogdir = strdup(value);
|
||||
|
@ -1613,6 +1613,10 @@ int action;
|
||||
slave->lastEventTimestamp = hdr->timestamp;
|
||||
slave->lastEventReceived = hdr->event_type;
|
||||
|
||||
/* set lastReply */
|
||||
if (router->send_slave_heartbeat == 1)
|
||||
slave->lastReply = time(0);
|
||||
|
||||
pkt = gwbuf_alloc(hdr->event_size + 5);
|
||||
buf = GWBUF_DATA(pkt);
|
||||
encode_value(buf, hdr->event_size + 1, 24);
|
||||
|
@ -237,8 +237,10 @@ blr_slave_request(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue)
|
||||
|
||||
rc = blr_slave_binlog_dump(router, slave, queue);
|
||||
|
||||
if (rc) {
|
||||
if (router->send_slave_heartbeat == 1 && rc && slave->heartbeat > 0) {
|
||||
snprintf(task_name, BLRM_TASK_NAME_LEN, "%s slaves heartbeat send", router->service->name);
|
||||
|
||||
/* Add slave heartbeat check task: it runs with 1 second frequency */
|
||||
hktask_add(task_name, blr_send_slave_heartbeat, router, 1);
|
||||
}
|
||||
|
||||
@ -1784,18 +1786,28 @@ uint32_t chksum;
|
||||
encode_value(ptr, chksum, 32);
|
||||
}
|
||||
|
||||
slave->lastEventTimestamp = time(0);
|
||||
/* Send Fake Rotate Event */
|
||||
rval = slave->dcb->func.write(slave->dcb, resp);
|
||||
|
||||
/* set lastEventReceived */
|
||||
slave->lastEventReceived = ROTATE_EVENT;
|
||||
|
||||
rval = slave->dcb->func.write(slave->dcb, resp);
|
||||
/* set lastReply for slave heartbeat check */
|
||||
if (router->send_slave_heartbeat)
|
||||
slave->lastReply = time(0);
|
||||
|
||||
/* Send the FORMAT_DESCRIPTION_EVENT */
|
||||
if (slave->binlog_pos != 4)
|
||||
blr_slave_send_fde(router, slave);
|
||||
|
||||
/* set lastEventReceived */
|
||||
slave->lastEventReceived = FORMAT_DESCRIPTION_EVENT;
|
||||
|
||||
slave->dcb->low_water = router->low_water;
|
||||
slave->dcb->high_water = router->high_water;
|
||||
|
||||
dcb_add_callback(slave->dcb, DCB_REASON_DRAINED, blr_slave_callback, slave);
|
||||
|
||||
slave->state = BLRS_DUMPING;
|
||||
|
||||
LOGIF(LM, (skygw_log_write(
|
||||
@ -2001,6 +2013,10 @@ uint8_t *ptr;
|
||||
rval = written;
|
||||
slave->stats.n_events++;
|
||||
burst_size -= hdr.event_size;
|
||||
|
||||
/* set lastReply for slave heartbeat check */
|
||||
if (router->send_slave_heartbeat)
|
||||
slave->lastReply = time(0);
|
||||
}
|
||||
if (record == NULL)
|
||||
slave->stats.n_failed_read++;
|
||||
@ -2306,9 +2322,6 @@ uint32_t chksum;
|
||||
chksum = crc32(chksum, GWBUF_DATA(record), hdr.event_size - 4);
|
||||
encode_value(ptr, chksum, 32);
|
||||
|
||||
slave->lastEventTimestamp = time(0);
|
||||
slave->lastEventReceived = FORMAT_DESCRIPTION_EVENT;
|
||||
|
||||
slave->dcb->func.write(slave->dcb, head);
|
||||
}
|
||||
|
||||
@ -4323,19 +4336,18 @@ time_t t_now = time(0);
|
||||
{
|
||||
|
||||
/* skip servers with state = 0 */
|
||||
if ( (sptr->state == BLRS_DUMPING) && (sptr->heartbeat > 0) && ((t_now + 1 - sptr->lastEventTimestamp) >= sptr->heartbeat) )
|
||||
if ( (sptr->state == BLRS_DUMPING) && (sptr->heartbeat > 0) && ((t_now + 1 - sptr->lastReply) >= sptr->heartbeat) )
|
||||
{
|
||||
LOGIF(LM, (skygw_log_write(
|
||||
LOGFILE_MESSAGE, "Sending Heartbeat to slave server-id %d in State %d, cstate %d. "
|
||||
"Heartbeat interval is %d, last event time is %lu",
|
||||
sptr->serverid, sptr->state, sptr->cstate, sptr->heartbeat,
|
||||
(unsigned long)sptr->lastEventTimestamp)));
|
||||
(unsigned long)sptr->lastReply)));
|
||||
|
||||
blr_slave_send_heartbeat(router, sptr);
|
||||
|
||||
sptr->lastEventTimestamp = t_now;
|
||||
sptr->lastReply = t_now;
|
||||
|
||||
sptr->lastEventReceived = HEARTBEAT_EVENT;
|
||||
}
|
||||
|
||||
sptr = sptr->next;
|
||||
|
Reference in New Issue
Block a user