1. 09 Jun, 2021 9 commits
    • Marko Mäkelä's avatar
      MDEV-25506 (3 of 3): Do not delete .ibd files before commit · 1bd681c8
      Marko Mäkelä authored
      This is a complete rewrite of DROP TABLE, also as part of other DDL,
      such as ALTER TABLE, CREATE TABLE...SELECT, TRUNCATE TABLE.
      
      The background DROP TABLE queue hack is removed.
      If a transaction needs to drop and create a table by the same name
      (like TRUNCATE TABLE does), it must first rename the table to an
      internal #sql-ib name. No committed version of the data dictionary
      will include any #sql-ib tables, because whenever a transaction
      renames a table to a #sql-ib name, it will also drop that table.
      Either the rename will be rolled back, or the drop will be committed.
      
      Data files will be unlinked after the transaction has been committed
      and a FILE_RENAME record has been durably written. The file will
      actually be deleted when the detached file handle returned by
      fil_delete_tablespace() will be closed, after the latches have been
      released. It is possible that a purge of the delete of the SYS_INDEXES
      record for the clustered index will execute fil_delete_tablespace()
      concurrently with the DDL transaction. In that case, the thread that
      arrives later will wait for the other thread to finish.
      
      HTON_TRUNCATE_REQUIRES_EXCLUSIVE_USE: A new handler flag.
      ha_innobase::truncate() now requires that all other references to
      the table be released in advance. This was implemented by Monty.
      
      ha_innobase::delete_table(): If CREATE TABLE..SELECT is detected,
      we will "hijack" the current transaction, drop the table in
      the current transaction and commit the current transaction.
      This essentially fixes MDEV-21602. There is a FIXME comment about
      making the check less failure-prone.
      
      ha_innobase::truncate(), ha_innobase::delete_table():
      Implement a fast path for temporary tables. We will no longer allow
      temporary tables to use the adaptive hash index.
      
      dict_table_t::mdl_name: The original table name for the purpose of
      acquiring MDL in purge, to prevent a race condition between a
      DDL transaction that is dropping a table, and purge processing
      undo log records of DML that had executed before the DDL operation.
      For #sql-backup- tables during ALTER TABLE...ALGORITHM=COPY, the
      dict_table_t::mdl_name will differ from dict_table_t::name.
      
      dict_table_t::parse_name(): Use mdl_name instead of name.
      
      dict_table_rename_in_cache(): Update mdl_name.
      
      For the internal FTS_ tables of FULLTEXT INDEX, purge would
      acquire MDL on the FTS_ table name, but not on the main table,
      and therefore it would be able to run concurrently with a
      DDL transaction that is dropping the table. Previously, the
      DROP TABLE queue hack prevented a race between purge and DDL.
      For now, we introduce purge_sys.stop_FTS() to prevent purge from
      opening any table, while a DDL transaction that may drop FTS_
      tables is in progress. The function fts_lock_table(), which will
      be invoked before the dictionary is locked, will wait for
      purge to release any table handles.
      
      trx_t::drop_table_statistics(): Drop statistics for the table.
      This replaces dict_stats_drop_index(). We will drop or rename
      persistent statistics atomically as part of DDL transactions.
      On lock conflict for dropping statistics, we will fail instantly
      with DB_LOCK_WAIT_TIMEOUT, because we will be holding the
      exclusive data dictionary latch.
      
      trx_t::commit_cleanup(): Separated from trx_t::commit_in_memory().
      Relax an assertion around fts_commit() and allow DB_LOCK_WAIT_TIMEOUT
      in addition to DB_DUPLICATE_KEY. The call to fts_commit() is
      entirely misplaced here and may obviously break the consistency
      of transactions that affect FULLTEXT INDEX. It needs to be fixed
      separately.
      
      dict_table_t::n_foreign_key_checks_running: Remove (MDEV-21175).
      The counter was a work-around for missing meta-data locking (MDL)
      on the SQL layer, and not really needed in MariaDB.
      
      ER_TABLE_IN_FK_CHECK: Replaced with ER_UNUSED_28.
      
      HA_ERR_TABLE_IN_FK_CHECK: Remove.
      
      row_ins_check_foreign_constraints(): Do not acquire
      dict_sys.latch either. The SQL-layer MDL will protect us.
      
      This was reviewed by Thirunarayanan Balathandayuthapani
      and tested by Matthias Leich.
      1bd681c8
    • Marko Mäkelä's avatar
      MDEV-25180 fixup: Assertion table->def_trx_id == trx->id... failed in row_merge_drop_indexes() · 3f78fbc5
      Marko Mäkelä authored
      We must invoke online_retry_drop_indexes() before
      ha_innobase_inplace_ctx::trx->id is assigned.
      3f78fbc5
    • Marko Mäkelä's avatar
      MDEV-25852: Orphan #sql*.ibd files are left behind · 6a4e5bf1
      Marko Mäkelä authored
      The implementation of MDEV-24626 was not entirely correct.
      We could occasionally fail to remove some *.ibd files on recovery.
      
      deferred_spaces: Keep track of FILE_DELETE records.
      
      deferred_spaces.add(): Do not allow duplicate file names.
      
      recv_rename_files(): Preserve some of renamed_spaces entries for
      deferred_spaces.reinit_all().
      
      Thanks to Thirunarayanan Balathandayuthapani for noticing that
      deferred_spaces.add() must filter out duplicate file names,
      as well as some debugging help.
      6a4e5bf1
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 65f1a427
      Marko Mäkelä authored
      65f1a427
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · b25d2a45
      Marko Mäkelä authored
      b25d2a45
    • Marko Mäkelä's avatar
      Merge 10.3 to 10.4 · c7ee039d
      Marko Mäkelä authored
      c7ee039d
    • Marko Mäkelä's avatar
      MDEV-25886 CHECK TABLE crash with DB_MISSING_HISTORY if innodb_read_only · 75a65d32
      Marko Mäkelä authored
      Occasionally, the test innodb.alter_copy would fail in MariaDB 10.6.1,
      reporting DB_MISSING_HISTORY during CHECK TABLE. It started to occur during
      the development of MDEV-25180, which introduced purge_sys.stop_SYS().
      If we delay purge more during DDL operations, then the test would
      almost always fail. The reason is that during startup we will restore
      a purge view, and CHECK TABLE would still use REPEATABLE READ
      even though innodb_read_only is set and other isolation levels
      than READ UNCOMMITTED are not guaranteed to work.
      
      ha_innobase::check(): Use READ UNCOMMITTED isolation level if
      innodb_read_only is set or innodb_force_recovery exceeds 3.
      
      dict_set_corrupted(): Do not update the persistent data dictionary
      if innodb_force_recovery exceeds 3.
      75a65d32
    • Anel Husakovic's avatar
      MDEV-25857: MTR should report at least last test that was executed in case of... · 29e8c154
      Anel Husakovic authored
      MDEV-25857: MTR should report at least last test that was executed in case of shutdown and not-completed
      
      - Report the test name in case not all tests are completed and server
      closed the connection
      - Rerport the failure of the last test with the server log in case of
      server shutdown.
      - Ignore stackdump files (obtained on Windows).
      
      Reviewed by: wlad@mariadb.com
      29e8c154
    • mkaruza's avatar
      MDEV-25698 SIGSEGV in wsrep_should_replicate_ddl · 8b02e02b
      mkaruza authored
      If temporary internal table is in use `hton` will not be set. Skip check
      if DDL should be replicated in this case.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      8b02e02b
  2. 08 Jun, 2021 6 commits
  3. 07 Jun, 2021 10 commits
  4. 06 Jun, 2021 4 commits
    • Vladislav Vaintroub's avatar
      MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 · 3d6eb7af
      Vladislav Vaintroub authored
      This fixed the MySQL bug# 20338 about misuse of double underscore
      prefix __WIN__, which was old MySQL's idea of identifying Windows
      Replace it by _WIN32 standard symbol for targeting Windows OS
      (both 32 and 64 bit)
      
      Not that connect storage engine is not fixed in this patch (must be
      fixed in "upstream" branch)
      3d6eb7af
    • Otto Kekäläinen's avatar
      Revert "CONNECT: move jar files to /usr/share and include them in DEBs" · 3c922d6d
      Otto Kekäläinen authored
      This partially reverts commit d7321893.
      
      The *.jar files are not being built and all Debian builds are failing
      as dh_install stops on missing files. To build them we would need to also
      add new Java build dependencies.
      
      In a stable release (10.2->10.5) we shouldn't add new files and certainly
      not any new build dependencies, so reverting commit.
      
      Also, the files are located in a different path, and already included
      in the mariadb-test-data package:
      
        /usr/share/mysql/mysql-test/plugin/connect/connect/std_data/JavaWrappers.jar
        /usr/share/mysql/mysql-test/plugin/connect/connect/std_data/JdbcMariaDB.jar
        /usr/share/mysql/mysql-test/plugin/connect/connect/std_data/Mongo2.jar
        /usr/share/mysql/mysql-test/plugin/connect/connect/std_data/Mongo3.jar
      
      This change needs to be redesigned and applies only on 10.6 or newer.
      3c922d6d
    • Vladislav Vaintroub's avatar
      MDEV-23815 Windows : mysql_upgrade_wizard fails, if service name has spaces · 9f9a925c
      Vladislav Vaintroub authored
      The fix is to quote service name parameter, when it is passed to
      mysql_upgrade_service subprocess.
      9f9a925c
    • Otto Kekäläinen's avatar
      Deb: Misc cleanup and autobake-deb.sh and Salsa-CI fixes · d4a6e3a6
      Otto Kekäläinen authored
      * Clean up autobake-deb.sh
      
        - No need to define any TokuDB rules, there is no such package
        - No need to define RocksDB arch, it already has "Architecture:" line
        - No need to dh-systemd backwards compat stanza, neither Debian Jessie
          nor Ubuntu Xenial has any new MariaDB 10.5 releases anymore
        - Minor spelling fixes
      
      * Ensure dch runs non-interactively so builds pass with new dch version
      
        A recent version of dch (available in Ubuntu Hirsute and Debian Bullseye)
        had a change in behaviour that it started prompting if the DEBEMAIL or
        EMAIL variable as unset, asking for confirmation. We can't have anything
        interactive in our build scripts, so prevent this prompt by giving
        --controlmaint to the command, so it always uses the name and email from
        the debian/control file and does not prompt anything.
      
        The command-line argument has been around for a long time, so it is safe
        to use on all Debian/Ubuntu builds we have.
      
        See https://manpages.debian.org/jessie/devscripts/dch.1.en.html
      
        Since MariaDB 10.5 is the oldest release we still release for Ubuntu Hisute
        and Debian Bullseye, merge this on 10.5 and from there merge up to latest.
        No need to consider 10.2, 10.3 and 10.4 as those will not be released for
        Ubuntu Bullseye or Ubuntu Hirsute.
      
      * Minor Salsa-CI cleanup
      
        - Fix spelling (synced from downstream Debian)
      
      * Many minor spelling fixes (synced from downstream Debian)
      d4a6e3a6
  5. 05 Jun, 2021 1 commit
  6. 04 Jun, 2021 7 commits
  7. 03 Jun, 2021 2 commits
    • Igor Babaev's avatar
      MDEV-25714 Join using derived with aggregation returns incorrect results · 0b797130
      Igor Babaev authored
      If a join query uses a derived table (view / CTE) with GROUP BY clause then
      the execution plan for such join may employ split optimization. When this
      optimization is employed the derived table is not materialized. Rather only
      some partitions of the derived table are subject to grouping. Split
      optimization can be applied only if:
      - there are some indexes over the tables used in the join specifying the
        derived table whose prefixes partially cover the field items used in the
        GROUP BY list (such indexes are called splitting indexes)
      - the WHERE condition of the join query contains conjunctive equalities
        between columns of the derived table that comprise major parts of
        splitting indexes and columns of the other join tables.
      
      When the optimizer evaluates extending of a partial join by the rows of the
      derived table it always considers a possibility of using split optimization.
      Different splitting indexes can be used depending on the extended partial
      join. At some rare conditions, for example, when there is a non-splitting
      covering index for a table joined in the join specifying the derived table
      usage of a splitting index to produce rows needed for grouping may be still
      less beneficial than usage of such covering index without any splitting
      technique. The function JOIN_TAB::choose_best_splitting() must take this
      into account.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      0b797130
    • Igor Babaev's avatar
      MDEV-25714 Join using derived with aggregation returns incorrect results · 663bc849
      Igor Babaev authored
      If a join query uses a derived table (view / CTE) with GROUP BY clause then
      the execution plan for such join may employ split optimization. When this
      optimization is employed the derived table is not materialized. Rather only
      some partitions of the derived table are subject to grouping. Split
      optimization can be applied only if:
      - there are some indexes over the tables used in the join specifying the
        derived table whose prefixes partially cover the field items used in the
        GROUP BY list (such indexes are called splitting indexes)
      - the WHERE condition of the join query contains conjunctive equalities
        between columns of the derived table that comprise major parts of
        splitting indexes and columns of the other join tables.
      
      When the optimizer evaluates extending of a partial join by the rows of the
      derived table it always considers a possibility of using split optimization.
      Different splitting indexes can be used depending on the extended partial
      join. At some rare conditions, for example, when there is a non-splitting
      covering index for a table joined in the join specifying the derived table
      usage of a splitting index to produce rows needed for grouping may be still
      less beneficial than usage of such covering index without any splitting
      technique. The function JOIN_TAB::choose_best_splitting() must take this
      into account.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      663bc849
  8. 02 Jun, 2021 1 commit