1. 10 Mar, 2023 1 commit
    • Monty's avatar
      Fixes to mysql_install_db · ceb0e7f9
      Monty authored
      - Change to use 'mariadbd' instead of 'mysqld' in help texts and other
        visible places.
      - Start binary 'mariadbd' instead of 'mysqld'. This will remove a warning
        in 11.0 when running mysql_install_db.
      - Use my_print_defaults --mariadbd instead of --mysqld
      - Use --skip-log-error if the user don't have access to log-error file.
        This it needed to allow mysql_install_db to work silenty for users that
        has not write access to /var/log.
      
      Other things:
      - Updated my_print_defaults to support --mariadbd
      ceb0e7f9
  2. 09 Mar, 2023 2 commits
  3. 08 Mar, 2023 2 commits
  4. 07 Mar, 2023 1 commit
  5. 06 Mar, 2023 6 commits
  6. 03 Mar, 2023 2 commits
    • Marko Mäkelä's avatar
      MDEV-30311 system-wide max transaction id corrupted after changing the undo tablespaces · 077425a6
      Marko Mäkelä authored
      This fixes a regression due to MDEV-19229. InnoDB would fail to maintain
      the maximum transaction ID when it changes and reinitializes the number
      of undo tablespaces. InnoDB should maintain the maximum transaction ID
      in TRX_RSEG_MAX_TRX_ID of system rollback segment header.
      
      srv_undo_tablespaces_reinit(): Preserve the system-wide maximum
      transaction identifier in the TRX_RSEG_MAX_TRX_ID field of
      the first rollback segment. If needed, upgrade the page to the
      MariaDB 10.3 format first. All this must be done in the same
      atomic mini-transaction that will reinitialize the TRX_SYS page.
      
      Before MariaDB Server 10.3, InnoDB persisted the maximum transaction
      identifier only in the TRX_SYS page. MariaDB 10.3 started to treat that
      page as a read-only directory of rollback segments, and the maximum
      transaction identifier will be recovered from TRX_RSEG_MAX_TRX_ID or
      from undo logs. Since a change of innodb_undo_tablespaces is only
      allowed when no undo log records exist, the only place to store the
      persistent maximum transaction identifier is in TRX_RSEG_MAX_TRX_ID
      of one of the rollback segment header pages.
      
      The bug was observed when the database was upgraded directly from MySQL 5.7
      or earlier, or from MariaDB Server 10.2 or earlier, to multiple
      innodb_undo_tablespaces. On a restart of MariaDB after the upgrade,
      the transaction identifier would be reported to be smaller than during
      the upgrade:
      
      2023-03-03 10:43:57 0 [Note] InnoDB: log sequence number 2762352; transaction id 1794
      2023-03-03 10:44:17 0 [Note] InnoDB: log sequence number 2786076; transaction id 770
      077425a6
    • Alexander Barkov's avatar
      A cleanup for MDEV-30695 Refactor case folding data types in Asian collations · 0bf400a1
      Alexander Barkov authored
      Adding "const" qualifiers to casefold_info_st::page
      0bf400a1
  7. 02 Mar, 2023 2 commits
  8. 28 Feb, 2023 7 commits
  9. 27 Feb, 2023 2 commits
    • Monty's avatar
      Added detection of memory overwrite with multi_malloc · 57c526ff
      Monty authored
      This patch also fixes some bugs detected by valgrind after this
      patch:
      
      - Not enough copy_func elements was allocated by Create_tmp_table() which
        causes an memory overwrite in Create_tmp_table::add_fields()
        I added an ASSERT() to be able to detect this also without valgrind.
        The bug was that TMP_TABLE_PARAM::copy_fields was not correctly set
        when calling create_tmp_table().
      - Aria::empty_bits is not allocated if there is no varchar/char/blob
        fields in the table.  Fixed code to take this into account.
        This cannot cause any issues as this is just a memory access
        into other Aria memory and the content of the memory would not be used.
      - Aria::last_key_buff was not allocated big enough. This may have caused
        issues with rtrees and ma_extra(HA_EXTRA_REMEMBER_POS) as they
        would use the same memory area.
      - Aria and MyISAM didn't take extended key parts into account, which
        caused problems when copying rec_per_key from engine to sql level.
      - Mark asan builds with 'asan' in version strihng to detect these in
        not_valgrind_build.inc.
        This is needed to not have main.sp-no-valgrind fail with asan.
      57c526ff
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 3e2ad0e9
      Marko Mäkelä authored
      3e2ad0e9
  10. 26 Feb, 2023 1 commit
    • Monty's avatar
      Fixed (non crtitial) memory segment overrun · 3b9e8dfa
      Monty authored
      This was discovered as part of adding a protected memory area between
      each area allocated by multi_alloc().
      
      The patch that adds the protection will be pushed in 10.5.
      This patch adds fixes that are unique for 10.10
      3b9e8dfa
  11. 24 Feb, 2023 1 commit
    • Marko Mäkelä's avatar
      MDEV-30671 InnoDB undo log truncation fails to wait for purge of history · 0de3be8c
      Marko Mäkelä authored
      It is not safe to invoke trx_purge_free_segment() or execute
      innodb_undo_log_truncate=ON before all undo log records in
      the rollback segment has been processed.
      
      A prominent failure that would occur due to premature freeing of
      undo log pages is that trx_undo_get_undo_rec() would crash when
      trying to copy an undo log record to fetch the previous version
      of a record.
      
      If trx_undo_get_undo_rec() was not invoked in the unlucky time frame,
      then the symptom would be that some committed transaction history is
      never removed. This would be detected by CHECK TABLE...EXTENDED that
      was impleented in commit ab019010.
      Such a garbage collection leak should be possible even when using
      innodb_undo_log_truncate=OFF, just involving trx_purge_free_segment().
      
      trx_rseg_t::needs_purge: Change the type from Boolean to a transaction
      identifier, noting the most recent non-purged transaction, or 0 if
      everything has been purged. On transaction start, we initialize this
      to 1 more than the transaction start ID. On recovery, the field may be
      adjusted to the transaction end ID (TRX_UNDO_TRX_NO) if it is larger.
      
      The field TRX_UNDO_NEEDS_PURGE becomes write-only; only some debug
      assertions that would validate the value. The field reflects the old
      inaccurate Boolean field trx_rseg_t::needs_purge.
      
      trx_undo_mem_create_at_db_start(), trx_undo_lists_init(),
      trx_rseg_mem_restore(): Remove the parameter max_trx_id.
      Instead, store the maximum in trx_rseg_t::needs_purge,
      where trx_rseg_array_init() will find it.
      
      trx_purge_free_segment(): Contiguously hold a lock on
      trx_rseg_t to prevent any concurrent allocation of undo log.
      
      trx_purge_truncate_rseg_history(): Only invoke trx_purge_free_segment()
      if the rollback segment is empty and there are no pending transactions
      associated with it.
      
      trx_purge_truncate_history(): Only proceed with innodb_undo_log_truncate=ON
      if trx_rseg_t::needs_purge indicates that all history has been purged.
      
      Tested by: Matthias Leich
      0de3be8c
  12. 23 Feb, 2023 1 commit
  13. 22 Feb, 2023 2 commits
  14. 21 Feb, 2023 3 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29871 innodb_fts.fulltext_misc unexpectedly reports a result · df9f9ba1
      Thirunarayanan Balathandayuthapani authored
      - match()+0 returns the floating result and converts into integer value
      and it leads to sporadic failure.
      df9f9ba1
    • Alexander Barkov's avatar
      MDEV-30695 Refactor case folding data types in Asian collations · 33f8f92b
      Alexander Barkov authored
      This is a non-functional change and should not change the server behavior.
      
      Casefolding information is now stored in items of a new data type MY_CASEFOLD_CHARACTER:
      
      typedef struct casefold_info_char_t
      {
        uint32 toupper;
        uint32 tolower;
      } MY_CASEFOLD_CHARACTER;
      
      Before this change, casefolding tables for Asian collations were stored in:
      
      typedef struct unicase_info_char_st
      {
        uint32 toupper;
        uint32 tolower;
        uint32 sort;
      } MY_UNICASE_CHARACTER;
      
      The "sort" member was not used in the code handling Asian collations,
      it only wasted space.
      (it's only used by Unicode _general_ci and _general_mysql500_ci collations).
      
      Unicode collations (at least UCA and _bin) should also be refactored later,
      but under terms of a separate task.
      33f8f92b
    • Alexander Barkov's avatar
      MDEV-30692 conf_to_src is not up to date · 7e341cc7
      Alexander Barkov authored
      Fixing conf_to_src.c according to changes made by
       a206658b
      
      Re-generating ctype-extra.c at once, to fix the indentation
      from manually edited to automatic.
      7e341cc7
  15. 20 Feb, 2023 1 commit
    • Vlad Lesin's avatar
      MDEV-27701 Race on trx->lock.wait_lock between lock_rec_move() and lock_sys_t::cancel() · a474e327
      Vlad Lesin authored
      The initial issue was in assertion failure, which checked the equality
      of lock to cancel with trx->lock.wait_lock in lock_sys_t::cancel().
      
      If we analyze lock_sys_t::cancel() code from the perspective of
      trx->lock.wait_lock racing, we won't find the error there, except the
      cases when we need to reload it after the corresponding latches
      acquiring.
      
      So the fix is just to remove the assertion and reload
      trx->lock.wait_lock after acquiring necessary latches.
      
      Reviewed by: Marko Mäkelä <marko.makela@mariadb.com>
      a474e327
  16. 17 Feb, 2023 1 commit
    • Alexander Barkov's avatar
      MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8 · 7f6b648d
      Alexander Barkov authored
      String length growth during upper/lower conversion
      in Unicode collations depends only on the underlying MY_UNICASE_INFO
      used in the collation.
      
      Maintaining a separate member CHARSET_INFO::caseup_multiply and
      CHARSET_INFO::casedn_multiply duplicated this information
      and caused bugs like this (when MY_UNICASE_INFO and case??_multiply
      when out of sync because of incomplete CHARSET_INFO initialization).
      
      Fix:
      
      Changing CHARSET_INFO::caseup_multiply and CHARSET_INFO::casedn_multiply
      from members to virtual functions.
      The virtual functions in Unicode collations calculate case conversion
      growth factors from the MY_UNICASE_INFO. This guarantees that the growth
      factors are always in sync with the MY_UNICASE_INFO.
      7f6b648d
  17. 16 Feb, 2023 5 commits