Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl
This commit is contained in:
commit
3bcab5899d
@ -521,6 +521,11 @@ typedef int (*qsort2_cmp)(const void *, const void *, const void *);
|
|||||||
#define my_b_tell(info) ((info)->pos_in_file + \
|
#define my_b_tell(info) ((info)->pos_in_file + \
|
||||||
(size_t) (*(info)->current_pos - (info)->request_pos))
|
(size_t) (*(info)->current_pos - (info)->request_pos))
|
||||||
|
|
||||||
|
#define my_b_get_buffer_start(info) (info)->request_pos
|
||||||
|
#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \
|
||||||
|
(char*) my_b_get_buffer_start(info)
|
||||||
|
#define my_b_get_pos_in_file(info) (info)->pos_in_file
|
||||||
|
|
||||||
/* tell write offset in the SEQ_APPEND cache */
|
/* tell write offset in the SEQ_APPEND cache */
|
||||||
int my_b_copy_to_file(IO_CACHE *cache, FILE *file);
|
int my_b_copy_to_file(IO_CACHE *cache, FILE *file);
|
||||||
my_off_t my_b_append_tell(IO_CACHE* info);
|
my_off_t my_b_append_tell(IO_CACHE* info);
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
#
|
--let $binlog_start=98
|
||||||
# Differs slightly from show_binlog events in showing server_id
|
|
||||||
# which is important for some tests
|
|
||||||
#
|
|
||||||
--let $binlog_start=106
|
|
||||||
--replace_result $binlog_start <binlog_start>
|
--replace_result $binlog_start <binlog_start>
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||||
|
28
mysql-test/r/rpl_loaddata_map.result
Normal file
28
mysql-test/r/rpl_loaddata_map.result
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
stop slave;
|
||||||
|
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;
|
||||||
|
start slave;
|
||||||
|
create table t2 (id int not null primary key auto_increment);
|
||||||
|
select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ;
|
||||||
|
@@session.read_buffer_size - @@session.max_allowed_packet > 0
|
||||||
|
1
|
||||||
|
load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2;
|
||||||
|
select count(*) from t2 /* 5 000 */;
|
||||||
|
count(*)
|
||||||
|
5000
|
||||||
|
show binlog events in 'master-bin.000002' from 98;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000002 98 Query 1 # use `test`; create table t2 (id int not null primary key auto_increment)
|
||||||
|
master-bin.000002 221 Begin_load_query 1 # ;file_id=1;block_len=7168
|
||||||
|
master-bin.000002 7412 Append_block 1 # ;file_id=1;block_len=7168
|
||||||
|
master-bin.000002 14603 Append_block 1 # ;file_id=1;block_len=2048
|
||||||
|
master-bin.000002 16674 Append_block 1 # ;file_id=1;block_len=7168
|
||||||
|
master-bin.000002 23865 Append_block 1 # ;file_id=1;block_len=341
|
||||||
|
master-bin.000002 24229 Execute_load_query 1 # use `test`; load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2 ;file_id=1
|
||||||
|
select count(*) from t2 /* 5 000 */;
|
||||||
|
count(*)
|
||||||
|
5000
|
||||||
|
drop table t1, t2;
|
||||||
|
end of the tests
|
42
mysql-test/r/rpl_user.result
Normal file
42
mysql-test/r/rpl_user.result
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
stop slave;
|
||||||
|
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;
|
||||||
|
start slave;
|
||||||
|
reset master;
|
||||||
|
delete from mysql.user where Host='fakehost';
|
||||||
|
create user 'foo'@'fakehost';
|
||||||
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
||||||
|
ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost'
|
||||||
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
||||||
|
ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost','bar'@'fakehost'
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
Host User
|
||||||
|
fakehost bar
|
||||||
|
fakehost foo
|
||||||
|
rename user 'foo'@'fakehost' to 'foofoo'@'fakehost';
|
||||||
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost';
|
||||||
|
ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost'
|
||||||
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'not_exist_user2'@'fakehost' to 'barfoo'@'fakehost';
|
||||||
|
ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
Host User
|
||||||
|
fakehost barbar
|
||||||
|
fakehost foofoo
|
||||||
|
drop user 'foofoo'@'fakehost';
|
||||||
|
drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost';
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost'
|
||||||
|
drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
|
||||||
|
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
Host User
|
||||||
|
show binlog events from 98;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 98 Query 1 # use `test`; delete from mysql.user where Host='fakehost'
|
||||||
|
master-bin.000001 205 Query 1 # use `test`; create user 'foo'@'fakehost'
|
||||||
|
master-bin.000001 296 Query 1 # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
|
||||||
|
master-bin.000001 405 Query 1 # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
|
||||||
|
master-bin.000001 519 Query 1 # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
|
||||||
|
master-bin.000001 686 Query 1 # use `test`; drop user 'foofoo'@'fakehost'
|
||||||
|
master-bin.000001 778 Query 1 # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
|
10000
mysql-test/std_data/bug30435_10k_items.txt
Normal file
10000
mysql-test/std_data/bug30435_10k_items.txt
Normal file
File diff suppressed because it is too large
Load Diff
5000
mysql-test/std_data/bug30435_5k.txt
Normal file
5000
mysql-test/std_data/bug30435_5k.txt
Normal file
File diff suppressed because it is too large
Load Diff
1
mysql-test/t/rpl_loaddata_map-master.opt
Normal file
1
mysql-test/t/rpl_loaddata_map-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--read_buffer_size=9K --max_allowed_packet=8K
|
1
mysql-test/t/rpl_loaddata_map-slave.opt
Normal file
1
mysql-test/t/rpl_loaddata_map-slave.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--max_allowed_packet=8K
|
52
mysql-test/t/rpl_loaddata_map.test
Normal file
52
mysql-test/t/rpl_loaddata_map.test
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#
|
||||||
|
# check replication of load data with the server parameters subjected to
|
||||||
|
# read_buffer_size > max_allowed_packet
|
||||||
|
#
|
||||||
|
# BUG#30435 loading large LOAD DATA INFILE breaks slave with
|
||||||
|
# read_buffer_size set on master
|
||||||
|
# BUG#33413 show binlog events fails if binlog has event size of close
|
||||||
|
# to max_allowed_packet
|
||||||
|
|
||||||
|
source include/master-slave.inc;
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $rows= 5000;
|
||||||
|
create table t1 (id int not null primary key auto_increment);
|
||||||
|
|
||||||
|
while($rows)
|
||||||
|
{
|
||||||
|
eval insert into t1 values (null);
|
||||||
|
dec $rows;
|
||||||
|
}
|
||||||
|
eval select * into outfile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' from t1;
|
||||||
|
flush logs;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
create table t2 (id int not null primary key auto_increment);
|
||||||
|
|
||||||
|
select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval load data infile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2;
|
||||||
|
select count(*) from t2 /* 5 000 */;
|
||||||
|
|
||||||
|
# the binglog will show fragmented Append_block events
|
||||||
|
--let $binlog_start=98
|
||||||
|
--replace_column 5 #
|
||||||
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
--eval show binlog events in 'master-bin.000002' from $binlog_start
|
||||||
|
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
#connection slave;
|
||||||
|
select count(*) from t2 /* 5 000 */;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop table t1, t2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/bug30435_5k.txt;
|
||||||
|
|
||||||
|
--echo end of the tests
|
56
mysql-test/t/rpl_user.test
Normal file
56
mysql-test/t/rpl_user.test
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# BUG#33862 completely failed DROP USER statement gets replicated
|
||||||
|
|
||||||
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# remove all users will be used in the test
|
||||||
|
#
|
||||||
|
delete from mysql.user where Host='fakehost';
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test create user
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
create user 'foo'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test rename user
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
rename user 'foo'@'fakehost' to 'foofoo'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'not_exist_user2'@'fakehost' to 'barfoo'@'fakehost';
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test drop user
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
drop user 'foofoo'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost';
|
||||||
|
--error ER_CANNOT_USER
|
||||||
|
drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show the binlog events on the master
|
||||||
|
#
|
||||||
|
connection master;
|
||||||
|
source include/show_binlog_events.inc;
|
@ -5489,6 +5489,7 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
|
|||||||
LEX_USER *user_name, *tmp_user_name;
|
LEX_USER *user_name, *tmp_user_name;
|
||||||
List_iterator <LEX_USER> user_list(list);
|
List_iterator <LEX_USER> user_list(list);
|
||||||
TABLE_LIST tables[GRANT_TABLES];
|
TABLE_LIST tables[GRANT_TABLES];
|
||||||
|
bool some_users_created= FALSE;
|
||||||
DBUG_ENTER("mysql_create_user");
|
DBUG_ENTER("mysql_create_user");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5524,6 +5525,7 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
some_users_created= TRUE;
|
||||||
sql_mode= thd->variables.sql_mode;
|
sql_mode= thd->variables.sql_mode;
|
||||||
if (replace_user_table(thd, tables[0].table, *user_name, 0, 0, 1, 0))
|
if (replace_user_table(thd, tables[0].table, *user_name, 0, 0, 1, 0))
|
||||||
{
|
{
|
||||||
@ -5534,12 +5536,14 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
|
|||||||
|
|
||||||
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
||||||
|
|
||||||
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
if (result)
|
||||||
|
my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe());
|
||||||
|
|
||||||
|
if (some_users_created)
|
||||||
|
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
||||||
|
|
||||||
rw_unlock(&LOCK_grant);
|
rw_unlock(&LOCK_grant);
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
if (result)
|
|
||||||
my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe());
|
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5564,6 +5568,7 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
|
|||||||
LEX_USER *user_name, *tmp_user_name;
|
LEX_USER *user_name, *tmp_user_name;
|
||||||
List_iterator <LEX_USER> user_list(list);
|
List_iterator <LEX_USER> user_list(list);
|
||||||
TABLE_LIST tables[GRANT_TABLES];
|
TABLE_LIST tables[GRANT_TABLES];
|
||||||
|
bool some_users_deleted= FALSE;
|
||||||
DBUG_ENTER("mysql_drop_user");
|
DBUG_ENTER("mysql_drop_user");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5592,7 +5597,9 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
|
|||||||
{
|
{
|
||||||
append_user(&wrong_users, user_name);
|
append_user(&wrong_users, user_name);
|
||||||
result= TRUE;
|
result= TRUE;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
some_users_deleted= TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
|
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
|
||||||
@ -5606,7 +5613,8 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
|
|||||||
DBUG_PRINT("info", ("thd->net.last_errno: %d", thd->net.last_errno));
|
DBUG_PRINT("info", ("thd->net.last_errno: %d", thd->net.last_errno));
|
||||||
DBUG_PRINT("info", ("thd->net.last_error: %s", thd->net.last_error));
|
DBUG_PRINT("info", ("thd->net.last_error: %s", thd->net.last_error));
|
||||||
|
|
||||||
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
if (some_users_deleted)
|
||||||
|
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
||||||
|
|
||||||
rw_unlock(&LOCK_grant);
|
rw_unlock(&LOCK_grant);
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
@ -5635,6 +5643,7 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
|
|||||||
LEX_USER *user_to, *tmp_user_to;
|
LEX_USER *user_to, *tmp_user_to;
|
||||||
List_iterator <LEX_USER> user_list(list);
|
List_iterator <LEX_USER> user_list(list);
|
||||||
TABLE_LIST tables[GRANT_TABLES];
|
TABLE_LIST tables[GRANT_TABLES];
|
||||||
|
bool some_users_renamed= FALSE;
|
||||||
DBUG_ENTER("mysql_rename_user");
|
DBUG_ENTER("mysql_rename_user");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5675,7 +5684,9 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
|
|||||||
{
|
{
|
||||||
append_user(&wrong_users, user_from);
|
append_user(&wrong_users, user_from);
|
||||||
result= TRUE;
|
result= TRUE;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
some_users_renamed= TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
|
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
|
||||||
@ -5683,12 +5694,14 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
|
|||||||
|
|
||||||
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
||||||
|
|
||||||
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
if (result)
|
||||||
|
my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe());
|
||||||
|
|
||||||
|
if (some_users_renamed && mysql_bin_log.is_open())
|
||||||
|
write_bin_log(thd, FALSE, thd->query, thd->query_length);
|
||||||
|
|
||||||
rw_unlock(&LOCK_grant);
|
rw_unlock(&LOCK_grant);
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
if (result)
|
|
||||||
my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe());
|
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1166,7 +1166,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
unregister_slave(thd,1,1);
|
unregister_slave(thd,1,1);
|
||||||
/* fake COM_QUIT -- if we get here, the thread needs to terminate */
|
/* fake COM_QUIT -- if we get here, the thread needs to terminate */
|
||||||
error = TRUE;
|
error = TRUE;
|
||||||
net->error = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1243,9 +1243,6 @@ bool change_master(THD* thd, Master_info* mi)
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mi->rli.group_master_log_pos = mi->master_log_pos;
|
|
||||||
DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) mi->master_log_pos));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Coordinates in rli were spoilt by the 'if (need_relay_log_purge)' block,
|
Coordinates in rli were spoilt by the 'if (need_relay_log_purge)' block,
|
||||||
so restore them to good values. If we left them to ''/0, that would work;
|
so restore them to good values. If we left them to ''/0, that would work;
|
||||||
@ -1257,6 +1254,7 @@ bool change_master(THD* thd, Master_info* mi)
|
|||||||
That's why we always save good coords in rli.
|
That's why we always save good coords in rli.
|
||||||
*/
|
*/
|
||||||
mi->rli.group_master_log_pos= mi->master_log_pos;
|
mi->rli.group_master_log_pos= mi->master_log_pos;
|
||||||
|
DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) mi->master_log_pos));
|
||||||
strmake(mi->rli.group_master_log_name,mi->master_log_name,
|
strmake(mi->rli.group_master_log_name,mi->master_log_name,
|
||||||
sizeof(mi->rli.group_master_log_name)-1);
|
sizeof(mi->rli.group_master_log_name)-1);
|
||||||
|
|
||||||
@ -1376,6 +1374,11 @@ bool mysql_show_binlog_events(THD* thd)
|
|||||||
if ((file=open_binlog(&log, linfo.log_file_name, &errmsg)) < 0)
|
if ((file=open_binlog(&log, linfo.log_file_name, &errmsg)) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
to account binlog event header size
|
||||||
|
*/
|
||||||
|
thd->variables.max_allowed_packet += MAX_LOG_EVENT_HEADER;
|
||||||
|
|
||||||
pthread_mutex_lock(log_lock);
|
pthread_mutex_lock(log_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1386,7 +1389,6 @@ bool mysql_show_binlog_events(THD* thd)
|
|||||||
This code will fail on a mixed relay log (one which has Format_desc then
|
This code will fail on a mixed relay log (one which has Format_desc then
|
||||||
Rotate then Format_desc).
|
Rotate then Format_desc).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ev = Log_event::read_log_event(&log,(pthread_mutex_t*)0,description_event);
|
ev = Log_event::read_log_event(&log,(pthread_mutex_t*)0,description_event);
|
||||||
if (ev)
|
if (ev)
|
||||||
{
|
{
|
||||||
@ -1578,39 +1580,54 @@ err:
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Load data's io cache specific hook to be executed
|
||||||
|
before a chunk of data is being read into the cache's buffer
|
||||||
|
The fuction instantianates and writes into the binlog
|
||||||
|
replication events along LOAD DATA processing.
|
||||||
|
|
||||||
|
@param file pointer to io-cache
|
||||||
|
@return 0
|
||||||
|
*/
|
||||||
int log_loaded_block(IO_CACHE* file)
|
int log_loaded_block(IO_CACHE* file)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("log_loaded_block");
|
||||||
LOAD_FILE_INFO *lf_info;
|
LOAD_FILE_INFO *lf_info;
|
||||||
uint block_len ;
|
uint block_len;
|
||||||
|
/* buffer contains position where we started last read */
|
||||||
/* file->request_pos contains position where we started last read */
|
char* buffer= my_b_get_buffer_start(file);
|
||||||
char* buffer = (char*) file->request_pos;
|
uint max_event_size= current_thd->variables.max_allowed_packet;
|
||||||
if (!(block_len = (char*) file->read_end - (char*) buffer))
|
lf_info= (LOAD_FILE_INFO*) file->arg;
|
||||||
return 0;
|
|
||||||
lf_info = (LOAD_FILE_INFO*) file->arg;
|
|
||||||
if (lf_info->thd->current_stmt_binlog_row_based)
|
if (lf_info->thd->current_stmt_binlog_row_based)
|
||||||
return 0;
|
return 0;
|
||||||
if (lf_info->last_pos_in_file != HA_POS_ERROR &&
|
if (lf_info->last_pos_in_file != HA_POS_ERROR &&
|
||||||
lf_info->last_pos_in_file >= file->pos_in_file)
|
lf_info->last_pos_in_file >= my_b_get_pos_in_file(file))
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
lf_info->last_pos_in_file = file->pos_in_file;
|
|
||||||
if (lf_info->wrote_create_file)
|
for (block_len= my_b_get_bytes_in_buffer(file); block_len > 0;
|
||||||
|
buffer += min(block_len, max_event_size),
|
||||||
|
block_len -= min(block_len, max_event_size))
|
||||||
{
|
{
|
||||||
Append_block_log_event a(lf_info->thd, lf_info->thd->db, buffer,
|
lf_info->last_pos_in_file= my_b_get_pos_in_file(file);
|
||||||
block_len, lf_info->log_delayed);
|
if (lf_info->wrote_create_file)
|
||||||
mysql_bin_log.write(&a);
|
{
|
||||||
|
Append_block_log_event a(lf_info->thd, lf_info->thd->db, buffer,
|
||||||
|
min(block_len, max_event_size),
|
||||||
|
lf_info->log_delayed);
|
||||||
|
mysql_bin_log.write(&a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Begin_load_query_log_event b(lf_info->thd, lf_info->thd->db,
|
||||||
|
buffer,
|
||||||
|
min(block_len, max_event_size),
|
||||||
|
lf_info->log_delayed);
|
||||||
|
mysql_bin_log.write(&b);
|
||||||
|
lf_info->wrote_create_file= 1;
|
||||||
|
DBUG_SYNC_POINT("debug_lock.created_file_event",10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
DBUG_RETURN(0);
|
||||||
{
|
|
||||||
Begin_load_query_log_event b(lf_info->thd, lf_info->thd->db,
|
|
||||||
buffer, block_len,
|
|
||||||
lf_info->log_delayed);
|
|
||||||
mysql_bin_log.write(&b);
|
|
||||||
lf_info->wrote_create_file = 1;
|
|
||||||
DBUG_SYNC_POINT("debug_lock.created_file_event",10);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user