1. 29 Apr, 2024 3 commits
    • Sergei Golubchik's avatar
      Merge branch '10.5' into 10.6 · c1f3eff5
      Sergei Golubchik authored
      c1f3eff5
    • Yuchen Pei's avatar
      MDEV-30727 Check spider_hton_ptr in spider udfs · 267dd5a9
      Yuchen Pei authored
      We have to #undef my_error and find it from udfs when spider is not
      installed.
      267dd5a9
    • mariadb-DebarunBanerjee's avatar
      MDEV-33669 mariabackup --backup hangs · 52f6df99
      mariadb-DebarunBanerjee authored
      This is a server hang and not an issue with backup. While concurrent
      DDLs in server gets in hanged state, mariabackup waits for DDLs to
      finish trying to acquire MDL_BACKUP_BLOCK_DDL.
      
      The server hang is serious in nature and caused by thread pool state
      being incorrectly set to thread creation pending state while no creation
      is actually pending. Once a thread pool reaches such state no new thread
      gets created in the pool.
      
      While it could possibly affect all thread pools in server, the innodb
      thread pool is the victim in current bug where IO job gets blocked when
      the pool is stuck with much less number of threads than intended.
      Available workers are blocked in purge waiting for page lock to be
      released by IO write (SX lock) causing a complete deadlock.
      
      The issue is caused by the state variable m_thread_creation_pending
      introduced by MDEV-31095: 9e62ab7a. We check and set the variable
      early while attempting to create a new thread in pool but fail to reset
      it if we exit the flow for other reasons like maximum threads reached
      or get into thread creation throttling path.
      
      Fix: The simple fix is to make sure that the state is reset back in case
      we don't actually attempt to create the thread.
      52f6df99
  2. 28 Apr, 2024 2 commits
  3. 27 Apr, 2024 1 commit
    • Alexander Barkov's avatar
      MDEV-33534 UBSAN: Negation of -X cannot be represented in type 'long long... · 3141a68b
      Alexander Barkov authored
      MDEV-33534 UBSAN: Negation of -X cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself in my_double_round from sql/item_func.cc|
      
      The negation in this line:
        ulonglong abs_dec= dec_negative ? -dec : dec;
      did not take into account that 'dec' can be the smallest possible
      signed negative value -9223372036854775808. Its negation is
      an operation with an undefined behavior.
      
      Fixing the code to use Longlong_hybrid, which implements a safe
      method to get an absolute value.
      3141a68b
  4. 26 Apr, 2024 2 commits
    • Hugo Wen's avatar
      MDEV-33574 Improve mysqlbinlog error message · 3d417476
      Hugo Wen authored
      Previously, when running mysqlbinlog without providing a binlog file, it
      would print the entire help text, which was very verbose and made it
      difficult to identify the actual issue.
      
      Now change the behavior to print a more concise error message instead:
      
          "ERROR: Please provide the log file(s). Run with '--help' for usage instructions."
      
      This makes the error output more user-friendly and easier to understand,
      especially when running the tool in scripts or automated processes.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer
      Amazon Web Services, Inc.
      3d417476
    • Daniele Sciascia's avatar
      Fixup 0ccdf54b · ef7a2344
      Daniele Sciascia authored
      0ccdf54b removed stack allocated THD objects from functions
      Wsrep_schema::replay_transaction(). However, it inadvertedly
      anticipated the destruction of the THD, causing assertions and usage
      of THD after it was destroyed.
      The fix consists in extracting the original function into a separate
      function, and leave the allocation and destruction of the THD object
      in Wsrep_schema::replay_transaction(), making sure that using the heap
      allocated THD has no side effects.
      Same for Wsrep_schema::recover_sr_transactions().
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      ef7a2344
  5. 25 Apr, 2024 7 commits
    • Jan Lindström's avatar
      MDEV-33896 : Galera test failure on galera_3nodes.MDEV-29171 · b3e531a3
      Jan Lindström authored
      Based on logs we might start SST before donor has reached
      Primary state. Because this test shutdowns all nodes we
      need to make sure when we start nodes that previous nodes
      have reached Primary state and joined the cluster.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      b3e531a3
    • Marko Mäkelä's avatar
      MDEV-26450 fixup: Remove a bogus assertion · 10d251e0
      Marko Mäkelä authored
      mtr_t::commit_shrink(): Do not assert that some previously clean pages
      will be flagged as modified by this mini-transaction. It could be the
      case that there had been no recent write-back of any of the undo
      tablespace pages that we are modifying when truncating the tablespace.
      It suffices to assert that some pages were modified again:
      ut_ad(m_modifications).
      
      This fixes up commit f5fddae3
      10d251e0
    • Marko Mäkelä's avatar
      MDEV-33993 Possible server hang on DROP INDEX or RENAME INDEX · 0936c138
      Marko Mäkelä authored
      commit_try_norebuild(): Add the parameter statistics_exist,
      similar to commit_try_rebuild(). If the InnoDB statistics tables
      did not exist, we will not attempt to update statistics later on
      during the transaction.
      
      Thanks to Matthias Leich for originally reproducing this scenario.
      0936c138
    • Kristian Nielsen's avatar
      MDEV-33602: Sporadic test failure in rpl.rpl_gtid_stop_start · 553a4d62
      Kristian Nielsen authored
      The test could fail with a duplicate key error because switching to non-GTID
      mode could start at the wrong old-style position. The position could be
      wrong when the previous GTID connect was stopped before receiving the fake
      GTID list event which gives the old-style position corresponding to the GTID
      connected position.
      
      Work-around by injecting an extra event and syncing the slave before
      switching to non-GTID mode.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      553a4d62
    • Marko Mäkelä's avatar
      MDEV-33974 Enable GNU libstdc++ debugging · a1c1f502
      Marko Mäkelä authored
      Starting with GCC 10, let us enable _GLIBCXX_DEBUG as well as
      _GLIBCXX_ASSERTIONS which have an impact on the GNU libstdc++.
      On GCC 8, we observed a compilation failure related to some
      missing type conversion.
      
      Even though clang on GNU/Linux would default to using libstdc++
      and enabling the debugging seems to work with clang-18, we will
      not enable this on clang, in case it would lead to compilation
      errors.
      
      For the clang libc++ before clang-15 there was _LIBCPP_DEBUG,
      but according to
      llvm/llvm-project@f3966eaf869b7bdd9113ab9d5b78469eb0f5f028 and
      llvm/llvm-project@13ea1343231fa4ae12fe9fba4c789728465783d7 and
      llvm/llvm-project@ff573a42cd1f1d05508f165dc3e645a0ec17edb5 it
      looks like that for proper results, a specially built debug version
      of libc++ would have to be used in order to enable equivalent checks.
      
      This should help catch bugs like the one that
      commit 455a15fd fixed.
      
      Reviewed by: Sergei Golubchik
      a1c1f502
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-33979 Disallow bulk insert operation during partition update statement · 8c8b7da0
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      - Partition update operation enables the bulk insert for the
      transaction while moving the row between partitions. This leads
      to debug assert failure while removing the row from one
      of the partition.
      
      Solution:
      ========
      - Disallow the bulk insert operation for non-insert operation
      of partition table.
      8c8b7da0
    • Marko Mäkelä's avatar
      MDEV-23974 fixup: Cover all debug builds · 72293842
      Marko Mäkelä authored
      While commit 75b7cd68 was a significant
      improvement, we occasionally got test failures of debug builds. One of
      the affected tests is innodb.innodb-64k-crash.
      72293842
  6. 24 Apr, 2024 3 commits
  7. 23 Apr, 2024 5 commits
    • Meng-Hsiu Chiang's avatar
      MDEV-29955: Set path for zlib library with pkg-config · 55cb2c29
      Meng-Hsiu Chiang authored
      `FindZLIB` module uses variable `ZLIB_ROOT`[1] to look for libraries. By
      setting the variable, `FindZLIB` is able to search the libraries that
      installed in a non-system path (/workspace/mylib for example).
      
      And when using `z` in `LINK_LIBRARIES()` CMake tries to lookup the
      library in system path by default. It doesn't work if the library isn't
      installed in the path, and use ${ZLIB_LIBRARY} which set by FindZLIB
      solve the issue.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services.
      
      [1]: https://cmake.org/cmake/help/latest/module/FindZLIB.html#hints
      55cb2c29
    • Monty's avatar
      Check and remove high stack usage · 0ccdf54b
      Monty authored
      I checked all stack overflow potential problems found with
      gcc -Wstack-usage=16384
      and
      clang -Wframe-larger-than=16384 -no-inline
      
      Fixes:
      Added '#pragma clang diagnostic ignored "-Wframe-larger-than="'
        to a lot of function to where stack usage large but resonable.
      - Added stack check warnings to BUILD scrips when using clang and debug.
      
      Function changed to use malloc instead allocating things on stack:
      - read_bootstrap_query() now allocates line_buffer (20000 bytes) with
        malloc() instead of using stack. This has a small performance impact
        but this is not releant for bootstrap.
      - mroonga grn_select() used 65856 bytes on stack. Changed it to use
        malloc().
      - Wsrep_schema::replay_transaction() and
        Wsrep_schema::recover_sr_transactions().
      - Connect zipOpen3()
      
      Not fixed:
      - mroonga/vendor/groonga/lib/expr.c grn_proc_call() uses
        43712 byte on stack.  However this is not easy to fix as the stack
        used is caused by a lot of code generated by defines.
      - Most changes in mroonga/groonga where only adding of pragmas to disable
        stack warnings.
      - rocksdb/options/options_helper.cc uses 20288 of stack space.
        (no reason to fix except to get rid of the compiler warning)
      - Causes using alloca() where the allocation size is resonable.
      - An issue in libmariadb (reported to connectors).
      0ccdf54b
    • Marko Mäkelä's avatar
      07faba08
    • Sergei Golubchik's avatar
      MDEV-16944 fix galera tests · e7318111
      Sergei Golubchik authored
      followup for 061adae9
      e7318111
    • Alexander Barkov's avatar
      MDEV-21076 NOT NULL and UNIQUE constraints cause SUM() to yield an incorrect result · e02077aa
      Alexander Barkov authored
      This problem was earlier fixed by the patch for MDEV 33344.
      Adding a test case only.
      e02077aa
  8. 22 Apr, 2024 4 commits
    • Jan Lindström's avatar
      MDEV-33928 : Assertion failure on wsrep_thd_is_aborting · fbfb5a6f
      Jan Lindström authored
      Problem was assertion assuming we always hold
      THD::LOCK_thd_data mutex that is not true.
      In most cases this is true but function is
      also used from InnoDB lock manager and
      there we can't take THD::LOCK_thd_data to
      obey mutex ordering. Removed assertion as
      wsrep transaction state can't change even
      that case.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      fbfb5a6f
    • Alexander Barkov's avatar
      MDEV-21034 GREATEST() and LEAST() malfunction for NULL · 24abbb9b
      Alexander Barkov authored
      There is a convention that Item::val_int() and Item::val_real() return
      SQL NULL doing effectively what this code does:
        null_value= true;
        return 0; // Always return 0 for SQL NULL
      
      This is done to optimize boolean value evaluation:
      if Item::val_int() or Item::val_real() returned 1 -
      that always means TRUE and never can means SQL NULL.
      This convention helps to avoid unnecessary testing
      Item::null_value after getting a non-zero return value.
      
      Item_func_min_max did not follow this convention.
      It could return a non-zero value together with null_value==true.
      This made evaluate_join_record() erroneously misinterpret
      SQL NULL as TRUE in this call:
      
        select_cond_result= MY_TEST(select_cond->val_int());
      
      Fixing Item_func_min_max to follow the convention.
      24abbb9b
    • Markus Staab's avatar
      Remove unnecessary whitespace in mysqldump · 361b7903
      Markus Staab authored
      361b7903
    • Sergei Golubchik's avatar
      fix failing large_tests.maria_recover_encrypted · 466bc8f7
      Sergei Golubchik authored
      update results
      466bc8f7
  9. 21 Apr, 2024 3 commits
  10. 20 Apr, 2024 5 commits
  11. 19 Apr, 2024 5 commits