Description:
Running following test case in multithread environment(stress test) for some
time (less than 1-2 min) for at least 2 threads will lead to deadlock.
This deadlock happens only if table was created with ENGINE=InnoDB. With MyISAM test case passed ok.
#Output of mysqladmin proc:
+-----+------+-----------+------+---------+------+-------+-----------------------------------------------------------------+
| 683 | root | localhost | | Query | 0 | | show processlist |
| 930 | root | localhost | test | Query | 10 | | create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2 |
| 931 | root | localhost | test | Query | 10 | | create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2 |
+-----+------+-----------+------+---------+------+-------+-----------------------------------------------------------------+
#Table definition
create table tb3 (f1 int) engine = innodb;
#Test case
use test;
create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2;
--disable_warnings
drop trigger tr1;
--enable_warnings
#backtraces for two active threads that I got after killing of mysqld with signal 11
(gdb) thread 941
[Switching to thread 941 (Thread 1116134320 (LWP 29940))]#0 0xffffe410 in ?? ()
(gdb) bt
#0 0xffffe410 in ?? ()
#1 0x4286c700 in ?? ()
#2 0x00000045 in ?? ()
#3 0x00000000 in ?? ()
#4 0x4004cccc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#5 0x0840ce7f in safe_cond_timedwait (cond=0x8609660, mp=0x86091c0, abstime=0x4286c700,
file=0x84a7b40 "sql_base.cc", line=4950) at thr_mutex.c:240
#6 0x081dd753 in remove_table_from_cache (thd=0x8c6be08, db=0x8c95c40 "test",
table_name=0x8c95a58 "tb3", flags=2) at sql_base.cc:4950
#7 0x08287763 in wait_while_table_is_used (thd=0x8c6be08, table=0x8c953d0,
function=HA_EXTRA_PREPARE_FOR_DELETE) at sql_table.cc:1867
#8 0x082877df in close_cached_table (thd=0x8c6be08, table=0x8c953d0) at sql_table.cc:1893
#9 0x082eee79 in mysql_create_or_drop_trigger (thd=0x8c6be08, tables=0x8ca2530, create=true)
at sql_trigger.cc:188
#10 0x081b0ddd in mysql_execute_command (thd=0x8c6be08) at sql_parse.cc:4513
#11 0x081b3309 in mysql_parse (thd=0x8c6be08,
inBuf=0x8ca2450 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2",
length=63) at sql_parse.cc:5444
#12 0x081a88f9 in dispatch_command (command=COM_QUERY, thd=0x8c6be08,
packet=0x8c90379 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2",
packet_length=64) at sql_parse.cc:1664
#13 0x081a80c6 in do_command (thd=0x8c6be08) at sql_parse.cc:1463
#14 0x081a71a6 in handle_one_connection (arg=0x8c6be08) at sql_parse.cc:1116
#15 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0
#16 0x4017bc2e in clone () from /lib/tls/libc.so.6
(gdb) thread 940
[Switching to thread 940 (Thread 1115732912 (LWP 29939))]#0 0xffffe410 in ?? ()
(gdb) bt
#0 0xffffe410 in ?? ()
#1 0x4280a700 in ?? ()
#2 0x00000046 in ?? ()
#3 0x00000000 in ?? ()
#4 0x4004cccc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0
#5 0x0840ce7f in safe_cond_timedwait (cond=0x8609660, mp=0x86091c0, abstime=0x4280a700,
file=0x84a7b40 "sql_base.cc", line=4950) at thr_mutex.c:240
#6 0x081dd753 in remove_table_from_cache (thd=0x8c68a00, db=0x8c4de50 "test",
table_name=0x8c4dc68 "tb3", flags=2) at sql_base.cc:4950
#7 0x08287763 in wait_while_table_is_used (thd=0x8c68a00, table=0x8c4f938,
function=HA_EXTRA_PREPARE_FOR_DELETE) at sql_table.cc:1867
#8 0x082877df in close_cached_table (thd=0x8c68a00, table=0x8c4f938) at sql_table.cc:1893
#9 0x082eee79 in mysql_create_or_drop_trigger (thd=0x8c68a00, tables=0x8c984b8, create=true)
at sql_trigger.cc:188
#10 0x081b0ddd in mysql_execute_command (thd=0x8c68a00) at sql_parse.cc:4513
#11 0x081b3309 in mysql_parse (thd=0x8c68a00,
inBuf=0x8c983d8 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2",
length=63) at sql_parse.cc:5444
#12 0x081a88f9 in dispatch_command (command=COM_QUERY, thd=0x8c68a00,
packet=0x8c8a359 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2",
packet_length=64) at sql_parse.cc:1664
#13 0x081a80c6 in do_command (thd=0x8c68a00) at sql_parse.cc:1463
#14 0x081a71a6 in handle_one_connection (arg=0x8c68a00) at sql_parse.cc:1116
#15 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0
#16 0x4017bc2e in clone () from /lib/tls/libc.so.6
How to repeat:
Run stress test with test case above.
Until stress test will be integrated to regular mysql-test suite please contact me and I will provide all necessary information.
Description: Running following test case in multithread environment(stress test) for some time (less than 1-2 min) for at least 2 threads will lead to deadlock. This deadlock happens only if table was created with ENGINE=InnoDB. With MyISAM test case passed ok. #Output of mysqladmin proc: +-----+------+-----------+------+---------+------+-------+-----------------------------------------------------------------+ | 683 | root | localhost | | Query | 0 | | show processlist | | 930 | root | localhost | test | Query | 10 | | create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2 | | 931 | root | localhost | test | Query | 10 | | create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2 | +-----+------+-----------+------+---------+------+-------+-----------------------------------------------------------------+ #Table definition create table tb3 (f1 int) engine = innodb; #Test case use test; create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2; --disable_warnings drop trigger tr1; --enable_warnings #backtraces for two active threads that I got after killing of mysqld with signal 11 (gdb) thread 941 [Switching to thread 941 (Thread 1116134320 (LWP 29940))]#0 0xffffe410 in ?? () (gdb) bt #0 0xffffe410 in ?? () #1 0x4286c700 in ?? () #2 0x00000045 in ?? () #3 0x00000000 in ?? () #4 0x4004cccc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0 #5 0x0840ce7f in safe_cond_timedwait (cond=0x8609660, mp=0x86091c0, abstime=0x4286c700, file=0x84a7b40 "sql_base.cc", line=4950) at thr_mutex.c:240 #6 0x081dd753 in remove_table_from_cache (thd=0x8c6be08, db=0x8c95c40 "test", table_name=0x8c95a58 "tb3", flags=2) at sql_base.cc:4950 #7 0x08287763 in wait_while_table_is_used (thd=0x8c6be08, table=0x8c953d0, function=HA_EXTRA_PREPARE_FOR_DELETE) at sql_table.cc:1867 #8 0x082877df in close_cached_table (thd=0x8c6be08, table=0x8c953d0) at sql_table.cc:1893 #9 0x082eee79 in mysql_create_or_drop_trigger (thd=0x8c6be08, tables=0x8ca2530, create=true) at sql_trigger.cc:188 #10 0x081b0ddd in mysql_execute_command (thd=0x8c6be08) at sql_parse.cc:4513 #11 0x081b3309 in mysql_parse (thd=0x8c6be08, inBuf=0x8ca2450 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2", length=63) at sql_parse.cc:5444 #12 0x081a88f9 in dispatch_command (command=COM_QUERY, thd=0x8c6be08, packet=0x8c90379 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2", packet_length=64) at sql_parse.cc:1664 #13 0x081a80c6 in do_command (thd=0x8c6be08) at sql_parse.cc:1463 #14 0x081a71a6 in handle_one_connection (arg=0x8c6be08) at sql_parse.cc:1116 #15 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0 #16 0x4017bc2e in clone () from /lib/tls/libc.so.6 (gdb) thread 940 [Switching to thread 940 (Thread 1115732912 (LWP 29939))]#0 0xffffe410 in ?? () (gdb) bt #0 0xffffe410 in ?? () #1 0x4280a700 in ?? () #2 0x00000046 in ?? () #3 0x00000000 in ?? () #4 0x4004cccc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0 #5 0x0840ce7f in safe_cond_timedwait (cond=0x8609660, mp=0x86091c0, abstime=0x4280a700, file=0x84a7b40 "sql_base.cc", line=4950) at thr_mutex.c:240 #6 0x081dd753 in remove_table_from_cache (thd=0x8c68a00, db=0x8c4de50 "test", table_name=0x8c4dc68 "tb3", flags=2) at sql_base.cc:4950 #7 0x08287763 in wait_while_table_is_used (thd=0x8c68a00, table=0x8c4f938, function=HA_EXTRA_PREPARE_FOR_DELETE) at sql_table.cc:1867 #8 0x082877df in close_cached_table (thd=0x8c68a00, table=0x8c4f938) at sql_table.cc:1893 #9 0x082eee79 in mysql_create_or_drop_trigger (thd=0x8c68a00, tables=0x8c984b8, create=true) at sql_trigger.cc:188 #10 0x081b0ddd in mysql_execute_command (thd=0x8c68a00) at sql_parse.cc:4513 #11 0x081b3309 in mysql_parse (thd=0x8c68a00, inBuf=0x8c983d8 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2", length=63) at sql_parse.cc:5444 #12 0x081a88f9 in dispatch_command (command=COM_QUERY, thd=0x8c68a00, packet=0x8c8a359 "create trigger tr1 BEFORE INSERT on tb3 for each row set @a:= 2", packet_length=64) at sql_parse.cc:1664 #13 0x081a80c6 in do_command (thd=0x8c68a00) at sql_parse.cc:1463 #14 0x081a71a6 in handle_one_connection (arg=0x8c68a00) at sql_parse.cc:1116 #15 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0 #16 0x4017bc2e in clone () from /lib/tls/libc.so.6 How to repeat: Run stress test with test case above. Until stress test will be integrated to regular mysql-test suite please contact me and I will provide all necessary information.