mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge with 4.0
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union BitKeeper/deleted/.del-compile-netware-standard: Delete: netware/BUILD/compile-netware-standard BitKeeper/deleted/.del-mwenv: Delete: netware/BUILD/mwenv BitKeeper/deleted/.del-nwbootstrap: Delete: netware/BUILD/nwbootstrap BitKeeper/deleted/.del-compile-AUTOTOOLS: Delete: netware/BUILD/compile-AUTOTOOLS BitKeeper/deleted/.del-compile-linux-tools: Delete: netware/BUILD/compile-linux-tools BitKeeper/deleted/.del-compile-netware-END: Delete: netware/BUILD/compile-netware-END BitKeeper/deleted/.del-compile-netware-START: Delete: netware/BUILD/compile-netware-START BitKeeper/deleted/.del-compile-netware-all: Delete: netware/BUILD/compile-netware-all BitKeeper/deleted/.del-compile-netware-debug: Delete: netware/BUILD/compile-netware-debug BitKeeper/deleted/.del-mwasmnlm~bc5746809d67feb5: Auto merged BitKeeper/deleted/.del-mwenv~35c8b56062f4b6aa: Auto merged BitKeeper/deleted/.del-mwccnlm~be63afd25a14c3f: Auto merged BitKeeper/deleted/.del-mwldnlm~efb26c57cba3c980: Auto merged BitKeeper/deleted/.del-netware.patch~f70a3a965f54d9ee: Auto merged Docs/internals.texi: Auto merged VC++Files/bdb/bdb.dsp: Auto merged VC++Files/bdb/build_win32/Berkeley_DB.dsw: Auto merged VC++Files/bdb/build_win32/db_archive.dsp: Auto merged VC++Files/bdb/build_win32/db_buildall.dsp: Auto merged VC++Files/bdb/build_win32/db_checkpoint.dsp: Auto merged VC++Files/bdb/build_win32/db_deadlock.dsp: Auto merged VC++Files/bdb/build_win32/db_dll.dsp: Auto merged VC++Files/bdb/build_win32/db_dump.dsp: Auto merged VC++Files/bdb/build_win32/db_java.dsp: Auto merged VC++Files/bdb/build_win32/db_load.dsp: Auto merged VC++Files/bdb/build_win32/db_printlog.dsp: Auto merged VC++Files/bdb/build_win32/db_recover.dsp: Auto merged VC++Files/bdb/build_win32/db_stat.dsp: Auto merged VC++Files/bdb/build_win32/db_static.dsp: Auto merged VC++Files/bdb/build_win32/db_static1.dsp: Auto merged VC++Files/bdb/build_win32/db_tcl.dsp: Auto merged VC++Files/bdb/build_win32/db_test.dsp: Auto merged VC++Files/bdb/build_win32/db_upgrade.dsp: Auto merged VC++Files/bdb/build_win32/db_verify.dsp: Auto merged VC++Files/bdb/build_win32/ex_access.dsp: Auto merged VC++Files/bdb/build_win32/ex_btrec.dsp: Auto merged VC++Files/bdb/build_win32/ex_env.dsp: Auto merged VC++Files/bdb/build_win32/ex_lock.dsp: Auto merged VC++Files/bdb/build_win32/ex_mpool.dsp: Auto merged VC++Files/bdb/build_win32/ex_tpcb.dsp: Auto merged VC++Files/bdb/build_win32/excxx_access.dsp: Auto merged VC++Files/bdb/build_win32/excxx_btrec.dsp: Auto merged VC++Files/bdb/build_win32/excxx_env.dsp: Auto merged VC++Files/bdb/build_win32/excxx_lock.dsp: Auto merged VC++Files/bdb/build_win32/excxx_mpool.dsp: Auto merged VC++Files/bdb/build_win32/excxx_tpcb.dsp: Auto merged VC++Files/client/mysql.dsp: Auto merged VC++Files/client/mysqladmin.dsp: Auto merged VC++Files/client/mysqlcheck.dsp: Auto merged VC++Files/client/mysqlclient.dsp: Auto merged VC++Files/client/mysqlclient.dsw: Auto merged VC++Files/client/mysqldump.dsp: Auto merged VC++Files/client/mysqlimport.dsp: Auto merged VC++Files/client/mysqlshow.dsp: Auto merged VC++Files/comp_err/comp_err.dsp: Auto merged VC++Files/contrib/asm386/zlibvc.dsp: Auto merged VC++Files/contrib/asm386/zlibvc.dsw: Auto merged VC++Files/contrib/minizip/zlibvc.dsp: Auto merged VC++Files/contrib/minizip/zlibvc.dsw: Auto merged VC++Files/dbug/dbug.dsp: Auto merged VC++Files/dbug/dbug.dsw: Auto merged VC++Files/heap/heap.dsp: Auto merged VC++Files/innobase/innobase.dsp: Auto merged VC++Files/isam/isam.dsp: Auto merged VC++Files/isam/isam.dsw: Auto merged VC++Files/isamchk/isamchk.dsp: Auto merged VC++Files/libmysql/libmysql.dsp: Auto merged VC++Files/libmysql/libmysql.dsw: Auto merged VC++Files/libmysqld/examples/test_libmysqld.dsp: Auto merged VC++Files/libmysqld/libmysqld.dsp: Auto merged VC++Files/libmysqltest/myTest.dsp: Auto merged VC++Files/libmysqltest/mytest.dsw: Auto merged VC++Files/merge/merge.dsp: Auto merged VC++Files/merge/merge.dsw: Auto merged VC++Files/my_print_defaults/my_print_defaults.dsp: Auto merged VC++Files/myisam/myisam.dsp: Auto merged VC++Files/myisamchk/myisamchk.dsp: Auto merged VC++Files/myisamlog/myisamlog.dsp: Auto merged VC++Files/myisammrg/myisammrg.dsp: Auto merged VC++Files/mysql.dsp: Auto merged VC++Files/mysql.dsw: Auto merged VC++Files/myisampack/myisampack.dsp: Auto merged VC++Files/mysqlbinlog/mysqlbinlog.dsp: Auto merged VC++Files/mysqlcheck/mysqlcheck.dsp: Auto merged VC++Files/mysqldemb/mysqldemb.dsp: Auto merged VC++Files/mysqlmanager/MySqlManager.dsp: Auto merged VC++Files/mysqlmanager/mysqlmanager.dsw: Auto merged VC++Files/mysqlserver/mysqlserver.dsp: Auto merged VC++Files/mysqlshutdown/myshutdown.dsp: Auto merged VC++Files/mysqlshutdown/mysqlshutdown.dsp: Auto merged VC++Files/mysqlwatch/mysqlwatch.dsp: Auto merged VC++Files/mysys/mysys.dsp: Auto merged VC++Files/mysys/mysys.dsw: Auto merged VC++Files/pack_isam/pack_isam.dsp: Auto merged VC++Files/perror/perror.dsp: Auto merged VC++Files/regex/regex.dsp: Auto merged VC++Files/regex/regex.dsw: Auto merged VC++Files/replace/replace.dsp: Auto merged VC++Files/sql/mysqld.dsw: Auto merged VC++Files/sql/mysqldmax.dsp: Auto merged VC++Files/sql/old/mysqld.dsw: Auto merged VC++Files/strings/MASM6x/strings.dsp: Auto merged VC++Files/strings/MASM6x/strings.dsw: Auto merged VC++Files/strings/backup/strings.dsp: Auto merged VC++Files/strings/backup/strings.dsw: Auto merged VC++Files/strings/noMASM/strings.dsp: Auto merged VC++Files/strings/noMASM/strings.dsw: Auto merged VC++Files/strings/strings.dsw: Auto merged VC++Files/test1/test1.dsp: Auto merged VC++Files/thr_insert_test/thr_insert_test.dsp: Auto merged VC++Files/thr_test/thr_test.dsp: Auto merged VC++Files/vio/vio.dsp: Auto merged VC++Files/zlib/zlib.dsp: Auto merged client/mysqlbinlog.cc: Auto merged client/mysqlshow.c: Auto merged include/my_global.h: Auto merged include/my_sys.h: Auto merged include/myisam.h: Auto merged include/thr_lock.h: Auto merged include/violite.h: Auto merged innobase/buf/buf0buf.c: Auto merged innobase/os/os0file.c: Auto merged innobase/row/row0sel.c: Auto merged innobase/srv/srv0start.c: Auto merged innobase/trx/trx0sys.c: Auto merged libmysqld/lib_vio.c: Auto merged myisam/mi_create.c: Auto merged mysql-test/Makefile.am: Auto merged mysql-test/r/create.result: Auto merged mysql-test/r/group_by.result: Auto merged mysql-test/r/innodb.result: Auto merged mysql-test/r/join.result: Auto merged mysql-test/r/rpl000001.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/t/auto_increment.test: Auto merged mysql-test/t/create.test: Auto merged mysql-test/t/func_like.test: Auto merged mysql-test/t/group_by.test: Auto merged mysql-test/t/innodb.test: Auto merged mysql-test/t/join.test: Auto merged mysql-test/t/type_datetime.test: Auto merged mysql-test/t/type_timestamp.test: Auto merged mysys/default.c: Auto merged mysys/thr_lock.c: Auto merged scripts/make_binary_distribution.sh: Auto merged scripts/mysqld_safe.sh: Auto merged sql/filesort.cc: Auto merged sql/ha_innodb.h: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/item.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/log_event.h: Auto merged sql/mf_iocache.cc: Auto merged sql/mysql_priv.h: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/repl_failsafe.h: Auto merged sql/slave.cc: Auto merged sql/slave.h: Auto merged sql/sql_analyse.cc: Auto merged sql/sql_base.cc: Auto merged sql-bench/crash-me.sh: Auto merged sql/share/polish/errmsg.txt: Auto merged sql/sql_class.h: Auto merged sql/sql_rename.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_repl.h: Auto merged sql/sql_update.cc: Auto merged sql/stacktrace.c: Auto merged sql/table.cc: Auto merged sql/unireg.h: Auto merged strings/ctype-tis620.c: Auto merged strings/t_ctype.h: Auto merged support-files/mysql.spec.sh: Auto merged tests/grant.res: Auto merged vio/viosocket.c: Auto merged
This commit is contained in:
67
sql/slave.cc
67
sql/slave.cc
@ -235,8 +235,6 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,
|
||||
DBUG_ENTER("init_relay_log_pos");
|
||||
|
||||
*errmsg=0;
|
||||
if (rli->log_pos_current) // TODO: When can this happen ?
|
||||
DBUG_RETURN(0);
|
||||
pthread_mutex_t *log_lock=rli->relay_log.get_log_lock();
|
||||
pthread_mutex_lock(log_lock);
|
||||
if (need_data_lock)
|
||||
@ -298,7 +296,6 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,
|
||||
}
|
||||
if (pos > BIN_LOG_HEADER_SIZE)
|
||||
my_b_seek(rli->cur_log,(off_t)pos);
|
||||
rli->log_pos_current=1;
|
||||
|
||||
err:
|
||||
pthread_cond_broadcast(&rli->data_cond);
|
||||
@ -361,17 +358,37 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset,
|
||||
{
|
||||
int error=0;
|
||||
DBUG_ENTER("purge_relay_logs");
|
||||
|
||||
/*
|
||||
Even if rli->inited==0, we still try to empty rli->master_log_* variables.
|
||||
Indeed, rli->inited==0 does not imply that they already are empty.
|
||||
It could be that slave's info initialization partly succeeded :
|
||||
for example if relay-log.info existed but *relay-bin*.*
|
||||
have been manually removed, init_relay_log_info reads the old
|
||||
relay-log.info and fills rli->master_log_*, then init_relay_log_info
|
||||
checks for the existence of the relay log, this fails and
|
||||
init_relay_log_info leaves rli->inited to 0.
|
||||
In that pathological case, rli->master_log_pos* will be properly reinited
|
||||
at the next START SLAVE (as RESET SLAVE or CHANGE
|
||||
MASTER, the callers of purge_relay_logs, will delete bogus *.info files
|
||||
or replace them with correct files), however if the user does SHOW SLAVE
|
||||
STATUS before START SLAVE, he will see old, confusing rli->master_log_*.
|
||||
In other words, we reinit rli->master_log_* for SHOW SLAVE STATUS
|
||||
to display fine in any case.
|
||||
*/
|
||||
|
||||
rli->master_log_name[0]= 0;
|
||||
rli->master_log_pos= 0;
|
||||
rli->pending= 0;
|
||||
|
||||
if (!rli->inited)
|
||||
DBUG_RETURN(0); /* successfully do nothing */
|
||||
DBUG_RETURN(0);
|
||||
|
||||
DBUG_ASSERT(rli->slave_running == 0);
|
||||
DBUG_ASSERT(rli->mi->slave_running == 0);
|
||||
|
||||
rli->slave_skip_counter=0;
|
||||
pthread_mutex_lock(&rli->data_lock);
|
||||
rli->pending=0;
|
||||
rli->master_log_name[0]=0;
|
||||
rli->master_log_pos=0; // 0 means uninitialized
|
||||
if (rli->relay_log.reset_logs(thd))
|
||||
{
|
||||
*errmsg = "Failed during log reset";
|
||||
@ -385,7 +402,6 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset,
|
||||
rli->log_space_total= BIN_LOG_HEADER_SIZE;
|
||||
rli->relay_log_pos= BIN_LOG_HEADER_SIZE;
|
||||
rli->relay_log.reset_bytes_written();
|
||||
rli->log_pos_current=0;
|
||||
if (!just_reset)
|
||||
error= init_relay_log_pos(rli, rli->relay_log_name, rli->relay_log_pos,
|
||||
0 /* do not need data lock */, errmsg);
|
||||
@ -421,9 +437,9 @@ int terminate_slave_threads(MASTER_INFO* mi,int thread_mask,bool skip_lock)
|
||||
DBUG_PRINT("info",("Terminating IO thread"));
|
||||
mi->abort_slave=1;
|
||||
if ((error=terminate_slave_thread(mi->io_thd,io_lock,
|
||||
io_cond_lock,
|
||||
&mi->stop_cond,
|
||||
&mi->slave_running)) &&
|
||||
io_cond_lock,
|
||||
&mi->stop_cond,
|
||||
&mi->slave_running)) &&
|
||||
!force_all)
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
@ -463,12 +479,10 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock,
|
||||
be referening freed memory trying to kick it
|
||||
*/
|
||||
THD_CHECK_SENTRY(thd);
|
||||
if (*slave_running)
|
||||
|
||||
while (*slave_running) // Should always be true
|
||||
{
|
||||
KICK_SLAVE(thd);
|
||||
}
|
||||
while (*slave_running)
|
||||
{
|
||||
/*
|
||||
There is a small chance that slave thread might miss the first
|
||||
alarm. To protect againts it, resend the signal until it reacts
|
||||
@ -476,10 +490,6 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock,
|
||||
struct timespec abstime;
|
||||
set_timespec(abstime,2);
|
||||
pthread_cond_timedwait(term_cond, cond_lock, &abstime);
|
||||
if (*slave_running)
|
||||
{
|
||||
KICK_SLAVE(thd);
|
||||
}
|
||||
}
|
||||
if (term_lock)
|
||||
pthread_mutex_unlock(term_lock);
|
||||
@ -1225,7 +1235,6 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname)
|
||||
rli->pending = 0;
|
||||
rli->cur_log_fd = -1;
|
||||
rli->slave_skip_counter=0;
|
||||
rli->log_pos_current=0;
|
||||
rli->abort_pos_wait=0;
|
||||
rli->skip_log_purge=0;
|
||||
rli->log_space_limit = relay_log_space_limit;
|
||||
@ -1270,8 +1279,9 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname)
|
||||
if (init_relay_log_pos(rli,NullS,BIN_LOG_HEADER_SIZE,0 /* no data lock */,
|
||||
&msg))
|
||||
goto err;
|
||||
rli->master_log_pos = 0; // uninitialized
|
||||
rli->info_fd = info_fd;
|
||||
rli->master_log_name[0]= 0;
|
||||
rli->master_log_pos= 0;
|
||||
rli->info_fd= info_fd;
|
||||
}
|
||||
else // file exists
|
||||
{
|
||||
@ -1660,7 +1670,7 @@ st_relay_log_info::st_relay_log_info()
|
||||
cur_log_old_open_count(0), log_space_total(0),
|
||||
slave_skip_counter(0), abort_pos_wait(0), slave_run_id(0),
|
||||
sql_thd(0), last_slave_errno(0), inited(0), abort_slave(0),
|
||||
slave_running(0), log_pos_current(0), skip_log_purge(0),
|
||||
slave_running(0), skip_log_purge(0),
|
||||
inside_transaction(0) /* the default is autocommit=1 */
|
||||
{
|
||||
relay_log_name[0] = master_log_name[0] = 0;
|
||||
@ -1882,7 +1892,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
||||
|
||||
if (init_thr_lock() || thd->store_globals())
|
||||
{
|
||||
end_thread(thd,0);
|
||||
thd->cleanup();
|
||||
delete thd;
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
@ -2163,6 +2174,7 @@ extern "C" pthread_handler_decl(handle_slave_io,arg)
|
||||
|
||||
// needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff
|
||||
my_thread_init();
|
||||
DBUG_ENTER("handle_slave_io");
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
slave_begin:
|
||||
@ -2180,7 +2192,6 @@ slave_begin:
|
||||
#endif
|
||||
|
||||
thd= new THD; // note that contructor of THD uses DBUG_ !
|
||||
DBUG_ENTER("handle_slave_io");
|
||||
THD_CHECK_SENTRY(thd);
|
||||
|
||||
pthread_detach_this_thread();
|
||||
@ -2240,7 +2251,7 @@ connected:
|
||||
on with life.
|
||||
*/
|
||||
thd->proc_info = "Registering slave on master";
|
||||
if (register_slave_on_master(mysql) || update_slave_list(mysql))
|
||||
if (register_slave_on_master(mysql) || update_slave_list(mysql, mi))
|
||||
goto err;
|
||||
}
|
||||
|
||||
@ -2437,6 +2448,7 @@ extern "C" pthread_handler_decl(handle_slave_sql,arg)
|
||||
|
||||
// needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff
|
||||
my_thread_init();
|
||||
DBUG_ENTER("handle_slave_sql");
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
slave_begin:
|
||||
@ -2449,7 +2461,6 @@ slave_begin:
|
||||
#ifndef DBUG_OFF
|
||||
rli->events_till_abort = abort_slave_event_count;
|
||||
#endif
|
||||
DBUG_ENTER("handle_slave_sql");
|
||||
|
||||
thd = new THD; // note that contructor of THD uses DBUG_ !
|
||||
THD_CHECK_SENTRY(thd);
|
||||
@ -2542,7 +2553,6 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \
|
||||
TODO: see if we can do this conditionally in next_event() instead
|
||||
to avoid unneeded position re-init
|
||||
*/
|
||||
rli->log_pos_current=0;
|
||||
thd->temporary_tables = 0; // remove tempation from destructor to close them
|
||||
DBUG_ASSERT(thd->net.buff != 0);
|
||||
net_end(&thd->net); // destructor will not free it, because we are weird
|
||||
@ -2889,7 +2899,6 @@ void end_relay_log_info(RELAY_LOG_INFO* rli)
|
||||
rli->cur_log_fd = -1;
|
||||
}
|
||||
rli->inited = 0;
|
||||
rli->log_pos_current=0;
|
||||
rli->relay_log.close(1);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
Reference in New Issue
Block a user