Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.2.35, 10.2.36, 10.2.37, 10.3.26, 10.3.27, 10.3.28, 10.4.16, 10.4.17, 10.4.18, 10.5.7, 10.5.8, 10.5.9
Description
10.6 43ca6059cae8 |
mysqld: /home/mariadb/have_x/10.6/storage/innobase/include/sux_lock.h:338: void sux_lock<srw>::s_lock() [with srw = ssux_lock_low]: Assertion `!have_x()' failed.
|
210204 15:18:37 [ERROR] mysqld got signal 6 ;
|
|
#2 0x00007fc90856142a in __assert_fail_base (fmt=0x7fc9086e8a38 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5602b9648303 "!have_x()",
|
file=file@entry=0x5602b9648310 "/home/mariadb/have_x/10.6/storage/innobase/include/sux_lock.h", line=line@entry=338,
|
function=function@entry=0x5602b964b360 <sux_lock<ssux_lock_low>::s_lock()::__PRETTY_FUNCTION__> "void sux_lock<srw>::s_lock() [with srw = ssux_lock_low]") at assert.c:92
|
#3 0x00007fc9085614a2 in __GI___assert_fail (assertion=0x5602b9648303 "!have_x()", file=0x5602b9648310 "/home/mariadb/have_x/10.6/storage/innobase/include/sux_lock.h", line=338,
|
function=0x5602b964b360 <sux_lock<ssux_lock_low>::s_lock()::__PRETTY_FUNCTION__> "void sux_lock<srw>::s_lock() [with srw = ssux_lock_low]") at assert.c:101
|
#4 0x00005602b8d64b84 in sux_lock<ssux_lock_low>::s_lock (this=0x7fc8e408a640) at /home/mariadb/have_x/10.6/storage/innobase/include/sux_lock.h:338
|
#5 0x00005602b8d63e9b in mtr_t::page_lock (this=0x7fc9000268f0, block=0x7fc8e408a5c0, rw_latch=1) at /home/mariadb/have_x/10.6/storage/innobase/mtr/mtr0mtr.cc:1064
|
#6 0x00005602b8f55745 in buf_page_get_low (page_id=..., zip_size=0, rw_latch=1, guess=0x0, mode=10, mtr=0x7fc9000268f0, err=0x7fc90002679c, allow_ibuf_merge=false) at /home/mariadb/have_x/10.6/storage/innobase/buf/buf0buf.cc:3279
|
#7 0x00005602b8f559f0 in buf_page_get_gen (page_id=..., zip_size=0, rw_latch=1, guess=0x0, mode=10, mtr=0x7fc9000268f0, err=0x7fc90002679c, allow_ibuf_merge=false) at /home/mariadb/have_x/10.6/storage/innobase/buf/buf0buf.cc:3343
|
#8 0x00005602b8ccfce0 in btr_block_get (index=..., page=3, mode=1, merge=false, mtr=0x7fc9000268f0) at /home/mariadb/have_x/10.6/storage/innobase/include/btr0btr.h:237
|
#9 0x00005602b8eec9cc in btr_root_block_get (index=0x7fc8ac30af38, mode=RW_S_LATCH, mtr=0x7fc9000268f0) at /home/mariadb/have_x/10.6/storage/innobase/btr/btr0btr.cc:227
|
#10 0x00005602b8eecc7b in btr_height_get (index=0x7fc8ac30af38, mtr=0x7fc9000268f0) at /home/mariadb/have_x/10.6/storage/innobase/btr/btr0btr.cc:295
|
#11 0x00005602b8fc83b0 in dict_stats_analyze_index (index=0x7fc8ac30af38) at /home/mariadb/have_x/10.6/storage/innobase/dict/dict0stats.cc:1968
|
#12 0x00005602b8fc91bc in dict_stats_update_persistent (table=0x7fc8ac2f60f8) at /home/mariadb/have_x/10.6/storage/innobase/dict/dict0stats.cc:2250
|
#13 0x00005602b8fcbb74 in dict_stats_update (table=0x7fc8ac2f60f8, stats_upd_option=DICT_STATS_RECALC_PERSISTENT) at /home/mariadb/have_x/10.6/storage/innobase/dict/dict0stats.cc:3223
|
#14 0x00005602b8c87bd2 in ha_innobase::info_low (this=0x7fc8a02ad190, flag=28, is_analyze=true) at /home/mariadb/have_x/10.6/storage/innobase/handler/ha_innodb.cc:14026
|
#15 0x00005602b8c88640 in ha_innobase::analyze (this=0x7fc8a02ad190) at /home/mariadb/have_x/10.6/storage/innobase/handler/ha_innodb.cc:14319
|
#16 0x00005602b881c890 in handler::ha_analyze (this=0x7fc8a02ad190, thd=0x7fc8a0000d78, check_opt=0x7fc8a00061d8) at /home/mariadb/have_x/10.6/sql/handler.cc:4756
|
#17 0x00005602b8b744e1 in ha_partition::handle_opt_part (this=0x7fc8a04028d0, thd=0x7fc8a0000d78, check_opt=0x7fc8a00061d8, part_id=0, flag=2) at /home/mariadb/have_x/10.6/sql/ha_partition.cc:1355
|
#18 0x00005602b8b74d7f in ha_partition::handle_opt_partitions (this=0x7fc8a04028d0, thd=0x7fc8a0000d78, check_opt=0x7fc8a00061d8, flag=2) at /home/mariadb/have_x/10.6/sql/ha_partition.cc:1534
|
#19 0x00005602b8b74143 in ha_partition::analyze (this=0x7fc8a04028d0, thd=0x7fc8a0000d78, check_opt=0x7fc8a00061d8) at /home/mariadb/have_x/10.6/sql/ha_partition.cc:1235
|
#20 0x00005602b881c890 in handler::ha_analyze (this=0x7fc8a04028d0, thd=0x7fc8a0000d78, check_opt=0x7fc8a00061d8) at /home/mariadb/have_x/10.6/sql/handler.cc:4756
|
#21 0x00005602b8669ed5 in mysql_admin_table (thd=0x7fc8a0000d78, tables=0x7fc8a0012580, check_opt=0x7fc8a00061d8, operator_name=0x5602b935140f "analyze", lock_type=TL_READ_NO_INSERT, org_open_for_modify=true,
|
repair_table_use_frm=false, extra_open_options=0, prepare_func=0x0, operator_func=(int (handler::*)(handler * const, THD *, HA_CHECK_OPT *)) 0x5602b881c7ae <handler::ha_analyze(THD*, st_ha_check_opt*)>, view_operator_func=0x0)
|
at /home/mariadb/have_x/10.6/sql/sql_admin.cc:853
|
#22 0x00005602b866bf18 in Sql_cmd_analyze_table::execute (this=0x7fc8a0012c58, thd=0x7fc8a0000d78) at /home/mariadb/have_x/10.6/sql/sql_admin.cc:1389
|
#23 0x00005602b84b8703 in mysql_execute_command (thd=0x7fc8a0000d78) at /home/mariadb/have_x/10.6/sql/sql_parse.cc:5880
|
#24 0x00005602b84be997 in mysql_parse (thd=0x7fc8a0000d78, rawbuf=0x7fc8a0012450 "ANALYZE /* QNO 8597 CON_ID 13 */ TABLE `t8_innodb`", length=50, parser_state=0x7fc900029510) at /home/mariadb/have_x/10.6/sql/sql_parse.cc:7906
|
#25 0x00005602b84aaea7 in dispatch_command (command=COM_QUERY, thd=0x7fc8a0000d78, packet=0x7fc8a0008979 "", packet_length=50) at /home/mariadb/have_x/10.6/sql/sql_parse.cc:1833
|
#26 0x00005602b84a97ef in do_command (thd=0x7fc8a0000d78) at /home/mariadb/have_x/10.6/sql/sql_parse.cc:1365
|
#27 0x00005602b8652874 in do_handle_one_connection (connect=0x5602bcbc6d58, put_in_cache=true) at /home/mariadb/have_x/10.6/sql/sql_connect.cc:1410
|
#28 0x00005602b86525e2 in handle_one_connection (arg=0x5602bcbc6d58) at /home/mariadb/have_x/10.6/sql/sql_connect.cc:1312
|
#29 0x00005602b8b9741b in pfs_spawn_thread (arg=0x5602bcc0f4c8) at /home/mariadb/have_x/10.6/storage/perfschema/pfs.cc:2201
|
#30 0x00007fc90946c6db in start_thread (arg=0x7fc90002a700) at pthread_create.c:463
|
#31 0x00007fc908652a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
|
rr profile is available.
FMI, this is the test I used, at the moment it fails reasonably well at least on two different machines:
MariaDB/randgen elenst-dev 2cac3349f8 |
perl ./runall-new.pl --mysqld=--binlog-format=row --mysqld=--log-bin --mysqld=--log_bin_trust_function_creators=1 --mysqld=--thread-stack=131072 --duration=350 --seed=1612439028 --reporters=Backtrace,ErrorLog,Deadlock --mysqld=--log_output=FILE --mysqld=--max-statement-time=30 --mysqld=--lock-wait-timeout=10 --mysqld=--innodb-lock-wait-timeout=5 --mysqld=--lower-case-table-names=1 --vcols --mysqld=--plugin-load-add=query_cache_info --mysqld=--plugin-load-add=simple_password_check --threads=4 --queries=25000 --engine=InnoDB,MyISAM,Aria,HEAP --mysqld=--max-digest-length=0 --views=TEMPTABLE --redefine=conf/mariadb/modules/admin.yy --redefine=conf/mariadb/modules/metadata_lock_info.yy --redefine=conf/mariadb/modules/event.yy --redefine=conf/mariadb/modules/alter_table_indexes.yy --redefine=conf/mariadb/sp.yy --redefine=conf/mariadb/modules/dynamic_variables.yy --mysqld=--character-set-server=utf8mb4 --mysqld=--collation-server=utf8mb4_unicode_520_ci --mysqld=--log-tc-size=12K --grammar=conf/mariadb/multi_update.yy --gendata=conf/engines/falcon/falcon_recovery.zz --gendata-advanced --partitions --short-column-names --mtr-build-thread=300 --basedir1=`pwd`/../10.6 --seed=1612439028 --vardir=/dev/shm/var_have_x
|
Attachments
Issue Links
- is caused by
-
MDEV-20618 Assertion `btr_validate_index(index, 0, false)' failed in row_upd_sec_index_entry
-
- Closed
-
- relates to
-
MDEV-24142 rw_lock_t has unnecessarily complex wait logic
-
- Closed
-
nikitamalyavin, as far as I can tell, the exclusive root page latch was acquired in the thread, and we failed to invoke mtr_t::commit() as part of some error handling:
#3 0x00005602b8f4554e in sux_lock<ssux_lock_low>::x_lock_try (
this=0x7fc8e408a640)
at /home/mariadb/have_x/10.6/storage/innobase/include/sux_lock.h:442
#4 0x00005602b8f55f88 in buf_page_optimistic_get (rw_latch=2,
block=0x7fc8e408a5c0, modify_clock=1, mtr=0x7fc900027fb0)
at /home/mariadb/have_x/10.6/storage/innobase/buf/buf0buf.cc:3405
#5 0x00005602b8f17420 in btr_cur_optimistic_latch_leaves (
block=0x7fc8e408a5c0, modify_clock=1, latch_mode=0x7fc900027638,
cursor=0x7fc8a001efe8, mtr=0x7fc900027fb0)
at /home/mariadb/have_x/10.6/storage/innobase/btr/btr0cur.cc:778
#6 0x00005602b8f3afab in optimistic_latch_leaves::operator() (
this=0x7fc9000278e0, hint=0x7fc8e408a5c0)
at /home/mariadb/have_x/10.6/storage/innobase/btr/btr0pcur.cc:256
#7 0x00005602b8f3affc in buf::Block_hint::run_with_hint<optimistic_latch_leaves> (this=0x7fc8a001f0a8, f=...)
lude/buf0block_hint.h:57
#8 0x00005602b8f39cc3 in btr_pcur_restore_position (latch_mode=2, cursor=0x7fc8a001efe8,
mtr=0x7fc900027fb0) at /home/mariadb/have_x/10.6/storage/innobase/btr/btr0pcur.cc:334
#9 0x00005602b8e7e911 in row_upd_clust_step (node=0x7fc8a036ae70, thr=0x7fc8a036b378)
at /home/mariadb/have_x/10.6/storage/innobase/row/row0upd.cc:2800
#10 0x00005602b8e7f37d in row_upd (node=0x7fc8a036ae70, thr=0x7fc8a036b378)
at /home/mariadb/have_x/10.6/storage/innobase/row/row0upd.cc:2992
…
(rr) when
Current event: 1272574
…
(rr) finish
Run till exit from #0 0x00005602b8e7e911 in row_upd_clust_step (
node=0x7fc8a036ae70, thr=0x7fc8a036b378)
at /home/mariadb/have_x/10.6/storage/innobase/row/row0upd.cc:2800
0x00005602b8e7f37d in row_upd (node=0x7fc8a036ae70, thr=0x7fc8a036b378)
at /home/mariadb/have_x/10.6/storage/innobase/row/row0upd.cc:2992
2992 err = row_upd_clust_step(node, thr);
Value returned is $15 = DB_COMPUTE_VALUE_FAILED
All this time, I had a watchpoint set on the lock word, which remained as WRITER==1U<<31. Later, the same thread would fail because it notices that it is already holding a conflicting latch on the page.
Note: before
MDEV-24142, the outcome could have been different, because rw_lock_t was implemented in a different way. Possibly, it was allowed to acquire S-latch on top of an already acquired X-latch by the same thread. WithMDEV-24142, that is no longer supported. A non-debug build would hang due to this.