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();