1. 14 Aug, 2024 4 commits
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.11 · 62bfcfd8
      Marko Mäkelä authored
      62bfcfd8
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 757c3681
      Marko Mäkelä authored
      757c3681
    • Marko Mäkelä's avatar
      MDEV-34755 g++- -Wstringop-truncation due to safe_strcpy() · ecd910ae
      Marko Mäkelä authored
      The #pragma that was removed in
      commit e255837e (MDEV-34266)
      turns out to be necessary for silencing all cases of
      -Wstringop-truncation.
      ecd910ae
    • Marko Mäkelä's avatar
      MDEV-34678 pthread_mutex_init() without pthread_mutex_destroy() · 4f8803c0
      Marko Mäkelä authored
      When SUX_LOCK_GENERIC is defined, the srw_mutex, srw_lock, sux_lock are
      implemented based on pthread_mutex_t and pthread_cond_t.  This is the
      only option for systems that lack a futex-like system call.
      
      In the SUX_LOCK_GENERIC mode, if pthread_mutex_init() is allocating
      some resources that need to be freed by pthread_mutex_destroy(),
      a memory leak could occur when we are repeatedly invoking
      pthread_mutex_init() without a pthread_mutex_destroy() in between.
      
      pthread_mutex_wrapper::initialized: A debug field to track whether
      pthread_mutex_init() has been invoked.  This also helps find bugs
      like the one that was fixed by
      commit 1c8af2ae (MDEV-34422);
      one simply needs to add -DSUX_LOCK_GENERIC to the CMAKE_CXX_FLAGS
      to catch that particular bug on the initial server bootstrap.
      
      buf_block_init(), buf_page_init_for_read(): Invoke block_lock::init()
      because buf_page_t::init() will no longer do that.
      
      buf_page_t::init(): Instead of invoking lock.init(), assert that it
      has already been invoked (the lock is vacant).
      
      add_fts_index(), build_fts_hidden_table(): Explicitly invoke
      index_lock::init() in order to avoid a pthread_mutex_destroy()
      invocation on an uninitialized object.
      
      srw_lock_debug::destroy(): Invoke readers_lock.destroy().
      
      trx_sys_t::create(): Invoke trx_rseg_t::init() on all rollback segments
      in order to guarantee a deterministic state for shutdown, even if
      InnoDB fails to start up.
      
      trx_rseg_array_init(), trx_temp_rseg_create(), trx_rseg_create():
      Invoke trx_rseg_t::destroy() before trx_rseg_t::init() in order to
      balance pthread_mutex_init() and pthread_mutex_destroy() calls.
      4f8803c0
  2. 13 Aug, 2024 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-14231 MATCH() AGAINST( IN BOOLEAN MODE), results mismatch · b304ec30
      Thirunarayanan Balathandayuthapani authored
      - Added plugin_debug.test, multiple_index.test to innodb_fts suite
      from mysql-5.7.
      
      - commit c5b28e55 removes the warning
      for InnoDB rebuilding table to add FTS_DOC_ID
      
      - multiple_index test case  has MATCH(a) values are smaller
      than in MySQL because ROLLBACK updates the stat_n_rows.
      
      - st_mysql_ftparser_boolean_info structure conveys boolean
      metadata to mysql search engine for every word in the query.
      This structure misses the position value to store the correct
      offset of every word. So phrase search queries in plugin_debug
      test case with boolean mode for simple parser throws
      wrong result.
      b304ec30
  3. 12 Aug, 2024 4 commits
    • Julius Goryavsky's avatar
      MDEV-30686: Endless loop when trying to establish connection · 2c5d8376
      Julius Goryavsky authored
      With wsrep_sst_rsync, node goes into endless loop when trying
      to establish connection to donor for IST/SST if the database
      is bind on specific IP address, not the "*".
      
      This commit fixes this problem. Separate tests are not
      required - the problem can occur in normal configurations
      on a number of systems when selecting a bing address other
      than "*", especially on FreeBSD and with the IPv6 addresses.
      2c5d8376
    • Jan Lindström's avatar
      MDEV-34594 : Assertion `client_state.transaction().active()' failed in · cd8b8bb9
      Jan Lindström authored
      int wsrep_thd_append_key(THD*, const wsrep_key*, int, Wsrep_service_key_type)
      
      CREATE TABLE [SELECT|REPLACE SELECT] is CTAS and idea was that
      we force ROW format. However, it was not correctly enforced
      and keys were appended before wsrep transaction was started.
      
      At THD::decide_logging_format we should force used stmt binlog
      format to ROW in CTAS case and produce a warning if used
      binlog format was not ROW.
      
      At ha_innodb::update_row we should not append keys similarly
      as in ha_innodb::write_row if sql_command is SQLCOM_CREATE_TABLE.
      Improved error logging on ::write_row, ::update_row and ::delete_row
      if wsrep key append fails.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      cd8b8bb9
    • Alexander Barkov's avatar
      MDEV-34376 Wrong data types when mixing an utf8 *TEXT column and a short binary · 0e273510
      Alexander Barkov authored
      A mixture of a multi-byte *TEXT column and a short binary column
      produced a too large column.
      For example, COALESCE(tinytext_utf8mb4, short_varbinary)
      produced a BLOB column instead of an expected TINYBLOB.
      
      - Adding a virtual method Type_all_attributes::character_octet_length(),
        returning max_length by default.
      - Overriding Item_field::character_octet_length() to extract
        the octet length from the underlying Field.
      - Overriding Item_ref::character_octet_length() to extract
        the octet length from the references Item (e.g. as VIEW fields).
      - Fixing Type_numeric_attributes::find_max_octet_length() to
        take the octet length using the new method character_octet_length()
        instead of accessing max_length directly.
      0e273510
    • Ian Gilfillan's avatar
      Update sponsors · c83ba513
      Ian Gilfillan authored
      c83ba513
  4. 09 Aug, 2024 3 commits
  5. 08 Aug, 2024 8 commits
  6. 07 Aug, 2024 3 commits
    • Nikita Malyavin's avatar
      MDEV-34632 Assertion failed in handler::assert_icp_limitations · 25e2d0a6
      Nikita Malyavin authored
      Assertion `table->field[0]->ptr >= table->record[0] &&
      table->field[0]->ptr <= table->record[0] + table->s->reclength' failed in
      handler::assert_icp_limitations.
      
      table->move_fields has some limitations:
      1. It cannot be used in cascade
      2. It should always have a restoring pair.
      
      Rule 1 is covered by assertions in handler::assert_icp_limitations
      and handler::ptr_in_record (commit 30894fe9).
      
      Rule 2 should be manually maintained with care. Hopefully, the rule 1 assertions
      may sometimes help as well.
      
      In ha_myisam::repair, both rules are broken. table->move_fields is used
      asymmetrically there: it is set on every param->fix_record call
      (i.e. in compute_vcols) but is restored only once, in the end of repair.
      
      The reason to updating field ptr's for every call is that compute_vcols can
      (supposedly) be called in parallel, that is, with the same table, but different
      records.
      
      The condition to "unmove" the pointers in ha_myisam::restore_vcos_after_repair
      is incorrect, when stored vcols are available, and myisam stores a VIRTUAL field
      if it's the only field in the table (the record cannot be of zero length).
      
      This patch solves the problem by "unmoving" the pointers symmetrically, in
      compute_vcols. That is, both rules will be preserved maintained.
      25e2d0a6
    • Yuchen Pei's avatar
      MDEV-34682 Return the return value of ddl recovery done in ha_initialize_handlerton · fa8ce92c
      Yuchen Pei authored
      Otherwise it could cause false negative when ddl recovery done is part
      of the plugin initialization
      fa8ce92c
    • Yuchen Pei's avatar
  7. 04 Aug, 2024 6 commits
  8. 03 Aug, 2024 5 commits
    • Oleg Smirnov's avatar
      MDEV-34683 Types mismatch when cloning items causes debug assertion · cf202dec
      Oleg Smirnov authored
      New runtime type diagnostic (MDEV-34490) has detected that classes
      Item_func_eq, Item_default_value and Item_date_literal_for_invalid_dates
      incorrectly return an instance of its ancestor classes when being cloned.
      This commit fixes that.
      
      Additionally, it fixes a bug at Item_func_case_simple::do_build_clone()
      which led to an endless loop of cloning functions calls.
      
      Reviewer: Oleksandr Byelkin <sanja@mariadb.com>
      cf202dec
    • mariadb-DebarunBanerjee's avatar
      MDEV-34689 Redo log corruption at high load · e515e807
      mariadb-DebarunBanerjee authored
      Issue: During mtr_t:commit, if there is not enough space available in
      redo log buffer, we flush the buffer. During flush, the LSN lock is
      released allowing other concurrent mtr to commit. After flush we
      reacquire the lock but use the old LSN obtained before check. It could
      lead to redo log corruption. As the LSN moves backwards with the
      possibility of data loss and unrecoverable server if the server aborts
      for any reason or if server is shutdown with innodb_fast_shutdown=2.
      With normal shutdown, recovery fails to map the checkpoint LSN to
      correct offset.
      
      In debug mode it hits log0log.cc:863: lsn_t log_t::write_buf()
      Assertion `new_buf_free == ((lsn - first_lsn) & write_size_1)' failed.
      
      In release mode, after normal shutdown, restart fails.
      [ERROR] InnoDB: Missing FILE_CHECKPOINT(8416546) at 8416546
      [ERROR] InnoDB: Log scan aborted at LSN 8416546
      
      Backup fails reading the corrupt redo log.
      [00] 2024-07-31 20:59:10 Retrying read of log at LSN=7334851
      [00] FATAL ERROR: 2024-07-31 20:59:11 Was only able to copy log from
      7334851 to 7334851, not 8416446; try increasing innodb_log_file_size
      
      Unless a backup is tried or the server is shutdown or killed
      immediately, the corrupt redo part is eventually truncated and there
      may not be any visible issues seen in release mode.
      
      This issue was introduced by the following commit.
      
      commit a635c406
          MDEV-27774 Reduce scalability bottlenecks in mtr_t::commit()
      
      Fix: If we need to release latch and flush redo before writing mtr
      logs, make sure to get the latest system LSN after reacquiring the
      redo system latch.
      e515e807
    • Oleksandr Byelkin's avatar
      Merge branch '10.6' into 10.11 · 0e8fb977
      Oleksandr Byelkin authored
      0e8fb977
    • Oleksandr Byelkin's avatar
      Merge branch '10.5' into 10.6 · 8f020508
      Oleksandr Byelkin authored
      8f020508
    • Oleksandr Byelkin's avatar
      lost in editinig line added · 7a5b8bf0
      Oleksandr Byelkin authored
      7a5b8bf0
  9. 02 Aug, 2024 2 commits
  10. 01 Aug, 2024 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29010 Table cannot be loaded after instant ALTER · 37119cd2
      Thirunarayanan Balathandayuthapani authored
      Reason:
      ======
      - InnoDB fails to load the instant alter table metadata from
      clustered index while loading the table definition.
      The reason is that InnoDB metadata blob has the column length
      exceeds maximum fixed length column size.
      
      Fix:
      ===
      - InnoDB should treat the long fixed length column as variable
      length fields that needs external storage while initializing
      the field map for instant alter operation
      37119cd2
    • Galina Shalygina's avatar
      MDEV-23983: Crash caused by query containing constant having clause · d072a296
      Galina Shalygina authored
      Before this patch the crash occured when a single row dataset is used and
      Item::remove_eq_conds() is called for HAVING. This function is not supposed
      to be called after the elimination of multiple equalities.
      
      To fix this problem instead of Item::remove_eq_conds() Item::val_int() is
      used. In this case the optimizer tries to evaluate the condition for the
      single row dataset and discovers impossible HAVING immediately. So, the
      execution phase is skipped.
      
      Approved by Igor Babaev <igor@maridb.com>
      d072a296
  11. 31 Jul, 2024 2 commits
    • Brandon Nesterenko's avatar
      MDEV-15393: Fix rpl_mysqldump_gtid_slave_pos · 001608de
      Brandon Nesterenko authored
      The slave would try to sync_with_master_gtid.inc,
      but the master never actually saved its gtid position
      so the test would move on too quickly.
      001608de
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-34670 IMPORT TABLESPACE unnecessary traverses tablespace list · 533e6d5d
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      - After the commit ada1074b (MDEV-14398)
      fil_crypt_set_encrypt_tables() iterates through all tablespaces to
      fill the default_encrypt tables list. This was a trigger to
      encrypt or decrypt when key rotation age is set to 0. But import
      tablespace does call fil_crypt_set_encrypt_tables() unnecessarily.
      The motivation for the call is to signal the encryption threads.
      
      Fix:
      ====
      ha_innobase::discard_or_import_tablespace: Remove the
      fil_crypt_set_encrypt_tables() and add the import tablespace
      to the default encrypt list if necessary
      533e6d5d