mirror of
https://github.com/MariaDB/server.git
synced 2026-05-02 13:15:32 +02:00
Merge mysql.com:/home/my/mysql-5.0
into mysql.com:/home/my/mysql-5.1 BUILD/FINISH.sh: Auto merged BitKeeper/deleted/.del-makefilewin.i~5c8479dcb8a455b2: Auto merged BitKeeper/deleted/.del-makefilewin~13888739357b3025: Auto merged BitKeeper/deleted/.del-makefilewin~14f24a4a173e2fcd: Auto merged BitKeeper/deleted/.del-makefilewin~15e9e5c9e8fa870b: Auto merged BitKeeper/deleted/.del-makefilewin~1c53f31b88dd36e: Auto merged BitKeeper/deleted/.del-makefilewin~1dbc058d76ebf1db: Auto merged BitKeeper/deleted/.del-makefilewin~2e0407fe123f8365: Auto merged BitKeeper/deleted/.del-makefilewin~2fc379bd4065c995: Auto merged BitKeeper/deleted/.del-makefilewin~389ee2dcf79afb79: Auto merged BitKeeper/deleted/.del-makefilewin~4d139e182457e553: Auto merged BitKeeper/deleted/.del-makefilewin~5104767c73775697: Auto merged BitKeeper/deleted/.del-makefilewin~608ed49dcd88e0f7: Auto merged BitKeeper/deleted/.del-makefilewin~63acd666293282a: Auto merged BitKeeper/deleted/.del-makefilewin~6ba64863bce3d0b8: Auto merged BitKeeper/deleted/.del-makefilewin~72a64128bacce71b: Auto merged BitKeeper/deleted/.del-makefilewin~78000390c783b1c5: Auto merged BitKeeper/deleted/.del-makefilewin~7a9d7d5a42bbfaf5: Auto merged Makefile.am: Auto merged BitKeeper/deleted/.del-makefilewin~a40ea12eebdd6ef0: Auto merged BitKeeper/deleted/.del-makefilewin~aeea7c82f21f7cf5: Auto merged BitKeeper/deleted/.del-makefilewin~b643e38d8da389ac: Auto merged BitKeeper/deleted/.del-makefilewin~c7b621c745e5de95: Auto merged BitKeeper/deleted/.del-makefilewin~c8273a47b90f52bb: Auto merged BitKeeper/deleted/.del-makefilewin~d1a9d1f7d33fcb73: Auto merged BitKeeper/deleted/.del-makefilewin~d37b6b303348c871: Auto merged BitKeeper/deleted/.del-makefilewin~d90f35fdc3f2ee5f: Auto merged BitKeeper/deleted/.del-makefilewin~dc4b8ad5ea53bd: Auto merged BitKeeper/deleted/.del-makefilewin~dea10ec1c94f7be: Auto merged BitKeeper/deleted/.del-makefilewin~ef3a208fa0e9b0db: Auto merged BitKeeper/deleted/.del-makefilewin~f1e3b890aa1c9ea3: Auto merged BitKeeper/deleted/.del-makefilewin~f4b7b99a887b7de: Auto merged BitKeeper/deleted/.del-makefilewin~fdda94ad32fa9e34: Auto merged BitKeeper/deleted/.del-my_cnf~977f69858affc57b: Auto merged BitKeeper/etc/config: Auto merged VC++Files/libmysqld/libmysqld.dsp: Auto merged VC++Files/sql/mysqld.dsp: Auto merged client/mysqltest.c: Auto merged include/Makefile.am: Auto merged include/base64.h: Auto merged include/my_base.h: Auto merged include/mysql_com.h: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/ndb_basic.result: Auto merged mysql-test/r/ndb_condition_pushdown.result: Auto merged mysql-test/t/alter_table.test: Auto merged mysql-test/t/disabled.def: Auto merged mysql-test/t/query_cache.test: Auto merged mysys/Makefile.am: Auto merged mysys/base64.c: Auto merged scripts/make_win_src_distribution.sh: Auto merged scripts/mysql_create_system_tables.sh: Auto merged scripts/mysql_fix_privilege_tables.sql: Auto merged sql/Makefile.am: Auto merged sql/field.cc: Auto merged sql/field.h: Auto merged sql/ha_berkeley.cc: Auto merged sql/ha_berkeley.h: Auto merged sql/ha_federated.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/handler.h: Auto merged sql/item.cc: Auto merged sql/item_subselect.cc: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/mysqld.cc: Auto merged sql/opt_range.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/slave.cc: Auto merged sql/slave.h: Auto merged sql/sp.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_delete.cc: Auto merged sql/sql_help.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_load.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_show.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/table.h: Auto merged storage/heap/_check.c: Auto merged storage/heap/hp_create.c: Auto merged storage/innobase/include/Makefile.am: Auto merged storage/innobase/include/rem0rec.h: Auto merged storage/innobase/include/rem0rec.ic: Auto merged storage/innobase/row/row0ins.c: Auto merged storage/innobase/row/row0upd.c: Auto merged storage/myisam/mi_check.c: Auto merged storage/myisam/mi_delete.c: Auto merged storage/myisam/mi_rkey.c: Auto merged storage/myisam/mi_rnext_same.c: Auto merged storage/myisam/mi_search.c: Auto merged storage/myisam/mi_write.c: Auto merged storage/myisam/myisamchk.c: Auto merged storage/myisam/myisamdef.h: Auto merged storage/myisam/sort.c: Auto merged storage/myisammrg/myrg_queue.c: Auto merged storage/ndb/config/type_util.mk.am: Auto merged storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp: Auto merged storage/ndb/include/mgmapi/mgmapi_config_parameters.h: Auto merged storage/ndb/include/mgmapi/ndbd_exit_codes.h: Auto merged storage/ndb/include/transporter/TransporterCallback.hpp: Auto merged storage/ndb/src/common/mgmcommon/IPCConfig.cpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.cpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.hpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.unix.cpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.win32.cpp: Auto merged storage/ndb/src/common/transporter/Transporter.hpp: Auto merged storage/ndb/src/common/transporter/TransporterRegistry.cpp: Auto merged storage/ndb/src/common/util/Makefile.am: Auto merged storage/ndb/src/common/util/Parser.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp: Auto merged storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp: Auto merged storage/ndb/src/kernel/error/ndbd_exit_codes.c: Auto merged storage/ndb/src/kernel/vm/FastScheduler.cpp: Auto merged storage/ndb/src/kernel/vm/TransporterCallback.cpp: Auto merged storage/ndb/src/kernel/vm/VMSignal.hpp: Auto merged storage/ndb/src/mgmapi/mgmapi.cpp: Auto merged storage/ndb/src/mgmsrv/ConfigInfo.cpp: Auto merged storage/ndb/src/mgmsrv/InitConfigFileParser.cpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvr.cpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvr.hpp: Auto merged storage/ndb/src/mgmsrv/Services.cpp: Auto merged storage/ndb/src/ndbapi/TransporterFacade.cpp: Auto merged storage/ndb/test/ndbapi/testBackup.cpp: Auto merged storage/ndb/test/ndbapi/testOperations.cpp: Auto merged storage/ndb/test/src/HugoCalculator.cpp: Auto merged storage/ndb/tools/ndb_condig.cpp: Auto merged strings/ctype-big5.c: Auto merged strings/ctype-ucs2.c: Auto merged support-files/mysql.spec.sh: Auto merged BUILD/SETUP.sh: manual merge configure.in: manual merge mysql-test/r/alter_table.result: manual merge sql/handler.cc: manual merge sql/mysql_priv.h: manual merge sql/records.cc: manual merge sql/share/errmsg.txt: manual merge sql/sql_table.cc: manual merge Fix labels sql/sql_update.cc: manual merge sql/table.cc: manual merge sql/unireg.cc: manual merge storage/ndb/config/type_ndbapi.mk.am: manual merge
This commit is contained in:
commit
2361720c98
487 changed files with 26824 additions and 7405 deletions
170
sql/slave.cc
170
sql/slave.cc
|
|
@ -564,6 +564,20 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset,
|
|||
|
||||
rli->slave_skip_counter=0;
|
||||
pthread_mutex_lock(&rli->data_lock);
|
||||
|
||||
/*
|
||||
we close the relay log fd possibly left open by the slave SQL thread,
|
||||
to be able to delete it; the relay log fd possibly left open by the slave
|
||||
I/O thread will be closed naturally in reset_logs() by the
|
||||
close(LOG_CLOSE_TO_BE_OPENED) call
|
||||
*/
|
||||
if (rli->cur_log_fd >= 0)
|
||||
{
|
||||
end_io_cache(&rli->cache_buf);
|
||||
my_close(rli->cur_log_fd, MYF(MY_WME));
|
||||
rli->cur_log_fd= -1;
|
||||
}
|
||||
|
||||
if (rli->relay_log.reset_logs(thd))
|
||||
{
|
||||
*errmsg = "Failed during log reset";
|
||||
|
|
@ -1393,9 +1407,26 @@ static int init_relay_log_info(RELAY_LOG_INFO* rli,
|
|||
{
|
||||
char buf[FN_REFLEN];
|
||||
const char *ln;
|
||||
static bool name_warning_sent= 0;
|
||||
ln= rli->relay_log.generate_name(opt_relay_logname, "-relay-bin",
|
||||
1, buf);
|
||||
|
||||
/* We send the warning only at startup, not after every RESET SLAVE */
|
||||
if (!opt_relay_logname && !opt_relaylog_index_name && !name_warning_sent)
|
||||
{
|
||||
/*
|
||||
User didn't give us info to name the relay log index file.
|
||||
Picking `hostname`-relay-bin.index like we do, causes replication to
|
||||
fail if this slave's hostname is changed later. So, we would like to
|
||||
instead require a name. But as we don't want to break many existing
|
||||
setups, we only give warning, not error.
|
||||
*/
|
||||
sql_print_warning("Neither --relay-log nor --relay-log-index were used;"
|
||||
" so replication "
|
||||
"may break when this MySQL server acts as a "
|
||||
"slave and has his hostname changed!! Please "
|
||||
"use '--relay-log=%s' to avoid this problem.", ln);
|
||||
name_warning_sent= 1;
|
||||
}
|
||||
/*
|
||||
note, that if open() fails, we'll still have index file open
|
||||
but a destructor will take care of that
|
||||
|
|
@ -1619,6 +1650,55 @@ static int count_relay_log_space(RELAY_LOG_INFO* rli)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Builds a Rotate from the ignored events' info and writes it to relay log.
|
||||
|
||||
SYNOPSIS
|
||||
write_ignored_events_info_to_relay_log()
|
||||
thd pointer to I/O thread's thd
|
||||
mi
|
||||
|
||||
DESCRIPTION
|
||||
Slave I/O thread, going to die, must leave a durable trace of the
|
||||
ignored events' end position for the use of the slave SQL thread, by
|
||||
calling this function. Only that thread can call it (see assertion).
|
||||
*/
|
||||
static void write_ignored_events_info_to_relay_log(THD *thd, MASTER_INFO *mi)
|
||||
{
|
||||
RELAY_LOG_INFO *rli= &mi->rli;
|
||||
pthread_mutex_t *log_lock= rli->relay_log.get_log_lock();
|
||||
DBUG_ASSERT(thd == mi->io_thd);
|
||||
pthread_mutex_lock(log_lock);
|
||||
if (rli->ign_master_log_name_end[0])
|
||||
{
|
||||
DBUG_PRINT("info",("writing a Rotate event to track down ignored events"));
|
||||
Rotate_log_event *ev= new Rotate_log_event(thd, rli->ign_master_log_name_end,
|
||||
0, rli->ign_master_log_pos_end,
|
||||
Rotate_log_event::DUP_NAME);
|
||||
rli->ign_master_log_name_end[0]= 0;
|
||||
/* can unlock before writing as slave SQL thd will soon see our Rotate */
|
||||
pthread_mutex_unlock(log_lock);
|
||||
if (likely((bool)ev))
|
||||
{
|
||||
ev->server_id= 0; // don't be ignored by slave SQL thread
|
||||
if (unlikely(rli->relay_log.append(ev)))
|
||||
sql_print_error("Slave I/O thread failed to write a Rotate event"
|
||||
" to the relay log, "
|
||||
"SHOW SLAVE STATUS may be inaccurate");
|
||||
rli->relay_log.harvest_bytes_written(&rli->log_space_total);
|
||||
flush_master_info(mi, 1);
|
||||
delete ev;
|
||||
}
|
||||
else
|
||||
sql_print_error("Slave I/O thread failed to create a Rotate event"
|
||||
" (out of memory?), "
|
||||
"SHOW SLAVE STATUS may be inaccurate");
|
||||
}
|
||||
else
|
||||
pthread_mutex_unlock(log_lock);
|
||||
}
|
||||
|
||||
|
||||
void init_master_info_with_options(MASTER_INFO* mi)
|
||||
{
|
||||
mi->master_log_name[0] = 0;
|
||||
|
|
@ -2168,7 +2248,7 @@ st_relay_log_info::st_relay_log_info()
|
|||
{
|
||||
group_relay_log_name[0]= event_relay_log_name[0]=
|
||||
group_master_log_name[0]= 0;
|
||||
last_slave_error[0]=0; until_log_name[0]= 0;
|
||||
last_slave_error[0]= until_log_name[0]= ign_master_log_name_end[0]= 0;
|
||||
|
||||
bzero((char*) &info_file, sizeof(info_file));
|
||||
bzero((char*) &cache_buf, sizeof(cache_buf));
|
||||
|
|
@ -2371,7 +2451,7 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name,
|
|||
else
|
||||
pthread_cond_wait(&data_cond, &data_lock);
|
||||
DBUG_PRINT("info",("Got signal of master update or timed out"));
|
||||
if (error == ETIMEDOUT)
|
||||
if (error == ETIMEDOUT || error == ETIME)
|
||||
{
|
||||
error= -1;
|
||||
break;
|
||||
|
|
@ -2427,7 +2507,6 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
|||
thd->system_thread = (thd_type == SLAVE_THD_SQL) ?
|
||||
SYSTEM_THREAD_SLAVE_SQL : SYSTEM_THREAD_SLAVE_IO;
|
||||
thd->security_ctx->skip_grants();
|
||||
thd->client_capabilities = 0;
|
||||
my_net_init(&thd->net, 0);
|
||||
thd->net.read_timeout = slave_net_timeout;
|
||||
thd->slave_thread = 1;
|
||||
|
|
@ -2761,12 +2840,20 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli)
|
|||
wait for something for example inside of next_event().
|
||||
*/
|
||||
pthread_mutex_lock(&rli->data_lock);
|
||||
|
||||
/*
|
||||
This tests if the position of the end of the last previous executed event
|
||||
hits the UNTIL barrier.
|
||||
We would prefer to test if the position of the start (or possibly) end of
|
||||
the to-be-read event hits the UNTIL barrier, this is different if there
|
||||
was an event ignored by the I/O thread just before (BUG#13861 to be
|
||||
fixed).
|
||||
*/
|
||||
if (rli->until_condition!=RELAY_LOG_INFO::UNTIL_NONE &&
|
||||
rli->is_until_satisfied())
|
||||
{
|
||||
char buf[22];
|
||||
sql_print_error("Slave SQL thread stopped because it reached its"
|
||||
" UNTIL position %ld", (long) rli->until_pos());
|
||||
" UNTIL position %s", llstr(rli->until_pos(), buf));
|
||||
/*
|
||||
Setting abort_slave flag because we do not want additional message about
|
||||
error in query execution to be printed.
|
||||
|
|
@ -2954,6 +3041,7 @@ pthread_handler_t handle_slave_io(void *arg)
|
|||
THD *thd; // needs to be first for thread_stack
|
||||
MYSQL *mysql;
|
||||
MASTER_INFO *mi = (MASTER_INFO*)arg;
|
||||
RELAY_LOG_INFO *rli= &mi->rli;
|
||||
char llbuff[22];
|
||||
uint retry_count;
|
||||
|
||||
|
|
@ -3196,16 +3284,16 @@ reconnect done to recover from failed read");
|
|||
char llbuf1[22], llbuf2[22];
|
||||
DBUG_PRINT("info", ("log_space_limit=%s log_space_total=%s \
|
||||
ignore_log_space_limit=%d",
|
||||
llstr(mi->rli.log_space_limit,llbuf1),
|
||||
llstr(mi->rli.log_space_total,llbuf2),
|
||||
(int) mi->rli.ignore_log_space_limit));
|
||||
llstr(rli->log_space_limit,llbuf1),
|
||||
llstr(rli->log_space_total,llbuf2),
|
||||
(int) rli->ignore_log_space_limit));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (mi->rli.log_space_limit && mi->rli.log_space_limit <
|
||||
mi->rli.log_space_total &&
|
||||
!mi->rli.ignore_log_space_limit)
|
||||
if (wait_for_relay_log_space(&mi->rli))
|
||||
if (rli->log_space_limit && rli->log_space_limit <
|
||||
rli->log_space_total &&
|
||||
!rli->ignore_log_space_limit)
|
||||
if (wait_for_relay_log_space(rli))
|
||||
{
|
||||
sql_print_error("Slave I/O thread aborted while waiting for relay \
|
||||
log space");
|
||||
|
|
@ -3236,10 +3324,12 @@ err:
|
|||
mysql_close(mysql);
|
||||
mi->mysql=0;
|
||||
}
|
||||
write_ignored_events_info_to_relay_log(thd, mi);
|
||||
thd->proc_info = "Waiting for slave mutex on exit";
|
||||
pthread_mutex_lock(&mi->run_lock);
|
||||
mi->slave_running = 0;
|
||||
mi->io_thd = 0;
|
||||
|
||||
/* Forget the relay log's format */
|
||||
delete mi->rli.relay_log.description_event_for_queue;
|
||||
mi->rli.relay_log.description_event_for_queue= 0;
|
||||
|
|
@ -3618,6 +3708,7 @@ static int process_io_rotate(MASTER_INFO *mi, Rotate_log_event *rev)
|
|||
if (unlikely(!rev->is_valid()))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
/* Safe copy as 'rev' has been "sanitized" in Rotate_log_event's ctor */
|
||||
memcpy(mi->master_log_name, rev->new_log_ident, rev->ident_len+1);
|
||||
mi->master_log_pos= rev->pos;
|
||||
DBUG_PRINT("info", ("master_log_pos: '%s' %d",
|
||||
|
|
@ -3868,6 +3959,7 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
|
|||
int error= 0;
|
||||
ulong inc_pos;
|
||||
RELAY_LOG_INFO *rli= &mi->rli;
|
||||
pthread_mutex_t *log_lock= rli->relay_log.get_log_lock();
|
||||
DBUG_ENTER("queue_event");
|
||||
|
||||
if (mi->rli.relay_log.description_event_for_queue->binlog_version<4 &&
|
||||
|
|
@ -3876,11 +3968,6 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
|
|||
|
||||
pthread_mutex_lock(&mi->data_lock);
|
||||
|
||||
/*
|
||||
TODO: figure out if other events in addition to Rotate
|
||||
require special processing.
|
||||
Guilhem 2003-06 : I don't think so.
|
||||
*/
|
||||
switch (buf[EVENT_TYPE_OFFSET]) {
|
||||
case STOP_EVENT:
|
||||
/*
|
||||
|
|
@ -3965,14 +4052,21 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
|
|||
direct master (an unsupported, useless setup!).
|
||||
*/
|
||||
|
||||
pthread_mutex_lock(log_lock);
|
||||
|
||||
if ((uint4korr(buf + SERVER_ID_OFFSET) == ::server_id) &&
|
||||
!replicate_same_server_id)
|
||||
{
|
||||
/*
|
||||
Do not write it to the relay log.
|
||||
We still want to increment, so that we won't re-read this event from the
|
||||
master if the slave IO thread is now stopped/restarted (more efficient if
|
||||
the events we are ignoring are big LOAD DATA INFILE).
|
||||
a) We still want to increment mi->master_log_pos, so that we won't
|
||||
re-read this event from the master if the slave IO thread is now
|
||||
stopped/restarted (more efficient if the events we are ignoring are big
|
||||
LOAD DATA INFILE).
|
||||
b) We want to record that we are skipping events, for the information of
|
||||
the slave SQL thread, otherwise that thread may let
|
||||
rli->group_relay_log_pos stay too small if the last binlog's event is
|
||||
ignored.
|
||||
But events which were generated by this slave and which do not exist in
|
||||
the master's binlog (i.e. Format_desc, Rotate & Stop) should not increment
|
||||
mi->master_log_pos.
|
||||
|
|
@ -3980,7 +4074,13 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
|
|||
if (buf[EVENT_TYPE_OFFSET]!=FORMAT_DESCRIPTION_EVENT &&
|
||||
buf[EVENT_TYPE_OFFSET]!=ROTATE_EVENT &&
|
||||
buf[EVENT_TYPE_OFFSET]!=STOP_EVENT)
|
||||
{
|
||||
mi->master_log_pos+= inc_pos;
|
||||
memcpy(rli->ign_master_log_name_end, mi->master_log_name, FN_REFLEN);
|
||||
DBUG_ASSERT(rli->ign_master_log_name_end[0]);
|
||||
rli->ign_master_log_pos_end= mi->master_log_pos;
|
||||
}
|
||||
rli->relay_log.signal_update(); // the slave SQL thread needs to re-check
|
||||
DBUG_PRINT("info", ("master_log_pos: %d, event originating from the same server, ignored", (ulong) mi->master_log_pos));
|
||||
}
|
||||
else
|
||||
|
|
@ -3993,8 +4093,11 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
|
|||
rli->relay_log.harvest_bytes_written(&rli->log_space_total);
|
||||
}
|
||||
else
|
||||
error=3;
|
||||
error= 3;
|
||||
rli->ign_master_log_name_end[0]= 0; // last event is not ignored
|
||||
}
|
||||
pthread_mutex_unlock(log_lock);
|
||||
|
||||
|
||||
err:
|
||||
pthread_mutex_unlock(&mi->data_lock);
|
||||
|
|
@ -4377,7 +4480,28 @@ Log_event* next_event(RELAY_LOG_INFO* rli)
|
|||
time_t save_timestamp= rli->last_master_timestamp;
|
||||
rli->last_master_timestamp= 0;
|
||||
|
||||
DBUG_ASSERT(rli->relay_log.get_open_count() == rli->cur_log_old_open_count);
|
||||
DBUG_ASSERT(rli->relay_log.get_open_count() ==
|
||||
rli->cur_log_old_open_count);
|
||||
|
||||
if (rli->ign_master_log_name_end[0])
|
||||
{
|
||||
/* We generate and return a Rotate, to make our positions advance */
|
||||
DBUG_PRINT("info",("seeing an ignored end segment"));
|
||||
ev= new Rotate_log_event(thd, rli->ign_master_log_name_end,
|
||||
0, rli->ign_master_log_pos_end,
|
||||
Rotate_log_event::DUP_NAME);
|
||||
rli->ign_master_log_name_end[0]= 0;
|
||||
pthread_mutex_unlock(log_lock);
|
||||
if (unlikely(!ev))
|
||||
{
|
||||
errmsg= "Slave SQL thread failed to create a Rotate event "
|
||||
"(out of memory?), SHOW SLAVE STATUS may be inaccurate";
|
||||
goto err;
|
||||
}
|
||||
ev->server_id= 0; // don't be ignored by slave SQL thread
|
||||
DBUG_RETURN(ev);
|
||||
}
|
||||
|
||||
/*
|
||||
We can, and should release data_lock while we are waiting for
|
||||
update. If we do not, show slave status will block
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue