mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03: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:
@ -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));
|
||||
|
Reference in New Issue
Block a user