1. 22 Sep, 2020 7 commits
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · fde3d895
      Marko Mäkelä authored
      fde3d895
    • Marko Mäkelä's avatar
      MDEV-22939: Restore an AUTO_INCREMENT check · 78efa109
      Marko Mäkelä authored
      It turns out that we must check for DISCARD TABLESPACE both
      when the table is being rebuilt and when the AUTO_INCREMENT
      value of the table is being added.
      
      This was caught by the test innodb.alter_missing_tablespace.
      Somehow I failed to run all tests. Sorry!
      78efa109
    • Marko Mäkelä's avatar
      MDEV-22939 Server crashes in row_make_new_pathname() · 3eb81136
      Marko Mäkelä authored
      The statement ALTER TABLE...DISCARD TABLESPACE is problematic,
      because its designed purpose is to break the referential integrity
      of the data dictionary and make a table point to nowhere.
      
      ha_innobase::commit_inplace_alter_table(): Check whether the
      table has been discarded. (This is a bit late to check it, right
      before committing the change.) Previously, we performed this check
      only in a specific branch of the function commit_set_autoinc().
      
      Note: We intentionally allow non-rebuilding ALTER TABLE even if
      the tablespace has been discarded, to remain compatible with MySQL.
      (See the various tests with "wl5522" in the name, such as
      innodb.innodb-wl5522.)
      
      The test case would crash starting with 10.3 only, but it does not hurt
      to minimize the code and test difference between 10.2 and 10.3.
      3eb81136
    • Marko Mäkelä's avatar
      Make DISCARD TABLESPACE more robust · e5e83daf
      Marko Mäkelä authored
      dict_load_table_low(): Copy the 'discarded' flag to file_unreadable.
      This allows to avoid a potentially harmful call to dict_stats_init()
      in ha_innobase::open().
      e5e83daf
    • Marko Mäkelä's avatar
      MDEV-23776: Re-apply the fix and make the test more robust · 2af8f712
      Marko Mäkelä authored
      The test that was added in commit e05650e6
      would break a subsequent run of a test encryption.innodb-bad-key-change
      because some pages in the system tablespace would be encrypted with
      a different key.
      
      The failure was repeatable with the following invocation:
      
      ./mtr --no-reorder \
      encryption.create_or_replace,cbc \
      encryption.innodb-bad-key-change,cbc
      
      Because the crash was unrelated to the code changes that we reverted
      in commit eb38b1f7
      we can safely re-apply those fixes.
      2af8f712
    • Marko Mäkelä's avatar
      MDEV-23705 Assertion 'table->data_dir_path || !space' · 732cd7fd
      Marko Mäkelä authored
      After DISCARD TABLESPACE, the tablespace of a table will no longer
      exist, and dict_get_and_save_data_dir_path() would invoke
      dict_get_first_path() to read an entry from SYS_DATAFILES.
      For some reason, DISCARD TABLESPACE would not to remove the entry
      from there.
      
      dict_get_and_save_data_dir_path(): If the tablespace has been
      discarded, do not bother trying to read the name.
      
      Side note: The tables SYS_TABLESPACES and SYS_DATAFILES are
      redundant and subject to removal in MDEV-22343.
      732cd7fd
    • Marko Mäkelä's avatar
      Revert "MDEV-23776 Test encryption.create_or_replace fails with a warning" · eb38b1f7
      Marko Mäkelä authored
      This reverts commit e33f7b6f.
      The change seems to have introduced intermittent failures of the test
      encryption.innodb-bad-key-change on many platforms.
      
      The failure that we were trying to address was not reproduced on 10.2.
      It could be related to commit a7dd7c89
      (MDEV-23651) or de942c9f (MDEV-15983)
      or other changes that reduced contention on fil_system.mutex in 10.3.
      
      The fix that we are hereby reverting from 10.2 seems to work fine
      on 10.3 and 10.4.
      eb38b1f7
  2. 21 Sep, 2020 11 commits
  3. 18 Sep, 2020 1 commit
  4. 17 Sep, 2020 3 commits
  5. 16 Sep, 2020 1 commit
  6. 14 Sep, 2020 2 commits
  7. 11 Sep, 2020 2 commits
  8. 10 Sep, 2020 2 commits
    • Jan Lindström's avatar
      MDEV-23101 : SIGSEGV in lock_rec_unlock() when Galera is enabled · 224c9504
      Jan Lindström authored
      Remove incorrect BF (brute force) handling from lock_rec_has_to_wait_in_queue
      and move condition to correct callers. Add a function to report
      BF lock waits and assert if incorrect BF-BF lock wait happens.
      
      wsrep_report_bf_lock_wait
      	Add a new function to report BF lock wait.
      
      wsrep_assert_no_bf_bf_wait
      	Add a new function to check do we have a
      	BF-BF wait and if we have report this case
      	and assert as it is a bug.
      
      lock_rec_has_to_wait
      	Use new wsrep_assert_bf_wait to check BF-BF wait.
      
      lock_rec_create_low
      lock_table_create
      	Use new function to report BF lock waits.
      
      lock_rec_insert_by_trx_age
      lock_grant_and_move_on_page
      lock_grant_and_move_on_rec
      	Assert that trx is not Galera as VATS is not compatible
      	with Galera.
      
      lock_rec_add_to_queue
      	If there is conflicting lock in a queue make sure that
      	transaction is BF.
      
      lock_rec_has_to_wait_in_queue
      	Remove incorrect BF handling. If there is conflicting
      	locks in a queue all transactions must wait.
      
      lock_rec_dequeue_from_page
      lock_rec_unlock
      	If there is conflicting lock make sure it is not
      	BF-BF case.
      
      lock_rec_queue_validate
      	Add Galera record locking rules comment and use
      	new function to report BF lock waits.
      
      All attempts to reproduce the original assertion have been
      failed. Therefore, there is no test case on this commit.
      224c9504
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-18867 Long Time to Stop and Start · 75e82f71
      Thirunarayanan Balathandayuthapani authored
      fts_drop_orphaned_tables() takes long time to remove the orphaned
      FTS tables. In order to reduce the time, do the following:
      
      - Traverse fil_system.space_list and construct a set of
      table_id,index_id of all FTS_*.ibd tablespaces.
      - Traverse the sys_indexes table and ignore the entry
      from the above collection if it exist.
      - Existing elements in the collection can be considered as
      orphaned fts tables. construct the table name from
      (table_id,index_id) and invoke fts_drop_tables().
      - Removed DICT_TF2_FTS_AUX_HEX_NAME flag usage from upgrade.
      - is_aux_table() in dict_table_t to check whether the given name
      is fts auxiliary table
      fts_space_set_t is a structure to store set of parent table id
      and index id
      - Remove unused FTS function in fts0fts.cc
      - Remove the fulltext index in row_format_redundant test case.
      Because it deals with the condition that SYS_TABLES does have
      corrupted entry and valid entry exist in SYS_INDEXES.
      75e82f71
  9. 09 Sep, 2020 8 commits
  10. 07 Sep, 2020 3 commits
    • Marko Mäkelä's avatar
      MDEV-22924 Corruption in MVCC read via secondary index · f99cace7
      Marko Mäkelä authored
      An unsafe optimization was introduced by
      commit 2347ffd8 (MDEV-20301)
      which is based on
      mysql/mysql-server@3f3136188f1bd383f77f97823cf6ebd72d5e4d7e or
      mysql/mysql-server@647a3814a91c3d3bffc70ddff5513398e3f37bd4
      in MySQL 8.0.12 or MySQL 8.0.13
      (which in turn is based on the contribution in MySQL Bug #84958).
      
      Row_sel_get_clust_rec_for_mysql::operator(): In addition to checking
      that the pointer to the record matches, also check the latest
      modification of the page (FIL_PAGE_LSN) as well as the page identifier.
      Only if all three match, it is safe to reuse cached_old_vers.
      
      Row_sel_get_clust_rec_for_mysql::check_eq(): Assert that the PRIMARY KEY
      of the cached old version of the record corresponds to the latest version.
      
      We got a test case where CHECK TABLE, UPDATE and purge would be
      hammering on the same table (with only 6 rows) and a pointer that
      was originally pointing to a record pk=2 would match a cached_clust_rec
      that was pointing to a record pk=1. In the diagnosed `rr replay` trace,
      we would wrongly return an old cached version of the pk=1 record,
      instead of retrieving the correct version of the pk=2 record. Because
      of this, CHECK TABLE would fail to count one of the records in a
      secondary index, and report failure.
      
      This bug appears to affect MVCC reads via secondary indexes only.
      The purge of history in secondary indexes uses a different code path,
      and so do checks for implicit record locks.
      f99cace7
    • Kentoku SHIBA's avatar
      MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to... · 9dedba16
      Kentoku SHIBA authored
      MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to unlock mutex conn->mta_conn_mutex that wasn't locked at storage/spider/spd_db_conn.cc, line 671
      9dedba16
    • Kentoku SHIBA's avatar
      MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to... · e976f461
      Kentoku SHIBA authored
      MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to unlock mutex conn->mta_conn_mutex that wasn't locked at storage/spider/spd_db_conn.cc, line 671
      e976f461