Bug #79378 | buf_block_align() makes incorrect assumptions about chunk size | ||
---|---|---|---|
Submitted: | 23 Nov 2015 5:01 | Modified: | 20 Jul 2016 12:20 |
Reporter: | Alexey Kopytov | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
Version: | 5.7 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[23 Nov 2015 5:01]
Alexey Kopytov
[23 Nov 2015 5:31]
Stewart Smith
64k page size is default on POWER systems.
[31 Dec 2015 20:57]
OCA Admin
Contribution submitted via Github - Bug #79378: buf_block_align() makes incorrect assumptions about chunk size (*) Contribution by Alexey Kopytov (Github akopytov, mysql-server/pull/44#issuecomment-168211556): I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: git_patch_54827445.txt (text/plain), 1.79 KiB.
[12 Apr 2016 1:13]
Daniel Black
Reproduced on Power, version 5.7.12 in test case innodb.table_encrypt_kill Thread 1 (Thread 0x3fff6c2ff170 (LWP 30409)): #0 0x00003fff95802dbc in __pthread_kill (threadid=<optimised out>, signo=<optimised out>) at ../sysdeps/unix/sysv/linux/pthread_kill.c:58 #1 0x0000000010bbcd80 in my_write_core (sig=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/mysys/stacktrace.c:247 #2 0x00000000103775b4 in handle_fatal_signal (sig=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/signal_handler.cc:220 #3 <signal handler called> #4 0x00003fff94f2f2dc in __GI_raise (sig=<optimised out>) at ../sysdeps/unix/sysv/linux/raise.c:55 #5 0x00003fff94f31db4 in __GI_abort () at abort.c:89 #6 0x000000001033e8d0 in ut_dbg_assertion_failed (expr=0x112ac490 "it != chunk_map->end()", file=0x112ac448 "/home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/buf/buf0buf.cc", line=3863) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/ut/ut0dbg.cc:67 #7 0x0000000010e14610 in buf_block_from_ahi (ptr=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/buf/buf0buf.cc:3863 #8 0x0000000010e028ec in btr_search_guess_on_hash (index=0x3fff480220d8, info=0x3fff48023aa8, tuple=0x3fff280b4858, mode=4, latch_mode=2, cursor=0x3fff6c2fa9e0, has_search_latch=0, mtr=0x3fff6c2f9ed0) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/btr/btr0sea.cc:1023 #9 0x0000000010df4bf4 in btr_cur_search_to_nth_level (index=0x3fff480220d8, level=0, tuple=0x3fff280b4858, mode=<optimised out>, latch_mode=2, cursor=0x3fff6c2fa9e0, has_search_latch=0, file=0x11298cf8 "/home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc", line=2344, mtr=0x3fff6c2f9ed0) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/btr/btr0cur.cc:926 #10 0x0000000010cf528c in btr_pcur_open_low (level=0, file=0x11298cf8 "/home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc", mtr=0x3fff6c2f9ed0, line=2344, cursor=0x3fff6c2fa9e0, latch_mode=2, mode=PAGE_CUR_LE, tuple=0x3fff280b4858, index=0x3fff480220d8) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/include/btr0pcur.ic:465 #11 row_ins_clust_index_entry_low (flags=0, mode=2, index=0x3fff480220d8, n_uniq=1, entry=0x3fff280b4858, n_ext=0, thr=0x3fff280b3460, dup_chk_only=false) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:2344 #12 0x0000000010cf9ff4 in row_ins_clust_index_entry (index=0x3fff480220d8, entry=0x3fff280b4858, thr=0x3fff280b3460, n_ext=0, dup_chk_only=false) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:3162 #13 0x0000000010cfa98c in row_ins_index_entry (thr=<optimised out>, entry=<optimised out>, index=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:3292 #14 row_ins_index_entry_step (thr=<optimised out>, node=0x3fff280b3088) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:3442 #15 row_ins (thr=0x3fff280b3460, node=0x3fff280b3088) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:3584 #16 row_ins_step (thr=0x3fff280b3460) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0ins.cc:3769 #17 0x0000000010d0d800 in row_insert_for_mysql_using_ins_graph (mysql_rec=<optimised out>, prebuilt=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/row/row0mysql.cc:1732 #18 0x0000000010c057f4 in ha_innobase::write_row (this=0x3fff280aeb30, record=0x3fff280aef40 "\360\361\t") at /home/danielgb/mysql-5.7-POWER_FIXES/storage/innobase/handler/ha_innodb.cc:7484 #19 0x00000000103f0d68 in handler::ha_write_row (this=0x3fff280aeb30, buf=0x3fff280aef40 "\360\361\t") at /home/danielgb/mysql-5.7-POWER_FIXES/sql/handler.cc:7844 #20 0x0000000010acfbe4 in write_record (thd=0x3fff28000b30, table=0x3fff280ae190, info=0x3fff6c2fb4f0, update=0x3fff6c2fb470) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_insert.cc:1860 #21 0x0000000010ad1448 in Sql_cmd_insert::mysql_insert (this=0x3fff2802d4e0, thd=0x3fff28000b30, table_list=0x3fff2802c438) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_insert.cc:780 #22 0x0000000010ad1b8c in Sql_cmd_insert::execute (this=0x3fff2802d4e0, thd=0x3fff28000b30) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_insert.cc:3092 #23 0x000000001090dea0 in mysql_execute_command (thd=0x3fff28000b30, first_level=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_parse.cc:3520 #24 0x0000000010878094 in sp_instr_stmt::exec_core (this=0x3fff2802d618, thd=0x3fff28000b30, nextp=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_instr.cc:948 #25 0x000000001087ad84 in sp_lex_instr::reset_lex_and_exec_core (this=0x3fff2802d618, thd=0x3fff28000b30, nextp=0x3fff6c2fccd8, open_tables=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_instr.cc:411 #26 0x000000001087b7e4 in sp_lex_instr::validate_lex_and_execute_core (this=0x3fff2802d618, thd=0x3fff28000b30, nextp=0x3fff6c2fccd8, open_tables=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_instr.cc:676 #27 0x000000001087c914 in sp_instr_stmt::execute (this=0x3fff2802d618, thd=0x3fff28000b30, nextp=0x3fff6c2fccd8) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_instr.cc:859 #28 0x0000000010872e5c in sp_head::execute (this=0x3fff2801d7a0, thd=0x3fff28000b30, merge_da_on_success=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_head.cc:789 #29 0x0000000010876d40 in sp_head::execute_procedure (this=0x3fff2801d7a0, thd=0x3fff28000b30, args=0x3fff28003030) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sp_head.cc:1522 #30 0x000000001090e640 in mysql_execute_command (thd=0x3fff28000b30, first_level=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_parse.cc:4506 #31 0x000000001091381c in mysql_parse (thd=0x3fff28000b30, parser_state=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_parse.cc:5519 #32 0x000000001091427c in dispatch_command (thd=0x3fff28000b30, com_data=<optimised out>, command=COM_QUERY) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_parse.cc:1429 #33 0x0000000010915e24 in do_command (thd=0x3fff28000b30) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/sql_parse.cc:997 #34 0x00000000109fa350 in handle_connection (arg=<optimised out>) at /home/danielgb/mysql-5.7-POWER_FIXES/sql/conn_handler/connection_handler_per_thread.cc:301 #35 0x0000000010f69398 in pfs_spawn_thread (arg=0x10038605490) at /home/danielgb/mysql-5.7-POWER_FIXES/storage/perfschema/pfs.cc:2188 #36 0x00003fff957f82cc in start_thread (arg=0x3fff6c2ff170) at pthread_create.c:336 #37 0x00003fff95023f04 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:96 the code changes due to https://github.com/mysql/mysql-server/commit/19849a47fc28c93a73317bb4f0454a1a1b55f420 means a new patch is required.
[17 May 2016 13:36]
OCA Admin
Contribution submitted via Github - Bug #79378: buf_block_align() makes incorrect assumptions about chunk size (*) Contribution by Alexey Kopytov (Github akopytov, mysql-server/pull/73#issuecomment-219698120): I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: git_patch_70239416.txt (text/plain), 1.58 KiB.
[17 May 2016 22:53]
Daniel Black
I've tested Alexey's latest patch. It corrects a segfault in the innodb.table_encrypt_kill test that I was able to produce reliably on Power8.
[20 Jul 2016 12:20]
Daniel Price
Posted by developer: Fixed as of the upcoming 5.7.15 release, and here's the changelog entry: In some cases, code that locates a buffer pool chunk corresponding to given pointer returned the wrong chunk. Thanks to Alexey Kopytov for the patch.