mysql_binlog_send->RUN_HOOK(binlog_transmit, after_send_event,
(thd, flags, packet, log_file_name, skip_group ? pos : 0))->
(thd, flags, packet, log_file_name, skip_group ? pos : 0))->
repl_semi_after_send_event:
int repl_semi_after_send_event(Binlog_transmit_param *param,
const char *event_buf, unsigned long len,
const char * skipped_log_file,
my_off_t skipped_log_pos)
{
/*至少有个slave是semi-sync*/
if (repl_semisync.is_semi_sync_slave())
{
/*
1、如果该event需要skip(什么条件下skip?),调用skipSlaveReply;否则调用readSlaveReply
2、如果收到的包的头部没有semi-sync的flag,则退出,否则调用reportReplyBinlog:signal_waiting_sessions_up_to
唤醒其他等待的线程
*/
if(skipped_log_pos>0)
repl_semisync.skipSlaveReply(event_buf, param->server_id,
skipped_log_file, skipped_log_pos);
else
{
THD *thd=