Commit 53f5cffb authored by tomas@poseidon.ndb.mysql.com's avatar tomas@poseidon.ndb.mysql.com

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1

into poseidon.ndb.mysql.com:/home/tomas/mysql-4.1-qc
parents 48cb2f5d 4ac392fa
...@@ -101,6 +101,7 @@ lenz@mysql.com ...@@ -101,6 +101,7 @@ lenz@mysql.com
magnus@neptunus.(none) magnus@neptunus.(none)
magnus@shellback.(none) magnus@shellback.(none)
marko@hundin.mysql.fi marko@hundin.mysql.fi
mats@mysql.com
matt@mysql.com matt@mysql.com
matthias@three.local.lan matthias@three.local.lan
miguel@hegel.(none) miguel@hegel.(none)
......
slave stop;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
slave start;
stop slave;
create table t1(n int);
start slave;
stop slave io_thread;
start slave io_thread;
drop table t1;
source include/master-slave.inc;
#
# Bug#6148 ()
#
connection slave;
stop slave;
# Let the master do lots of insertions
connection master;
create table t1(n int);
let $1=5000;
disable_query_log;
while ($1)
{
eval insert into t1 values($1);
dec $1;
}
enable_query_log;
save_master_pos;
connection slave;
start slave;
sleep 1;
stop slave io_thread;
start slave io_thread;
sync_with_master;
connection master;
drop table t1;
save_master_pos;
connection slave;
sync_with_master;
...@@ -1602,18 +1602,21 @@ longlong Item_func_bit_count::val_int() ...@@ -1602,18 +1602,21 @@ longlong Item_func_bit_count::val_int()
udf_handler::~udf_handler() udf_handler::~udf_handler()
{ {
if (initialized) if (!not_original)
{ {
if (u_d->func_deinit != NULL) if (initialized)
{ {
void (*deinit)(UDF_INIT *) = (void (*)(UDF_INIT*)) if (u_d->func_deinit != NULL)
u_d->func_deinit; {
(*deinit)(&initid); void (*deinit)(UDF_INIT *) = (void (*)(UDF_INIT*))
u_d->func_deinit;
(*deinit)(&initid);
}
free_udf(u_d);
} }
free_udf(u_d); if (buffers) // Because of bug in ecc
delete [] buffers;
} }
if (buffers) // Because of bug in ecc
delete [] buffers;
} }
......
...@@ -531,7 +531,7 @@ public: ...@@ -531,7 +531,7 @@ public:
:Item_sum( list ), udf(udf_arg) :Item_sum( list ), udf(udf_arg)
{ quick_group=0;} { quick_group=0;}
Item_udf_sum(THD *thd, Item_udf_sum *item) Item_udf_sum(THD *thd, Item_udf_sum *item)
:Item_sum(thd, item), udf(item->udf) {} :Item_sum(thd, item), udf(item->udf) { udf.not_original= TRUE; }
const char *func_name() const { return udf.name(); } const char *func_name() const { return udf.name(); }
bool fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) bool fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
{ {
......
...@@ -921,8 +921,8 @@ int load_master_data(THD* thd) ...@@ -921,8 +921,8 @@ int load_master_data(THD* thd)
*/ */
int error; int error;
if (init_master_info(active_mi, master_info_file, relay_log_info_file, if (init_master_info(active_mi, master_info_file, relay_log_info_file,
0)) 0, (SLAVE_IO | SLAVE_SQL)))
send_error(thd, ER_MASTER_INFO); send_error(thd, ER_MASTER_INFO);
strmake(active_mi->master_log_name, row[0], strmake(active_mi->master_log_name, row[0],
sizeof(active_mi->master_log_name)); sizeof(active_mi->master_log_name));
......
...@@ -161,7 +161,7 @@ int init_slave() ...@@ -161,7 +161,7 @@ int init_slave()
} }
if (init_master_info(active_mi,master_info_file,relay_log_info_file, if (init_master_info(active_mi,master_info_file,relay_log_info_file,
!master_host)) !master_host, (SLAVE_IO | SLAVE_SQL)))
{ {
sql_print_error("Failed to initialize the master info structure"); sql_print_error("Failed to initialize the master info structure");
goto err; goto err;
...@@ -1799,7 +1799,8 @@ void clear_until_condition(RELAY_LOG_INFO* rli) ...@@ -1799,7 +1799,8 @@ void clear_until_condition(RELAY_LOG_INFO* rli)
int init_master_info(MASTER_INFO* mi, const char* master_info_fname, int init_master_info(MASTER_INFO* mi, const char* master_info_fname,
const char* slave_info_fname, const char* slave_info_fname,
bool abort_if_no_master_info_file) bool abort_if_no_master_info_file,
int thread_mask)
{ {
int fd,error; int fd,error;
char fname[FN_REFLEN+128]; char fname[FN_REFLEN+128];
...@@ -1813,8 +1814,15 @@ int init_master_info(MASTER_INFO* mi, const char* master_info_fname, ...@@ -1813,8 +1814,15 @@ int init_master_info(MASTER_INFO* mi, const char* master_info_fname,
last time. If this case pos_in_file would be set and we would last time. If this case pos_in_file would be set and we would
get a crash when trying to read the signature for the binary get a crash when trying to read the signature for the binary
relay log. relay log.
We only rewind the read position if we are starting the SQL
thread. The handle_slave_sql thread assumes that the read
position is at the beginning of the file, and will read the
"signature" and then fast-forward to the last position read.
*/ */
my_b_seek(mi->rli.cur_log, (my_off_t) 0); if (thread_mask & SLAVE_SQL) {
my_b_seek(mi->rli.cur_log, (my_off_t) 0);
}
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -522,7 +522,8 @@ void clear_until_condition(RELAY_LOG_INFO* rli); ...@@ -522,7 +522,8 @@ void clear_until_condition(RELAY_LOG_INFO* rli);
void clear_slave_error_timestamp(RELAY_LOG_INFO* rli); void clear_slave_error_timestamp(RELAY_LOG_INFO* rli);
int init_master_info(MASTER_INFO* mi, const char* master_info_fname, int init_master_info(MASTER_INFO* mi, const char* master_info_fname,
const char* slave_info_fname, const char* slave_info_fname,
bool abort_if_no_master_info_file); bool abort_if_no_master_info_file,
int thread_mask);
void end_master_info(MASTER_INFO* mi); void end_master_info(MASTER_INFO* mi);
int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname); int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname);
void end_relay_log_info(RELAY_LOG_INFO* rli); void end_relay_log_info(RELAY_LOG_INFO* rli);
......
...@@ -683,7 +683,8 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) ...@@ -683,7 +683,8 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report)
thread_mask&= thd->lex->slave_thd_opt; thread_mask&= thd->lex->slave_thd_opt;
if (thread_mask) //some threads are stopped, start them if (thread_mask) //some threads are stopped, start them
{ {
if (init_master_info(mi,master_info_file,relay_log_info_file, 0)) if (init_master_info(mi,master_info_file,relay_log_info_file, 0,
thread_mask))
slave_errno=ER_MASTER_INFO; slave_errno=ER_MASTER_INFO;
else if (server_id_supplied && *mi->host) else if (server_id_supplied && *mi->host)
{ {
...@@ -978,7 +979,8 @@ int change_master(THD* thd, MASTER_INFO* mi) ...@@ -978,7 +979,8 @@ int change_master(THD* thd, MASTER_INFO* mi)
thd->proc_info = "Changing master"; thd->proc_info = "Changing master";
LEX_MASTER_INFO* lex_mi= &thd->lex->mi; LEX_MASTER_INFO* lex_mi= &thd->lex->mi;
// TODO: see if needs re-write // TODO: see if needs re-write
if (init_master_info(mi, master_info_file, relay_log_info_file, 0)) if (init_master_info(mi, master_info_file, relay_log_info_file, 0,
thread_mask))
{ {
send_error(thd, ER_MASTER_INFO); send_error(thd, ER_MASTER_INFO);
unlock_slave_threads(mi); unlock_slave_threads(mi);
......
...@@ -56,8 +56,9 @@ class udf_handler :public Sql_alloc ...@@ -56,8 +56,9 @@ class udf_handler :public Sql_alloc
public: public:
table_map used_tables_cache; table_map used_tables_cache;
bool const_item_cache; bool const_item_cache;
bool not_original;
udf_handler(udf_func *udf_arg) :u_d(udf_arg), buffers(0), error(0), udf_handler(udf_func *udf_arg) :u_d(udf_arg), buffers(0), error(0),
is_null(0), initialized(0) is_null(0), initialized(0), not_original(0)
{} {}
~udf_handler(); ~udf_handler();
const char *name() const { return u_d ? u_d->name.str : "?"; } const char *name() const { return u_d ? u_d->name.str : "?"; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment