[MDEV-25711] Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate Created: 2021-05-18  Updated: 2021-05-18  Resolved: 2021-05-18

Status: Closed
Project: MariaDB Server
Component/s: N/A
Affects Version/s: 10.6
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Roel Van de Paar Assignee: Eugene Kosov (Inactive)
Resolution: Duplicate Votes: 0
Labels: None

Issue Links:
Duplicate
duplicates MDEV-17843 Assertion `page_rec_is_leaf(rec)' fai... Closed

 Description   

# Repeat unlimited. Single thread repeats will eventually show the issue. Sometimes within 10 minutes.
# mysqld options used for replay:  --log-bin --sql_mode=ONLY_FULL_GROUP_BY --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 --innodb_file_per_table=1 --innodb_flush_method=O_DIRECT --innodb_stats_persistent=off --loose-idle_write_transaction_timeout=0 --loose-idle_transaction_timeout=0 --loose-idle_readonly_transaction_timeout=0 --connect_timeout=60 --interactive_timeout=28800 --slave_net_timeout=60 --net_read_timeout=30 --net_write_timeout=60 --wait_timeout=28800 --lock-wait-timeout=86400 --innodb-lock-wait-timeout=50 --log_output=FILE --log_bin_trust_function_creators=1 --loose-max-statement-time=30 --loose-debug_assert_on_not_freed_memory=0 --innodb-buffer-pool-size=300M --max_allowed_packet=33554432 --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
DROP DATABASE test;
CREATE DATABASE test;
USE test;
SET @@GLOBAL.rpl_semi_sync_master_enabled=1;
SET @@GLOBAL.innodb_status_output=1;
CREATE TABLE t3 (c1 VARCHAR(2049) BINARY CHARACTER SET 'latin1' COLLATE 'latin1_bin',c2 YEAR,c3 DATETIME(5)) ENGINE=RocksDB PARTITION BY LINEAR HASH((c2)) PARTITIONS 523;
TRUNCATE t3;
TRUNCATE t3;
SELECT 1;

The TRUNCATE statements take about 5-6 seconds to run on a high end server.

Leads to:

10.6 f8665314d4ba190679001b81bb7d9fd7a38fc0f6 (Debug)

mysqld: /test/10.6_dbg/storage/innobase/lock/lock0lock.cc:4315: bool lock_rec_queue_validate(bool, page_id_t, const rec_t*, const dict_index_t*, const rec_offs*): Assertion `page_rec_is_leaf(rec)' failed.

10.6 f8665314d4ba190679001b81bb7d9fd7a38fc0f6 (Debug)

Core was generated by `/test/MD100521-mariadb-10.6.1-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
[Current thread is 1 (Thread 0x14ba347eb700 (LWP 3676140))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000014ba6924e859 in __GI_abort () at abort.c:79
#2  0x000014ba6924e729 in __assert_fail_base (fmt=0x14ba693e4588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x5624a3a20039 "page_rec_is_leaf(rec)", file=0x5624a39ce058 "/test/10.6_dbg/storage/innobase/lock/lock0lock.cc", line=4315, function=<optimized out>) at assert.c:92
#3  0x000014ba6925ff36 in __GI___assert_fail (assertion=assertion@entry=0x5624a3a20039 "page_rec_is_leaf(rec)", file=file@entry=0x5624a39ce058 "/test/10.6_dbg/storage/innobase/lock/lock0lock.cc", line=line@entry=4315, function=function@entry=0x5624a39cf218 "bool lock_rec_queue_validate(bool, page_id_t, const rec_t*, const dict_index_t*, const rec_offs*)") at assert.c:101
#4  0x00005624a32246a5 in lock_rec_queue_validate (locked_lock_trx_sys=locked_lock_trx_sys@entry=true, id=<optimized out>, id@entry={m_id = 9}, rec=rec@entry=0x14ba48630074 "supremum", index=0x5624a53c46a8, offsets=offsets@entry=0x14ba347ea1b0) at /test/10.6_dbg/storage/innobase/lock/lock0lock.cc:4315
#5  0x00005624a3225378 in lock_rec_validate_page (block=block@entry=0x14ba4800fea8, latched=false) at /test/10.6_dbg/storage/innobase/lock/lock0lock.cc:4523
#6  0x00005624a3230aa6 in lock_rec_block_validate (page_id={m_id = 9}) at /usr/include/c++/9/bits/atomic_base.h:413
#7  0x00005624a32374bf in lock_validate () at /test/10.6_dbg/storage/innobase/lock/lock0lock.cc:4662
#8  lock_print_info_all_transactions (file=file@entry=0x14ba694155c0 <_IO_2_1_stderr_>) at /test/10.6_dbg/storage/innobase/lock/lock0lock.cc:4212
#9  0x00005624a338a750 in srv_printf_innodb_monitor (file=0x14ba694155c0 <_IO_2_1_stderr_>, nowait=<optimized out>, trx_start_pos=trx_start_pos@entry=0x0, trx_end=trx_end@entry=0x0) at /test/10.6_dbg/storage/innobase/srv/srv0srv.cc:809
#10 0x00005624a338dcd6 in srv_monitor () at /test/10.6_dbg/storage/innobase/srv/srv0srv.cc:1234
#11 srv_monitor_task () at /test/10.6_dbg/storage/innobase/srv/srv0srv.cc:1308
#12 0x00005624a358839e in tpool::thread_pool_generic::timer_generic::run (this=0x5624a5a81c50) at /test/10.6_dbg/tpool/tpool_generic.cc:313
#13 tpool::thread_pool_generic::timer_generic::execute (arg=0x5624a5a81c50) at /test/10.6_dbg/tpool/tpool_generic.cc:333
#14 0x00005624a3589309 in tpool::task::execute (this=0x5624a5a81c90) at /test/10.6_dbg/tpool/task.cc:52
#15 0x00005624a3587eb9 in tpool::thread_pool_generic::worker_main (this=0x5624a52b00e0, thread_var=0x5624a52bf200) at /test/10.6_dbg/tpool/tpool_generic.cc:550
#16 0x00005624a35881f0 in std::__invoke_impl<void, void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> (__t=<optimized out>, __f=<optimized out>) at /usr/include/c++/9/bits/invoke.h:89
#17 std::__invoke<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> (__fn=<optimized out>) at /usr/include/c++/9/bits/invoke.h:95
#18 std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> >::_M_invoke<0ul, 1ul, 2ul> (this=<optimized out>) at /usr/include/c++/9/thread:244
#19 std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> >::operator() (this=<optimized out>) at /usr/include/c++/9/thread:251
#20 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> > >::_M_run (this=<optimized out>) at /usr/include/c++/9/thread:195
#21 0x000014ba69640d84 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#22 0x000014ba6975c609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#23 0x000014ba6934b293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95



 Comments   
Comment by Marko Mäkelä [ 2021-05-18 ]

I would by default claim that this is a duplicate of MDEV-17843.

Comment by Roel Van de Paar [ 2021-05-18 ]

Agreed. I had initially missed the innodb_status_output=1 versus SHOW ENGINE INNODB STATUS. I will set as duplicate, though testcase is likely valuable.

Comment by Roel Van de Paar [ 2021-05-18 ]

Multi-threaded random-replay-order reproduction attempts fail (though this was not solidified). Single-thread sequential-sql works/is reproducible.

Generated at Thu Feb 08 09:39:46 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.