Instant ALTER TABLE for failure-free column type changes (MDEV-17520)

[MDEV-17922] Assertion `index.fields[i].col->same_format( *oindex.fields[i].col)' failed in dict_table_t::prepare_instant Created: 2018-12-06  Updated: 2018-12-12  Resolved: 2018-12-12

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: N/A
Fix Version/s: N/A

Type: Technical task Priority: Major
Reporter: Elena Stepanova Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: None


 Description   

--source include/have_innodb.inc
 
CREATE TABLE t1 (f1 VARCHAR(1), f2 VARCHAR(1)) ENGINE=InnoDB;
ALTER TABLE t1 MODIFY f2 VARCHAR (8) FIRST;
 
# Cleanup
DROP TABLE t1;

bb-10.4-MDEV-17520 b6639a3cffa

mysqld: /data/src/bb-10.4-MDEV-17520/storage/innobase/handler/handler0alter.cc:304: void dict_table_t::prepare_instant(const dict_table_t&, const ulint*, unsigned int&): Assertion `index.fields[i].col->same_format( *oindex.fields[i].col)' failed.
181207  0:15:49 [ERROR] mysqld got signal 6 ;
 
#7  0x00007fa3375ddee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
#8  0x0000559a7fd971c5 in dict_table_t::prepare_instant (this=0x7fa2e80a6178, old=..., col_map=0x7fa2e80a5b88, first_alter_pos=@0x7fa2e80164e8: 1) at /data/src/bb-10.4-MDEV-17520/storage/innobase/handler/handler0alter.cc:303
#9  0x0000559a7fd9c2db in ha_innobase_inplace_ctx::prepare_instant (this=0x7fa2e8016378) at /data/src/bb-10.4-MDEV-17520/storage/innobase/handler/handler0alter.cc:1059
#10 0x0000559a7fd87227 in prepare_inplace_alter_table_dict (ha_alter_info=0x7fa330920bb0, altered_table=0x7fa2e8132f00, old_table=0x7fa2e8095f70, table_name=0x7fa2e81304cd "t1", flags=33, flags2=80, fts_doc_id_col=18446744073709551615, add_fts_doc_id=false, add_fts_doc_id_idx=false) at /data/src/bb-10.4-MDEV-17520/storage/innobase/handler/handler0alter.cc:6517
#11 0x0000559a7fd8c124 in ha_innobase::prepare_inplace_alter_table (this=0x7fa2e8096ba8, altered_table=0x7fa2e8132f00, ha_alter_info=0x7fa330920bb0) at /data/src/bb-10.4-MDEV-17520/storage/innobase/handler/handler0alter.cc:8064
#12 0x0000559a7fa27cbb in handler::ha_prepare_inplace_alter_table (this=0x7fa2e8096ba8, altered_table=0x7fa2e8132f00, ha_alter_info=0x7fa330920bb0) at /data/src/bb-10.4-MDEV-17520/sql/handler.cc:4437
#13 0x0000559a7f7ecd5c in mysql_inplace_alter_table (thd=0x7fa2e8000b00, table_list=0x7fa2e8014eb0, table=0x7fa2e8095f70, altered_table=0x7fa2e8132f00, ha_alter_info=0x7fa330920bb0, inplace_supported=HA_ALTER_INPLACE_INSTANT, target_mdl_request=0x7fa330920ce0, alter_ctx=0x7fa3309218d0) at /data/src/bb-10.4-MDEV-17520/sql/sql_table.cc:7515
#14 0x0000559a7f7f2f79 in mysql_alter_table (thd=0x7fa2e8000b00, new_db=0x7fa2e80051b8, new_name=0x7fa2e8005588, create_info=0x7fa3309224c0, table_list=0x7fa2e8014eb0, alter_info=0x7fa330922400, order_num=0, order=0x0, ignore=false) at /data/src/bb-10.4-MDEV-17520/sql/sql_table.cc:9691
#15 0x0000559a7f87d121 in Sql_cmd_alter_table::execute (this=0x7fa2e8015610, thd=0x7fa2e8000b00) at /data/src/bb-10.4-MDEV-17520/sql/sql_alter.cc:497
#16 0x0000559a7f71ae4a in mysql_execute_command (thd=0x7fa2e8000b00) at /data/src/bb-10.4-MDEV-17520/sql/sql_parse.cc:6290
#17 0x0000559a7f71fd6e in mysql_parse (thd=0x7fa2e8000b00, rawbuf=0x7fa2e8014da8 "ALTER TABLE t1 MODIFY f2 VARCHAR (8) FIRST", length=42, parser_state=0x7fa330923600, is_com_multi=false, is_next_command=false) at /data/src/bb-10.4-MDEV-17520/sql/sql_parse.cc:8092
#18 0x0000559a7f70d05c in dispatch_command (command=COM_QUERY, thd=0x7fa2e8000b00, packet=0x7fa2e800b411 "ALTER TABLE t1 MODIFY f2 VARCHAR (8) FIRST", packet_length=42, is_com_multi=false, is_next_command=false) at /data/src/bb-10.4-MDEV-17520/sql/sql_parse.cc:1851
#19 0x0000559a7f70ba80 in do_command (thd=0x7fa2e8000b00) at /data/src/bb-10.4-MDEV-17520/sql/sql_parse.cc:1396
#20 0x0000559a7f877168 in do_handle_one_connection (connect=0x559a82ad3810) at /data/src/bb-10.4-MDEV-17520/sql/sql_connect.cc:1402
#21 0x0000559a7f876eec in handle_one_connection (arg=0x559a82ad3810) at /data/src/bb-10.4-MDEV-17520/sql/sql_connect.cc:1308
#22 0x0000559a7fd2b3e2 in pfs_spawn_thread (arg=0x559a82b58b90) at /data/src/bb-10.4-MDEV-17520/storage/perfschema/pfs.cc:1862
#23 0x00007fa339099494 in start_thread (arg=0x7fa330924700) at pthread_create.c:333
#24 0x00007fa33769a93f in clone () from /lib/x86_64-linux-gnu/libc.so.6

Not reproducible on current 10.4 branch.



 Comments   
Comment by Marko Mäkelä [ 2018-12-12 ]

This is also crashing on bb-10.4-MDEV-15563, which implements NOT NULL removal for ROW_FORMAT=REDUNDANT.

Comment by Marko Mäkelä [ 2018-12-12 ]

This happens with the first commit already, in a different form:

mysqld: /mariadb/10.4/storage/innobase/handler/handler0alter.cc:465: void dict_table_t::instant_column(const dict_table_t &, const ulint *): Assertion `c.len == o->len' failed.

Comment by Marko Mäkelä [ 2018-12-12 ]

This was a bogus debug assertion: The column is being both moved and enlarged at the same time.
bb-10.4-MDEV-15563 fixes this (in the first commit that is not in 10.4).

At some point, I will rebase the bb-10.4-MDEV-17520 branch, so that also it will contain this fix.

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