From 222883b0d66a3e4987b2f3d98023f677ea23642f Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Fri, 28 Sep 2012 03:45:05 +0300 Subject: [PATCH] Added multi-source support to show relaylog events --- sql/sql_repl.cc | 22 +++++++++++++++++++--- sql/sql_yacc.yy | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 99395738c66..036afb45a19 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -2022,6 +2022,7 @@ bool mysql_show_binlog_events(THD* thd) File file = -1; MYSQL_BIN_LOG *binary_log= NULL; int old_max_allowed_packet= thd->variables.max_allowed_packet; + Master_info *mi= 0; LOG_INFO linfo; DBUG_ENTER("mysql_show_binlog_events"); @@ -2051,10 +2052,15 @@ bool mysql_show_binlog_events(THD* thd) } else /* showing relay log contents */ { - if (!active_mi) + mysql_mutex_lock(&LOCK_active_mi); + if (!(mi= master_info_index-> + get_master_info(&thd->variables.default_master_connection, + MYSQL_ERROR::WARN_LEVEL_ERROR))) + { + mysql_mutex_unlock(&LOCK_active_mi); DBUG_RETURN(TRUE); - - binary_log= &(active_mi->rli.relay_log); + } + binary_log= &(mi->rli.relay_log); } if (binary_log->is_open()) @@ -2068,6 +2074,13 @@ bool mysql_show_binlog_events(THD* thd) mysql_mutex_t *log_lock = binary_log->get_log_lock(); Log_event* ev; + if (mi) + { + /* We can unlock the mutex as we have a lock on the file */ + mysql_mutex_unlock(&LOCK_active_mi); + mi= 0; + } + unit->set_limit(thd->lex->current_select); limit_start= unit->offset_limit_cnt; limit_end= unit->select_limit_cnt; @@ -2162,6 +2175,9 @@ bool mysql_show_binlog_events(THD* thd) mysql_mutex_unlock(log_lock); } + else if (mi) + mysql_mutex_unlock(&LOCK_active_mi); + // Check that linfo is still on the function scope. DEBUG_SYNC(thd, "after_show_binlog_events"); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e1bcb48e541..ab07a2010f0 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -11453,7 +11453,7 @@ show_param: LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS; } opt_limit_clause_init - | RELAYLOG_SYM EVENTS_SYM binlog_in binlog_from + | RELAYLOG_SYM optional_connection_name EVENTS_SYM binlog_in binlog_from { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_RELAYLOG_EVENTS;