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

Assertion `!strstr(table->name.m_name, "/FTS_") || purge_sys.must_wait_FTS()' failed in trx_t::commit

Details

    Description

      CREATE DATABASE t;  # Any database name
      CREATE TABLE t.FTS_1 (c INT) ENGINE=InnoDB;
      DROP DATABASE t;
      

      Leads to:

      10.11.1 50c5743adc87e1cdec1431a02558f6540fe5a6d5 (Debug)

      mysqld: /test/10.11_dbg/storage/innobase/dict/drop.cc:270: void trx_t::commit(std::vector<pfs_os_file_t>&): Assertion `!strstr(table->name.m_name, "/FTS_") || purge_sys.must_wait_FTS()' failed.
      

      10.11.1 50c5743adc87e1cdec1431a02558f6540fe5a6d5 (Debug)

      Core was generated by `/test/MD221022-mariadb-10.11.1-linux-x86_64-dbg/bin/mysqld --no-defaults --core'.
      Program terminated with signal SIGABRT, Aborted.
      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
      [Current thread is 1 (Thread 0x147bf41ae700 (LWP 533632))]
      (gdb) bt
      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
      #1  0x0000147c27152859 in __GI_abort () at abort.c:79
      #2  0x0000147c27152729 in __assert_fail_base (fmt=0x147c272e8588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x55ef32f11b90 "!strstr(table->name.m_name, \"/FTS_\") || purge_sys.must_wait_FTS()", file=0x55ef32f11948 "/test/10.11_dbg/storage/innobase/dict/drop.cc", line=270, function=<optimized out>) at assert.c:92
      #3  0x0000147c27163fd6 in __GI___assert_fail (assertion=assertion@entry=0x55ef32f11b90 "!strstr(table->name.m_name, \"/FTS_\") || purge_sys.must_wait_FTS()", file=file@entry=0x55ef32f11948 "/test/10.11_dbg/storage/innobase/dict/drop.cc", line=line@entry=270, function=function@entry=0x55ef32f11b60 "void trx_t::commit(std::vector<pfs_os_file_t>&)") at assert.c:101
      #4  0x000055ef329e66c6 in trx_t::commit (this=this@entry=0x147c1e9ed680, deleted=std::vector of length 0, capacity 0) at /usr/include/c++/9/bits/atomic_base.h:413
      #5  0x000055ef326cc483 in ha_innobase::delete_table (this=<optimized out>, name=<optimized out>) at /test/10.11_dbg/storage/innobase/handler/ha_innodb.cc:13734
      #6  0x000055ef323bec30 in hton_drop_table (hton=<optimized out>, path=<optimized out>) at /test/10.11_dbg/sql/handler.cc:576
      #7  0x000055ef323c64d7 in ha_delete_table (thd=thd@entry=0x147b5c000d48, hton=hton@entry=0x55ef345e5db8, path=path@entry=0x147bf41abf10 "./t/FTS_1", db=db@entry=0x147bf41abd00, alias=alias@entry=0x147bf41abd10, generate_warning=generate_warning@entry=false) at /test/10.11_dbg/sql/handler.cc:3118
      #8  0x000055ef321a6094 in mysql_rm_table_no_locks (thd=thd@entry=0x147b5c000d48, tables=tables@entry=0x147b5c0132c8, current_db=current_db@entry=0x147bf41ac410, ddl_log_state=ddl_log_state@entry=0x147bf41ac430, if_exists=if_exists@entry=true, drop_temporary=drop_temporary@entry=false, drop_view=true, drop_sequence=false, dont_log_query=true, dont_free_locks=false) at /test/10.11_dbg/sql/sql_table.cc:1680
      #9  0x000055ef32084543 in mysql_rm_db_internal (thd=0x147b5c000d48, db=0x147b5c005c60, if_exists=<optimized out>, silent=silent@entry=false) at /test/10.11_dbg/sql/sql_db.cc:1124
      #10 0x000055ef32084dd9 in mysql_rm_db (thd=thd@entry=0x147b5c000d48, db=db@entry=0x147b5c005c60, if_exists=<optimized out>) at /test/10.11_dbg/sql/sql_db.cc:1310
      #11 0x000055ef320e3017 in mysql_execute_command (thd=thd@entry=0x147b5c000d48, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.11_dbg/sql/structs.h:569
      #12 0x000055ef320cdf90 in mysql_parse (thd=thd@entry=0x147b5c000d48, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x147bf41ad300) at /test/10.11_dbg/sql/sql_parse.cc:8023
      #13 0x000055ef320db4ac in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x147b5c000d48, packet=packet@entry=0x147b5c00af09 "DROP DATABASE t", packet_length=packet_length@entry=15, blocking=blocking@entry=true) at /test/10.11_dbg/sql/sql_class.h:1346
      #14 0x000055ef320dd8f4 in do_command (thd=0x147b5c000d48, blocking=blocking@entry=true) at /test/10.11_dbg/sql/sql_parse.cc:1407
      #15 0x000055ef3223a067 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x55ef349b20a8, put_in_cache=put_in_cache@entry=true) at /test/10.11_dbg/sql/sql_connect.cc:1416
      #16 0x000055ef3223a536 in handle_one_connection (arg=0x55ef349b20a8) at /test/10.11_dbg/sql/sql_connect.cc:1318
      #17 0x0000147c27663609 in start_thread (arg=<optimized out>) at pthread_create.c:477
      #18 0x0000147c2724f133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
      

      Bug confirmed present in:
      MariaDB: 10.6.10 (dbg), 10.7.6 (dbg), 10.8.5 (dbg), 10.9.3 (dbg), 10.10.2 (dbg), 10.11.1 (dbg)

      Bug (or feature/syntax) confirmed not present in:
      MariaDB: 10.3.37 (dbg), 10.3.37 (opt), 10.4.27 (dbg), 10.4.27 (opt), 10.5.18 (dbg), 10.5.18 (opt), 10.6.10 (opt), 10.7.6 (opt), 10.8.5 (opt), 10.9.3 (opt), 10.10.2 (opt), 10.11.1 (opt)
      MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt), 5.7.38 (dbg), 5.7.38 (opt), 8.0.29 (dbg), 8.0.29 (opt)

      Attachments

        Activity

          In this case, the debug assertion is bogus. The purpose of the assertion is to catch trouble that could originate from MDEV-25506.

          We suffer from an unfortunate design decision that was made in MySQL: the internal table names used for fulltext indexes are in the same name space and indistinguishable from user-created table names. We could make the assertion stricter so that it accepts only exactly the type of names that are being created for fulltext indexes, but even then, it would be possible to create InnoDB tables with such names.

          marko Marko Mäkelä added a comment - In this case, the debug assertion is bogus. The purpose of the assertion is to catch trouble that could originate from MDEV-25506 . We suffer from an unfortunate design decision that was made in MySQL: the internal table names used for fulltext indexes are in the same name space and indistinguishable from user-created table names. We could make the assertion stricter so that it accepts only exactly the type of names that are being created for fulltext indexes, but even then, it would be possible to create InnoDB tables with such names.

          Thank you. The assert seems (from a testing perspective) very generic as it crashes on many FTS_ names. Is removing the assertion a viable option?

          Roel Roel Van de Paar added a comment - Thank you. The assert seems (from a testing perspective) very generic as it crashes on many FTS_ names. Is removing the assertion a viable option?

          Patch is in bb-10.6-MDEV-29518

          thiru Thirunarayanan Balathandayuthapani added a comment - Patch is in bb-10.6- MDEV-29518

          Thank you, thiru. I think that it is acceptable to extend trx_mod_table_time_t with a debug-only field to avoid false alarms in the debug assertion.

          marko Marko Mäkelä added a comment - Thank you, thiru . I think that it is acceptable to extend trx_mod_table_time_t with a debug-only field to avoid false alarms in the debug assertion.

          People

            thiru Thirunarayanan Balathandayuthapani
            Roel Roel Van de Paar
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

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