Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-18084

Server crashes in row_upd_changes_some_index_ord_field_binary or Assertion `pos < index->n_def' failed in dict_index_get_nth_field upon UPDATE after upgrade from 10.1/10.0

    XMLWordPrintable

    Details

      Description

      10.2 debug 734029fa79

      mysqld: /data/src/10.2/storage/innobase/include/dict0dict.ic:1064: dict_field_t* dict_index_get_nth_field(const dict_index_t*, ulint): Assertion `pos < index->n_def' failed.
      181226 21:54:35 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007fd23a225ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
      #8  0x000055ced64d106a in dict_index_get_nth_field (index=0x7fd1d4028868, pos=65535) at /data/src/10.2/storage/innobase/include/dict0dict.ic:1064
      #9  0x000055ced64d7039 in row_upd_changes_some_index_ord_field_binary (table=0x7fd1d400a448, update=0x7fd1d4020240) at /data/src/10.2/storage/innobase/row/row0upd.cc:1944
      #10 0x000055ced64da870 in row_upd (node=0x7fd1d4020128, thr=0x7fd1d4020430) at /data/src/10.2/storage/innobase/row/row0upd.cc:3267
      #11 0x000055ced64dadab in row_upd_step (thr=0x7fd1d4020430) at /data/src/10.2/storage/innobase/row/row0upd.cc:3425
      #12 0x000055ced6481437 in row_update_for_mysql (prebuilt=0x7fd1d401f958) at /data/src/10.2/storage/innobase/row/row0mysql.cc:1830
      #13 0x000055ced6347786 in ha_innobase::update_row (this=0x7fd1d401e6b8, old_row=0x7fd1d400c180 "\377", new_row=0x7fd1d400c170 "\377") at /data/src/10.2/storage/innobase/handler/ha_innodb.cc:9000
      #14 0x000055ced603ba17 in handler::ha_update_row (this=0x7fd1d401e6b8, old_data=0x7fd1d400c180 "\377", new_data=0x7fd1d400c170 "\377") at /data/src/10.2/sql/handler.cc:5993
      #15 0x000055ced5ea2458 in mysql_update (thd=0x7fd1d4000b00, table_list=0x7fd1d40111b8, fields=..., values=..., conds=0x7fd1d4011d00, order_num=0, order=0x0, limit=18446744073709551615, handle_duplicates=DUP_ERROR, ignore=false, found_return=0x7fd23810c8b0, updated_return=0x7fd23810c960) at /data/src/10.2/sql/sql_update.cc:809
      #16 0x000055ced5db5cab in mysql_execute_command (thd=0x7fd1d4000b00) at /data/src/10.2/sql/sql_parse.cc:4292
      #17 0x000055ced5dc17f7 in mysql_parse (thd=0x7fd1d4000b00, rawbuf=0x7fd1d40110c0 "UPDATE t1 SET pk = pk + 1 WHERE pk = 1", length=38, parser_state=0x7fd23810d250, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:8014
      #18 0x000055ced5daf12f in dispatch_command (command=COM_QUERY, thd=0x7fd1d4000b00, packet=0x7fd1d40191a1 "UPDATE t1 SET pk = pk + 1 WHERE pk = 1", packet_length=38, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:1825
      #19 0x000055ced5dada92 in do_command (thd=0x7fd1d4000b00) at /data/src/10.2/sql/sql_parse.cc:1379
      #20 0x000055ced5f00569 in do_handle_one_connection (connect=0x55ced9000580) at /data/src/10.2/sql/sql_connect.cc:1335
      #21 0x000055ced5f002f6 in handle_one_connection (arg=0x55ced9000580) at /data/src/10.2/sql/sql_connect.cc:1241
      #22 0x00007fd23bce1494 in start_thread (arg=0x7fd23810e700) at pthread_create.c:333
      #23 0x00007fd23a2e293f in clone () from /lib/x86_64-linux-gnu/libc.so.6
      

      10.2 non-debug 734029fa79

      #2  <signal handler called>
      #3  row_upd_changes_some_index_ord_field_binary (table=<optimized out>, update=<optimized out>) at /data/src/10.2/storage/innobase/row/row0upd.cc:1943
      #4  0x00005611a4dd4128 in row_upd (thr=0x7f39c001a048, node=0x7f39c0019d50) at /data/src/10.2/storage/innobase/row/row0upd.cc:3267
      #5  row_upd_step (thr=thr@entry=0x7f39c001a048) at /data/src/10.2/storage/innobase/row/row0upd.cc:3425
      #6  0x00005611a4da4584 in row_update_for_mysql (prebuilt=0x7f39c00195a0) at /data/src/10.2/storage/innobase/row/row0mysql.cc:1830
      #7  0x00005611a4ceb629 in ha_innobase::update_row (this=<optimized out>, old_row=<optimized out>, new_row=<optimized out>) at /data/src/10.2/storage/innobase/handler/ha_innodb.cc:9000
      #8  0x00005611a4ad3543 in handler::ha_update_row (this=0x7f39c0018400, old_data=0x7f39c0006148 "\377", new_data=0x7f39c0006138 "\377") at /data/src/10.2/sql/handler.cc:5993
      #9  0x00005611a49d351d in mysql_update (thd=0x7f39c00009a8, table_list=0x7f39c000f230, fields=..., values=..., conds=0x7f39c000fd78, order_num=<optimized out>, order=<optimized out>, limit=18446744073709551615, handle_duplicates=DUP_ERROR, ignore=false, found_return=0x7f3a257f9c20, updated_return=0x7f3a257f9cd0) at /data/src/10.2/sql/sql_update.cc:809
      #10 0x00005611a4934568 in mysql_execute_command (thd=0x7f39c00009a8) at /data/src/10.2/sql/sql_parse.cc:4292
      #11 0x00005611a493b48a in mysql_parse (thd=0x7f39c00009a8, rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>, is_com_multi=<optimized out>, is_next_command=<optimized out>) at /data/src/10.2/sql/sql_parse.cc:8014
      #12 0x00005611a493f004 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x7f39c00009a8, packet=packet@entry=0x7f39c0006ce9 "UPDATE t1 SET pk = pk + 1 WHERE pk = 1", packet_length=packet_length@entry=38, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /data/src/10.2/sql/sql_parse.cc:1825
      #13 0x00005611a493fa39 in do_command (thd=0x7f39c00009a8) at /data/src/10.2/sql/sql_parse.cc:1379
      #14 0x00005611a4a08e34 in do_handle_one_connection (connect=connect@entry=0x5611a8851338) at /data/src/10.2/sql/sql_connect.cc:1335
      #15 0x00005611a4a08fd4 in handle_one_connection (arg=0x5611a8851338) at /data/src/10.2/sql/sql_connect.cc:1241
      #16 0x00007f3a28fac494 in start_thread (arg=0x7f3a257fc700) at pthread_create.c:333
      #17 0x00007f3a275ad93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
      

      On 10.3 and 10.4 the assertion failure is slightly different:

      10.3 debug 812bb1303c

      mysqld: /data/src/10.3/storage/innobase/include/dict0dict.ic:485: dict_v_col_t* dict_table_get_nth_v_col(const dict_table_t*, ulint): Assertion `pos < table->n_v_def' failed.
      181226 22:31:39 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007fb19cf91ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
      #8  0x000055648ae6c494 in dict_table_get_nth_v_col (table=0x7fb12c028be8, pos=0) at /data/src/10.3/storage/innobase/include/dict0dict.ic:485
      #9  0x000055648ae79cac in build_template_field (prebuilt=0x7fb12c2af698, clust_index=0x7fb12c296368, index=0x7fb12c296368, table=0x7fb12c3655f0, field=0x7fb12c34e900, i=1, v_no=0) at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:7362
      #10 0x000055648ae7b9e8 in ha_innobase::build_template (this=0x7fb12c2fa7e8, whole_row=true) at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:7863
      #11 0x000055648ae7f52f in ha_innobase::change_active_index (this=0x7fb12c2fa7e8, keynr=0) at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:9517
      #12 0x000055648ae7e6e8 in ha_innobase::index_init (this=0x7fb12c2fa7e8, keynr=0) at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:9073
      #13 0x000055648a7c5c45 in handler::ha_index_init (this=0x7fb12c2fa7e8, idx=0, sorted=true) at /data/src/10.3/sql/handler.h:3054
      #14 0x000055648accc422 in QUICK_RANGE_SELECT::reset (this=0x7fb12c3bb980) at /data/src/10.3/sql/opt_range.cc:11405
      #15 0x000055648a959b62 in mysql_update (thd=0x7fb12c000b00, table_list=0x7fb12c013a48, fields=..., values=..., conds=0x7fb12c014610, order_num=0, order=0x0, limit=18446744073709551615, handle_duplicates=DUP_ERROR, ignore=false, found_return=0x7fb19c04c740, updated_return=0x7fb19c04c800) at /data/src/10.3/sql/sql_update.cc:816
      #16 0x000055648a861aad in mysql_execute_command (thd=0x7fb12c000b00) at /data/src/10.3/sql/sql_parse.cc:4581
      #17 0x000055648a86cec9 in mysql_parse (thd=0x7fb12c000b00, rawbuf=0x7fb12c013950 "UPDATE t1 SET pk = pk + 1 WHERE pk = 1", length=38, parser_state=0x7fb19c04d640, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:8092
      #18 0x000055648a85a07d in dispatch_command (command=COM_QUERY, thd=0x7fb12c000b00, packet=0x7fb12c01ba31 "UPDATE t1 SET pk = pk + 1 WHERE pk = 1", packet_length=38, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1851
      #19 0x000055648a858aa1 in do_command (thd=0x7fb12c000b00) at /data/src/10.3/sql/sql_parse.cc:1396
      #20 0x000055648a9c0ab0 in do_handle_one_connection (connect=0x55648f4d9130) at /data/src/10.3/sql/sql_connect.cc:1402
      #21 0x000055648a9c0834 in handle_one_connection (arg=0x55648f4d9130) at /data/src/10.3/sql/sql_connect.cc:1308
      #22 0x00007fb19ea4d494 in start_thread (arg=0x7fb19c04e700) at pthread_create.c:333
      #23 0x00007fb19d04e93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
      

      To reproduce:

      • start 10.1 server with all defaults (current 10.1 9ad1663f78 or 10.1.37 will do, I didn't check other versions);
      • run

        CREATE TABLE t1 (t TIMESTAMP NULL, v TIMESTAMP AS (t) VIRTUAL, pk INT AUTO_INCREMENT, PRIMARY KEY(pk));
        INSERT INTO t1 () VALUES ();
        

      • shutdown server normally;
      • start 10.2+ server with all defaults on the same datadir;
      • run mysql_upgrade (optionally, it doesn't affect the outcome);
      • run

        UPDATE t1 SET pk = pk + 1 WHERE pk = 1
        

      The datadir pre-created on current 10.1 as described is attached.

      Same upon upgrade from 10.0.

        Attachments

        1. data.tar.gz
          665 kB
          Elena Stepanova

          Issue Links

            Activity

              People

              Assignee:
              marko Marko Mäkelä
              Reporter:
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: