1. 28 Jun, 2023 5 commits
    • Yuchen Pei's avatar
      MDEV-31400 Simple plugin dependency resolution · ba1be6d0
      Yuchen Pei authored
      We introduce simple plugin dependency. A plugin init function may
      return HA_ERR_RETRY_INIT. If this happens during server startup when
      the server is trying to initialise all plugins, the failed plugins
      will be retried, until no more plugins succeed in initialisation or
      want to be retried.
      
      This will fix spider init bugs which is caused in part by its
      dependency on Aria for initialisation.
      
      The reason we need a new return code, instead of treating every
      failure as a request for retry, is that it may be impossible to clean
      up after a failed plugin initialisation. Take InnoDB for example, it
      has a global variable `buf_page_cleaner_is_active`, which may not
      satisfy an assertion during a second initialisation try, probably
      because InnoDB does not expect the initialisation to be called
      twice. A test that may fail because of this is
      `encryption.corrupted_during_recovery`, see for example[1], which is
      tested at 73835f64b7fc245d38812380685aca03bef72bb5, a previous commit
      where we retry every failed plugin.
      
      [1] https://buildbot.mariadb.org/#/builders/369/builds/10107/steps/7/logs/stdio
      ba1be6d0
    • Yuchen Pei's avatar
      MDEV-31101 Spider: temporarily disable mdev_29904.test · e232de6d
      Yuchen Pei authored
      Will re-enable once MDEV-31101 is no longer blocked by MDEV-22979,
      as the patch for the latter might fix the former.
      e232de6d
    • Yuchen Pei's avatar
      MDEV-30542 Fixing spider/bugfix.self_reference_multi · 3d9ac697
      Yuchen Pei authored
      The server needs to have a unique name
      3d9ac697
    • Yuchen Pei's avatar
      MDEV-29447 MDEV-26285 MDEV-31338 Refactor spider_db_mbase_util::open_item_func · 55e2da90
      Yuchen Pei authored
      spider_db_mbase_util::open_item_func() is a monster function.
      It is difficult to maintain while it is expected that we need to
      modify it when a new SQL function or a new func_type is added.
      
      We split the function into two distinct functions: one handles the
      case of str != NULL and the other handles the case of str == NULL.
      
      This refactoring was done in a conservative way because we do not
      have comprehensive tests on the function.
      
      It also fixes MDEV-29447 and MDEV-31338 where field items that are
      arguments of a func item may be used before created / initialised.
      
      Note this commit is adapted from a patch by Nayuta for MDEV-26285.
      55e2da90
    • Yuchen Pei's avatar
      MDEV-30435 MDEV-30981 Fix ubsan errors w.r.t. memcpy in spd_trx.cc · 483d1ec2
      Yuchen Pei authored
      Extract the indexed string memcopy pattern in spd_trx.cc to a static
      inline function.
      
      Also updated the ubsan check in mdev_26541.test (h/t roel).
      483d1ec2
  2. 27 Jun, 2023 3 commits
  3. 26 Jun, 2023 2 commits
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 49308383
      Marko Mäkelä authored
      49308383
    • Rucha Deodhar's avatar
      MDEV-28915: mysql_upgrade fails due to old_mode="", with "Cannot load from · 14275b47
      Rucha Deodhar authored
      mysql.proc. The table is probably corrupted"
      
      Analysis: When mysql_upgrade runs statements for upgrade, characterset is
      converted to utf8mb4 because server starts with old_mode that interprets
      utf8 to utf8mb4, but mysql.proc table has "utf8mb3" as hardcoded, so
      it crashes with corrupted table.
      
      Fix: Changed Table_check_intact::check() definition to allow both
      utf8mb3 and utf8mb4 by checking prefix and changing the upgrade scripts
      to explicitly use utf8mb3
      14275b47
  4. 25 Jun, 2023 7 commits
  5. 21 Jun, 2023 1 commit
    • Brandon Nesterenko's avatar
      MDEV-29894: Calling a function from a different database in a slave side trigger crashes · c2d44ecb
      Brandon Nesterenko authored
      When opening and locking tables, if triggers will be invoked in a
      separate database, thd->set_db() is invoked, thus freeeing the memory
      and headers which thd->db had previously pointed to. In row based
      replication, the event execution logic initializes thd->db to point
      to the database which the event targets, which is owned by the
      corresponding table share (introduced in d9898c9a for MDEV-7409).
      The problem then, is that during the table opening and locking
      process for a row event, memory which belongs to the table share
      would be freed, which is not valid.
      
      This patch replaces the thd->reset_db() calls to thd->set_db(),
      which copies-by-value, rather than by reference. Then when the
      memory is freed, our copy of memory is freed, rather than memory
      which belongs to a table share.
      
      Notes:
        1. The call to change thd->db now happens on a higher-level, in
      Rows_log_event::do_apply_event() rather than ::do_exec_row(), in the
      call stack. This is because do_exec_row() is called within a loop,
      and each invocation would redundantly set and unset the db to the
      same value.
        2. thd->set_db() is only used if triggers are to be invoked, as
      there is no vulnerability in the non-trigger case, and copying
      memory would be an unnecessary inefficiency.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      c2d44ecb
  6. 20 Jun, 2023 1 commit
  7. 16 Jun, 2023 1 commit
  8. 15 Jun, 2023 1 commit
  9. 14 Jun, 2023 1 commit
    • Sergei Petrunia's avatar
      MDEV-31479: Inconsistency between MRR and SQL layer costs can cause poor query plan · 0e2e70c4
      Sergei Petrunia authored
      (Same as
      TODO-3938: best_access_path shows negative costs for mrr=on)
      
      best_access_path() assumes that quick select cost includes
      (quick->rows/TIME_FOR_COMPARE) as a cost of checking the attached
      part of the WHERE condition.
      
      It calls adjust_quick_cost() to subtract addition from quick's cost.
      
      The problem was that DS-MRR cost formula didn't include this cost.
      For very large tables, adjust_quick_cost() would produce a negative
      cost which would cause assert in debug build or bad query plan choice
      in release builds.
      Approved-by: default avatarMonty <monty@mariadb.org>
      0e2e70c4
  10. 13 Jun, 2023 2 commits
    • Monty's avatar
      Fixed wrong assignment in calculate_block_sizes() for MEM_ROOT · e1a631fe
      Monty authored
      The effect was that that ROOT_FLAG_THREAD_SPECIFIC was cleared and
      the memory allocated by memroot would be contributed the the system,
      not to the thread.
      
      This exposed a bug in how "show explain for ..." allocated data.
      - The thread that did provide the explain allocated data in the
        "show explain" threads mem_root, which is marked as THREAD_SPECIFIC.
      - Fixed by allocating the explain data in a temporary explain_mem_root
        which is not THREAD_SPECIFIC.
      
      Other things:
      - Added extra checks when using update_malloc_size()
      - Do not call update_malloc_size() for memory not registered with
        update_malloc_size(). This avoid some wrong 'memory not freed' reports.
      - Added a checking of 'thd->killed' to ensure that
        main.truncate_notembedded.test still works.
      
      Reported by: Yury Chaikou
      e1a631fe
    • Monty's avatar
      c4cf5e17
  11. 09 Jun, 2023 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31442 page_cleaner thread aborts while releasing the tablespace · 841e905f
      Thirunarayanan Balathandayuthapani authored
      After further I/O on a tablespace has been stopped
      (for example due to DROP TABLE or an operation that
      rebuilds a table), page cleaner thread tries to
      flush the pending writes for the tablespace and
      releases the tablespace reference even though it was not
      acquired.
      
      fil_space_t::flush(): Don't release the tablespace when it is
      being stopped and closed
      
      Thanks to Marko Mäkelä for suggesting this patch.
      841e905f
    • Tuukka Pasanen's avatar
      MDEV-31423: Make sure that datadir is available with SySV-init script · 8171f9da
      Tuukka Pasanen authored
      Commit fixes Debian SySV-init script fail:
        /etc/init.d/mariadb: line 90: [: : integer expression expected
      which happens if datadir is not changed in configuration which
      makes it invisible when printing MariaDB config defaults.
      
      Commit makes sure that there is some value if nothing else if in hand
      use default /usr/lib/mysql or fail with correct error message if
      directory is not present
      8171f9da
  12. 08 Jun, 2023 10 commits
  13. 07 Jun, 2023 4 commits