Merge MySQL 5.5.20 into MariaDB 5.5.
This commit is contained in:
commit
47a54a2e08
@ -1,4 +1,4 @@
|
||||
[MYSQL]
|
||||
post_commit_to = "commits@lists.mysql.com"
|
||||
post_push_to = "commits@lists.mysql.com"
|
||||
tree_name = "mysql-5.5"
|
||||
post_commit_to = "MYSQL_COMMITS_SECURITY_WW@ORACLE.COM"
|
||||
post_push_to = "MYSQL_COMMITS_SECURITY_WW@ORACLE.COM"
|
||||
tree_name = "mysql-5.5-security"
|
||||
|
@ -817,3 +817,19 @@ set global keycache1.key_buffer_size=0;
|
||||
set global keycache2.key_buffer_size=0;
|
||||
set global key_buffer_size=@save_key_buffer_size;
|
||||
set global key_cache_segments=@save_key_cache_segments;
|
||||
#
|
||||
# Bug#12361113: crash when load index into cache
|
||||
#
|
||||
# Note that this creates an empty disabled key cache!
|
||||
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
CACHE INDEX t1 in key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
# The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||
# since the default cache is used due to CACHE INDEX failed for
|
||||
# key_cache_none.
|
||||
LOAD INDEX INTO CACHE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 preload_keys status OK
|
||||
DROP TABLE t1;
|
||||
|
@ -191,6 +191,7 @@ CREATE TABLE `я` (a INT) engine=myisam;
|
||||
SET NAMES DEFAULT;
|
||||
call mtr.add_suppression("@003f.frm' \\(errno: 22\\)");
|
||||
mysqlcheck --default-character-set="latin1" --databases test
|
||||
call mtr.add_suppression("Can't find file: '..test.@003f.frm'");
|
||||
test.?
|
||||
Error : Table doesn't exist
|
||||
status : Operation failed
|
||||
|
@ -397,6 +397,33 @@ test.t1 assign_to_keycache error Subpartition sp0 returned error
|
||||
test.t1 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't1'
|
||||
test.t1 assign_to_keycache status Operation failed
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#12361113: crash when load index into cache
|
||||
#
|
||||
# Note that this creates an empty disabled key cache!
|
||||
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) )
|
||||
ENGINE = MYISAM
|
||||
PARTITION BY HASH(a) PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
CACHE INDEX t1 IN key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
CACHE INDEX t1 PARTITION (p0) IN key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
CACHE INDEX t1 PARTITION (p1) IN key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
CACHE INDEX t1 PARTITION (p0) KEY (`b`) IN key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
CACHE INDEX t1 PARTITION (p1) KEY (`b`) IN key_cache_none;
|
||||
ERROR HY000: Unknown key cache 'key_cache_none'
|
||||
# The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||
# since the default cache is used due to CACHE INDEX failed for
|
||||
# key_cache_none.
|
||||
LOAD INDEX INTO CACHE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 preload_keys status OK
|
||||
DROP TABLE t1;
|
||||
# Clean up
|
||||
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||
SET @@global.cold_cache.key_buffer_size = 0;
|
||||
|
@ -522,3 +522,19 @@ set global key_buffer_size=@save_key_buffer_size;
|
||||
set global key_cache_segments=@save_key_cache_segments;
|
||||
|
||||
# End of 5.2 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug#12361113: crash when load index into cache
|
||||
--echo #
|
||||
|
||||
--echo # Note that this creates an empty disabled key cache!
|
||||
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 in key_cache_none;
|
||||
--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||
--echo # since the default cache is used due to CACHE INDEX failed for
|
||||
--echo # key_cache_none.
|
||||
LOAD INDEX INTO CACHE t1;
|
||||
DROP TABLE t1;
|
||||
|
@ -147,6 +147,7 @@ SET NAMES DEFAULT;
|
||||
call mtr.add_suppression("@003f.frm' \\(errno: 22\\)");
|
||||
--echo mysqlcheck --default-character-set="latin1" --databases test
|
||||
# Error returned depends on platform, replace it with "Table doesn't exist"
|
||||
call mtr.add_suppression("Can't find file: '..test.@003f.frm'");
|
||||
--replace_result "Can't find file: './test/@003f.frm' (errno: 22)" "Table doesn't exist" "Table 'test.?' doesn't exist" "Table doesn't exist"
|
||||
--exec $MYSQL_CHECK --default-character-set="latin1" --databases test
|
||||
--echo mysqlcheck --default-character-set="utf8" --databases test
|
||||
|
@ -239,6 +239,34 @@ CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
||||
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#12361113: crash when load index into cache
|
||||
--echo #
|
||||
--echo # Note that this creates an empty disabled key cache!
|
||||
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
|
||||
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) )
|
||||
ENGINE = MYISAM
|
||||
PARTITION BY HASH(a) PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 IN key_cache_none;
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 PARTITION (p0) IN key_cache_none;
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 PARTITION (p1) IN key_cache_none;
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 PARTITION (p0) KEY (`b`) IN key_cache_none;
|
||||
--error ER_UNKNOWN_KEY_CACHE
|
||||
CACHE INDEX t1 PARTITION (p1) KEY (`b`) IN key_cache_none;
|
||||
--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
|
||||
--echo # since the default cache is used due to CACHE INDEX failed for
|
||||
--echo # key_cache_none.
|
||||
LOAD INDEX INTO CACHE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo # Clean up
|
||||
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||
SET @@global.cold_cache.key_buffer_size = 0;
|
||||
|
@ -935,6 +935,11 @@ bool mysql_assign_to_keycache(THD* thd, TABLE_LIST* tables,
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
if (!key_cache->key_cache_inited)
|
||||
{
|
||||
my_error(ER_UNKNOWN_KEY_CACHE, MYF(0), key_cache_name->str);
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
check_opt.key_cache= key_cache;
|
||||
DBUG_RETURN(mysql_admin_table(thd, tables, &check_opt,
|
||||
"assign_to_keycache", TL_READ_NO_INSERT, 0, 0,
|
||||
|
@ -53,6 +53,9 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
|
||||
if (!keys || !mi_is_any_key_active(key_map) || key_file_length == pos)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/* Preload into a non initialized key cache should never happen. */
|
||||
DBUG_ASSERT(share->key_cache->key_cache_inited);
|
||||
|
||||
block_length= keyinfo[0].block_length;
|
||||
|
||||
if (ignore_leaves)
|
||||
|
Loading…
x
Reference in New Issue
Block a user