1. 08 Mar, 2021 4 commits
  2. 05 Mar, 2021 12 commits
  3. 04 Mar, 2021 9 commits
    • Daniel Black's avatar
      mtr: perfschema.socket_{connect,instances_func} "Expect X" · 1e7fed72
      Daniel Black authored
      Match test output with what it is testing.
      1e7fed72
    • Daniel Black's avatar
      d2dce1c9
    • Rinat Ibragimov's avatar
      MDEV-6536: make --bind=hostname to listen on both IPv6 and IPv4 addresses · b3abcf80
      Rinat Ibragimov authored
      Binding to a hostname now makes MariaDB server to listen on all addresses
      that hostname resolves to.
      
      Rebased to 10.6 by Daniel Black
      
      Closes: #1668
      b3abcf80
    • Varun Gupta's avatar
      MDEV-7317: Make an index ignorable to the optimizer · f691d986
      Varun Gupta authored
      This feature adds the functionality of ignorability for indexes.
      Indexes are not ignored be default.
      
      To control index ignorability explicitly for a new index,
      use IGNORE or NOT IGNORE as part of the index definition for
      CREATE TABLE, CREATE INDEX, or ALTER TABLE.
      
      Primary keys (explicit or implicit) cannot be made ignorable.
      
      The table INFORMATION_SCHEMA.STATISTICS get a new column named IGNORED that
      would store whether an index needs to be ignored or not.
      f691d986
    • Marko Mäkelä's avatar
      fixup 58b56f14: Remove dead code · 7759991a
      Marko Mäkelä authored
      row_prebuilt_t::m_no_prefetch: Remove (it was always false).
      row_prebuilt_t::m_read_virtual_key: Remove (it was always false).
      
      Only ha_innopart ever set these fields.
      7759991a
    • Marko Mäkelä's avatar
      MDEV-25051 Race condition between persistent statistics and RENAME TABLE or TRUNCATE · 978e48c9
      Marko Mäkelä authored
      innobase_rename_table(): Invoke dict_stats_wait_bg_to_stop_using_table()
      to ensure that dict_stats_update() cannot be accessing the table name
      that we will be modifying. If we are executing RENAME rather than TRUNCATE,
      reset the flag at the end so that persistent statistics can be calculated
      again.
      
      The race condition was encountered with ASAN and rr.
      Sorry, there is no test case, like there is for nothing related to
      dict_stats_wait_bg_to_stop_using_table(). The entire code is an ugly
      work-around for the failure of dict_stats_process_entry_from_recalc_pool()
      to acquire MDL.
      
      Note: It appears that an ALTER TABLE that is not rebuilding the table
      will fail to reset the flag that blocks the processing of statistics.
      978e48c9
    • Vicențiu Ciorbaru's avatar
      Merge branch '10.2' into 10.3 · e9b8b76f
      Vicențiu Ciorbaru authored
      e9b8b76f
    • Vicențiu Ciorbaru's avatar
      MDEV-25032: Window functions without column references get removed from ORDER BY · 5da6ffe2
      Vicențiu Ciorbaru authored
      row_number() over () window function can be used without any column in the OVER
      clause. Additionally, the item doesn't reference any tables, as it's not
      effectively referencing any table. Rather it is specifically built based
      on the end temporary table used for window function computation.
      
      This caused remove_const function to wrongly drop it from the ORDER
      list. Effectively, we shouldn't be dropping any window function from the
      ORDER clause, so adjust remove_const to account for that.
      
      Reviewed by: Sergei Petrunia sergey@mariadb.com
      5da6ffe2
    • Igor Babaev's avatar
      MDEV-22786 Crashes with nested table value constructors · 08d8bce5
      Igor Babaev authored
      The bug caused crashes of the server when processing queries with nested
      table value constructors (TVC) . It happened because the grammar rules to
      parse TVC used the same global lists for both nested TVC and nesting TVC.
      As a result invalid select trees were constructed for queries with nested
      TVC and this led to crashes at the prepare stage.
      This patch provides its own lists structures for each TVC nest level.
      
      Besides the patch fixes a bug in the function wrap_tvc() that missed
      inheritance of the SELECT_LEX::exclude_from_table_unique_test for
      selects that wrapped TVCs. This inheritance is critical for specifications
      of derived tables that employ nested TVCs.
      
      Approved by dmitry.shulga@mariadb.com
      08d8bce5
  4. 03 Mar, 2021 8 commits
  5. 02 Mar, 2021 7 commits
    • Monty's avatar
      MDEV-24532 Table corruption ER_NO_SUCH_TABLE_IN_ENGINE .. on table with foreign key · 676987c4
      Monty authored
      When doing a truncate on an Innodb under lock tables, InnoDB would rename
      the old table to #sql-... and recreate a new 't1' table. The table lock
      would still be on the #sql-table.
      
      When doing ALTER TABLE, Innodb would do the changes on the #sql table
      (which would disappear on close).
      When the SQL layer, as part of inline alter table, would close the
      original t1 table (#sql in InnoDB) and then reopen the t1 table, Innodb
      would notice that this does not match it's own (old) t1 table and
      generate an error.
      
      Fixed by adding code in truncate table that if we are under lock tables
      and truncating an InnoDB table, we would close, reopen and lock the
      table after truncate. This will remove the #sql table and ensure that
      lock tables is using the new empty table.
      
      Reviewer: Marko Mäkelä
      676987c4
    • Monty's avatar
      MDEV-23843 Assertions in Diagnostics_area upon table operations under FTWRL · 82efe4a1
      Monty authored
      Fixed binary logging in ANALYZE TABLE to work as optimize table
      82efe4a1
    • Marko Mäkelä's avatar
      MDEV-24973 Performance schema duplicates rarely executed code for mutex operations · 80ac9ec1
      Marko Mäkelä authored
      The PERFORMANCE_SCHEMA wrapper for mutex and rw-lock operations is
      causing a lot of unlikely code to be inlined in each invocation.
      The impact of this may have been emphasized in MariaDB 10.6, because
      InnoDB now uses the common implementation of mutexes and condition
      variables (MDEV-21452).
      
      By default, we build with cmake -DPLUGIN_PERFSCHEMA enabled,
      but at runtime no instrumentation will be enabled. Similar to
      commit eba2d10a
      we had better avoid inlining the rarely executed code in order to reduce
      the code size and to improve the efficiency of the instruction cache.
      
      This change was extensively tested by Axel Schwenke with and without
      --enable-performance-schema (with no individual instruments enabled).
      Removing the inline functions did not cause any performance regression
      in either case. There seemed to be a tiny improvement, possibly due
      to reduced code size and better instruction cache hit rate.
      80ac9ec1
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 33aec68a
      Marko Mäkelä authored
      33aec68a
    • Marko Mäkelä's avatar
      MDEV-24811 Assertion find(table) failed with innodb_evict_tables_on_commit_debug · 18535a40
      Marko Mäkelä authored
      lock_release_try(): Implement innodb_evict_tables_on_commit_debug.
      Before releasing any locks, collect the identifiers of tables to
      be evicted. After releasing all locks, look up for the tables and
      evict them if it is safe to do so.
      
      trx_t::commit_tables(): Remove the eviction logic.
      
      trx_t::commit_in_memory(): Invoke release_locks() only after
      commit_tables().
      18535a40
    • Marko Mäkelä's avatar
      8513007c
    • Marko Mäkelä's avatar
      MDEV-24789: Reduce lock_sys mutex contention further · 8d16da14
      Marko Mäkelä authored
      lock_sys_t::deadlock_check(): Assume that only lock_sys.wait_mutex
      is being held by the caller.
      
      lock_sys_t::rd_lock_try(): New function.
      
      lock_sys_t::cancel(trx_t*): Kill an active transaction that may be
      holding a lock.
      
      lock_sys_t::cancel(trx_t*, lock_t*): Cancel a waiting lock request.
      
      lock_trx_handle_wait(): Avoid acquiring mutexes in some cases,
      and in never acquire lock_sys.latch in exclusive mode.
      This function is only invoked in a semi-consistent read
      (locking a clustered index record only if it matches the search condition).
      Normally, lock_wait() will take care of lock waits.
      
      lock_wait(): Invoke the new function lock_sys_t::cancel() at the end,
      to avoid acquiring exclusive lock_sys.latch.
      
      lock_rec_other_trx_holds_expl(): Use LockGuard instead of LockMutexGuard.
      
      lock_release_autoinc_locks(): Explicitly acquire table->lock_mutex,
      in case only a shared lock_sys.latch is being held. Deadlock::report()
      will still hold exclusive lock_sys.latch while invoking
      lock_cancel_waiting_and_release().
      
      lock_cancel_waiting_and_release(): Acquire trx->mutex in this function,
      instead of expecting the caller to do so.
      
      lock_unlock_table_autoinc(): Only acquire shared lock_sys.latch.
      
      lock_table_has_locks(): Do not acquire lock_sys.latch at all.
      
      Deadlock::check_and_resolve(): Only acquire shared lock_sys.latchm
      for invoking lock_sys_t::cancel(trx, wait_lock).
      
      innobase_query_caching_table_check_low(),
      row_drop_tables_for_mysql_in_background(): Do not acquire lock_sys.latch.
      8d16da14