1. 19 May, 2020 8 commits
    • Marko Mäkelä's avatar
      MDEV-22456: Fix cmake -DWITH_INNODB_AHI=OFF · a8f044e1
      Marko Mäkelä authored
      dict_index_remove_from_cache_low(): Add a missing #ifdef around
      dict_index_t::freed().
      a8f044e1
    • Marko Mäkelä's avatar
      MDEV-19114 gcol.innodb_virtual_debug: Assertion n_fields>0 failed · cb437417
      Marko Mäkelä authored
      This is a regression due to MDEV-16376
      commit 8dc70c86.
      To make dict_index_t::detach_columns() idempotent,
      we cleared dict_index_t::n_fields. But, this could
      cause trouble with purge after a secondary index
      creation failed (not even involving virtual columns).
      
      A better way is to clear the dict_field_t::col pointers
      that point to virtual columns that are being freed
      due to aborting index creation on an index that depends
      on a virtual column.
      
      Note: the v_cols[] of an existing dict_table_t object will
      never be modified. If any virtual columns are added or removed,
      ha_innobase::commit_inplace_alter_table() would invoke
      dict_table_remove_from_cache() and reload the table to dict_sys.
      Index creation is a special case where the dict_index_t points
      to virtual columns that do not yet exist in dict_table_t.
      cb437417
    • Monty's avatar
      Don't run main.sp2 in emebedded server · f9144a42
      Monty authored
      f9144a42
    • Alexander Barkov's avatar
      MDEV-22591 Debug build crashes on EXECUTE IMMEDIATE '... WHERE ?' USING IGNORE · 996b9a9d
      Alexander Barkov authored
      Removing a wrong DBUG_ASSERT:
      When Item_param gets "unfixed" in cleanup(), its "fixed" gets assigned
      to false, while item_item keeps the value. So the assert was wrong.
      
      Perhaps, instead of removing the assert, it was possible to reset
      item_type to NO_VALUE in cleanup. But this is not very important:
      it's implemented in 10.4 in a better way:
      Item_param::is_fixed() always returns true and it does not need to be "unfixed".
      996b9a9d
    • Vlad Lesin's avatar
      MDEV-22554: "mariabackup --prepare" exits with code 0 even though innodb · 0f9bfcc3
      Vlad Lesin authored
      error is logged
      
      The fix is to set flag in ib::error::~error() and check it in
      mariabackup.
      
      ib::error::error() is replaced with ib::warn::warn() in
      AIO::linux_create_io_ctx() because of two reasons:
      
      1) if we leave it as is, then mariabackup MTR tests will fail with --mem
      option, because Linux AIO can not be used on tmpfs,
      
      2) when Linux AIO can not be initialized, InnoDB falls back to simulated
      AIO, so such sutiation is not fatal error, it should be treated as warning.
      0f9bfcc3
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · a8406056
      Marko Mäkelä authored
      a8406056
    • Marko Mäkelä's avatar
      MDEV-22618 Assertion !dict_index_is_online_ddl ... in lock_table_locks_lookup · c93f8aca
      Marko Mäkelä authored
      lock_table_locks_lookup(): Relax the assertion.
      Locks must not exist while online secondary index creation is
      in progress. However, if CREATE UNIQUE INDEX has not been committed
      yet, but the index creation has been completed, concurrent DML
      transactions may acquire record locks on the index. Furthermore,
      such concurrent DML may cause duplicate key violation, causing
      the DDL operation to be rolled back. After that, the online_status
      may be ONLINE_INDEX_ABORTED or ONLINE_INDEX_ABORTED_DROPPED.
      
      So, the debug assertion may only forbid the state ONLINE_INDEX_CREATION.
      c93f8aca
    • Monty's avatar
      Fixed assert in Aria on SHOW PROCEDURE STATUS · 141cf43e
      Monty authored
      MDEV-18457 Assertion `(bitmap->map +
                 (bitmap->full_head_size/6*6)) <= full_head_end failed
      
      The problem was that full_head_size was not calculated correctly
      in the case when insert_order was inforced, which is the case
      for SHOW commands.
      141cf43e
  2. 18 May, 2020 5 commits
  3. 17 May, 2020 3 commits
  4. 16 May, 2020 1 commit
  5. 15 May, 2020 9 commits
    • Marko Mäkelä's avatar
      MDEV-13626: Make test more robust · 3f12a596
      Marko Mäkelä authored
      In commit b1742a5c we forgot
      FLUSH TABLES, potentially causing errors for MyISAM system tables.
      3f12a596
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · fc0960aa
      Marko Mäkelä authored
      fc0960aa
    • Marko Mäkelä's avatar
      MDEV-22544 Inconsistent and Incorrect rw-lock stats · c8dd4117
      Marko Mäkelä authored
      The rw_lock_stats were incorrectly updated.
      While global statistics have limited usefulness, we cannot
      remove them from a GA version. This contribution is slightly
      improving performance in write workloads.
      c8dd4117
    • Alexander Barkov's avatar
      MDEV-22579 No error when inserting DEFAULT(non_virtual_column) into a virtual column · 3df29727
      Alexander Barkov authored
      The code erroneously allowed both:
      INSERT INTO t1 (vcol) VALUES (DEFAULT);
      INSERT INTO t1 (vcol) VALUES (DEFAULT(non_virtual_column));
      
      The former is OK, but the latter is not.
      Adding a new virtual method in Item:
      
      virtual bool vcol_assignment_allowed_value() const { return false; }
      
      Item_null, Item_param and Item_default_value override it.
      
      Item_default_value overrides it in the way to:
      - allow DEFAULT
      - disallow DEFAULT(col)
      3df29727
    • Marko Mäkelä's avatar
      MDEV-22456 Dropping the adaptive hash index may cause DDL to lock up InnoDB · ad6171b9
      Marko Mäkelä authored
      If the InnoDB buffer pool contains many pages for a table or index
      that is being dropped or rebuilt, and if many of such pages are
      pointed to by the adaptive hash index, dropping the adaptive hash index
      may consume a lot of time.
      
      The time-consuming operation of dropping the adaptive hash index entries
      is being executed while the InnoDB data dictionary cache dict_sys is
      exclusively locked.
      
      It is not actually necessary to drop all adaptive hash index entries
      at the time a table or index is being dropped or rebuilt. We can let
      the LRU replacement policy of the buffer pool take care of this gradually.
      For this to work, we must detach the dict_table_t and dict_index_t
      objects from the main dict_sys cache, and once the last
      adaptive hash index entry for the detached table is removed
      (when the garbage page is evicted from the buffer pool) we can free
      the dict_table_t and dict_index_t object.
      
      Related to this, in MDEV-16283, we made ALTER TABLE...DISCARD TABLESPACE
      skip both the buffer pool eviction and the drop of the adaptive hash index.
      We shifted the burden to ALTER TABLE...IMPORT TABLESPACE or DROP TABLE.
      We can remove the eviction from DROP TABLE. We must retain the eviction
      in the ALTER TABLE...IMPORT TABLESPACE code path, so that in case the
      discarded table is being re-imported with the same tablespace identifier,
      the fresh data from the imported tablespace will replace any stale pages
      in the buffer pool.
      
      rpl.rpl_failed_drop_tbl_binlog: Remove the test. DROP TABLE can
      no longer be interrupted inside InnoDB.
      
      fseg_free_page(), fseg_free_step(), fseg_free_step_not_header(),
      fseg_free_page_low(), fseg_free_extent(): Remove the parameter
      that specifies whether the adaptive hash index should be dropped.
      
      btr_search_lazy_free(): Lazily free an index when the last
      reference to it is dropped from the adaptive hash index.
      
      buf_pool_clear_hash_index(): Declare static, and move to the
      same compilation unit with the bulk of the adaptive hash index
      code.
      
      dict_index_t::clone(), dict_index_t::clone_if_needed():
      Clone an index that is being rebuilt while adaptive hash index
      entries exist. The original index will be inserted into
      dict_table_t::freed_indexes and dict_index_t::set_freed()
      will be called.
      
      dict_index_t::set_freed(), dict_index_t::freed(): Note that
      or check whether the index has been freed. We will use the
      impossible page number 1 to denote this condition.
      
      dict_index_t::n_ahi_pages(): Replaces btr_search_info_get_ref_count().
      
      dict_index_t::detach_columns(): Move the assignment n_fields=0
      to ha_innobase_inplace_ctx::clear_added_indexes().
      We must have access to the columns when freeing the
      adaptive hash index. Note: dict_table_t::v_cols[] will remain
      valid. If virtual columns are dropped or added, the table
      definition will be reloaded in ha_innobase::commit_inplace_alter_table().
      
      buf_page_mtr_lock(): Drop a stale adaptive hash index if needed.
      
      We will also reduce the number of btr_get_search_latch() calls
      and enclose some more code inside #ifdef BTR_CUR_HASH_ADAPT
      in order to benefit cmake -DWITH_INNODB_AHI=OFF.
      ad6171b9
    • Marko Mäkelä's avatar
      Amend af784385: Avoid vtable overhead · ff66d65a
      Marko Mäkelä authored
      When neither MSAN nor Valgrind are enabled, declare
      Field::mark_unused_memory_as_defined() as an empty inline function,
      instead of declaring it as a virtual function.
      ff66d65a
    • Eugene Kosov's avatar
      span cleanup · 1cac6d48
      Eugene Kosov authored
      1cac6d48
    • Monty's avatar
      Fix for using uninitialized memory · af784385
      Monty authored
      MDEV-22073 MSAN use-of-uninitialized-value in
      collect_statistics_for_table()
      
      Other things:
      innodb.analyze_table was changed to mainly test statistic
      collection. Was discussed with Marko.
      af784385
    • Monty's avatar
      Fixed bugs found by valgrind · 277aa85c
      Monty authored
      Other things:
      - Removed innodb_encryption_tables.test from valgrind as it
        takes a REALLY long time
      277aa85c
  6. 14 May, 2020 13 commits
  7. 13 May, 2020 1 commit