Description:
affects debug/release builds of 5.7, 8.0.
Debug build asserts. Release build prints out:
InnoDB: tried to purge non-delete-marked record in index `c` of table
InnoDB: tried to purge non-delete-marked record in index `c` of table
Version: '5.7.19-debug' (Built on 2017/05/25)
[ERROR] InnoDB: tried to purge non-delete-marked record in index `c` of
InnoDB: Assertion failure in thread 8344 in file row0purge.cc line 499
InnoDB: Failing assertion: 0
mysqld-debug.exe!my_sigabrt_handler()[my_thr_init.c:449]
ucrtbased.dll!raise()
ucrtbased.dll!abort()
mysqld-debug.exe!ut_dbg_assertion_failed()[ut0dbg.cc:68]
mysqld-debug.exe!row_purge_remove_sec_if_poss_leaf()[row0purge.cc:499]
mysqld-debug.exe!row_purge_remove_sec_if_poss()[row0purge.cc:588]
mysqld-debug.exe!row_purge_del_mark()[row0purge.cc:659]
mysqld-debug.exe!row_purge_record_func()[row0purge.cc:990]
mysqld-debug.exe!row_purge()[row0purge.cc:1046]
mysqld-debug.exe!row_purge_step()[row0purge.cc:1127]
mysqld-debug.exe!que_thr_step()[que0que.cc:1056]
mysqld-debug.exe!que_run_threads_low()[que0que.cc:1118]
mysqld-debug.exe!que_run_threads()[que0que.cc:1160]
mysqld-debug.exe!srv_task_execute()[srv0srv.cc:2464]
mysqld-debug.exe!srv_worker_thread()[srv0srv.cc:2512]
How to repeat:
set sql_mode="";
drop table if exists t;
create table t (
`a` int,
`b` int not null,
`c` char(2) generated always as ('aa') virtual,
unique key(`b`),
unique key(`c`(1))
) engine=innodb default charset=utf8 row_format=compact;
drop procedure if exists p;
delimiter $
create procedure p()
begin
declare continue handler for sqlexception begin end;
repeat
if rand()>0.5 then insert into t(a,b) values(floor(rand()*10),floor(rand()*10)); end if;
if rand()>0.5 then delete from t where a<floor(rand()*10); end if;
if rand()>0.5 then update t set b=concat(a,a); end if;
if rand()>0.5 then replace into t(a,b) values(floor(rand()*10),floor(rand()*10)); end if;
until 1=2 end repeat;
end $
delimiter ;
call p();
Description: affects debug/release builds of 5.7, 8.0. Debug build asserts. Release build prints out: InnoDB: tried to purge non-delete-marked record in index `c` of table InnoDB: tried to purge non-delete-marked record in index `c` of table Version: '5.7.19-debug' (Built on 2017/05/25) [ERROR] InnoDB: tried to purge non-delete-marked record in index `c` of InnoDB: Assertion failure in thread 8344 in file row0purge.cc line 499 InnoDB: Failing assertion: 0 mysqld-debug.exe!my_sigabrt_handler()[my_thr_init.c:449] ucrtbased.dll!raise() ucrtbased.dll!abort() mysqld-debug.exe!ut_dbg_assertion_failed()[ut0dbg.cc:68] mysqld-debug.exe!row_purge_remove_sec_if_poss_leaf()[row0purge.cc:499] mysqld-debug.exe!row_purge_remove_sec_if_poss()[row0purge.cc:588] mysqld-debug.exe!row_purge_del_mark()[row0purge.cc:659] mysqld-debug.exe!row_purge_record_func()[row0purge.cc:990] mysqld-debug.exe!row_purge()[row0purge.cc:1046] mysqld-debug.exe!row_purge_step()[row0purge.cc:1127] mysqld-debug.exe!que_thr_step()[que0que.cc:1056] mysqld-debug.exe!que_run_threads_low()[que0que.cc:1118] mysqld-debug.exe!que_run_threads()[que0que.cc:1160] mysqld-debug.exe!srv_task_execute()[srv0srv.cc:2464] mysqld-debug.exe!srv_worker_thread()[srv0srv.cc:2512] How to repeat: set sql_mode=""; drop table if exists t; create table t ( `a` int, `b` int not null, `c` char(2) generated always as ('aa') virtual, unique key(`b`), unique key(`c`(1)) ) engine=innodb default charset=utf8 row_format=compact; drop procedure if exists p; delimiter $ create procedure p() begin declare continue handler for sqlexception begin end; repeat if rand()>0.5 then insert into t(a,b) values(floor(rand()*10),floor(rand()*10)); end if; if rand()>0.5 then delete from t where a<floor(rand()*10); end if; if rand()>0.5 then update t set b=concat(a,a); end if; if rand()>0.5 then replace into t(a,b) values(floor(rand()*10),floor(rand()*10)); end if; until 1=2 end repeat; end $ delimiter ; call p();