Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.3(EOL), 10.4(EOL), 10.5, 10.6, 10.7(EOL), 10.8(EOL), 10.9(EOL), 10.10(EOL)
-
None
Description
Reproduce
--source include/have_innodb.inc
|
--source include/not_windows.inc
|
--source include/not_embedded.inc
|
|
let $d255=###################################################;
|
let $d250=##################################################;
|
let $d245=#################################################;
|
--replace_result $d255 d255
|
eval create database `$d255`; |
eval create table `$d255`.`$d245` (x int) engine innodb; |
|
# CREATE TABLE works |
eval create table `$d255`.`$d250` (x int) engine innodb; |
eval drop table `$d255`.`$d250`; |
|
# RENAME TABLE doesn't work |
--error ER_IDENT_CAUSES_TOO_LONG_PATH
|
eval rename table `$d255`.`$d245` to `$d255`.`$d250`; |
|
# and even assertion-fails! |
eval rename table `$d255`.`$d245` to a; |
|
eval drop database `$d255`; |
drop table t; |
Result
RENAME TABLE fails to rename to `$d255`.`$d250` while CREATE TABLE succeeds. RENAME TABLE from `$d255`.`$d245` fails with assertion.
#12 0x00007f77f8622e96 in __GI___assert_fail (assertion=0x55cdf1186df3 "len <= (64*3) * 2 + 1", file=0x55cdf11860d0 "../src/storage/innobase/trx/trx0rec.cc", line=1862, function=0x55cdf1186d77 "uint16_t trx_undo_page_report_rename(trx_t *, const dict_table_t *, buf_block_t *, mtr_t *)") at ./assert/assert.c:101
|
#13 0x000055cdf0a42d21 in trx_undo_page_report_rename (trx=0x7f77eec61680, table=0x7f77b8216ce8, block=0x7f77eeb616c0, mtr=0x7f77ec3b6100) at ../src/storage/innobase/trx/trx0rec.cc:1862
|
#14 0x000055cdf0a42920 in trx_undo_report_rename (trx=0x7f77eec61680, table=0x7f77b8216ce8) at ../src/storage/innobase/trx/trx0rec.cc:1909
|
#15 0x000055cdf09aec34 in row_rename_table_for_mysql (old_name=0x7f77ec3b7720 "@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023/@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023@0023", new_name=0x7f77ec3b7920 "test/a", trx=0x7f77eec61680, use_fk=true) at ../src/storage/innobase/row/row0mysql.cc:2655
|
Attachments
Issue Links
- relates to
-
MDEV-28933 CREATE OR REPLACE fails to recreate same constraint name
-
- Stalled
-
-
MDEV-28980 InnoDB: Failing assertion: len <= MAX_TABLE_NAME_LEN
-
- Closed
-
-
MDEV-29409 ASAN failure on long fk_id when renaming a table
-
- Closed
-
The error is being emitted outside InnoDB:
10.6 558f1eff64e7708b594ef0315e23bdeb1d23ccf7
#0 my_error (nr=1860, MyFlags=0) at /mariadb/10.6/mysys/my_error.c:109
#1 0x0000562ef21ef3a2 in mysql_rename_table (base=base@entry=0x562ef4e0da48,
old_db=old_db@entry=0x7fc21801fb58,
old_name=old_name@entry=0x7fc22e5b0f80,
new_db=new_db@entry=0x7fc218020270,
new_name=new_name@entry=0x7fc22e5b0f90, id=id@entry=0x7fc22e5b0fa0,
flags=<optimized out>) at /mariadb/10.6/sql/sql_table.cc:4974
#2 0x0000562ef2173510 in do_rename (thd=0x7fc218000c58, param=0x7fc22e5b0f80,
ddl_log_state=0x7fc22e5b0f60, ren_table=0x7fc21801fb40,
new_db=0x7fc218020270, skip_error=<optimized out>,
force_if_exists=<optimized out>) at /mariadb/10.6/sql/sql_rename.cc:383
#3 0x0000562ef217399e in rename_tables (skip_error=false,
force_if_exists=0x7fc22e5b0f2f, if_exists=false,
ddl_log_state=0x7fc22e5b0f60, table_list=0x7fc21801fb40,
thd=0x7fc218000c58) at /mariadb/10.6/sql/sql_rename.cc:533
#4 mysql_rename_tables (thd=thd@entry=0x7fc218000c58,
table_list=table_list@entry=0x7fc21801fb40, silent=silent@entry=false,
if_exists=false) at /mariadb/10.6/sql/sql_rename.cc:164
I do not think that we should change that. Only the assertion failure in InnoDB needs to be prevented.