1. 23 Aug, 2022 4 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29282 atomic.rename_trigger fails occasionally · 4feb9df1
      Thirunarayanan Balathandayuthapani authored
      This reverts part of commit 212994f7
      (MDEV-28974) and implements a better fix that works in that special case
      while avoiding other failures.
      
      fil_name_process(): Do not rename the tablespace in deferred_spaces;
      it already contains the latest name for the space id.
      
      deferred_spaces::create(): In mariadb-backup --prepare,
      replace absolute data directory file path with short name
      relative to the backup directory and store it as filename while
      deferring tablespace file creation.
      4feb9df1
    • Marko Mäkelä's avatar
      MDEV-29336: Potential deadlock in btr_page_alloc_low() with the AHI · 01f9c812
      Marko Mäkelä authored
      The index root page contains the fields BTR_SEG_TOP and BTR_SEG_LEAF
      which keep track of allocated pages in the index tree. These fields
      are normally protected by an Update latch, so that concurrent read
      access to other parts of the page will be possible.
      
      When the index root page is already exclusively latched in the
      mini-transaction, we must not try to acquire a lower-grade Update latch.
      In fact, when the root page is already X or U latched in the
      mini-transaction, there is no point to acquire another latch.
      Moreover, after a U latch was acquired on top of an X-latch,
      mtr_t::defer_drop_ahi() would trigger an assertion failure or
      lock corruption in block->page.lock.u_x_upgrade() because X locks
      already exist on the block.
      
      This problem may have been introduced in
      commit 03ca6495 (MDEV-24142).
      
      btr_page_alloc_low(), btr_page_free(): Initially buffer-fix the root page.
      If it is already U or X latched, release the buffer-fix. Else, upgrade
      the buffer-fix to a U latch.
      
      mtr_t::u_lock_register(): Upgrade a buffer-fix to U latch.
      
      mtr_t::have_u_or_x_latch(): Check if U or X latches are already
      registered in the mini-transaction.
      01f9c812
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · fbb2b1f5
      Marko Mäkelä authored
      fbb2b1f5
    • Alexander Barkov's avatar
      MDEV-27099 Subquery using the ALL keyword on INET6 columns produces a wrong result · 55c648a7
      Alexander Barkov authored
      This problem was earlier fixed by MDEV-27101.
      Adding INET6 tests only.
      55c648a7
  2. 22 Aug, 2022 10 commits
  3. 19 Aug, 2022 4 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29250 InnoDB: Failing assertion: table->get_ref_count() == 0 · 7624bf86
      Thirunarayanan Balathandayuthapani authored
      Reason:
      ======
       This issue is caused by race condition between fulltext DDL and
      purge thread. DDL sets the signal to stop the purge thread to
      process the new undo log records and wait for the ongoing
      processed FTS table undo log records to finish.
      
      But in dict_acquire_mdl_shared(),InnoDB release all innodb
      table related locks before acquiring the mdl. At the same time,
      DDL assumes that there are no purge threads working on fts table.
      
      There is a possiblity that purge thread can skip processing the
      valid undo log records if it checks purge_sys.must_wait_FTS() twice
      in different places.
      
      Solution:
      ==========
      
      Add the purge_sys.must_wait_FTS() check in dict_acquire_mdl_shared()
      to avoid the purge thread processing undo log records.
      
      dict_open_table_on_id(): return -1 if the purge thread has to
      wait
      
      dict_acquire_mdl_shared(): Added 1 new parameters to indicate that
      purge thread invoking the function, return -1  if the purge
      thread has to wait.
      7624bf86
    • Marko Mäkelä's avatar
      75c416d3
    • Marko Mäkelä's avatar
      c2df3d30
    • Marko Mäkelä's avatar
      MDEV-29043 mariabackup --compress hangs · a1055ab3
      Marko Mäkelä authored
      Even though commit b817afaa passed
      the test mariabackup.compress_qpress, that test turned out to be
      too small to reveal one more problem that had previously been prevented
      by the existence of ctrl_mutex. I did not realize that there can be
      multiple concurrent callers to compress_write(). One of them is the
      log copying thread; further callers are data file copying threads
      (default: --parallel=1).
      
      By default, there is only one compression worker thread
      (--compress-threads=1).
      
      compress_write(): Fix a race condition between threads that would
      use the same worker thread object. Make thd->data_avail contain the
      thread identifier of the submitter, and add thd->avail_cond to
      notify other compress_write() threads that are waiting for a slot.
      a1055ab3
  4. 18 Aug, 2022 1 commit
    • Marko Mäkelä's avatar
      MDEV-29321 Percona XtraDB 5.7 can't be upgrade to MariaDB 10.6 or above · ec379066
      Marko Mäkelä authored
      In MySQL 5.7, rollback segments 1 to 32 are used for temporary tables,
      which is an unnecessary file format change from MySQL 5.6.
      This format change was avoided in MariaDB Server by
      commit 124bae08 (MDEV-12289).
      
      An upgrade from MySQL 5.7 would crash due to dereferencing a null pointer,
      which is a regression due to
      commit 0b47c126 (MDEV-13542).
      
      trx_rseg_t::get(): Return nullptr if no tablespace exists. This is where
      the upgrade would crash.
      
      trx_rseg_mem_restore(): Return DB_TABLESPACE_NOT_FOUND if the
      undo tablespace does not exist. This is likely dead code.
      ec379066
  5. 17 Aug, 2022 1 commit
  6. 16 Aug, 2022 2 commits
  7. 15 Aug, 2022 10 commits
  8. 13 Aug, 2022 1 commit
    • qggcs's avatar
      MDEV-29264: JSON function overflow error based on LONGTEXT field · 82017511
      qggcs authored
      Analysis: The JSON functions(JSON_ARRAY[OBJECT|ARRAY_APPEND|ARRAY_INSERT|INSERT|SET|REPLACE]) result is truncated when the function is called based on LONGTEXT field. The overflow occurs when computing the result length due to the LONGTEXT max length is same as uint32 max length. It lead to wrong result length.
      Fix: Add static_cast<ulonglong> to avoid uint32 overflow and fix the arguments used.
      82017511
  9. 11 Aug, 2022 1 commit
  10. 10 Aug, 2022 6 commits