1
0
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:
unknown
2002-03-15 18:44:44 -07:00
parent b8a9ea66ba
commit 9c435716a9
15 changed files with 118 additions and 15 deletions

View File

@ -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));