Bug #108237 Assertion in MDL_request::init_with_source failed in MySQL 8.0.30
Submitted: 23 Aug 2022 8:23 Modified: 23 Aug 2022 8:51
Reporter: Wang Ke Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: DDL Severity:S6 (Debug Builds)
Version:8.0.30 OS:Any
Assigned to: CPU Architecture:Any
Tags: assertion failure

[23 Aug 2022 8:23] Wang Ke
Description:
An assertion failure occurred in mysql-8.0.30-debug-asan:

```
2022-08-19T03:54:41.942693Z 0 [System] [MY-010931] [Server] /home/mysql-server/mysql-8.0.30-origin/bin/mysqld: ready for connections. Version: '8.0.30-debug-asan'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
mysqld: /home/mysql-server/mysql-8.0.30/sql/mdl.cc:1513: void MDL_request::init_with_source(MDL_key::enum_mdl_namespace, const char *, const char *, enum_mdl_type, enum_mdl_duration, const char *, uint): Assertion `mdl_namespace != MDL_key::TABLE || my_strcasecmp(system_charset_info, "information_schema", db_arg) || is_ndb_table || !name_arg || my_isupper(system_charset_info, name_arg[0])' failed.
04:47:44 UTC - mysqld got signal 6 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x6270002fb100
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7f11dd43fa60 thread_stack 0x100000
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(backtrace+0x5b) [0x5f0634b]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x10d) [0xb7fc2ad]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(print_fatal_signal(int)+0x389) [0x8256bf9]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(handle_fatal_signal+0x175) [0x8257245]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x11390) [0x7f120e0f0390]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7f120c5e4438]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x16a) [0x7f120c5e603a]
/lib/x86_64-linux-gnu/libc.so.6(+0x2dbe7) [0x7f120c5dcbe7]
/lib/x86_64-linux-gnu/libc.so.6(+0x2dc92) [0x7f120c5dcc92]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld() [0x662fa5e]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(TABLE_LIST::TABLE_LIST(char const*, unsigned long, char const*, unsigned long, char const*, thr_lock_type)+0xb3e) [0x64aa2de]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(check_fk_parent_table_access(THD*, HA_CREATE_INFO*, Alter_info*)+0x4b8) [0x6432ae8]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(create_table_precheck(THD*, TABLE_LIST*, TABLE_LIST*)+0x742) [0x642ca72]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(Sql_cmd_create_table::execute(THD*)+0x62f) [0x759e5ef]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(mysql_execute_command(THD*, bool)+0x525a) [0x79b0c9a]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(dispatch_sql_command(THD*, Parser_state*)+0x1b5d) [0x79a508d]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(dispatch_command(THD*, COM_DATA const*, enum_server_command)+0x72b7) [0x7999967]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld(do_command(THD*)+0xf54) [0x79a0854]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld() [0x81dcd42]
/home/mysql-server/mysql-8.0.30-origin/bin/mysqld() [0xd94c1ca]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f120e0e66ba]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f120c6b651d]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (6190058769b0): CREATE TEMPORARY TABLE t0 ( c0 INT PRIMARY KEY , c1 INT , FOREIGN KEY ( c1 ) REFERENCES information_schema . t0 ( c0 ) , c2 DEC ( 5 , 3 ) ) UNION = ( t1 , t2 )
Connection ID (thread ID): 22742
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
```

Test on release build haven't been conducted.

How to repeat:
Test case:

```
CREATE TEMPORARY TABLE t0 ( c0 INT PRIMARY KEY , c1 INT , FOREIGN KEY ( c1 ) REFERENCES information_schema . t0 ( c0 ) , c2 DEC ( 5 , 3 ) ) UNION = ( t1 , t2 );
```
[23 Aug 2022 8:51] MySQL Verification Team
Hello Wang Ke,

Thank you for the report and test case.
Observed that 8.0.30 debug build is affected.

regards,
Umesh