1. 02 Jul, 2021 24 commits
    • Sergei Golubchik's avatar
      errors after altering a table has finished aren't fatal · b5f50e2d
      Sergei Golubchik authored
      We cannot revert the ALTER, so anything happening after
      the point of no return should not be treated as an error. A
      very unfortunate condition that a user needs to be warned about - yes,
      but we cannot say "ALTER TABLE has failed" if the table was successfully
      altered.
      b5f50e2d
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 0ad8a825
      Marko Mäkelä authored
      0ad8a825
    • Sergei Golubchik's avatar
      MDEV-23004 When using GROUP BY with JSON_ARRAYAGG with joint table, the square... · 77926284
      Sergei Golubchik authored
      MDEV-23004 When using GROUP BY with JSON_ARRAYAGG with joint table, the square brackets are not included
      
      make test results stable
      
      followup for 98c7916f
      77926284
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 8c029d42
      Marko Mäkelä authored
      8c029d42
    • Marko Mäkelä's avatar
      MDEV-25236 Online log apply fails for ROW_FORMAT=REDUNDANT tables · a635588b
      Marko Mäkelä authored
      In other ROW_FORMAT than REDUNDANT, the InnoDB record header
      size calculation depends on dict_index_t::n_core_null_bytes.
      
      In ROW_FORMAT=REDUNDANT, the record header always is 6 bytes
      plus n_fields or 2*n_fields bytes, depending on the maximum
      record size. But, during online ALTER TABLE, the log records
      in the temporary file always use a format similar to
      ROW_FORMAT=DYNAMIC, even omitting the 5-byte fixed-length part
      of the header.
      
      While creating a temporary file record for a ROW_FORMAT=REDUNDANT
      table, InnoDB must refer to dict_index_t::n_nullable.
      The field dict_index_t::n_core_null_bytes is only valid for
      other than ROW_FORMAT=REDUNDANT tables.
      
      The bug does not affect MariaDB 10.3, because only
      commit 7a27db77 (MDEV-15563)
      allowed an ALGORITHM=INSTANT change of a NOT NULL column to
      NULL in a ROW_FORMAT=REDUNDANT table.
      
      The fix was developed by Thirunarayanan Balathandayuthapani
      and tested by Matthias Leich. The test case was simplified by me.
      a635588b
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 372ea882
      Marko Mäkelä authored
      372ea882
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · f9194d02
      Marko Mäkelä authored
      f9194d02
    • Marko Mäkelä's avatar
      Fixup 586870f9 · a6adefad
      Marko Mäkelä authored
      One more result was affected by merging
      768c5188.
      a6adefad
    • Eugene Kosov's avatar
      submodules.cmake: add missing --depth=1 · ffe744e7
      Eugene Kosov authored
      ffe744e7
    • 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. 01 Jul, 2021 7 commits
    • Marko Mäkelä's avatar
      MDEV-26052 Assertion prebuilt->trx_id < table->def_trx_id failed · 315380a4
      Marko Mäkelä authored
      ha_innobase::truncate(): If the operation fails, preserve
      also dict_table_t::def_trx_id.
      
      This fixes a regression that had been introduced in
      commit 1bd681c8 (MDEV-25506).
      315380a4
    • Marko Mäkelä's avatar
      MDEV-25919 preparation: Remove trx_t::internal · ed6b2307
      Marko Mäkelä authored
      With commit 1bd681c8 (MDEV-25506)
      it no longer is necessary to run DDL and DML operations in
      separate transactions. Let us remove the flag trx_t::internal.
      Dictionary transactions will be distinguished by trx_t::dict_operation.
      ed6b2307
    • Marko Mäkelä's avatar
      Cleanup: Remove pointer indirection for trx_t::xid · 0a67b15a
      Marko Mäkelä authored
      The trx_t::xid is always allocated, so we might as well allocate it
      directly in the trx_t object to improve the locality of reference.
      0a67b15a
    • Marko Mäkelä's avatar
      MDEV-24671 fixup: Fix an off-by-one error · 83234719
      Marko Mäkelä authored
      In commit e71e6133 we
      accidentally made innodb_lock_wait_timeout=100000000
      a "literal" value, not the smallest special value that
      would mean "infinite" timeout.
      83234719
    • Marko Mäkelä's avatar
      MDEV-25902 Unexpected ER_LOCK_WAIT_TIMEOUT and result · 161e4bfa
      Marko Mäkelä authored
      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)
      InnoDB worked 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
      would move the table (or partition) into a queue, to be dropped after
      the locks and references had been released.
      
      The scenario of commit 3792693f
      is unaffected by this fix, because mariadb-dump (a.k.a. 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
      161e4bfa
    • Marko Mäkelä's avatar
      MDEV-26067 innodb_lock_wait_timeout values above 100,000,000 are useless · 8c5c3a45
      Marko Mäkelä authored
      The practical maximum value of the parameter innodb_lock_wait_timeout
      is 100,000,000. Any value larger than that specifies an infinite timeout.
      
      Therefore, we should make 100,000,000 the maximum value of the parameter.
      8c5c3a45
    • Marko Mäkelä's avatar
      Speed up the test innodb.lock_insert_into_empty · ce1c957a
      Marko Mäkelä authored
      Let us use innodb_lock_wait_timeout=0 for an immediate timeout.
      Also, do not override the timeout in the default connection,
      so that further tests will use the default setting.
      ce1c957a
  3. 30 Jun, 2021 9 commits