1. 02 Jul, 2021 15 commits
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 15dcb8bd
      Marko Mäkelä authored
      15dcb8bd
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · c294443b
      Marko Mäkelä authored
      c294443b
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 05f7fd57
      Marko Mäkelä authored
      05f7fd57
    • Marko Mäkelä's avatar
      MDEV-26077 Assertion err != DB_DUPLICATE_KEY or unexpected ER_TABLE_EXISTS_ERROR · 2bf6f2c0
      Marko Mäkelä authored
      This is a backport of 161e4bfa.
      
      trans_rollback_to_savepoint(): Only release metadata locks (MDL)
      if the storage engines agree, after the changes were already rolled back.
      
      Ever since commit 3792693f
      and mysql/mysql-server@55ceedbc3feb911505dcba6cee8080d55ce86dda
      we used to cheat here and always release MDL if the binlog is disabled.
      
      MDL are supposed to prevent race conditions between DML and DDL also
      when no replication is in use. MDL are supposed to be a superset of
      InnoDB table locks: InnoDB table lock may only exist if the thread
      also holds MDL on the table name.
      
      In the included test case, ROLLBACK TO SAVEPOINT would wrongly release
      the MDL on both tables and let ALTER TABLE proceed, even though the DML
      transaction is actually holding locks on the table.
      
      Until commit 1bd681c8 (MDEV-25506)
      in MariaDB 10.6, InnoDB would often work around the locking violation
      in a blatantly non-ACID way: If locks exist on a table that is being
      dropped (in this case, actually a partition of a table that is being
      rebuilt by ALTER TABLE), InnoDB could move the table (or partition)
      into a queue, to be dropped after the locks and references had been
      released. If the lock is not released and the original copy of the
      table not dropped quickly enough, a name conflict could occur on
      a subsequent ALTER TABLE.
      
      The scenario of commit 3792693f
      is unaffected by this fix, because mysqldump
      would use non-locking reads, and the transaction would not be holding
      any InnoDB locks during the execution of ROLLBACK TO SAVEPOINT.
      MVCC reads inside InnoDB are only covered by MDL and page latches,
      not by any table or record locks.
      
      FIXME: It would be nice if storage engines were specifically asked
      which MDL can be released, instead of only offering a choice
      between all or nothing. InnoDB should be able to release any
      locks for tables that are no longer in trx_t::mod_tables, except
      if another transaction had converted some implicit record locks
      to explicit ones, before the ROLLBACK TO SAVEPOINT had been completed.
      
      Reviewed by: Sergei Golubchik
      2bf6f2c0
    • Marko Mäkelä's avatar
      MDEV-25129 fixup: Adjust test result · 5a2b6258
      Marko Mäkelä authored
      Fixup for commit 768c5188
      5a2b6258
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-25971 Instant ADD COLUMN fails to issue truncation warnings · e34877ab
      Thirunarayanan Balathandayuthapani authored
      A table rebuild that would truncate the default value of a
      DATE column is expected to issue data truncation warnings.
      But, these warnings are not being issued if the ADD COLUMN
      is being executed with ALGORITHM=INSTANT. InnoDB sets the
      warning of the field while assigning the default value
      of the field during check_if_supported_inplace_alter().
      e34877ab
    • Daniel Black's avatar
      mtr: plugin.multiauth aix fix · fa8eb4de
      Daniel Black authored
      The error loading the client module is different
      fa8eb4de
    • Daniel Black's avatar
      Merge branch 10.3 into 10.4 · 95e9f3c1
      Daniel Black authored
      95e9f3c1
    • Daniel Black's avatar
      mtr: aix - no pool of threads · 6a3a0460
      Daniel Black authored
      6a3a0460
    • Daniel Black's avatar
      MDEV-25894: support AIX as a platform in mtr · 2301093f
      Daniel Black authored
      Parital backport of 48938c57
      so platform dependent AIX tests can be done.
      2301093f
    • Daniel Black's avatar
    • Daniel Black's avatar
      Merge branch '10.2' into 10.3 · a88ddb16
      Daniel Black authored
      a88ddb16
    • Daniel Black's avatar
      MDEV-25129 postfix for windows · c22f7f23
      Daniel Black authored
      C:\projects\server\sql\sql_show.cc(7913): error C2220: warning treated as error - no 'object' file generated [C:\projects\server\win_build\sql\sql.vcxproj]
      C:\projects\server\sql\sql_show.cc(7913): warning C4267: 'initializing': conversion from 'size_t' to 'uint', possible loss of data [C:\projects\server\win_build\sql\sql.vcxproj]
      
      caused by 768c5188
      c22f7f23
    • Daniel Black's avatar
      mtr: aix - no pool of threads · 0a9487b6
      Daniel Black authored
      0a9487b6
    • Daniel Black's avatar
      MDEV-25894: support AIX as a platform in mtr · 3f2c4758
      Daniel Black authored
      Parital backport of 48938c57
      so platform dependent AIX tests can be done.
      3f2c4758
  2. 30 Jun, 2021 6 commits
  3. 29 Jun, 2021 6 commits
  4. 28 Jun, 2021 2 commits
  5. 27 Jun, 2021 1 commit
  6. 26 Jun, 2021 5 commits
    • Igor Babaev's avatar
      8b3f816c
    • Marko Mäkelä's avatar
      MDEV-26017: Assertion stat.flush_list_bytes <= curr_pool_size · fc2ff464
      Marko Mäkelä authored
      buf_flush_relocate_on_flush_list(): If we are removing the block from
      buf_pool.flush_list, subtract its size from buf_pool.stat.flush_list_bytes.
      This fixes a regression that was introduced in
      commit 22b62eda (MDEV-25113).
      fc2ff464
    • Marko Mäkelä's avatar
      Cleanup: Remove unused mtr_block_dirtied · aa95c423
      Marko Mäkelä authored
      aa95c423
    • Marko Mäkelä's avatar
      MDEV-26010 fixup: Use acquire/release memory order · 759deaa0
      Marko Mäkelä authored
      In commit 5f22511e we depend on
      Total Store Ordering. For correct operation on ISAs that implement
      weaker memory ordering, we must explicitly use release/acquire stores
      and loads on buf_page_t::oldest_modification_ to prevent a race condition
      when buf_page_t::list does not happen to be on the same cache line.
      
      buf_page_t::clear_oldest_modification(): Assert that the block is
      not in buf_pool.flush_list, and use std::memory_order_release.
      
      buf_page_t::oldest_modification_acquire(): Read oldest_modification_
      with std::memory_order_acquire. In this way, if the return value is 0,
      the caller may safely assume that it will not observe the buf_page_t
      as being in buf_pool.flush_list, even if it is not holding
      buf_pool.flush_list_mutex.
      
      buf_flush_relocate_on_flush_list(), buf_LRU_free_page():
      Invoke buf_page_t::oldest_modification_acquire().
      759deaa0
    • Igor Babaev's avatar
      MDEV-20411 Procedure containing CTE incorrectly stored in mysql.proc · 12c80df4
      Igor Babaev authored
      If the first token of the body of a stored procedure was 'WITH' then
      the beginning of the body was determined incorrectly and that token was
      missing in the string representing the body of the SP in mysql.proc. As a
      resultnany call of such procedure failed as the string representing the
      body could not be parsed.
      
      The patch corrects the code of the functions get_tok_start() and
      get_cpp_tok_start() of the class Lex_input_stream to make them take into
      account look ahead tokens. The patch is needed only for 10.2 as this
      problem has neen resolved in 10.3+.
      12c80df4
  7. 25 Jun, 2021 4 commits
  8. 24 Jun, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-26010: Assertion lsn > 2 failed in buf_pool_t::get_oldest_modification · 5f22511e
      Marko Mäkelä authored
      In commit 22b62eda (MDEV-25113)
      we introduced a race condition. buf_LRU_free_page() would read
      buf_page_t::oldest_modification() as 0 and assume that
      buf_page_t::list can be used (for attaching the block to the
      buf_pool.free list). In the observed race condition,
      buf_pool_t::delete_from_flush_list() had cleared the field,
      and buf_pool_t::delete_from_flush_list_low() was executing
      concurrently with buf_LRU_block_free_non_file_page(),
      which resulted in buf_pool.flush_list.end becoming corrupted.
      
      buf_pool_t::delete_from_flush_list(), buf_flush_relocate_on_flush_list():
      First remove the block from buf_pool.flush_list, and only then
      invoke buf_page_t::clear_oldest_modification(), to ensure that
      reading oldest_modification()==0 really implies that the block
      no longer is in buf_pool.flush_list.
      5f22511e