Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.4(EOL)
Description
10.4 2e5d86f49e |
2020-08-23 15:35:09 0x7f517bcff700 InnoDB: Assertion failure in file /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc line 1146
|
InnoDB: Failing assertion: *len
|
|
#1 0x00007f51c25b88b1 in __GI_abort () at abort.c:79
|
#2 0x000055f859ab1d10 in ut_dbg_assertion_failed (expr=0x55f85a20ecb5 "*len", file=0x55f85a20e9b8 "/home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc", line=1146)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/ut/ut0dbg.cc:60
|
#3 0x000055f859a307f9 in row_upd_ext_fetch (data=0x7f517000c4a0 "", local_len=20, zip_size=0, len=0x7f517bcfcde8, heap=0x7f517000c3f0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1146
|
#4 0x000055f859a3090a in row_upd_index_replace_new_col_val (dfield=0x7f517000c678, field=0x7f514c0749d8, col=0x7f514c0736d0, uf=0x7f517000c560, heap=0x7f517000c3f0,
|
zip_size=0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1192
|
#5 0x000055f859a315df in row_upd_index_replace_new_col_vals (entry=0x7f517000c640, index=0x7f514c06d140, update=0x7f517000c4d0, heap=0x7f517000c3f0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1401
|
#6 0x000055f859a8d2c2 in trx_undo_prev_version_build (index_rec=0x7f51b79a4081 "2222222222", index_mtr=0x7f517bcfdb30, rec=0x7f51b79a4081 "2222222222", index=0x7f514c06d140,
|
offsets=0x7f5170008e90, heap=0x7f517000c3f0, old_vers=0x7f517bcfd210, v_heap=0x0, vrow=0x7f517bcfd758, v_status=3)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/trx/trx0rec.cc:2479
|
#7 0x000055f859a40477 in row_vers_vc_matches_cluster (rec=0x7f51b79a4081 "2222222222", icentry=0x7f517000aae0, clust_index=0x7f514c06d140, clust_offsets=0x7f5170008e90,
|
index=0x7f514c06c6c0, ientry=0x7f5170008980, roll_ptr=8162774346308341, trx_id=0, v_heap=0x0, vrow=0x7f517bcfd758, mtr=0x7f517bcfdb30)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:702
|
#8 0x000055f859a41007 in row_vers_old_has_index_entry (also_curr=true, rec=0x7f51b79a4081 "2222222222", mtr=0x7f517bcfdb30, index=0x7f514c06c6c0, ientry=0x7f5170008980,
|
roll_ptr=8162774346308341, trx_id=0, vcol_info=0x55f85c76ca70) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:986
|
#9 0x000055f8599fc3c6 in row_purge_poss_sec (node=0x55f85c76c8c0, index=0x7f514c06c6c0, entry=0x7f5170008980, sec_pcur=0x7f517bcfe080, sec_mtr=0x7f517bcfe320, is_tree=false)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:320
|
#10 0x000055f8599fd2d8 in row_purge_remove_sec_if_poss_leaf (node=0x55f85c76c8c0, index=0x7f514c06c6c0, entry=0x7f5170008980)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:582
|
#11 0x000055f8599fd7f3 in row_purge_remove_sec_if_poss (node=0x55f85c76c8c0, index=0x7f514c06c6c0, entry=0x7f5170008980)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:695
|
#12 0x000055f8599fda18 in row_purge_del_mark (node=0x55f85c76c8c0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:769
|
#13 0x000055f8599ff637 in row_purge_record_func (node=0x55f85c76c8c0, undo_rec=0x7f5180012b48 "", thr=0x55f85c76c450, updated_extern=false)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1195
|
#14 0x000055f8599ff93e in row_purge (node=0x55f85c76c8c0, undo_rec=0x7f5180012b48 "", thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1261
|
#15 0x000055f8599ffb9c in row_purge_step (thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1320
|
#16 0x000055f85996ace8 in que_thr_step (thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1039
|
#17 0x000055f85996af7f in que_run_threads_low (thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1101
|
#18 0x000055f85996b1cd in que_run_threads (thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1141
|
#19 0x000055f859a4a71e in srv_task_execute (slot=0x55f85aa33db0 <srv_sys+560>) at /home/mdbe/MDEV-23547/10.4/storage/innobase/srv/srv0srv.cc:2471
|
#20 0x000055f859a4a94e in srv_worker_thread (arg=0x0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/srv/srv0srv.cc:2519
|
#21 0x00007f51c3c0b6db in start_thread (arg=0x7f517bcff700) at pthread_create.c:463
|
#22 0x00007f51c2699a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
|
Unreliably reproducible on 10.4.
The test case is simple, but it takes dozens repetitions for the failure to happen. Possibly with a good targeted timing and/or InnoDB configuration it can be made more reliable.
--source include/have_innodb.inc
|
|
CREATE TABLE t1 (col1 INT, col2 INT, col3 INT, col4 TEXT) ENGINE=InnoDB; |
INSERT INTO t1 VALUES (2, 2, 1, REPEAT('2',8193)); |
ALTER TABLE t1 ADD UNIQUE s (col4), ALGORITHM=COPY; |
ALTER TABLE t1 ADD PRIMARY KEY (col4(10)); |
DELETE FROM t1 WHERE col2 = 2 OR col2 IS NULL; |
INSERT INTO t1 VALUES (2, 1, 2, REPEAT('2',8193)); |
|
--source include/restart_mysqld.inc
|
|
DROP TABLE t1; |
The rr profile is available, even though when run with rr on 10.4, it more willingly fails with a crash in innobase_get_computed_value.
(rr) bt
|
#0 innobase_get_computed_value (row=0x7fc6b8009080, col=0x7fc6d001f0b0, index=0x7fc6d00203a0, local_heap=0x7fc6cbffd6b0, heap=0x7fc6b8008fd0, ifield=0x0, thd=0x7fc6b8000d50,
|
mysql_table=0x7fc6b800aa00, mysql_rec=0x7fc6b800f0e0 "", old_table=0x0, parent_update=0x0, foreign=0x0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/handler/ha_innodb.cc:20757
|
#1 0x000056219702abfc in row_vers_build_clust_v_col (row=0x7fc6b8009080, clust_index=0x7fc6d00203a0, index=0x7fc6d0020e20, heap=0x7fc6b8008fd0, vcol_info=0x562199be8da0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:490
|
#2 0x000056219702bf1a in row_vers_old_has_index_entry (also_curr=true, rec=0x7fc707d44081 "2222222222", mtr=0x7fc6cbffdb30, index=0x7fc6d0020e20, ientry=0x7fc6b80088a0,
|
roll_ptr=7318349415973136, trx_id=0, vcol_info=0x562199be8da0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:959
|
#3 0x0000562196fe73c6 in row_purge_poss_sec (node=0x562199be8bf0, index=0x7fc6d0020e20, entry=0x7fc6b80088a0, sec_pcur=0x7fc6cbffe080, sec_mtr=0x7fc6cbffe320, is_tree=false)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:320
|
#4 0x0000562196fe82d8 in row_purge_remove_sec_if_poss_leaf (node=0x562199be8bf0, index=0x7fc6d0020e20, entry=0x7fc6b80088a0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:582
|
#5 0x0000562196fe87f3 in row_purge_remove_sec_if_poss (node=0x562199be8bf0, index=0x7fc6d0020e20, entry=0x7fc6b80088a0)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:695
|
#6 0x0000562196fe8a18 in row_purge_del_mark (node=0x562199be8bf0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:769
|
#7 0x0000562196fea637 in row_purge_record_func (node=0x562199be8bf0, undo_rec=0x7fc6d0013330 "", thr=0x562199be8780, updated_extern=false)
|
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1195
|
#8 0x0000562196fea93e in row_purge (node=0x562199be8bf0, undo_rec=0x7fc6d0013330 "", thr=0x562199be8780) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1261
|
#9 0x0000562196feab9c in row_purge_step (thr=0x562199be8780) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1320
|
#10 0x0000562196f55ce8 in que_thr_step (thr=0x562199be8780) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1039
|
#11 0x0000562196f55f7f in que_run_threads_low (thr=0x562199be8780) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1101
|
#12 0x0000562196f561cd in que_run_threads (thr=0x562199be8780) at /home/mdbe/MDEV-23547/10.4/storage/innobase/que/que0que.cc:1141
|
#13 0x000056219703571e in srv_task_execute (slot=0x56219801edb0 <srv_sys+560>) at /home/mdbe/MDEV-23547/10.4/storage/innobase/srv/srv0srv.cc:2471
|
#14 0x000056219703594e in srv_worker_thread (arg=0x0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/srv/srv0srv.cc:2519
|
#15 0x00007fc7144dc6db in start_thread (arg=0x7fc6cbfff700) at pthread_create.c:463
|
#16 0x00007fc712f6aa3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
|
We had and still have similar bugs in relation to virtual columns / long blobs, e.g. MDEV-20484. Possibly, the reported *len assertion belongs to the same group.
The test case is not applicable to earlier versions due to the long unique blob, I don't know if it can be avoided.
10.5 fails with another assertion failure, both with and without rr:
10.5 6708e67a |
mariadbd: /data/src/10.5/storage/innobase/sync/sync0rw.cc:764: void rw_lock_sx_lock_func(rw_lock_t*, ulint, const char*, unsigned int): Assertion `!rw_lock_own(lock, RW_LOCK_S)' failed.
|
200823 19:22:29 [ERROR] mysqld got signal 6 ;
|
|
#3 0x00007f09dd851f12 in __GI___assert_fail (assertion=0x55a7acaa5375 "!rw_lock_own(lock, RW_LOCK_S)",
|
file=0x55a7acaa51e0 "/data/src/10.5/storage/innobase/sync/sync0rw.cc", line=764,
|
function=0x55a7acaa5ee0 <rw_lock_sx_lock_func(rw_lock_t*, unsigned long, char const*, unsigned int)::__PRETTY_FUNCTION__> "void rw_lock_sx_lock_func(rw_lock_t*, ulint, const char*, unsigned int)") at assert.c:101
|
#4 0x000055a7ac335ab3 in rw_lock_sx_lock_func (lock=0x7f09d311c680, pass=0, file_name=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc", line=227)
|
at /data/src/10.5/storage/innobase/sync/sync0rw.cc:764
|
#5 0x000055a7ac3ff609 in pfs_rw_lock_sx_lock_func (lock=0x7f09d311c680, pass=0, file_name=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc", line=227)
|
at /data/src/10.5/storage/innobase/include/sync0rw.ic:678
|
#6 0x000055a7ac406c16 in buf_page_mtr_lock (block=0x7f09d311c600, rw_latch=4, mtr=0x7f09d1ff5250, file=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc",
|
line=227) at /data/src/10.5/storage/innobase/buf/buf0buf.cc:2994
|
#7 0x000055a7ac408829 in buf_page_get_low (page_id=..., zip_size=0, rw_latch=4, guess=0x0, mode=10, file=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc",
|
line=227, mtr=0x7f09d1ff5250, err=0x7f09d1ff514c, allow_ibuf_merge=false) at /data/src/10.5/storage/innobase/buf/buf0buf.cc:3573
|
#8 0x000055a7ac408ba7 in buf_page_get_gen (page_id=..., zip_size=0, rw_latch=4, guess=0x0, mode=10, file=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc",
|
line=227, mtr=0x7f09d1ff5250, err=0x7f09d1ff514c, allow_ibuf_merge=false) at /data/src/10.5/storage/innobase/buf/buf0buf.cc:3642
|
#9 0x000055a7ac15877e in btr_block_get_func (index=..., page=3, mode=4, merge=false, file=0x55a7acac9528 "/data/src/10.5/storage/innobase/btr/btr0btr.cc", line=227,
|
mtr=0x7f09d1ff5250) at /data/src/10.5/storage/innobase/include/btr0btr.h:240
|
#10 0x000055a7ac39bd5d in btr_root_block_get (index=0x7f09c8016248, mode=RW_SX_LATCH, mtr=0x7f09d1ff5250) at /data/src/10.5/storage/innobase/btr/btr0btr.cc:226
|
#11 0x000055a7ac39cbcc in btr_get_size (index=0x7f09c8016248, flag=2, mtr=0x7f09d1ff5250) at /data/src/10.5/storage/innobase/btr/btr0btr.cc:603
|
#12 0x000055a7ac47edcd in dict_stats_update_transient_for_index (index=0x7f09c8016248) at /data/src/10.5/storage/innobase/dict/dict0stats.cc:858
|
#13 0x000055a7ac47f0fb in dict_stats_update_transient (table=0x7f09c801b288) at /data/src/10.5/storage/innobase/dict/dict0stats.cc:945
|
#14 0x000055a7ac484f2a in dict_stats_update (table=0x7f09c801b288, stats_upd_option=DICT_STATS_RECALC_TRANSIENT) at /data/src/10.5/storage/innobase/dict/dict0stats.cc:3328
|
#15 0x000055a7ac0ee16e in dict_stats_init (table=0x7f09c801b288) at /data/src/10.5/storage/innobase/include/dict0stats.ic:165
|
#16 0x000055a7ac0f7a46 in ha_innobase::open (this=0x7f09c80200a0, name=0x7f09c8016048 "./test/t1") at /data/src/10.5/storage/innobase/handler/ha_innodb.cc:5676
|
#17 0x000055a7abc9db38 in handler::ha_open (this=0x7f09c80200a0, table_arg=0x7f09c801cf18, name=0x7f09c8016048 "./test/t1", mode=2, test_if_locked=18, mem_root=0x0,
|
partitions_to_open=0x0) at /data/src/10.5/sql/handler.cc:2977
|
#18 0x000055a7aba7f128 in open_table_from_share (thd=0x7f09c8000c98, share=0x7f09c8015ab0, alias=0x7f09c80196e8, db_stat=33, prgflag=8, ha_open_flags=18,
|
outparam=0x7f09c801cf18, is_create_table=false, partitions_to_open=0x0) at /data/src/10.5/sql/table.cc:4208
|
#19 0x000055a7ab891e6a in open_table (thd=0x7f09c8000c98, table_list=0x7f09c80196a0, ot_ctx=0x7f09d1ff6450) at /data/src/10.5/sql/sql_base.cc:1988
|
#20 0x000055a7ab8c8c16 in open_purge_table (thd=0x7f09c8000c98, db=0x7f09d1ff64e0 "test", dblen=4, tb=0x7f09d1ff65b0 "t1", tblen=2) at /data/src/10.5/sql/sql_class.cc:4749
|
#21 0x000055a7ac115030 in innodb_find_table_for_vc (thd=0x7f09c8000c98, table=0x7f09c801b288) at /data/src/10.5/storage/innobase/handler/ha_innodb.cc:20391
|
#22 0x000055a7ac1155ff in innobase_allocate_row_for_vcol (thd=0x7f09c8000c98, index=0x7f09c8016d08, heap=0x7f09d1ff6720, table=0x7f09d1ff6730, record=0x7f09d1ff6738,
|
storage=0x7f09d1ff6728) at /data/src/10.5/storage/innobase/handler/ha_innodb.cc:20534
|
#23 0x000055a7ac319331 in row_vers_build_clust_v_col (row=0x7f09c800e2a8, clust_index=0x7f09c8016248, index=0x7f09c8016d08, heap=0x7f09c800e1f8)
|
at /data/src/10.5/storage/innobase/row/row0vers.cc:465
|
#24 0x000055a7ac31a592 in row_vers_old_has_index_entry (also_curr=true, rec=0x7f09d3630081 "2222222222", mtr=0x7f09d1ff6880, index=0x7f09c8016d08, ientry=0x7f09c800b2b8,
|
roll_ptr=8162774346171468, trx_id=0) at /data/src/10.5/storage/innobase/row/row0vers.cc:929
|
#25 0x000055a7ac2d93b4 in row_purge_poss_sec (node=0x55a7afaffe20, index=0x7f09c8016d08, entry=0x7f09c800b2b8, sec_pcur=0x7f09d1ff6db0, sec_mtr=0x7f09d1ff7050,
|
) at /data/src/10.5/storage/innobase/row/row0purge.cc:245
|
#26 0x000055a7ac2d9d54 in row_purge_remove_sec_if_poss_leaf (node=0x55a7afaffe20, index=0x7f09c8016d08, entry=0x7f09c800b2b8)
|
at /data/src/10.5/storage/innobase/row/row0purge.cc:466
|
#27 0x000055a7ac2da240 in row_purge_remove_sec_if_poss (node=0x55a7afaffe20, index=0x7f09c8016d08, entry=0x7f09c800b2b8)
|
at /data/src/10.5/storage/innobase/row/row0purge.cc:568
|
#28 0x000055a7ac2da451 in row_purge_del_mark (node=0x55a7afaffe20) at /data/src/10.5/storage/innobase/row/row0purge.cc:638
|
#29 0x000055a7ac2dbe74 in row_purge_record_func (node=0x55a7afaffe20, undo_rec=0x7f09c800f898 "", thr=0x55a7afaffd78, updated_extern=false)
|
at /data/src/10.5/storage/innobase/row/row0purge.cc:1048
|
#30 0x000055a7ac2dc136 in row_purge (node=0x55a7afaffe20, undo_rec=0x7f09c800f898 "", thr=0x55a7afaffd78) at /data/src/10.5/storage/innobase/row/row0purge.cc:1109
|
#31 0x000055a7ac2dc2b5 in row_purge_step (thr=0x55a7afaffd78) at /data/src/10.5/storage/innobase/row/row0purge.cc:1158
|
#32 0x000055a7ac247bc8 in que_thr_step (thr=0x55a7afaffd78) at /data/src/10.5/storage/innobase/que/que0que.cc:947
|
#33 0x000055a7ac247e5f in que_run_threads_low (thr=0x55a7afaffd78) at /data/src/10.5/storage/innobase/que/que0que.cc:1009
|
#34 0x000055a7ac2480af in que_run_threads (thr=0x55a7afaffd78) at /data/src/10.5/storage/innobase/que/que0que.cc:1049
|
#35 0x000055a7ac354f13 in trx_purge (n_tasks=4, truncate=false) at /data/src/10.5/storage/innobase/trx/trx0purge.cc:1301
|
#36 0x000055a7ac322b0d in srv_do_purge (n_total_purged=0x7f09d1ff7c68) at /data/src/10.5/storage/innobase/srv/srv0srv.cc:2103
|
#37 0x000055a7ac323012 in purge_coordinator_callback_low () at /data/src/10.5/storage/innobase/srv/srv0srv.cc:2190
|
#38 0x000055a7ac3230f3 in purge_coordinator_callback () at /data/src/10.5/storage/innobase/srv/srv0srv.cc:2219
|
#39 0x000055a7ac53bcd4 in tpool::task_group::execute (this=0x55a7add95e40 <purge_coordinator_task_group>, t=0x55a7add95ee0 <purge_coordinator_task>)
|
at /data/src/10.5/tpool/task_group.cc:55
|
#40 0x000055a7ac53c08a in tpool::task::execute (this=0x55a7add95ee0 <purge_coordinator_task>) at /data/src/10.5/tpool/task.cc:47
|
#41 0x000055a7ac535872 in tpool::thread_pool_generic::worker_main (this=0x55a7af95ae00, thread_var=0x55a7af96a910) at /data/src/10.5/tpool/tpool_generic.cc:518
|
#42 0x000055a7ac53bae5 in std::__invoke_impl<void, void (tpool::thread_pool_generic::* const&)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*>(std::__invoke_memfun_deref, void (tpool::thread_pool_generic::* const&)(tpool::worker_data*), tpool::thread_pool_generic*&&, tpool::worker_data*&&) (__f=
|
@0x7f09d4001ee8: (void (tpool::thread_pool_generic::*)(tpool::thread_pool_generic * const, tpool::worker_data *)) 0x55a7ac5357da <tpool::thread_pool_generic::worker_main(tpool::worker_data*)>, __t=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1e6>,
|
__args#0=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1f2>) at /usr/include/c++/6/functional:227
|
#43 0x000055a7ac53ba57 in std::__invoke<void (tpool::thread_pool_generic::* const&)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*>(void (tpool::thread_pool_generic::* const&)(tpool::worker_data*), tpool::thread_pool_generic*&&, tpool::worker_data*&&) (__fn=
|
@0x7f09d4001ee8: (void (tpool::thread_pool_generic::*)(tpool::thread_pool_generic * const, tpool::worker_data *)) 0x55a7ac5357da <tpool::thread_pool_generic::worker_main(tpool::worker_data*)>, __args#0=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1e6>,
|
__args#1=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1f2>) at /usr/include/c++/6/functional:251
|
#44 0x000055a7ac53b9eb in std::_Mem_fn_base<void (tpool::thread_pool_generic::*)(tpool::worker_data*), true>::operator()<tpool::thread_pool_generic*, tpool::worker_data*>(tpool::thread_pool_generic*&&, tpool::worker_data*&&) const (this=0x7f09d4001ee8, __args#0=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1e6>,
|
__args#1=<unknown type in /data/bld/10.5-debug/bin/mariadbd, CU 0x826aa6e, DIE 0x827c1f2>) at /usr/include/c++/6/functional:604
|
#45 0x000055a7ac53b99d in std::_Bind_simple<std::_Mem_fn<void (tpool::thread_pool_generic::*)(tpool::worker_data*)> (tpool::thread_pool_generic*, tpool::worker_data*)>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (this=0x7f09d4001ed8) at /usr/include/c++/6/functional:1391
|
#46 0x000055a7ac53b89b in std::_Bind_simple<std::_Mem_fn<void (tpool::thread_pool_generic::*)(tpool::worker_data*)> (tpool::thread_pool_generic*, tpool::worker_data*)>::operator()() (this=0x7f09d4001ed8) at /usr/include/c++/6/functional:1380
|
#47 0x000055a7ac53b87a in std::thread::_State_impl<std::_Bind_simple<std::_Mem_fn<void (tpool::thread_pool_generic::*)(tpool::worker_data*)> (tpool::thread_pool_generic*, tpool::worker_data*)> >::_M_run() (this=0x7f09d4001ed0) at /usr/include/c++/6/thread:197
|
#48 0x00007f09de199e6f in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
|
#49 0x00007f09df7da4a4 in start_thread (arg=0x7f09d1ff8700) at pthread_create.c:456
|
#50 0x00007f09dd90ed0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
|
We have open bugs for this as well, e.g. MDEV-23026. Because of this, I can't say whether the initial assertion failure is reproducible on 10.5.
The BLOB was freed by purge, and the BLOB length in the undo log record was cleared:
10.4 2e5d86f49e7ee538806fba68dc8c960d6acdd483
(rr) when
Current event: 373564
(rr) bt
#0 0x000055f859b028b4 in btr_free_externally_stored_field (
index=0x7f514c06d140, field_ref=0x7f51b7549b0d "", rec=0x0, offsets=0x0,
page_zip=0x0, i=0, rollback=false, local_mtr=0x7f518dffb2e0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/btr/btr0cur.cc:8145
#1 0x000055f8599fec49 in row_purge_upd_exist_or_extern_func (
thr=0x55f85c76ca80, node=0x55f85c76cb40, undo_rec=0x7f5180016a08 "")
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:987
#2 0x000055f8599ff7a4 in row_purge_record_func (node=0x55f85c76cb40,
undo_rec=0x7f5180016a08 "", thr=0x55f85c76ca80, updated_extern=true)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1217
#3 0x000055f8599ff93e in row_purge (node=0x55f85c76cb40,
undo_rec=0x7f5180016a08 "", thr=0x55f85c76ca80)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1261
…
(rr) thread 2
[Switching to thread 2 (Thread 5335.5355)]
#0 0x00007f51c4711c87 in sched_yield ()
at /home/roc/rr/rr/src/preload/overrides.c:160
160 /home/roc/rr/rr/src/preload/overrides.c: No such file or directory.
(rr) bt
…
#5 0x000055f859b36d05 in buf_page_mtr_lock (block=0x7f51b7408400, rw_latch=1,
mtr=0x7f517bcfc9b0,
file=0x55f85a22d820 "/home/mdbe/MDEV-23547/10.4/storage/innobase/include/trx0undo.ic", line=129)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/buf/buf0buf.cc:4209
#6 0x000055f859b3925b in buf_page_get_low (page_id=..., zip_size=0,
rw_latch=1, guess=0x0, mode=10,
file=0x55f85a22d820 "/home/mdbe/MDEV-23547/10.4/storage/innobase/include/trx0undo.ic", line=129, mtr=0x7f517bcfc9b0, err=0x0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/buf/buf0buf.cc:4893
#7 0x000055f859b3949d in buf_page_get_gen (page_id=..., zip_size=0,
rw_latch=1, guess=0x0, mode=10,
file=0x55f85a22d820 "/home/mdbe/MDEV-23547/10.4/storage/innobase/include/trx0undo.ic", line=129, mtr=0x7f517bcfc9b0, err=0x0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/buf/buf0buf.cc:4942
#8 0x000055f859a84cc4 in trx_undo_page_get_s_latched (page_id=...,
mtr=0x7f517bcfc9b0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/include/trx0undo.ic:129
#9 0x000055f859a8cb0f in trx_undo_get_undo_rec_low (
roll_ptr=8444249323084509, heap=0x7f517000c3f0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/trx/trx0rec.cc:2256
#10 0x000055f859a8d057 in trx_undo_prev_version_build (
index_rec=0x7f51b79a4081 "2222222222", index_mtr=0x7f517bcfdb30,
rec=0x7f51b79a4081 "2222222222", index=0x7f514c06d140,
offsets=0x7f5170008e90, heap=0x7f517000c3f0, old_vers=0x7f517bcfd210,
v_heap=0x0, vrow=0x7f517bcfd758, v_status=3)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/trx/trx0rec.cc:2384
#11 0x000055f859a40477 in row_vers_vc_matches_cluster (
rec=0x7f51b79a4081 "2222222222", icentry=0x7f517000aae0,
clust_index=0x7f514c06d140, clust_offsets=0x7f5170008e90,
index=0x7f514c06c6c0, ientry=0x7f5170008980, roll_ptr=8162774346308341,
trx_id=0, v_heap=0x0, vrow=0x7f517bcfd758, mtr=0x7f517bcfdb30)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:702
#12 0x000055f859a41007 in row_vers_old_has_index_entry (also_curr=true,
rec=0x7f51b79a4081 "2222222222", mtr=0x7f517bcfdb30, index=0x7f514c06c6c0,
ientry=0x7f5170008980, roll_ptr=8162774346308341, trx_id=0,
vcol_info=0x55f85c76ca70)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:986
#13 0x000055f8599fc3c6 in row_purge_poss_sec (node=0x55f85c76c8c0,
index=0x7f514c06c6c0, entry=0x7f5170008980, sec_pcur=0x7f517bcfe080,
sec_mtr=0x7f517bcfe320, is_tree=false)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:320
#14 0x000055f8599fd2d8 in row_purge_remove_sec_if_poss_leaf (node=0x55f85c76c8c0, index=0x7f514c06c6c0, entry=0x7f5170008980) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:582
#15 0x000055f8599fd7f3 in row_purge_remove_sec_if_poss (node=0x55f85c76c8c0, index=0x7f514c06c6c0, entry=0x7f5170008980) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:695
#16 0x000055f8599fda18 in row_purge_del_mark (node=0x55f85c76c8c0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:769
#17 0x000055f8599ff637 in row_purge_record_func (node=0x55f85c76c8c0, undo_rec=0x7f5180012b48 "", thr=0x55f85c76c450, updated_extern=false) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1195
#18 0x000055f8599ff93e in row_purge (node=0x55f85c76c8c0, undo_rec=0x7f5180012b48 "", thr=0x55f85c76c450) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0purge.cc:1261
This turns out to be a race condition between two purge threads. At the time the BLOB is being freed by the first purge thread, the second purge thread is trying to access that same undo log page, to determine whether it is safe to free the record.
The test case is using an indexed virtual column (
MDEV-5800) due toMDEV-371. It is very challenging to write a deterministic test case for this.MDEV-21336removed what might have allowed a deterministic test case to be written.I think that we must relax the debug assertion in this specific case. The function row_vers_vc_matches_cluster() is only invoked when checking whether it is safe to purge a record from an index that includes virtual columns.
The crash would occur a little later in Thread 2:
10.4 2e5d86f49e7ee538806fba68dc8c960d6acdd483
#2 0x000055f859ab1d10 in ut_dbg_assertion_failed (expr=0x55f85a20ecb5 "*len", file=0x55f85a20e9b8 "/home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc", line=1146)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/ut/ut0dbg.cc:60
#3 0x000055f859a307f9 in row_upd_ext_fetch (data=0x7f517000c4a0 "", local_len=20, zip_size=0, len=0x7f517bcfcde8, heap=0x7f517000c3f0) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1146
#4 0x000055f859a3090a in row_upd_index_replace_new_col_val (dfield=0x7f517000c678, field=0x7f514c0749d8, col=0x7f514c0736d0, uf=0x7f517000c560, heap=0x7f517000c3f0, zip_size=0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1192
#5 0x000055f859a315df in row_upd_index_replace_new_col_vals (entry=0x7f517000c640, index=0x7f514c06d140, update=0x7f517000c4d0, heap=0x7f517000c3f0)
at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0upd.cc:1401
#6 0x000055f859a8d2c2 in trx_undo_prev_version_build (index_rec=0x7f51b79a4081 "2222222222", index_mtr=0x7f517bcfdb30, rec=0x7f51b79a4081 "2222222222", index=0x7f514c06d140, offsets=0x7f5170008e90,
heap=0x7f517000c3f0, old_vers=0x7f517bcfd210, v_heap=0x0, vrow=0x7f517bcfd758, v_status=3) at /home/mdbe/MDEV-23547/10.4/storage/innobase/trx/trx0rec.cc:2479
#7 0x000055f859a40477 in row_vers_vc_matches_cluster (rec=0x7f51b79a4081 "2222222222", icentry=0x7f517000aae0, clust_index=0x7f514c06d140, clust_offsets=0x7f5170008e90, index=0x7f514c06c6c0,
ientry=0x7f5170008980, roll_ptr=8162774346308341, trx_id=0, v_heap=0x0, vrow=0x7f517bcfd758, mtr=0x7f517bcfdb30) at /home/mdbe/MDEV-23547/10.4/storage/innobase/row/row0vers.cc:702