1. 01 Nov, 2022 1 commit
  2. 31 Oct, 2022 2 commits
  3. 29 Oct, 2022 4 commits
  4. 28 Oct, 2022 1 commit
    • Vlad Lesin's avatar
      MDEV-28709 unexpected X lock on Supremum in READ COMMITTED · 2f421688
      Vlad Lesin authored
      Post-push fix. The flag of transaction which indicates that it's necessary
      to forbid gap lock inheritance after XA PREPARE could be inverted if
      lock_release_on_prepare_try() is invoked several times. The fix is to
      toggle it on lock_release_on_prepare() exit.
      2f421688
  5. 26 Oct, 2022 5 commits
    • Marko Mäkelä's avatar
      Disable perfschema.mdl_func on Windows · 79dc3989
      Marko Mäkelä authored
      The test fails extremely often on a Windows builder, and nobody seems
      to be interested in fixing it.
      79dc3989
    • Marko Mäkelä's avatar
      MDEV-29886 Assertion !index->table->is_temporary() failed in CHECK TABLE · cf96db4f
      Marko Mäkelä authored
      ha_innobase::check(): Do not enable READ UNCOMMITTED isolation level
      for temporary tables, because it would report index count mismatch
      for secondary indexes.
      
      row_check_index(): Ignore EXTENDED for temporary tables, because
      the tables are private to the current connection and there will be
      no purge of committed transaction history.
      cf96db4f
    • Marko Mäkelä's avatar
      MDEV-29883 Deadlock between InnoDB statistics update and BLOB insert · 8b6a308e
      Marko Mäkelä authored
      The test innodb.innodb-wl5522-debug would occasionally hang
      (especially when run with ./mtr --rr) due to a deadlock between
      btr_store_big_rec_extern_fields() and dict_stats_analyze_index().
      The two threads would acquire the clustered index root page latch and
      the tablespace latch in the opposite order. The deadlock was possible
      because dict_stats_analyze_index() was holding the index latch in
      shared mode and an index root page latch, while waiting for the
      tablespace latch. If a stronger dict_index_t::lock had been held
      by dict_stats_analyze_index(), any operations that free or allocate
      index pages would have been blocked.
      
      In each caller of fseg_n_reserved_pages() except ibuf_init_at_db_start()
      which is a special case for ibuf.index at database startup, we must hold
      an index latch that prevents concurrent allocation or freeing of index
      pages.
      
      Any operation that allocates or free pages that belong to an index tree
      must first acquire an index latch in Update or Exclusive mode, and while
      holding that, acquire an index root page latch in Update or Exclusive
      mode.
      
      dict_index_t::clear(): Also acquire an index latch. Otherwise,
      the test innodb.insert_into_empty could hang.
      
      btr_get_size_and_reserved(): Assert that a strong enough index latch
      is being held. Only acquire a shared fil_space_t::latch; we are only
      reading, not modifying any data.
      
      dict_stats_update_transient_for_index(),
      dict_stats_analyze_index(): Acquire a strong enough index latch. Only
      acquire a shared fil_space_t::latch.
      
      These operations had followed the same order of acquiring latches in
      every InnoDB version since the very beginning
      (commit c533308a).
      The calls for acquiring tablespace latch had previously been moved in
      commit 87839258 and
      commit 1e9c922f.
      
      The hang was introduced in
      commit 2e814d47 which imported
      mysql/mysql-server@ac74632293bea967b352d1b472abedeeaa921b98
      which failed to strengthen the locking requirements of the function
      btr_get_size().
      8b6a308e
    • Vlad Lesin's avatar
      MDEV-29869 mtr failure: innodb.deadlock_wait_thr_race · 78a04a4c
      Vlad Lesin authored
      1. The merge aeccbbd9 has overwritten
      lock0lock.cc, and the changes of MDEV-29622 and MDEV-29635 were
      partially lost, this commit restores the changes.
      
      2. innodb.deadlock_wait_thr_race test:
      
      The following hang was found during testing.
      
      There is deadlock_report_before_lock_releasing sync point in
      Deadlock::report(), which is waiting for sel_cont signal under lock_sys_t
      lock. The signal must be issued after "UPDATE t SET b = 100" rollback,
      and that rollback is executing undo record, which is blocked
      on dict_sys latch request. dict_sys is locked by the thread of statistics
      update(dict_stats_save()), and during that update lock_sys lock is
      requested, and can't be acquired as Deadlock::report() holds it. We have
      to disable statistics update to make the test stable.
      
      But even if statistics update is disabled, and transaction with consistent
      snapshot is started at the very beginning of the test to prevent purging,
      the purge can still be invoked for system tables, and it tries to open
      system table by id, what causes dict_sys.freeze() call and dict_sys
      latching. What, in combination with lock_sys::xx_lock() causes the same
      deadlock as described above. We need to disable purging globally for the
      test as well.
      
      All the above is applicable to innodb.deadlock_wait_lock_race test also.
      78a04a4c
    • Oleg Smirnov's avatar
      MDEV-29662 Replace same values in 'IN' list with an equality · 5027cb2b
      Oleg Smirnov authored
      If all elements in the list of 'IN' or 'NOT IN' clause are equal
      and there are no NULLs then clause
      -  "a IN (e1,..,en)" can be converted to "a = e1"
      -  "a NOT IN (e1,..,en)" can be converted to "a <> e1".
      This means an object of Item_func_in can be replaced with an object
      of Item_func_eq for IN (e1,..,en) clause and Item_func_ne for
      NOT IN (e1,...,en). Such a replacement allows the optimizer to choose
      a better execution plan
      5027cb2b
  6. 25 Oct, 2022 12 commits
  7. 24 Oct, 2022 11 commits
  8. 22 Oct, 2022 4 commits
    • Sergei Golubchik's avatar
      MDEV-29851 Cached role privileges are not invalidated when needed · 68fb05c3
      Sergei Golubchik authored
      GRANT ROLE can update db-level privileges -> must invalidate acl_cache
      68fb05c3
    • Sergei Golubchik's avatar
      cleanup: rename test file · 7a2f9956
      Sergei Golubchik authored
      7a2f9956
    • Sergei Golubchik's avatar
      remove two acl_cache->clear() · 741c14cb
      Sergei Golubchik authored
      * to "clear hostname cache" one needs to use hostname_cache->clear()
      * no need to clear acl_cache for SET DEFAULT ROLE
      741c14cb
    • Alexander Barkov's avatar
      MDEV-29481 mariadb-upgrade prints confusing statement · 2a57396e
      Alexander Barkov authored
      This is a new version of the patch instead of the reverted:
      
        MDEV-28727 ALTER TABLE ALGORITHM=NOCOPY does not work after upgrade
      
      Ignore the difference in key packing flags HA_BINARY_PACK_KEY and HA_PACK_KEY
      during ALTER to allow ALGORITHM=INSTANT and ALGORITHM=NOCOPY in more cases.
      
      If for some reasons (e.g. due to a bug fix such as MDEV-20704) these
      cumulative (over all segments) flags in KEY::flags are different for
      the old and new table inside compare_keys_but_name(), the difference
      in HA_BINARY_PACK_KEY and HA_PACK_KEY in KEY::flags is not really important:
      
      MyISAM and Aria can handle such cases well: per-segment flags are stored in
      MYI and MAI files anyway and they are read during ha_myisam::open()
      ha_maria::open() time. So indexes get opened with correct per-segment
      flags that were calculated during the table CREATE time, no matter
      what the old (CREATE time) and new (ALTER TIME) per-index compression
      flags are, and no matter if they are equal or not.
      
      All other engine ignore key compression flags, so this change
      is safe for other engines as well.
      2a57396e