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

[DRAFT] void innodb_transaction_abort(THD*, bool, dberr_t): Assertion `trx->state == TRX_STATE_NOT_STARTED' failed

    XMLWordPrintable

Details

    • Can result in hang or crash

    Description

      I see many related bugs but all of them seems to be closed , hence raising the bug
      Assertion found on 12.3

      origin/12.3 5b665f0069bada02ccd0be6bcbbc563d343667cd

      # 2026-04-27T14:17:10 [1459154] | mariadbd: /data/Server/12.3/storage/innobase/handler/ha_innodb.cc:2023: void innodb_transaction_abort(THD*, bool, dberr_t): Assertion `trx->state == TRX_STATE_NOT_STARTED' failed.
      

      # $RQG_HOME/rqg.pl \
      # --gendata=conf/mariadb/table_stress.zz \
      # --gendata_sql=conf/mariadb/table_stress.sql \
      # --grammar=conf/mariadb/table_stress_innodb_nocopy1.yy \
      # --mysqld=--transaction-isolation=SERIALIZABLE \
      # --validator=SelectStability \
      # --mysqld=--loose-innodb_lock_schedule_algorithm=fcfs \
      # --mysqld=--loose-idle_write_transaction_timeout=0 \
      # --mysqld=--loose-idle_transaction_timeout=0 \
      # --mysqld=--loose-idle_readonly_transaction_timeout=0 \
      # --mysqld=--connect_timeout=60 \
      # --mysqld=--interactive_timeout=28800 \
      # --mysqld=--slave_net_timeout=60 \
      # --mysqld=--net_read_timeout=30 \
      # --mysqld=--net_write_timeout=60 \
      # --mysqld=--loose-table_lock_wait_timeout=50 \
      # --mysqld=--wait_timeout=28800 \
      # --no_mask \
      # --queries=10000000 \
      # --seed=random \
      # --reporters=None \
      # --reporters=ErrorLog \
      # --reporters=Deadlock \
      # --validators=None \
      # --mysqld=--log_output=none \
      # --mysqld=--log_bin_trust_function_creators=1 \
      # --mysqld=--loose-debug_assert_on_not_freed_memory=0 \
      # --engine=InnoDB \
      # --restart_timeout=240 \
      # --mysqld=--plugin-load-add=file_key_management.so \
      # --mysqld=--loose-file-key-management-filename=$RQG_HOME/conf/mariadb/encryption_keys.txt \
      # --mysqld=--plugin-load-add=provider_lzo.so \
      # --mysqld=--plugin-load-add=provider_bzip2.so \
      # --mysqld=--plugin-load-add=provider_lzma.so \
      # --mysqld=--plugin-load-add=provider_snappy.so \
      # --mysqld=--plugin-load-add=provider_lz4.so \
      # --mysqld=--loose-innodb_compression_level=1 \
      # --duration=300 \
      # --mysqld=--loose-innodb_fatal_semaphore_wait_threshold=300 \
      # --redefine=conf/mariadb/redefine_indexed_vcols.yy \
      # --mysqld=--lock-wait-timeout=15 \
      # --mysqld=--innodb-lock-wait-timeout=10 \
      # --mysqld=--sql_mode=traditional \
      # --mysqld=--loose-innodb_read_only_compressed=OFF \
      # --mysqld=--innodb_stats_persistent=on \
      # --mysqld=--innodb_adaptive_hash_index=on \
      # --mysqld=--innodb_sort_buffer_size=65536 \
      # --mysqld=--innodb_random_read_ahead=OFF \
      # --mysqld=--log-bin \
      # --mysqld=--sync-binlog=1 \
      # --mysqld=--loose-innodb_evict_tables_on_commit_debug=off \
      # --mysqld=--loose-max-statement-time=30 \
      # --threads=33 \
      # --rr=rr record --chaos --wait \
      # --mysqld=--innodb_undo_log_truncate=OFF \
      # --mysqld=--innodb_undo_tablespaces=16 \
      # --mysqld=--innodb_rollback_on_timeout=ON \
      # --mysqld=--innodb_page_size=4K \
      # --mysqld=--innodb-buffer-pool-size=5M \
      # --vardir_type=fast \
      # --no_mask \
      # --batch \
      # --basedir1=/Server_bin/12.3_debug_Og \
      # --basedir2=/Server_bin/12.3_debug_Og \
      # --script_debug=_nix_ \
      # --major_runid=1777313821 \
      # --minor_runid=116
      #--------
      # rqg_rr_add ->"--innodb-use-native-aio=0" "--loose-innodb-write-io-threads=2" "--loose-innodb-read-io-threads=1" "--loose-gdb" "--loose-debug-gdb"<-
      # vardir ->/dev/shm/rqg/1777313821/116<- fs_type=tmpfs
      

      Stacktrace

      #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
      #1  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
      #2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
      #3  __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
      #4  __GI_abort () at ./stdlib/abort.c:79
      #5  __assert_fail_base (fmt="%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry="trx->state == TRX_STATE_NOT_STARTED", file=file@entry="/data/Server/12.3/storage/innobase/handler/ha_innodb.cc", line=line@entry=2023,
          function=function@entry="void innodb_transaction_abort(THD*, bool, dberr_t)") at ./assert/assert.c:94
      #6  __assert_fail (assertion="trx->state == TRX_STATE_NOT_STARTED", file="/data/Server/12.3/storage/innobase/handler/ha_innodb.cc", line=2023, function="void innodb_transaction_abort(THD*, bool, dberr_t)") at ./assert/assert.c:103
      #7  innodb_transaction_abort (thd=thd@entry=, all=<optimized out>, err=err@entry=DB_LOCK_WAIT_TIMEOUT) at /data/Server/12.3/storage/innobase/handler/ha_innodb.cc:2023
      #8  convert_error_code_to_mysql (error=error@entry=DB_LOCK_WAIT_TIMEOUT, flags=<optimized out>, thd=) at /data/Server/12.3/storage/innobase/handler/ha_innodb.cc:2105
      #9  ha_innobase::truncate (this=) at /data/Server/12.3/storage/innobase/handler/ha_innodb.cc:13976
      #10 handler::ha_truncate (this=) at /data/Server/12.3/sql/handler.cc:5841
      #11 Sql_cmd_truncate_table::handler_truncate (this=this@entry=, thd=thd@entry=, table_ref=table_ref@entry=, is_tmp_table=is_tmp_table@entry=false) at /data/Server/12.3/sql/sql_truncate.cc:251
      #12 Sql_cmd_truncate_table::truncate_table (this=this@entry=, thd=thd@entry=, table_ref=table_ref@entry=) at /data/Server/12.3/sql/sql_truncate.cc:536
      #13 Sql_cmd_truncate_table::execute (this=, thd=) at /data/Server/12.3/sql/sql_truncate.cc:602
      #14 mysql_execute_command (thd=thd@entry=, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /data/Server/12.3/sql/sql_parse.cc:5905
      #15 mysql_parse (thd=thd@entry=, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=) at /data/Server/12.3/sql/sql_parse.cc:7944
      #16 dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=, packet=packet@entry="TRUNCATE TABLE `table0_innodb_int` /* E_R Thread4 QNO 31 CON_ID 20 */ ", packet_length=packet_length@entry=70, blocking=blocking@entry=true)
          at /data/Server/12.3/sql/sql_parse.cc:1898
      #17 do_command (thd=thd@entry=, blocking=blocking@entry=true) at /data/Server/12.3/sql/sql_parse.cc:1432
      #18 do_handle_one_connection (connect=<optimized out>, connect@entry=, put_in_cache=put_in_cache@entry=true) at /data/Server/12.3/sql/sql_connect.cc:1503
      #19 handle_one_connection (arg=) at /data/Server/12.3/sql/sql_connect.cc:1415
      #20 start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
      #21 clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:100
      (rr) frame 7
      #7  innodb_transaction_abort (thd=thd@entry=, all=<optimized out>, err=err@entry=DB_LOCK_WAIT_TIMEOUT) at /data/Server/12.3/storage/innobase/handler/ha_innodb.cc:2023
      2023        ut_ad(trx->state == TRX_STATE_NOT_STARTED);
      (rr) info args
      thd =
      all = <optimized out>
      err = DB_LOCK_WAIT_TIMEOUT
      (rr) info locals
      trx =
      __PRETTY_FUNCTION__ = "void innodb_transaction_abort(THD*, bool, dberr_t)"
      (rr) p trx->state
      $1 = {m = std::atomic<trx_state_t> = { TRX_STATE_ACTIVE }}
      (rr) p TRX_STATE_NOT_STARTED
      $2 = TRX_STATE_NOT_STARTED
      (rr) p *trx
      $3 = {<ilist_node<void>> = {next = , prev = }, skip_lock_inheritance_and_n_ref = {m = std::atomic<unsigned int> = { 0 }}, id = 0, {max_inactive_id = 0, max_inactive_id_atomic = {m = std::atomic<unsigned long> = { 0 }}}, mutex = {
          lock = std::atomic<unsigned int> = { 0 }}, mutex_owner = std::atomic<unsigned long> = { 0 }, state = {m = std::atomic<trx_state_t> = { TRX_STATE_ACTIVE }}, lock = {wait_lock = {m = std::atomic<ib_lock_t *> = {  }}, wait_trx = , cond = {
            __data = {__wseq = {__value64 = 3, __value32 = {__low = 3, __high = 0}}, __g1_start = {__value64 = 1, __value32 = {__low = 1, __high = 0}}, __g_refs = {0, 0}, __g_size = {0, 0}, __g1_orig_size = 4, __wrefs = 0, __g_signals = {0, 0}},
            __size = "\003\000\000\000\000\000\000\000\001", '\000' <repeats 23 times>, "\004", '\000' <repeats 14 times>, __align = 3}, suspend_time = {m = std::atomic<my_hrtime_t> = { {val = 1777324605633820} }}, was_chosen_as_deadlock_victim = {
            m = std::atomic<unsigned char> = { 0 '\000' }}, rec_cached = 0 '\000', table_cached = 0 '\000', wait_thr = , rec_pool = {{lock = {trx = , trx_locks = {prev = , next = }, index = , hash = , requested_time = 0, wait_time = 0,
                un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 206158430211}, n_bits = 320}}, type_mode = 515}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = , requested_time = 0,
                wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 180388626435}, n_bits = 320}}, type_mode = 3}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, {lock = {trx = , trx_locks = {prev = , next = }, index = , hash = ,
                requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}}, table_pool = {{trx = , trx_locks = {prev = , next = }, index = ,
              hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 94121623035848}, n_bits = 0}}, type_mode = 9}, {trx = , trx_locks = {prev = , next = },
              index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 94121623258392}, n_bits = 0}}, type_mode = 9}, {trx = , trx_locks = {prev = ,
                next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 94121623251464}, n_bits = 0}}, type_mode = 9}, {trx = , trx_locks = {
                prev = , next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}, {trx = , trx_locks = {prev = ,
                next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}, {trx = , trx_locks = {prev = ,
                next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}, {trx = , trx_locks = {prev = ,
                next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}, {trx = , trx_locks = {prev = ,
                next = }, index = , hash = , requested_time = 0, wait_time = 0, un_member = {tab_lock = {table = , locks = {prev = , next = }}, rec_lock = {page_id = {m_id = 0}, n_bits = 0}}, type_mode = 0}}, lock_heap = , trx_locks = {count = 0,
            start = , end = , node = &ib_lock_t::trx_locks, init = 51966}, table_locks = std::__debug::vector of length 0, capacity 4, evicted_tables = {count = 0, start = , end = , node = &dict_table_t::table_LRU, init = 51966}, n_rec_locks = 0,
          set_nth_bit_calls = 0}, wsrep = 0 '\000', read_view = {<ReadViewBase> = {m_low_limit_id = 515, m_up_limit_id = 474, m_ids = std::__debug::vector of length 5, capacity 44 = {474, 498, 504, 505, 508}, m_low_limit_no = 515},
          m_open = std::atomic<bool> = { true }, m_mutex = {lock = std::atomic<unsigned int> = { 0 }}, m_creator_trx_id = 0}, is_recovered = false, op_info = "", isolation_level = 3, snapshot_isolation = 1, check_foreigns = 1,
        check_unique_secondary = 1, bulk_insert = 0, is_registered = true, active_commit_ordered = false, active_prepare = false, flush_log_later = false, duplicates = 0 '\000', dict_operation = false, was_dict_operation = false,
        dict_operation_lock_mode = false, start_time = 1777324625, start_time_micro = 1777324623838709, commit_lsn = 0, mysql_thd = , active_handler_stats = , pages_accessed = 0, mysql_log_file_name = , mysql_log_offset = 109729,
        n_mysql_tables_in_use = 1, mysql_n_tables_locked = 1, error_state = DB_SUCCESS, error_info = , error_key_num = 18446744073709551615, graph = , undo_no = 0, last_stmt_start = 0, rsegs = {m_redo = {rseg = , undo = }, m_noredo = {rseg = ,
            undo = }}, roll_limit = 0, in_rollback = false, pages_undone = 0, n_autoinc_rows = 0, autoinc_locks = {<small_vector_base> = {BeginX = , Size = 0, Capacity = 4}, small = {, , , }}, read_only = false, auto_commit = false,
        will_lock = true, apply_online_log = false, fts_trx = , fts_next_doc_id = 0, flush_tables = 0, start_line = 16718, start_file = "/data/Server/12.3/storage/innobase/handler/ha_innodb.cc", xid = {formatID = -1, gtrid_length = 24,
          bqual_length = 0, data = "MySQLXid\000\000\000\000\000\000\000\000=\004", '\000' <repeats 109 times>}, mod_tables = std::__debug::map with 0 elements, detailed_error = "", rw_trx_hash_element = , rw_trx_hash_pins = , magic_n = 91118598}
      (rr) p trx->id
      $4 = 0
      (rr) p trx->state
      $5 = {m = std::atomic<trx_state_t> = { TRX_STATE_ACTIVE }}
      (rr) p trx->is_recovered
      $6 = false
      (rr) p trx->in_rollback
      $7 = false
      (rr) p trx->will_lock
      $8 = true
      (rr) p trx->mysql_thd
      $9 = (THD *)
      (rr) p trx->undo_no
      $10 = 0
      (rr) p trx->isolation_level
      $11 = 3
      (rr) p trx->dict_operation
      $12 = false
      (rr) p trx->start_time
      $13 = 1777324625
      (rr) p trx->lock.wait_lock
      $14 = {m = std::atomic<ib_lock_t *> = {  }}
      (rr) p *trx->lock.wait_lock
      No symbol "operator*" in current context.
      (rr) p trx->lock.que_state
      There is no member or method named que_state.
      (rr) p trx->error_state
      $15 = DB_SUCCESS
      (rr) p trx->error_info
      $16 = (const dict_index_t *)
      

      RR trace is present on SDP :-
      /data/results/1777313821/TBR-2405

      Attachments

        Activity

          People

            saahil Saahil Alam
            saahil Saahil Alam
            Votes:
            0 Vote for this issue
            Watchers:
            1 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.