mirror of
https://github.com/MariaDB/server.git
synced 2026-04-26 10:15:29 +02:00
replication updates and bugfixes. Still not perfect - there is some strange
memory corruption I can only repeat on one system. mysql-test/r/multi_update.result: extended test trying to find why the old one was failing mysql-test/r/rpl000015.result: result update mysql-test/t/multi_update.test: updated test to do more intermediate result checks mysql-test/t/rpl000014.test: cosmetic change mysql-test/t/rpl000015-slave-master-info.opt: reduce connect retry trying to simulate a bug mysql-test/t/rpl000015.test: cosmetic change sql/lex.h: added RELAY_LOG_FILE and RELAY_LOG_POS to CHANGE MASTER TO sql/log.cc: fixed replication bug sql/log_event.cc: properly ignore replication errors according to error mask sql/mysqld.cc: handle SIGFPE in the coredump handler sql/slave.cc: do not kick slave if it has already exited and freed the structures sql/sql_lex.cc: fixed initialization bug in CHANGE MASTER TO sql/sql_lex.h: CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS= sql/sql_repl.cc: CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS= sql/sql_yacc.yy: CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS=
This commit is contained in:
parent
b8a9ea66ba
commit
9c435716a9
15 changed files with 117 additions and 14 deletions
|
|
@ -690,6 +690,7 @@ int change_master(THD* thd, MASTER_INFO* mi)
|
|||
{
|
||||
int error=0,restart_thread_mask;
|
||||
const char* errmsg=0;
|
||||
bool need_relay_log_purge=1;
|
||||
|
||||
// kill slave thread
|
||||
lock_slave_threads(mi);
|
||||
|
|
@ -742,17 +743,47 @@ int change_master(THD* thd, MASTER_INFO* mi)
|
|||
if (lex_mi->connect_retry)
|
||||
mi->connect_retry = lex_mi->connect_retry;
|
||||
|
||||
flush_master_info(mi);
|
||||
pthread_mutex_unlock(&mi->data_lock);
|
||||
thd->proc_info="purging old relay logs";
|
||||
if (purge_relay_logs(&mi->rli,0 /* not only reset, but also reinit*/,
|
||||
&errmsg))
|
||||
if (lex_mi->relay_log_name)
|
||||
{
|
||||
send_error(&thd->net, 0, "Failed purging old relay logs");
|
||||
unlock_slave_threads(mi);
|
||||
return 1;
|
||||
need_relay_log_purge = 0;
|
||||
strnmov(mi->rli.relay_log_name,lex_mi->relay_log_name,
|
||||
sizeof(mi->rli.relay_log_name));
|
||||
}
|
||||
|
||||
if (lex_mi->relay_log_pos)
|
||||
{
|
||||
need_relay_log_purge=0;
|
||||
mi->rli.relay_log_pos=lex_mi->relay_log_pos;
|
||||
}
|
||||
|
||||
flush_master_info(mi);
|
||||
if (need_relay_log_purge)
|
||||
{
|
||||
pthread_mutex_unlock(&mi->data_lock);
|
||||
thd->proc_info="purging old relay logs";
|
||||
if (purge_relay_logs(&mi->rli,0 /* not only reset, but also reinit*/,
|
||||
&errmsg))
|
||||
{
|
||||
send_error(&thd->net, 0, "Failed purging old relay logs");
|
||||
unlock_slave_threads(mi);
|
||||
return 1;
|
||||
}
|
||||
pthread_mutex_lock(&mi->rli.data_lock);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* msg;
|
||||
if (init_relay_log_pos(&mi->rli,0/*log already inited*/,
|
||||
0 /*pos already inited*/,
|
||||
0 /*no data lock*/,
|
||||
&msg))
|
||||
{
|
||||
net_printf(&thd->net,0,"Failed initializing relay log position: %s",msg);
|
||||
unlock_slave_threads(mi);
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
pthread_mutex_lock(&mi->rli.data_lock);
|
||||
mi->rli.master_log_pos = mi->master_log_pos;
|
||||
strnmov(mi->rli.master_log_name,mi->master_log_name,
|
||||
sizeof(mi->rli.master_log_name));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue