1. 03 May, 2024 4 commits
    • Vladislav Vaintroub's avatar
      MDEV-33876 CMake, zlib - use names compatible with official FindZLIB.cmake · 029e2a5f
      Vladislav Vaintroub authored
      - ZLIB_LIBRARIES, not ZLIB_LIBRARY
      - ZLIB_INCLUDE_DIRS, not ZLIB_INCLUDE_DIR
      
      For building libmariadb, ZLIB_LIBRARY/ZLIB_INCLUDE_DIR are still defined
      This workaround will be removed later.
      029e2a5f
    • Marko Mäkelä's avatar
      MDEV-33817: AVX512BW and VPCLMULQDQ based CRC-32 · 9ec7819c
      Marko Mäkelä authored
      This is based on https://github.com/intel/intel-ipsec-mb/
      and has been tested both on x86 and x86-64, with code that
      was generated by several versions of GCC and clang.
      GCC 11 or clang 8 or later should be able to compile this,
      and so should recent versions of MSVC.
      
      Thanks to Intel Corporation for providing access to hardware,
      for answering my questions regarding the code, and for
      providing the coefficients for the CRC-32C computation.
      
      crc32_avx512(): Compute a reverse polynomial CRC-32 using
      precomputed tables and carry-less product, for up to 256 bytes
      of unaligned input per loop iteration.
      
      Reviewed by: Vladislav Vaintroub
      9ec7819c
    • Marko Mäkelä's avatar
      MDEV-33817 preparation: Restructuring and unit tests · 611cd6b9
      Marko Mäkelä authored
      In our unit test, let us rely on our own reference
      implementation using the reflected
      CRC-32 ISO 3309 and CRC-32C polynomials. Let us also
      test with various lengths.
      
      Let us refactor the CRC-32 and CRC-32C implementations
      so that no special compilation flags will be needed and
      that some function call indirection will be avoided.
      
      pmull_supported: Remove. We will have pointers to two separate
      functions crc32c_aarch64_pmull() and crc32c_aarch64().
      611cd6b9
    • Yuchen Pei's avatar
      MDEV-33538 make auxiliary spider plugins init depend on actual spider · b84d335d
      Yuchen Pei authored
      The two I_S plugins SPIDER_ALLOC_MEM and SPIDER_WRAPPER_PROTOCOL
      only makes sense if the main SPIDER plugin is installed. Further,
      SPIDER_ALLOC_MEM requires a mutex that requires SPIDER init to fill
      the table.
      
      We also update the spider init query to override
      --transaction_read_only=on so that it does not affect the spider init.
      
      Also fixed error handling in spider_db_init() so that failure in
      spider table init does not result in memory leak
      b84d335d
  2. 02 May, 2024 1 commit
    • Vladislav Vaintroub's avatar
      postfix a09ebe55 (PCRE-10.43) · 20f60fe7
      Vladislav Vaintroub authored
      - no need to switch off -fsanitize-address for MSVC anymore
      - option /WX is MSVC only
      - CMAKE_C_STANDARD C99 is already in pcre's own CMakeLists.txt
      20f60fe7
  3. 30 Apr, 2024 3 commits
    • Daniel Black's avatar
      MDEV-33631 Ubuntu/Debian MYSQL_SERVER_SUFFIX is version+suffix on MariaDB packaged versions · e63ed4e0
      Daniel Black authored
      The debian/rules removed sufficient version information from the
      downstream version, however the mariadb upstream has a +
      separator from the suffix.
      
      While we are at it, remove the Debian/Ubuntu revision -1.
      
      Other revisions used:
      * Debian unstable (inherited to both Debian and Ubuntu if package unchanged): 1:10.11.6-2
      * Ubuntu stable updates example: 1:10.11.6-0ubuntu0.23.10.2
      * Debian stable updates example: 1:10.11.4-1~deb12u1
      
      The result is compulation with:
          -DMYSQL_SERVER_SUFFIX="-1:10.4.34+maria~deb10" \
      
      Compared to Debian:
          -DMYSQL_SERVER_SUFFIX="-1~deb12u1" \
      
      The impact comes into play with SELECT VERSION():
          10.4.34-MariaDB-1:10.4.34+maria~deb10
      
      A more abbreviated form of the following is much more human/machine parsable:
          10.6.16-MariaDB~ubu2004
      
      Reviewer: Otto Kekäläinen
      e63ed4e0
    • Dimitri John Ledkov's avatar
      openssl: add a more specific DES support detection · bf77f979
      Dimitri John Ledkov authored
      Improve detection for DES support in OpenSSL, to allow compilation
      against system OpenSSL without DES.
      
      Note that MariaDB needs to be compiled against OpenSSL-like library
      that itself has DES support which cmake detected. Positive detection
      is indicated with CMake variable HAVE_des 1.
      Signed-off-by: default avatarDimitri John Ledkov <dimitri.ledkov@surgut.co.uk>
      bf77f979
    • Bernard Spil's avatar
      Fix typo · f9575495
      Bernard Spil authored
      There is no component `SuportFiles` in MariaDB server, yet a `SupportFiles` component exists.
      f9575495
  4. 29 Apr, 2024 6 commits
    • Rucha Deodhar's avatar
      MDEV-22141: JSON_REMOVE returns NULL on valid arguments · 9e6858a4
      Rucha Deodhar authored
      Analysis:
      When we scan json to get to a beginning according to the path, we end up
      scanning json even if we have exhausted it. When eventually returns error.
      
      Fix:
      Continue scanning json only if we have not exhausted it and return result
      accordingly.
      9e6858a4
    • Rucha Deodhar's avatar
      MDEV-32287: JSON_EXTRACT not returning multiple values for same path · 5ca64e65
      Rucha Deodhar authored
      Analysis:
      When scanning json and getting the exact path at each step, if a path
      is reached, we end up adding the item in the result and immediately get the
      next item which results in current path changing.
      Fix:
      Instead of immediately returning the item, count the occurences of the path
      in argument and append in the result as needed.
      5ca64e65
    • Rucha Deodhar's avatar
      MDEV-19487: JSON_TYPE doesnt detect the type of String Values · d7df63e1
      Rucha Deodhar authored
      (returns NULL) and for Date/DateTime returns "INTEGER"
      
      Analysis:
      When the first character of json is scanned it is number. Based on that
      integer is returned.
      Fix:
      Scan rest of the json before returning the final result to ensure json is
      valid in the first place in order to have a valid type.
      d7df63e1
    • Alexander Barkov's avatar
      MDEV-30646 View created via JSON_ARRAYAGG returns incorrect json object · c6e3fe29
      Alexander Barkov authored
      Backporting add782a1 from 10.6, this fixes the problem.
      c6e3fe29
    • Alexander Barkov's avatar
      MDEV-21058 CREATE TABLE with generated column and RLIKE results in sigabrt · dc25d600
      Alexander Barkov authored
      Regexp_processor_pcre::fix_owner() called Regexp_processor_pcre::compile(),
      which could fail on the regex syntax error in the pattern and put
      an error into the diagnostics area. However, the callers:
        - Item_func_regex::fix_length_and_dec()
        - Item_func_regexp_instr::fix_length_and_dec()
      still returned "false" in such cases, which made the code
      crash later inside Diagnostics_area::set_ok_status().
      
      Fix:
      
      - Change the return type of fix_onwer() from "void" to "bool"
        and return "true" whenever an error is put to the DA
        (e.g. on the syntax error in the pattern).
      - Fixing fix_length_and_dec() of the mentioned Item_func_xxx
        classes to return "true" if fix_onwer() returned "true".
      dc25d600
    • 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
  5. 28 Apr, 2024 2 commits
  6. 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
  7. 26 Apr, 2024 1 commit
    • 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
  8. 25 Apr, 2024 5 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
    • 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
    • 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
  9. 24 Apr, 2024 3 commits
  10. 23 Apr, 2024 3 commits
  11. 22 Apr, 2024 2 commits
    • 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
  12. 20 Apr, 2024 2 commits
    • Kristian Nielsen's avatar
      MDEV-19415: use-after-free on charsets_dir from slave connect · 57f6a1ca
      Kristian Nielsen authored
      The slave IO thread sets MYSQL_SET_CHARSET_DIR. The code for this option
      however is not thread-safe in sql-common/client.c. The value set is
      temporarily written to mysys global variable `charsets-dir` and can be seen
      by other threads running in parallel, which can result in use-after-free
      error.
      
      Problem was visible as random failures of test cases in suite multi_source
      with Valgrind or MSAN.
      
      Work-around by not setting this option for slave connect, it is redundant
      anyway as it is just setting the default value.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      57f6a1ca
    • Kristian Nielsen's avatar
      MDEV-30232: rpl.rpl_gtid_crash fails sporadically in BB · 0c249ad7
      Kristian Nielsen authored
      The root cause of the failure is a bug in the Linux network stack:
      
        https://lore.kernel.org/netdev/87sf0ldk41.fsf@urd.knielsen-hq.org/T/#u
      
      If the slave does a connect(2) at the exact same time that kill -9 of the
      master process closes the listening socket, the FIN or RST packet is lost in
      the kernel, and the slave ends up timing out waiting for the initial
      communication from the server. This timeout defaults to
      --slave-net-timeout=120, which causes include/master_gtid_wait.inc to time
      out first and fail the test.
      
      Work-around this problem by reducing the --slave-net-timeout for this test
      case. If this problem turns up in other tests, we can consider reducing the
      default value for all tests.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      0c249ad7
  13. 19 Apr, 2024 3 commits
  14. 18 Apr, 2024 2 commits
    • Vladislav Vaintroub's avatar
      MDEV-16944 postfix. Fix a typo · 2e84560d
      Vladislav Vaintroub authored
      2e84560d
    • mariadb-DebarunBanerjee's avatar
      MDEV-32489 Change buffer index fails to delete the records · 5928e04d
      mariadb-DebarunBanerjee authored
      When the change buffer records for a page span across multiple change
      buffer leaf pages or the starting record is at the beginning of a page
      with a left sibling, ibuf_delete_recs deletes only the records in first
      page and fails to move to subsequent pages.
      
      Subsequently a slow shutdown hangs trying to delete those left over
      records.
      
      Fix-A: Position the cursor to an user record in B-tree and exit only
      when all records are exhausted.
      
      Fix-B: Make sure we call ibuf_delete_recs during slow shutdown for
      pages with IBUF entries to cleanup any previously left over records.
      5928e04d
  15. 17 Apr, 2024 2 commits
    • Brandon Nesterenko's avatar
      MDEV-27512: Assertion !thd->transaction_rollback_request failed in rows_event_stmt_cleanup · 0ad52e4d
      Brandon Nesterenko authored
      If replicating an event in ROW format, and InnoDB detects a deadlock
      while searching for a row, the row event will error and rollback in
      InnoDB and indicate that the binlog cache also needs to be cleared,
      i.e. by marking thd->transaction_rollback_request. In the normal
      case, this will trigger an error in Rows_log_event::do_apply_event()
      and cause a rollback. During the Rows_log_event::do_apply_event()
      cleanup of a successful event application, there is a DBUG_ASSERT in
      log_event_server.cc::rows_event_stmt_cleanup(), which sets the
      expectation that thd->transaction_rollback_request cannot be set
      because the general rollback (i.e. not the InnoDB rollback) should
      have happened already. However, if the replica is configured to skip
      deadlock errors, the rows event logic will clear the error and
      continue on, as if no error happened. This results in
      thd->transaction_rollback_request being set while in
      rows_event_stmt_cleanup(), thereby triggering the assertion.
      
      This patch fixes this in the following ways:
       1) The assertion is invalid, and thereby removed.
       2) The rollback case is forced in rows_event_stmt_cleanup() if
      transaction_rollback_request is set.
      
      Note the differing behavior between transactions which are skipped
      due to deadlock errors and other errors. When a transaction is
      skipped due to an ignored deadlock error, the entire transaction is
      rolled back and skipped (though note MDEV-33930 which allows
      statements in the same transaction after the deadlock-inducing one
      to commit). When a transaction is skipped due to ignoring a
      different error, only the erroring statements are rolled-back and
      skipped - the rest of the transaction will execute as normal. The
      effect of this can be seen in the test results. The added test case
      to rpl_skip_error.test shows that only statements which are ignored
      due to non-deadlock errors are ignored in larger transactions. A
      diff between rpl_temporary_error2_skip_all.result and
      rpl_temporary_error2.result shows that all statements in the errored
      transaction are rolled back (diff pasted below):
      
      : diff rpl_temporary_error2.result rpl_temporary_error2_skip_all.result
      49c49
      < 2	1
      ---
      > 2	NULL
      51c51
      < 4	1
      ---
      > 4	NULL
      53c53
      < * There will be two rows in t2 due to the retry.
      ---
      > * There will be one row in t2 because the ignored deadlock does not retry.
      57d56
      < 1
      59c58
      < 1
      ---
      > 0
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      0ad52e4d
    • Vladislav Vaintroub's avatar
      MDEV-16944 Fix file sharing issues on Windows in mysqltest · 061adae9
      Vladislav Vaintroub authored
      On Windows systems, occurrences of ERROR_SHARING_VIOLATION due to
      conflicting share modes between processes accessing the same file can
      result in CreateFile failures.
      
      mysys' my_open() already incorporates a workaround by implementing
      wait/retry logic on Windows.
      
      But this does not help if files are opened using shell redirection like
      mysqltest traditionally did it, i.e via
      
      --echo exec "some text" > output_file
      
      In such cases, it is cmd.exe, that opens the output_file, and it
      won't do any sharing-violation retries.
      
      This commit addresses the issue by introducing a new built-in command,
      'write_line', in mysqltest. This new command serves as a brief alternative
      to 'write_file', with a single line output, that also resolves variables
      like "exec" would.
      
      Internally, this command will use my_open(), and therefore retry-on-error
      logic.
      
      Hopefully this will eliminate the very sporadic "can't open file because
      it is used by another process" error on CI.
      061adae9