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

Assertion in Table_triggers_list::change_table_name fails when upgrading #mysql50# database names with broken .TRG files

    XMLWordPrintable

Details

    • Bug
    • Status: Open (View Workflow)
    • Major
    • Resolution: Unresolved
    • 12.3
    • 12.3
    • Debug, Triggers
    • None

    Description

      The following script:

      let $MYSQLD_DATADIR= `select @@datadir`;
       
      CREATE DATABASE `#mysql50#a@b`;
      USE `#mysql50#a@b`;
       
      CREATE TABLE `#mysql50#c@d` (a INT);
      CREATE TABLE t1 (a INT);
       
      --write_file $MYSQLD_DATADIR/a@b/c@d.TRG
      TYPE=TRIGGERS
      EOF
       
      --write_file $MYSQLD_DATADIR/a@b/t1.TRG
      EOF
       
      --exec $MYSQL_CHECK --fix-db-names --fix-table-names '#mysql50#a@b'
      

      leads to an assertion failure:

      [ERROR] Invalid (old?) table or database name 'c@d'
      mariadbd: /src/mariadb/sql/sql_trigger.cc:2614: static bool Table_triggers_list::change_table_name(THD*, TRIGGER_RENAME_PARAM*, const LEX_CSTRING*, const LEX_CSTRING*, const LEX_CSTRING*, const LEX_CSTRING*, const LEX_CSTRING*): Assertion `!param->got_error' failed.
      

      with the following stacktrace:

      #0  __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0) at ./nptl/pthread_kill.c:44
      #1  __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
      #2  __GI___pthread_kill (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:100
      #3  0x00005f2fa29b1d79 in my_write_core (sig=6) at /src/mariadb/mysys/stacktrace.c:424
      #4  0x00005f2f9f714ac2 in handle_fatal_signal (sig=6) at /src/mariadb/sql/signal_handler.cc:298
      #5  <signal handler called>
      #6  __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0) at ./nptl/pthread_kill.c:44
      #7  __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
      #8  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:100
      #9  0x00007efb2a845e2e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
      #10 0x00007efb2a828888 in __GI_abort () at ./stdlib/abort.c:77
      #11 0x00007efb2a8287f0 in __assert_fail_base (fmt=<optimized out>, assertion=<optimized out>, file=<optimized out>, line=<optimized out>, function=<optimized out>) at ./assert/assert.c:118
      #12 0x00005f2f9e3322f3 in Table_triggers_list::change_table_name (thd=0x7dbb29ad0218, param=0x7afb17d113d0, db=0x7afb17d110b0, old_alias=0x7afb17d11050, old_table=0x7afb17d11070, new_db=0x7afb17d11090, new_table=0x7afb17d11030) at /src/mariadb/sql/sql_trigger.cc:2614
      #13 0x00005f2f9e3cff8d in rename_triggers (thd=0x7dbb29ad0218, ddl_log_entry=0x7afb17a276c0, swap_tables=false) at /src/mariadb/sql/ddl_log.cc:1272
      #14 0x00005f2f9e3d33c5 in ddl_log_execute_action (thd=0x7dbb29ad0218, mem_root=0x7afb17a27660, ddl_log_entry=0x7afb17a276c0) at /src/mariadb/sql/ddl_log.cc:1501
      #15 0x00005f2f9e3dee91 in ddl_log_execute_entry_no_lock (thd=0x7dbb29ad0218, first_entry=1) at /src/mariadb/sql/ddl_log.cc:2456
      #16 0x00005f2f9e3e3e99 in ddl_log_revert (thd=0x7dbb29ad0218, state=0x7afb17903340) at /src/mariadb/sql/ddl_log.cc:2988
      #17 0x00005f2f9dc63425 in mysql_rename_tables (thd=0x7dbb29ad0218, table_list=0x7dcb29d00438, silent=true, if_exists=false) at /src/mariadb/sql/sql_rename.cc:212
      #18 0x00005f2f9d6e9aaf in mysql_upgrade_db (thd=0x7dbb29ad0218, old_db=...) at /src/mariadb/sql/sql_db.cc:2021
      #19 0x00005f2f9da950c4 in mysql_execute_command (thd=0x7dbb29ad0218, is_called_from_prepared_stmt=false) at /src/mariadb/sql/sql_parse.cc:5075
      #20 0x00005f2f9dacf30c in mysql_parse (thd=0x7dbb29ad0218, rawbuf=0x7c8b29a40670 "ALTER DATABASE `#mysql50#a@b` UPGRADE DATA DIRECTORY NAME", length=57, parser_state=0x7afb17dff170) at /src/mariadb/sql/sql_parse.cc:7895
      #21 0x00005f2f9da4b686 in dispatch_command (command=COM_QUERY, thd=0x7dbb29ad0218, packet=0x7d8b29c9c219 "ALTER DATABASE `#mysql50#a@b` UPGRADE DATA DIRECTORY NAME", packet_length=57, blocking=true) at /src/mariadb/sql/sql_parse.cc:1878
      #22 0x00005f2f9da3f6e4 in do_command (thd=0x7dbb29ad0218, blocking=true) at /src/mariadb/sql/sql_parse.cc:1417
      #23 0x00005f2f9e73ba2b in do_handle_one_connection (connect=0x7b7b299e4638, put_in_cache=true) at /src/mariadb/sql/sql_connect.cc:1503
      #24 0x00005f2f9e73aaba in handle_one_connection (arg=0x7b7b299e4638) at /src/mariadb/sql/sql_connect.cc:1415
      #25 0x00005f2fa0f0f710 in pfs_spawn_thread (arg=0x7c6b299e7418) at /src/mariadb/storage/perfschema/pfs.cc:2198
      #26 0x00007efb2c25f803 in asan_thread_start (arg=0x7afb18d01000) at ../../../../src/libsanitizer/asan/asan_interceptors.cpp:239
      #27 0x00007efb2a8a3d64 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:448
      #28 0x00007efb2a9373bc in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
      

      afaik this happens because Table_triggers_list::change_table_name(..) in sql/ddl_log.cc:1272 doesn't account for result of Table_triggers_list::prepare_for_rename (which fails)
      reproduced on main(e85bc65918)

      Attachments

        Issue Links

          Activity

            People

              shulga Dmitry Shulga
              qobood Vasilii Lakhin
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.