mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
replication updates and bugfixes. Still not perfect - there is some strange
memory corruption I can only repeat on one system.
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