Bug #75913 InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)

Submitted: 16 Feb 2015 5:30 Modified: 24 Apr 2015 14:37
Reporter: Roel Van de Paar Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S1 (Critical)
Version:5.7.5-m15 OS:Any
Assigned to: CPU Architecture:Any

[16 Feb 2015 5:30] Roel Van de Paar
Description:
2015-02-06T23:09:43.443935Z 5 [ERROR] Invalid (old?) table or database name '@'
2015-02-07 10:09:43 0x7fe8bc004700  InnoDB: Assertion failure in thread 140637563275008 in file btr0cur.cc line 1239
InnoDB: Failing assertion: (fil_page_get_type(page) == 17855 || fil_page_get_type(page) == 17854)

How to repeat:
This assertion can be triggered with the testcase from bug 74876;

DROP DATABASE transforms;CREATE DATABASE transforms;DROP DATABASE test;CREATE DATABASE test;USE test;
DELETE FROM mysql.innodb_table_stats WHERE table_name = 'test_ps_fetch_nonexistent';
create TABLE t1 (a int not null);
DROP TABLE t1;
SET @start_global_value = @@global.auto_increment_offset;
ALTER TABLE t1 ADD c4 NUMERIC NOT NULL AFTER c2;
CREATE TABLE mytable_ref (id int,constraint FOREIGN KEY (id) REFERENCES FOO(id) ON DELETE CASCADE) ENGINE=innodb;
SET @@global.innodb_trx_rseg_n_slots_debug = @start_global_value;
INSERT INTO t1  VALUES (INET6_ATON('1.2.3.4')), (INET6_ATON('255.255.255.255')), (INET6_ATON('::1.2.3.4')), (INET6_ATON('::ffff:255.255.255.255')), (INET6_ATON('::')), (INET6_ATON('::1')), (INET6_ATON('1020:3040:5060:7080:90A0:B0C0:D0E0:F010'));
SET GLOBAL innodb_file_per_table=0;
INSERT INTO t1 VALUES ('00:00:01.000012'); ;

However, you would have to run the testcase many times to trigger the bug (I think, not verfied) - usually it seems to trigger bug 74876 instead.
[16 Feb 2015 5:31] Roel Van de Paar
(gdb) bt
#0  0x00007fe8bba4c771 in pthread_kill () from /lib64/libpthread.so.0
#1  0x0000000000e15e08 in my_write_core (sig=6) at /bzr/mysql-5.7-percona-patches_dbg/mysys/stacktrace.c:247
#2  0x00000000008220f4 in handle_fatal_signal (sig=6) at /bzr/mysql-5.7-percona-patches_dbg/sql/signal_handler.cc:219
#3  <signal handler called>
#4  0x00007fe8ba6505c9 in raise () from /lib64/libc.so.6
#5  0x00007fe8ba651cd8 in abort () from /lib64/libc.so.6
#6  0x00000000010d538b in ut_dbg_assertion_failed (expr=0x14f63e8 "(fil_page_get_type(page) == 17855 || fil_page_get_type(page) == 17854)", file=0x14f59a8 "/bzr/mysql-5.7-percona-patches_dbg/storage/innobase/btr/btr0cur.cc", line=1239) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/ut/ut0dbg.cc:68
#7  0x00000000011014d5 in btr_cur_search_to_nth_level (index=0x7fe769b77898, level=0, tuple=0x7fe769b56298, mode=4, latch_mode=2, cursor=0x7fe8bc000ab0, has_search_latch=0, file=0x14b9d30 "/bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc", line=2372, mtr=0x7fe8bc000ec0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/btr/btr0cur.cc:1239
#8  0x0000000000ffac38 in btr_pcur_open_low (index=0x7fe769b77898, level=0, tuple=0x7fe769b56298, mode=4, latch_mode=2, cursor=0x7fe8bc000ab0, file=0x14b9d30 "/bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc", line=2372, mtr=0x7fe8bc000ec0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/include/btr0pcur.ic:455
#9  0x0000000000fffc2e in row_ins_clust_index_entry_low (flags=0, mode=2, index=0x7fe769b77898, n_uniq=0, entry=0x7fe769b56298, n_ext=0, thr=0x7fe76a90f7d0, dup_chk_only=false) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:2372
#10 0x0000000001001f14 in row_ins_clust_index_entry (index=0x7fe769b77898, entry=0x7fe769b56298, thr=0x7fe76a90f7d0, n_ext=0, dup_chk_only=false) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:3182
#11 0x00000000010023a9 in row_ins_index_entry (index=0x7fe769b77898, entry=0x7fe769b56298, thr=0x7fe76a90f7d0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:3306
#12 0x000000000100280b in row_ins_index_entry_step (node=0x7fe76a90f588, thr=0x7fe76a90f7d0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:3448
#13 0x0000000001002b9c in row_ins (node=0x7fe76a90f588, thr=0x7fe76a90f7d0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:3590
#14 0x00000000010030f9 in row_ins_step (thr=0x7fe76a90f7d0) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0ins.cc:3762
#15 0x000000000101e1cd in row_insert_for_mysql_using_ins_graph (mysql_rec=0x7fe769b75338 <incomplete sequence \375>, prebuilt=0x7fe76a90f098) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0mysql.cc:1579
#16 0x000000000101e51c in row_insert_for_mysql (mysql_rec=0x7fe769b75338 <incomplete sequence \375>, prebuilt=0x7fe76a90f098) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/row/row0mysql.cc:1695
#17 0x0000000000f11c26 in ha_innobase::write_row (this=0x7fe769b75020, record=0x7fe769b75338 <incomplete sequence \375>) at /bzr/mysql-5.7-percona-patches_dbg/storage/innobase/handler/ha_innodb.cc:6785
#18 0x000000000088cb6a in handler::ha_write_row (this=0x7fe769b75020, buf=0x7fe769b75338 <incomplete sequence \375>) at /bzr/mysql-5.7-percona-patches_dbg/sql/handler.cc:7423
#19 0x0000000000d1aa35 in write_record (thd=0x7fe76981c000, table=0x7fe7716cb210, info=0x7fe8bc001960, update=0x7fe8bc0019e0) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_insert.cc:1679
#20 0x0000000000d183a9 in mysql_insert (thd=0x7fe76981c000, table_list=0x7fe769827970, fields=..., values_list=..., update_fields=..., update_values=..., duplic=DUP_ERROR) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_insert.cc:707
#21 0x0000000000b49d85 in mysql_execute_command (thd=0x7fe76981c000) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_parse.cc:3367
#22 0x0000000000b4fd71 in mysql_parse (thd=0x7fe76981c000, parser_state=0x7fe8bc002e60) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_parse.cc:5427
#23 0x0000000000b448c4 in dispatch_command (command=COM_QUERY, thd=0x7fe76981c000, packet=0x7fe76a944011 "INSERT INTO t1 VALUES ('00:00:01.000012');", packet_length=42) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_parse.cc:1250
#24 0x0000000000b435fd in do_command (thd=0x7fe76981c000) at /bzr/mysql-5.7-percona-patches_dbg/sql/sql_parse.cc:834
#25 0x0000000000c4d54e in handle_connection (arg=0x7fe89d7fff00) at /bzr/mysql-5.7-percona-patches_dbg/sql/conn_handler/connection_handler_per_thread.cc:298
#26 0x0000000000e395e8 in pfs_spawn_thread (arg=0x7fe89dff9290) at /bzr/mysql-5.7-percona-patches_dbg/storage/perfschema/pfs.cc:2137
#27 0x00007fe8bba47df3 in start_thread () from /lib64/libpthread.so.0
#28 0x00007fe8ba7111ad in clone () from /lib64/libc.so.6
[16 Feb 2015 5:55] Roel Van de Paar
Adding a semi-testcase. Reducer script seems best at reproducing this.

$ ./reducer_hacked_for_bug75913.sh  # Make sure bug75913.sql is in the same directory. (This file has a number of DUMMY SELECTs added.)
[...various output...]
2015-02-16 16:46:26 [Init] Number of lines in input file: 24
2015-02-16 16:46:26 [] [Stage V] Verifying the bug/issue exists and is reproducible by reducer (duration depends on initial input file size)
[...]
2015-02-16 16:47:43 [*] [Stage 1] [Trial 2] Now filtering line(s) 14 to 18 (Current chunk size: 5)
./reducer_hacked_for_bug75913.sh: line 1295:  5941 Segmentation fault      ${PQUERY_LOC} --infile=$WORKT --database=test --threads=1 --user=root --socket=$WORKD/socket.sock > $WORKD/pquery.out 2>&1
2015-02-16 16:47:48 [*] [Stage 1] [Trial 2] [*ErrorLogOutputBug*] [1] Swapping files & saving last known good mysqld error log output issue in /sda/012378/bug75913.sql_out
Issue found... Inspect /dev/shm/1424065544/data/* - Press a key to continue...

Then, check the error log;

$ grep "Assertion" /dev/shm/1424065544/error.log.out
2015-02-16 16:47:47 0x7f9c1062f700  InnoDB: Assertion failure in thread 140308266546944 in file btr0cur.cc line 1244
[16 Feb 2015 6:07] Roel Van de Paar
file btr0cur.cc line 1239 + the assertion message = Percona Server
file btr0cur.cc line 1244 = MySQL Server
[16 Feb 2015 6:08] Roel Van de Paar
In Percona Server the assertion is:

Failing assertion: (fil_page_get_type(page) == 17855 || fil_page_get_type(page) 

Here is what the assertion looks like in MySQL:

InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)
[16 Feb 2015 6:09] Roel Van de Paar
reducer_hacked_for_bug75913.sh

Attachment: reducer_hacked_for_bug75913.sh (application/octet-stream, text), 176.73 KiB.

[16 Feb 2015 6:10] Roel Van de Paar
bug75913.sql

Attachment: bug75913.sql (application/octet-stream, text), 997 bytes.

[26 Feb 2015 21:23] Sveta Smirnova
Thank you for the report.

reducer_hacked_for_bug75913.sh  cannot start MYSQL server, because it cannot find privilege tables. Did I miss some option?

Also is it possible to specify custom WORKDIR_LOCATION?
[26 Feb 2015 23:19] Roel Van de Paar
Sveta, interesting, what does the startup log show exactly? Did you use something like make_binary_distribution and then use this? Reducer should put all that is needed in place.
[26 Feb 2015 23:20] Roel Van de Paar
And thank you for checking :)
[27 Feb 2015 18:01] Sveta Smirnova
Roel,

hm... I use self-compiled distribution. Just cmake [option]; make; make install. Will try with binary package now.
[27 Feb 2015 18:30] Sveta Smirnova
I just tried with mysql-5.7.5-m15-linux-glibc2.5-x86_64 and I don't see "missed grant tables" error anymore, server started, but reducer_hacked_for_bug75913.sh reports it is not:

$./reducer_hacked_for_bug75913.sh bug75913.sql
./reducer_hacked_for_bug75913.sh: line 257: sysctl: command not found
./reducer_hacked_for_bug75913.sh: line 257: [: -lt: unary operator expected
2015-02-27 19:24:08 [Init] Workdir: /tmp/1425061448
2015-02-27 19:24:08 [Init] Temporary storage directory (TMP environment variable) set to /tmp/1425061448/tmp
2015-02-27 19:24:08 [Init] Input file: bug75913.sql
2015-02-27 19:24:08 [Init] Server (When MULTI mode is not active): /home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64/bin/mysqld (as ssmirnov)
2015-02-27 19:24:08 [Init] Client (When MULTI mode is not active): /home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64/bin/mysql -uroot -S/tmp/1425061448/socket.sock
2015-02-27 19:24:08 [Init] Querytimeout: 90 seconds (ensure this is at least 1.5x what was set in RQG using the --querytimeout option)
2015-02-27 19:24:08 [Init] Passing the following additional options to mysqld: --innodb_adaptive_hash_index=ON --server_id=4294967295 --innodb_flush_method=O_DIRECT --log-bin=binlog --binlog_format=MIXED --innodb_file_per_table=1 --innodb_buffer_pool_dump_now=ON --innodb_buffer_pool_size=4294967244 --innodb_buffer_pool_load_now=ON --innodb_flush_neighbors=2 --innodb_page_cleaners=2 --innodb_random_read_ahead=ON --innodb_purge_threads=2  --event-scheduler=ON --maximum-bulk_insert_buffer_size=1M --maximum-join_buffer_size=1M --maximum-max_heap_table_size=1M --maximum-max_join_size=1M --maximum-myisam_max_sort_file_size=1M --maximum-myisam_mmap_size=1M --maximum-myisam_sort_buffer_size=1M --maximum-optimizer_trace_max_mem_size=1M --maximum-preload_buffer_size=1M --maximum-query_alloc_block_size=1M --maximum-query_prealloc_size=1M --maximum-range_alloc_block_size=1M --maximum-read_buffer_size=1M --maximum-read_rnd_buffer_size=1M --maximum-sort_buffer_size=1M --maximum-tmp_table_size=1M --maximum-transaction_alloc_block_size=1M --maximum-transaction_prealloc_size=1M --log-output=none --sql_mode=ONLY_FULL_GROUP_BY
2015-02-27 19:24:08 [Init] Setting up standard working subdirectories
2015-02-27 19:26:34 [Init] [ERROR] Failed to start mysqld server (1st boot), check /tmp/1425061448/error.log.out, /tmp/1425061448/mysqld.out, /tmp/1425061448/mysql_install_db.init, and maybe /tmp/1425061448/data/error.log. Also check that there is plenty of space on the device being used

$tail /tmp/1425061448/error.log.out
2015-02-27T18:24:36.040589Z 0 [Warning] Failed to setup SSL
2015-02-27T18:24:36.040607Z 0 [Warning] SSL error: SSL context is not usable without certificate and private key
2015-02-27T18:24:36.040639Z 0 [Note] Server hostname (bind-address): '*'; port: 33876
2015-02-27T18:24:36.040683Z 0 [Note] IPv6 is available.
2015-02-27T18:24:36.040700Z 0 [Note]   - '::' resolves to '::';
2015-02-27T18:24:36.040710Z 0 [Note] Server socket created on IP: '::'.
2015-02-27T18:24:36.136814Z 0 [Note] Event Scheduler: Loaded 0 events
2015-02-27T18:24:36.136905Z 0 [Note] /home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64/bin/mysqld: ready for connections.
Version: '5.7.5-m15-log'  socket: '/tmp/1425061448/socket.sock'  port: 33876  MySQL Community Server (GPL)
2015-02-27T18:24:36.136946Z 1 [Note] Event Scheduler: scheduler thread started with id 1

$ps -ef | grep mysqld | grep ssmirnov
ssmirnov 30948     1  0 19:24 pts/0    00:00:01 /home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64/bin/mysqld --no-defaults --basedir=/home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64 --datadir=/tmp/1425061448/data --tmpdir=/tmp/1425061448/tmp --port=33876 --pid-file=/tmp/1425061448/pid.pid --socket=/tmp/1425061448/socket.sock --user=ssmirnov --innodb_adaptive_hash_index=ON --server_id=4294967295 --innodb_flush_method=O_DIRECT --log-bin=binlog --binlog_format=MIXED --innodb_file_per_table=1 --innodb_buffer_pool_dump_now=ON --innodb_buffer_pool_size=4294967244 --innodb_buffer_pool_load_now=ON --innodb_flush_neighbors=2 --innodb_page_cleaners=2 --innodb_random_read_ahead=ON --innodb_purge_threads=2 --event-scheduler=ON --maximum-bulk_insert_buffer_size=1M --maximum-join_buffer_size=1M --maximum-max_heap_table_size=1M --maximum-max_join_size=1M --maximum-myisam_max_sort_file_size=1M --maximum-myisam_mmap_size=1M --maximum-myisam_sort_buffer_size=1M --maximum-optimizer_trace_max_mem_size=1M --maximum-preload_buffer_size=1M --maximum-query_alloc_block_size=1M --maximum-query_prealloc_size=1M --maximum-range_alloc_block_size=1M --maximum-read_buffer_size=1M --maximum-read_rnd_buffer_size=1M --maximum-sort_buffer_size=1M --maximum-tmp_table_size=1M --maximum-transaction_alloc_block_size=1M --maximum-transaction_prealloc_size=1M --log-output=none --sql_mode=ONLY_FULL_GROUP_BY --log-error=/tmp/1425061448/error.log.out --event-scheduler=ON
ssmirnov 31510 29240  0 19:28 pts/0    00:00:00 grep mysqld

$cat  /tmp/1425061448/mysqld.out
2015-02-27T18:24:34.076092Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-02-27T18:24:34.076236Z 0 [Note] /home/ssmirnov/blade12/mysql-5.7.5-m15-linux-glibc2.5-x86_64/bin/mysqld (mysqld 5.7.5-m15-log) starting as process 30948 ...

$cat /tmp/1425061448/mysql_install_db.init

$cat /tmp/1425061448/data/error.log
cat: /tmp/1425061448/data/error.log: No such file or directory

So server is up and running, no error, but test does not work. What should I fix to have it running?
[14 Mar 2015 7:49] Roel Van de Paar
Hi Sveta,

Thanks for trying. I tried again and used /tmp also to match your setup as closely as possible. It seems to reproduce easily (though have to check subreducers dirs - error in my earlier comment)

[roel@localhost ~]$ grep -A2 "Assertion" /tmp/1426318033/subreducer/*/error.log.out
/tmp/1426318033/subreducer/10/error.log.out:2015-03-14 18:31:56 0x7fdd1d7c3700  InnoDB: Assertion failure in thread 140587659179776 in file btr0cur.cc line1244
/tmp/1426318033/subreducer/10/error.log.out-InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)
/tmp/1426318033/subreducer/10/error.log.out-InnoDB: We intentionally generate a memory trap.
--
/tmp/1426318033/subreducer/1/error.log.out:2015-03-14 18:31:20 0x7f56c1f46700  InnoDB: Assertion failure in thread 140010597934848 in file btr0cur.cc line 1244
/tmp/1426318033/subreducer/1/error.log.out-InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)
/tmp/1426318033/subreducer/1/error.log.out-InnoDB: We intentionally generate a memory trap.
--
/tmp/1426318033/subreducer/2/error.log.out:2015-03-14 18:30:10 0x7f37853ca700  InnoDB: Assertion failure in thread 139876435273472 in file btr0cur.cc line 1244
/tmp/1426318033/subreducer/2/error.log.out-InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)
/tmp/1426318033/subreducer/2/error.log.out-InnoDB: We intentionally generate a memory trap.
--
... more ...

I am not sure what the difference between our machines is. Let me see if I can make a better testcase next week. Should be possible.
[14 Mar 2015 8:59] Shane Bester
I can verify getting the assertion one way, but I cannot accept the provided testcase as is.

5.8.0-debug:

InnoDB: Assertion failure in thread 140736364254976 in file btr0cur.cc line 1246
InnoDB: Failing assertion: index->id == btr_page_get_index_id(page)

(gdb) bt
#0  in raise () from /usr/lib64/libc.so.6
#1  in abort () from /usr/lib64/libc.so.6
#2  in ut_dbg_assertion_failed at ut0dbg.cc:67
#3  in btr_cur_search_to_nth_level at btr0cur.cc:1246
#4  in btr_pcur_open_low at btr0pcur.ic:465
#5  in row_search_on_row_ref at row0row.cc:817
#6  in row_purge_reposition_pcur at row0purge.cc:104
#7  in row_purge_remove_clust_if_poss_low at row0purge.cc:144
#8  in row_purge_remove_clust_if_poss at row0purge.cc:204
#9  in row_purge_del_mark at row0purge.cc:619
#10 in row_purge_record_func at row0purge.cc:904
#11 in row_purge at row0purge.cc:960
#12 in row_purge_step at row0purge.cc:1039
#13 in que_thr_step at que0que.cc:1049
#14 in que_run_threads_low at que0que.cc:1111
#15 in que_run_threads at que0que.cc:1151
#16 in trx_purge  at trx0purge.cc:1813
#17 in srv_do_purge  at srv0srv.cc:2487
#18 in srv_purge_coordinator_thread at srv0srv.cc:2675
#19 in start_thread () from /usr/lib64/libpthread.so.0
#20 in clone () from /usr/lib64/libc.so.6
[14 Mar 2015 9:29] Shane Bester
pseudo-random testcase for the assertion I see.

Attachment: bug75913.cpp (text/plain), 6.66 KiB.

[24 Apr 2015 14:37] Daniel Price
Posted by developer:
 
Fixed as of the upcoming 5.7.8, 5.8.0 release, and here's the changelog entry:

After a failed "DROP TABLE" operation, the purge background thread
asserted while attempting to access an index page of the table. Purge
should not attempt to clean a table that is marked as corrupt. Purge now
checks for a corrupt primary index. 

Thank you for the bug report.
[1 Dec 2017 16:22] Shane Bester
there's still a problem in 5.7 with this. Filing a new bug shortly and putting in BPS.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.074 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.