1. 11 Jun, 2021 8 commits
    • Sergei Golubchik's avatar
      773ee80f
    • Sergei Golubchik's avatar
      don't show DBUG_ASSERT to plugins · 4d0b3395
      Sergei Golubchik authored
      4d0b3395
    • Sergei Golubchik's avatar
      cleanup: rename Protocol::store() to Protocol::store_datetime() · abc3889f
      Sergei Golubchik authored
      to match the naming pattern of all other Protocol::store_xxx() methods
      abc3889f
    • Sergei Golubchik's avatar
      cleanup: Field_set::empty_set_string · 59b51e6a
      Sergei Golubchik authored
      in particular, it overwrites pre-allocated buffer in val_buffer,
      so following val_buffer->append()'s cause totally unnecessary
      mallocs.
      59b51e6a
    • Sergei Golubchik's avatar
      cleanup: formatting · 3648b333
      Sergei Golubchik authored
      also avoid an oxymoron of using `MYSQL_PLUGIN_IMPORT` under
      `#ifdef MYSQL_SERVER`, and empty_clex_str is so trivial that a plugin
      can define it if needed.
      3648b333
    • Sergei Golubchik's avatar
      change maturity to gamma · 89342a3b
      Sergei Golubchik authored
      89342a3b
    • Marko Mäkelä's avatar
      MDEV-25288 follow-up: Remove mysql-test/unstable-tests · ff3fd022
      Marko Mäkelä authored
      We no longer maintain the unstable-tests collection.
      In commit 3635280c we added
      a smoke test collection, which independent MariaDB package maintainers
      can expect to pass.
      ff3fd022
    • Krunal Bauskar's avatar
      MDEV-25882: Statistics used to track b-tree (non-adaptive) searches · 102ff420
      Krunal Bauskar authored
                  should be updated only when adaptive hashing is turned-on
      
      Currently, btr_cur_n_non_sea is used to track the search that missed
      adaptive hash index. adaptive hash index is turned off by default
      but the said variable is updated always though the value of it makes sense
      only when an adaptive index is enabled. It is meant to check how many
      searches didn't go through an adaptive hash index.
      
      Given a global variable that is updated on each search path it causes
      a contention with a multi-threaded workload.
      
      Patch moves the said variables inside a loop that is now updated
      only when the adaptive hash index is enabled and that in theory should
      also, reduce the update frequency of the said variable as the majority of
      the request should be serviced through the adaptive hash index.
      
      Variables (btr_cur_n_non_sea and btr_cur_n_sea) are also converted to
      use distributed counter to avoid contention.
      
      User visible changes:
      
      This also means that user will now see
      Innodb_adaptive_hash_non_hash_searches (viewed as part of show status)
      only if code is compiled with DWITH_INNODB_AHI=ON (default) and it will
      be updated only if innodb_adaptive_hash_index=1 else it reported as 0.
      102ff420
  2. 09 Jun, 2021 10 commits
    • Marko Mäkelä's avatar
      MDEV-25750: Assertion wait_lock->is_waiting() in lock_wait_rpl_report · 6fbf978e
      Marko Mäkelä authored
      lock_wait_rpl_report(): Tolerate the loss of a lock wait.
      commit c68007d9 (MDEV-24738)
      had introduced this rare failure.
      6fbf978e
    • 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
  3. 08 Jun, 2021 6 commits
  4. 07 Jun, 2021 10 commits
  5. 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
  6. 05 Jun, 2021 1 commit
  7. 04 Jun, 2021 1 commit
    • Vladislav Vaintroub's avatar
      MDEV-21373 DBUG compilation - bad synchronization in ha_heap::external_lock() · b1b4d67b
      Vladislav Vaintroub authored
      ha_heap::external_lock contains some consistency checks for the table,#
      in a debug compilation.
      
      This code suffers from lack of synchronization, in a rare case
      where mysql_lock_tables() fail, and unlock is forced, even if lock was
      not previously taken.
      
      To workaround, require EXTRA_DEBUG compile definition in order to activate
      the consistency checks.The code still might be useful in some cases - but
      the audience are developers looking for errors in single-threaded scenarios,
      rather than multiuser stress-tests.
      b1b4d67b