mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.0 into 10.1
This commit is contained in:
@ -3041,7 +3041,16 @@ int start_slave(THD* thd , Master_info* mi, bool net_report)
|
||||
relay_log_info_file, 0,
|
||||
&mi->cmp_connection_name);
|
||||
|
||||
lock_slave_threads(mi); // this allows us to cleanly read slave_running
|
||||
mi->lock_slave_threads();
|
||||
if (mi->killed)
|
||||
{
|
||||
/* connection was deleted while we waited for lock_slave_threads */
|
||||
mi->unlock_slave_threads();
|
||||
my_error(WARN_NO_MASTER_INFO, mi->connection_name.length,
|
||||
mi->connection_name.str);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
// Get a mask of _stopped_ threads
|
||||
init_thread_mask(&thread_mask,mi,1 /* inverse */);
|
||||
|
||||
@ -3176,7 +3185,7 @@ int start_slave(THD* thd , Master_info* mi, bool net_report)
|
||||
|
||||
if (!slave_errno)
|
||||
slave_errno = start_slave_threads(thd,
|
||||
0 /*no mutex */,
|
||||
1,
|
||||
1 /* wait for start */,
|
||||
mi,
|
||||
master_info_file_tmp,
|
||||
@ -3192,7 +3201,7 @@ int start_slave(THD* thd , Master_info* mi, bool net_report)
|
||||
}
|
||||
|
||||
err:
|
||||
unlock_slave_threads(mi);
|
||||
mi->unlock_slave_threads();
|
||||
thd_proc_info(thd, 0);
|
||||
|
||||
if (slave_errno)
|
||||
@ -3233,8 +3242,12 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
|
||||
DBUG_RETURN(-1);
|
||||
THD_STAGE_INFO(thd, stage_killing_slave);
|
||||
int thread_mask;
|
||||
lock_slave_threads(mi);
|
||||
// Get a mask of _running_ threads
|
||||
mi->lock_slave_threads();
|
||||
/*
|
||||
Get a mask of _running_ threads.
|
||||
We don't have to test for mi->killed as the thread_mask will take care
|
||||
of checking if threads exists
|
||||
*/
|
||||
init_thread_mask(&thread_mask,mi,0 /* not inverse*/);
|
||||
/*
|
||||
Below we will stop all running threads.
|
||||
@ -3247,8 +3260,7 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
|
||||
|
||||
if (thread_mask)
|
||||
{
|
||||
slave_errno= terminate_slave_threads(mi,thread_mask,
|
||||
1 /*skip lock */);
|
||||
slave_errno= terminate_slave_threads(mi,thread_mask, 0 /* get lock */);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3257,7 +3269,8 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
|
||||
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, ER_SLAVE_WAS_NOT_RUNNING,
|
||||
ER_THD(thd, ER_SLAVE_WAS_NOT_RUNNING));
|
||||
}
|
||||
unlock_slave_threads(mi);
|
||||
|
||||
mi->unlock_slave_threads();
|
||||
|
||||
if (slave_errno)
|
||||
{
|
||||
@ -3292,11 +3305,20 @@ int reset_slave(THD *thd, Master_info* mi)
|
||||
char relay_log_info_file_tmp[FN_REFLEN];
|
||||
DBUG_ENTER("reset_slave");
|
||||
|
||||
lock_slave_threads(mi);
|
||||
mi->lock_slave_threads();
|
||||
if (mi->killed)
|
||||
{
|
||||
/* connection was deleted while we waited for lock_slave_threads */
|
||||
mi->unlock_slave_threads();
|
||||
my_error(WARN_NO_MASTER_INFO, mi->connection_name.length,
|
||||
mi->connection_name.str);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
init_thread_mask(&thread_mask,mi,0 /* not inverse */);
|
||||
if (thread_mask) // We refuse if any slave thread is running
|
||||
{
|
||||
unlock_slave_threads(mi);
|
||||
mi->unlock_slave_threads();
|
||||
my_error(ER_SLAVE_MUST_STOP, MYF(0), (int) mi->connection_name.length,
|
||||
mi->connection_name.str);
|
||||
DBUG_RETURN(ER_SLAVE_MUST_STOP);
|
||||
@ -3359,7 +3381,7 @@ int reset_slave(THD *thd, Master_info* mi)
|
||||
|
||||
RUN_HOOK(binlog_relay_io, after_reset_slave, (thd, mi));
|
||||
err:
|
||||
unlock_slave_threads(mi);
|
||||
mi->unlock_slave_threads();
|
||||
if (error)
|
||||
my_error(sql_errno, MYF(0), errmsg);
|
||||
DBUG_RETURN(error);
|
||||
@ -3474,8 +3496,8 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
|
||||
|
||||
DBUG_ENTER("change_master");
|
||||
|
||||
mysql_mutex_assert_owner(&LOCK_active_mi);
|
||||
DBUG_ASSERT(master_info_index);
|
||||
mysql_mutex_assert_owner(&LOCK_active_mi);
|
||||
|
||||
*master_info_added= false;
|
||||
/*
|
||||
@ -3495,7 +3517,16 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
|
||||
lex_mi->port))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
lock_slave_threads(mi);
|
||||
mi->lock_slave_threads();
|
||||
if (mi->killed)
|
||||
{
|
||||
/* connection was deleted while we waited for lock_slave_threads */
|
||||
mi->unlock_slave_threads();
|
||||
my_error(WARN_NO_MASTER_INFO, mi->connection_name.length,
|
||||
mi->connection_name.str);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
init_thread_mask(&thread_mask,mi,0 /*not inverse*/);
|
||||
if (thread_mask) // We refuse if any slave thread is running
|
||||
{
|
||||
@ -3816,12 +3847,13 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
|
||||
in-memory value at restart (thus causing errors, as the old relay log does
|
||||
not exist anymore).
|
||||
*/
|
||||
flush_relay_log_info(&mi->rli);
|
||||
if (flush_relay_log_info(&mi->rli))
|
||||
ret= 1;
|
||||
mysql_cond_broadcast(&mi->data_cond);
|
||||
mysql_mutex_unlock(&mi->rli.data_lock);
|
||||
|
||||
err:
|
||||
unlock_slave_threads(mi);
|
||||
mi->unlock_slave_threads();
|
||||
if (ret == FALSE)
|
||||
my_ok(thd);
|
||||
DBUG_RETURN(ret);
|
||||
@ -3901,13 +3933,9 @@ bool mysql_show_binlog_events(THD* thd)
|
||||
{
|
||||
if (!lex_mi->connection_name.str)
|
||||
lex_mi->connection_name= thd->variables.default_master_connection;
|
||||
mysql_mutex_lock(&LOCK_active_mi);
|
||||
if (!master_info_index ||
|
||||
!(mi= master_info_index->
|
||||
get_master_info(&lex_mi->connection_name,
|
||||
Sql_condition::WARN_LEVEL_ERROR)))
|
||||
if (!(mi= get_master_info(&lex_mi->connection_name,
|
||||
Sql_condition::WARN_LEVEL_ERROR)))
|
||||
{
|
||||
mysql_mutex_unlock(&LOCK_active_mi);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
binary_log= &(mi->rli.relay_log);
|
||||
@ -3926,7 +3954,7 @@ bool mysql_show_binlog_events(THD* thd)
|
||||
if (mi)
|
||||
{
|
||||
/* We can unlock the mutex as we have a lock on the file */
|
||||
mysql_mutex_unlock(&LOCK_active_mi);
|
||||
mi->release();
|
||||
mi= 0;
|
||||
}
|
||||
|
||||
@ -3948,6 +3976,7 @@ bool mysql_show_binlog_events(THD* thd)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* These locks is here to enable syncronization with log_in_use() */
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
thd->current_linfo = &linfo;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
@ -4061,7 +4090,7 @@ bool mysql_show_binlog_events(THD* thd)
|
||||
mysql_mutex_unlock(log_lock);
|
||||
}
|
||||
else if (mi)
|
||||
mysql_mutex_unlock(&LOCK_active_mi);
|
||||
mi->release();
|
||||
|
||||
// Check that linfo is still on the function scope.
|
||||
DEBUG_SYNC(thd, "after_show_binlog_events");
|
||||
@ -4082,8 +4111,9 @@ err:
|
||||
else
|
||||
my_eof(thd);
|
||||
|
||||
/* These locks is here to enable syncronization with log_in_use() */
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
thd->current_linfo = 0;
|
||||
thd->current_linfo= 0;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
thd->variables.max_allowed_packet= old_max_allowed_packet;
|
||||
DBUG_RETURN(ret);
|
||||
|
Reference in New Issue
Block a user