handle_fatal_signal (sig=11) in my_lfind

Bug #1632600 reported by Roel Van de Paar
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Server moved to https://jira.percona.com/projects/PS
Status tracked in 5.7
5.6
Confirmed
High
Unassigned
5.7
New
Undecided
Unassigned

Bug Description

This is a multi-threaded bug. It was reduced down to this small testcase;

# mysqld options required for replay: --maximum-tmp_table_size=1M --maximum-transaction_prealloc_size=1M --sql_mode=ONLY_FULL_GROUP_BY --thread_handling=pool-of-threads --log-bin=binlog --plugin-load-add=tokudb=ha_tokudb.so --init-file=/home/roel/percona-qa/plugins_56.sql --tokudb-check-jemalloc=0 --performance-schema-events-waits-history-size=0 --tokudb-last-lock-timeout=4
DROP DATABASE transforms;
CREATE TABLE t1(id INT,a BLOB COLUMN_FORMAT COMPRESSED WITH COMPRESSION_DICTIONARY numbers)ENGINE=TokuDB;

And it then needs a multi-thread wrapper (like the one in percona-qa perhaps, or reducer) to run it

Laurynas analyzed the stacks and the issue looks to be a race in threadpool.

Thread 0:

Core was generated by `/sda/COMP7-PS111016-percona-server-5.6.32-78.0-linux-x86_64-debug/bin/mysqld --'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000e4d32d in my_lfind (head=0x7f6e2c438e28, cs=0x14e9260 <my_charset_bin>, hashnr=674812401, key=0x7f6e56c5e050 "\331\061\242$\336LJ\255]\r'K8\001(\372test", keylen=212, cursor=0x7f6e56c5dfb0, pins=0x7f6e2d816300) at /git/compression7_dbg/mysys/lf_hash.c:95
95 link= cursor->curr->link;
(gdb) bt
+bt
#0 0x0000000000e4d32d in my_lfind (head=0x7f6e2c438e28, cs=0x14e9260 <my_charset_bin>, hashnr=674812401, key=0x7f6e56c5e050 "\331\061\242$\336LJ\255]\r'K8\001(\372test", keylen=212, cursor=0x7f6e56c5dfb0, pins=0x7f6e2d816300) at /git/compression7_dbg/mysys/lf_hash.c:95
#1 0x0000000000e4d7ab in my_lsearch (head=0x7f6e2c438e28, cs=0x14e9260 <my_charset_bin>, hashnr=674812401, key=0x7f6e56c5e050 "\331\061\242$\336LJ\255]\r'K8\001(\372test", keylen=212, pins=0x7f6e2d816300) at /git/compression7_dbg/mysys/lf_hash.c:267
#2 0x0000000000e4de4e in lf_hash_search (hash=0x17d5780 <digest_hash>, pins=0x7f6e2d816300, key=0x7f6e56c5e050, keylen=212) at /git/compression7_dbg/mysys/lf_hash.c:462
#3 0x0000000000ae1956 in find_or_create_digest (thread=0x7f6e6b9d5700, digest_storage=0x7f6e4ffc4c60, schema_name=0x7f6e4ffc4d48 "test", schema_name_length=4) at /git/compression7_dbg/storage/perfschema/pfs_digest.cc:223
#4 0x0000000000b1696d in end_statement_v1 (locker=0x7f6e4ffc4ca0, stmt_da=0x7f6e4ffc64a0) at /git/compression7_dbg/storage/perfschema/pfs.cc:4815
#5 0x00000000007e3239 in inline_mysql_end_statement (locker=0x7f6e4ffc4ca0, stmt_da=0x7f6e4ffc64a0) at /git/compression7_dbg/include/mysql/psi/mysql_statement.h:215
#6 0x00000000007e8065 in dispatch_command (command=COM_QUERY, thd=0x7f6e4ffc3000, packet=0x7f6e4ffc7001 "", packet_length=87) at /git/compression7_dbg/sql/sql_parse.cc:1911
#7 0x00000000007e595d in do_command (thd=0x7f6e4ffc3000) at /git/compression7_dbg/sql/sql_parse.cc:1062
#8 0x00000000008cbba0 in threadpool_process_request (thd=0x7f6e4ffc3000) at /git/compression7_dbg/sql/threadpool_common.cc:314
#9 0x00000000008ce48a in handle_event (connection=0x7f6e4fef6bb0) at /git/compression7_dbg/sql/threadpool_unix.cc:1564
#10 0x00000000008ce6e4 in worker_main (param=0x17bdc00 <all_groups+512>) at /git/compression7_dbg/sql/threadpool_unix.cc:1617
#11 0x0000000000b10701 in pfs_spawn_thread (arg=0x7f6e2a084020) at /git/compression7_dbg/storage/perfschema/pfs.cc:1860
#12 0x00007f6e8078edc5 in start_thread (arg=0x7f6e56c5f700) at pthread_create.c:308
#13 0x00007f6e7ebebced in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Signal thread:

Thread 69 (Thread 0x7f6e5fc6b700 (LWP 4988)):
+bt
#0 0x00007f6e7eec86e3 in _Unwind_IteratePhdrCallback (info=info@entry=0x7f6e5fc69050, size=size@entry=64, ptr=ptr@entry=0x7f6e5fc690d0) at ../../../libgcc/unwind-dw2-fde-dip.c:398
#1 0x00007f6e7ec25fac in __GI___dl_iterate_phdr (callback=callback@entry=0x7f6e7eec82e0 <_Unwind_IteratePhdrCallback>, data=data@entry=0x7f6e5fc690d0) at dl-iteratephdr.c:76
#2 0x00007f6e7eec8c1f in _Unwind_Find_FDE (pc=0x7f6e7ebffbe5 <__GI___backtrace+85>, bases=bases@entry=0x7f6e5fc69268) at ../../../libgcc/unwind-dw2-fde-dip.c:461
#3 0x00007f6e7eec5d8c in uw_frame_state_for (context=context@entry=0x7f6e5fc691c0, fs=fs@entry=0x7f6e5fc692b0) at ../../../libgcc/unwind-dw2.c:1245
#4 0x00007f6e7eec7019 in _Unwind_Backtrace (trace=0x7f6e7ebffa70 <backtrace_helper>, trace_argument=0x7f6e5fc69470) at ../../../libgcc/unwind.inc:290
#5 0x00007f6e7ebffbe6 in __GI___backtrace (array=<optimized out>, size=128) at ../sysdeps/x86_64/backtrace.c:109
#6 0x0000000000ac1b34 in my_print_stacktrace (stack_bottom=0x7f6e5fc6ac08 "", thread_stack=262144) at /git/compression7_dbg/mysys/stacktrace.c:224
#7 0x00000000007361e6 in handle_fatal_signal (sig=11) at /git/compression7_dbg/sql/signal_handler.cc:163
#8 <signal handler called>
#9 0x0000000000e4d32d in my_lfind (head=0x7f6e2d83f528, cs=0x14e9260 <my_charset_bin>, hashnr=694946247, key=0x7f6e5fc6a050 "O(r\332\353\317m\352\207ڨ\032u\t\324\354compressed_db", keylen=212, cursor=0x7f6e5fc69fb0, pins=0x7f6e2d816280) at /git/compression7_dbg/mysys/lf_hash.c:95
#10 0x0000000000e4d7ab in my_lsearch (head=0x7f6e2d83f528, cs=0x14e9260 <my_charset_bin>, hashnr=694946247, key=0x7f6e5fc6a050 "O(r\332\353\317m\352\207ڨ\032u\t\324\354compressed_db", keylen=212, pins=0x7f6e2d816280) at /git/compression7_dbg/mysys/lf_hash.c:267
#11 0x0000000000e4de4e in lf_hash_search (hash=0x17d5780 <digest_hash>, pins=0x7f6e2d816280, key=0x7f6e5fc6a050, keylen=212) at /git/compression7_dbg/mysys/lf_hash.c:462
#12 0x0000000000ae1956 in find_or_create_digest (thread=0x7f6e6b9d3600, digest_storage=0x7f6e4ffb2c60, schema_name=0x7f6e4ffb2d48 "compressed_db", schema_name_length=13) at /git/compression7_dbg/storage/perfschema/pfs_digest.cc:223
#13 0x0000000000b1696d in end_statement_v1 (locker=0x7f6e4ffb2ca0, stmt_da=0x7f6e4ffb44a0) at /git/compression7_dbg/storage/perfschema/pfs.cc:4815
#14 0x00000000007e3239 in inline_mysql_end_statement (locker=0x7f6e4ffb2ca0, stmt_da=0x7f6e4ffb44a0) at /git/compression7_dbg/include/mysql/psi/mysql_statement.h:215
#15 0x00000000007e8065 in dispatch_command (command=COM_QUERY, thd=0x7f6e4ffb1000, packet=0x7f6e4ffb5001 "", packet_length=65) at /git/compression7_dbg/sql/sql_parse.cc:1911
#16 0x00000000007e595d in do_command (thd=0x7f6e4ffb1000) at /git/compression7_dbg/sql/sql_parse.cc:1062
#17 0x00000000008cbba0 in threadpool_process_request (thd=0x7f6e4ffb1000) at /git/compression7_dbg/sql/threadpool_common.cc:314
#18 0x00000000008ce48a in handle_event (connection=0x7f6e4fef6af0) at /git/compression7_dbg/sql/threadpool_unix.cc:1564
#19 0x00000000008ce6e4 in worker_main (param=0x17be800 <all_groups+3584>) at /git/compression7_dbg/sql/threadpool_unix.cc:1617
#20 0x0000000000b10701 in pfs_spawn_thread (arg=0x7f6e2d01b0c0) at /git/compression7_dbg/storage/perfschema/pfs.cc:1860
#21 0x00007f6e8078edc5 in start_thread (arg=0x7f6e5fc6b700) at pthread_create.c:308
#22 0x00007f6e7ebebced in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Upon entering gdb;

(gdb) p cursor
+p cursor
$1 = (CURSOR *) 0x7f6e56c5dfb0

(gdb) p cursor->curr
+p cursor->curr
$2 = (LF_SLIST *) 0x2f62645f64657372

All details will be uploaded.

Tags: qa threadpool
Revision history for this message
Roel Van de Paar (roel11) wrote :
Revision history for this message
Roel Van de Paar (roel11) wrote :

Adding core dump + mysqld + ldd files + full data dir and original thread sql files etc.

To init gdb:

gdb ./mysqld/mysqld ./data/core.4840.1000.1000.11.1476222798.mysqld

1037.sql_out_out is the final testcase (listed above)

Even has reducer1037.sh included which can be path-modified to reproduce in-spe

Revision history for this message
Roel Van de Paar (roel11) wrote :
tags: added: qa threadpool
Revision history for this message
Shahriyar Rzayev (rzayev-sehriyar) wrote :

Percona now uses JIRA for bug reports so this bug report is migrated to: https://jira.percona.com/browse/PS-3578

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.