-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-7133: InnoDB: Assertion failure in dict_tf_is_valid
Problem is that page compressed tables currently require atomic_blobs and that feature is not availabe currently for row_format=redundant. Fix: Disallow page compressed create option if table row_format=redundant.
- Loading branch information
Jan Lindström
committed
Nov 19, 2014
1 parent
7bf391c
commit b432c7b
Showing
4 changed files
with
241 additions
and
0 deletions.
There are no files selected for viewing
121 changes: 121 additions & 0 deletions
121
mysql-test/suite/innodb/r/innodb-page_compression_tables.result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
SET GLOBAL innodb_file_format = `Barracuda`; | ||
SET GLOBAL innodb_file_per_table = ON; | ||
set global innodb_compression_algorithm = 1; | ||
create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; | ||
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact page_compressed=1; | ||
create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_compressed=1; | ||
create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed page_compressed=1; | ||
ERROR HY000: Can't create table `test`.`innodb_compressed` (errno: 140 "Wrong create options") | ||
show warnings; | ||
Level Code Message | ||
Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=COMPRESSED | ||
Error 1005 Can't create table `test`.`innodb_compressed` (errno: 140 "Wrong create options") | ||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB | ||
show create table innodb_compact; | ||
Table Create Table | ||
innodb_compact CREATE TABLE `innodb_compact` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT `page_compressed`=1 | ||
show create table innodb_dynamic; | ||
Table Create Table | ||
innodb_dynamic CREATE TABLE `innodb_dynamic` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC `page_compressed`=1 | ||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant page_compressed=1; | ||
ERROR HY000: Can't create table `test`.`innodb_redundant` (errno: 140 "Wrong create options") | ||
show warnings; | ||
Level Code Message | ||
Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=REDUNDANT | ||
Error 1005 Can't create table `test`.`innodb_redundant` (errno: 140 "Wrong create options") | ||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB | ||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; | ||
show create table innodb_redundant; | ||
Table Create Table | ||
innodb_redundant CREATE TABLE `innodb_redundant` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT | ||
alter table innodb_redundant page_compressed=1; | ||
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") | ||
show warnings; | ||
Level Code Message | ||
Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=REDUNDANT | ||
Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") | ||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB | ||
show create table innodb_redundant; | ||
Table Create Table | ||
innodb_redundant CREATE TABLE `innodb_redundant` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT | ||
alter table innodb_redundant row_format=compact page_compressed=1; | ||
show create table innodb_redundant; | ||
Table Create Table | ||
innodb_redundant CREATE TABLE `innodb_redundant` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT `page_compressed`=1 | ||
drop table innodb_redundant; | ||
create procedure innodb_insert_proc (repeat_count int) | ||
begin | ||
declare current_num int; | ||
set current_num = 0; | ||
while current_num < repeat_count do | ||
insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); | ||
set current_num = current_num + 1; | ||
end while; | ||
end// | ||
commit; | ||
set autocommit=0; | ||
call innodb_insert_proc(5000); | ||
commit; | ||
set autocommit=1; | ||
insert into innodb_compact select * from innodb_normal; | ||
insert into innodb_dynamic select * from innodb_normal; | ||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
count(*) | ||
5000 | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
count(*) | ||
5000 | ||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
count(*) | ||
5000 | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
count(*) | ||
5000 | ||
SET GLOBAL innodb_file_format = `Barracuda`; | ||
SET GLOBAL innodb_file_per_table = ON; | ||
set global innodb_compression_algorithm = 0; | ||
alter table innodb_compact engine=innodb page_compressed=DEFAULT; | ||
alter table innodb_dynamic engine=innodb page_compressed=DEFAULT; | ||
show create table innodb_compact; | ||
Table Create Table | ||
innodb_compact CREATE TABLE `innodb_compact` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT | ||
show create table innodb_dynamic; | ||
Table Create Table | ||
innodb_dynamic CREATE TABLE `innodb_dynamic` ( | ||
`c1` bigint(20) NOT NULL, | ||
`b` char(200) DEFAULT NULL | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC | ||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
count(*) | ||
5000 | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
count(*) | ||
5000 | ||
drop procedure innodb_insert_proc; | ||
drop table innodb_normal; | ||
drop table innodb_compact; | ||
drop table innodb_dynamic; |
102 changes: 102 additions & 0 deletions
102
mysql-test/suite/innodb/t/innodb-page_compression_tables.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
-- source include/have_innodb.inc | ||
|
||
--disable_query_log | ||
let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; | ||
let $innodb_file_format_orig = `SELECT @@innodb_file_format`; | ||
let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; | ||
--enable_query_log | ||
|
||
SET GLOBAL innodb_file_format = `Barracuda`; | ||
SET GLOBAL innodb_file_per_table = ON; | ||
# zlib | ||
set global innodb_compression_algorithm = 1; | ||
|
||
create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; | ||
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact page_compressed=1; | ||
create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_compressed=1; | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
--error 1005 | ||
create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed page_compressed=1; | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
show warnings; | ||
show create table innodb_compact; | ||
show create table innodb_dynamic; | ||
|
||
# MDEV-7133: InnoDB: Assertion failure in thread 140737091569408 in file dict0mem.cc line 74 | ||
# InnoDB: Failing assertion: dict_tf_is_valid(flags) | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
--error 1005 | ||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant page_compressed=1; | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
show warnings; | ||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; | ||
show create table innodb_redundant; | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
--error 1005 | ||
alter table innodb_redundant page_compressed=1; | ||
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ | ||
show warnings; | ||
show create table innodb_redundant; | ||
alter table innodb_redundant row_format=compact page_compressed=1; | ||
show create table innodb_redundant; | ||
drop table innodb_redundant; | ||
|
||
delimiter //; | ||
create procedure innodb_insert_proc (repeat_count int) | ||
begin | ||
declare current_num int; | ||
set current_num = 0; | ||
while current_num < repeat_count do | ||
insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); | ||
set current_num = current_num + 1; | ||
end while; | ||
end// | ||
delimiter ;// | ||
commit; | ||
|
||
set autocommit=0; | ||
call innodb_insert_proc(5000); | ||
commit; | ||
set autocommit=1; | ||
|
||
insert into innodb_compact select * from innodb_normal; | ||
insert into innodb_dynamic select * from innodb_normal; | ||
|
||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
|
||
--source include/restart_mysqld.inc | ||
|
||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
|
||
SET GLOBAL innodb_file_format = `Barracuda`; | ||
SET GLOBAL innodb_file_per_table = ON; | ||
# none | ||
set global innodb_compression_algorithm = 0; | ||
|
||
alter table innodb_compact engine=innodb page_compressed=DEFAULT; | ||
alter table innodb_dynamic engine=innodb page_compressed=DEFAULT; | ||
show create table innodb_compact; | ||
show create table innodb_dynamic; | ||
|
||
update innodb_compact set c1 = c1 + 1; | ||
update innodb_dynamic set c1 = c1 + 1; | ||
select count(*) from innodb_compact where c1 < 1500000; | ||
select count(*) from innodb_dynamic where c1 < 1500000; | ||
|
||
drop procedure innodb_insert_proc; | ||
drop table innodb_normal; | ||
drop table innodb_compact; | ||
drop table innodb_dynamic; | ||
|
||
# reset system | ||
--disable_query_log | ||
EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; | ||
EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; | ||
EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; | ||
--enable_query_log |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters