1. 05 Jun, 2024 11 commits
    • Vladislav Vaintroub's avatar
    • Nikita Malyavin's avatar
      7d86751d
    • Vladislav Vaintroub's avatar
      fix typo · db9c2d22
      Vladislav Vaintroub authored
      db9c2d22
    • Vladislav Vaintroub's avatar
    • Vladislav Vaintroub's avatar
      Appveyor build - skip irrelevant commits · b242b44f
      Vladislav Vaintroub authored
      Since we're only building on Windows, skip changes to debian directory
      and to shell scripts.
      b242b44f
    • Vladislav Vaintroub's avatar
      MDEV-34236 Mroonga build with ASAN/UBSAN with GCC 12+ extremely slow. · 40abd973
      Vladislav Vaintroub authored
      Workaround by disabling sanitizer for single source file.
      40abd973
    • Monty's avatar
      MDEV-22935 Erroneous Aria Index / Optimizer behaviour · 38cbef8b
      Monty authored
      The problem was in the Aria part of the range optimizer,
      maria_records_in_range(), which wrong concluded that there was no rows
      in the range.
      
      This error would happen in the unlikely case when searching for a range
      on a partial key and there was a match for the first key part in the
      upper part of the b-tree (node) and also a match in the underlying
      node page.
      
      In other words, for this bug to happen one have to use Aria, have a multi
      part key with a lot of identical values for the first key part and do a
      range search on the second part of the key.
      
      Fixed by ensuring that we do not stop searching for partial keys found
      on node.
      
      Other things:
      - Added some comments
      - Changed a variable name to more clearly explain it's purpose.
      - Fixed wrong cast in _ma_record_pos() that could cause problems on 32 bit
        systems.
      38cbef8b
    • Marko Mäkelä's avatar
      MDEV-34297 get_rnd_value() of ib_counter_t is unnecessarily complex · c6d36c3e
      Marko Mäkelä authored
      The shared counter template ib_counter_t uses the function
      my_timer_cycles() as a source of pseudo-random numbers to pick a shard.
      On some platforms, my_timer_cycles() could return the constant value 0.
      
      get_rnd_value(): Remove.
      
      my_pseudo_random(): Implement as an alias of my_timer_cycles() or
      a wrapper for pthread_self().
      
      Reviewed by: Vladislav Vaintroub
      c6d36c3e
    • ilyasa1211's avatar
    • Igor Babaev's avatar
      MDEV-29307 Wrong result when joining two derived tables over the same view · 4d38267f
      Igor Babaev authored
      This bug could affect queries containing a join of derived tables over
      grouping views such that one of the derived tables contains a window
      function while another uses view V with dependent subquery DSQ containing
      a set function aggregated outside of the subquery in the view V. The
      subquery also refers to the fields from the group clause of the view.Due to
      this bug execution of such queries could produce wrong result sets.
      
      When the fix_fields() method performs context analysis of a set function AF
      first, at the very beginning the function Item_sum::init_sum_func_check()
      is called. The function copies the pointer to the embedding set function,
      if any, stored in THD::LEX::in_sum_func into the corresponding field of the
      set function AF simultaneously changing the value of THD::LEX::in_sum_func
      to point to AF. When at the very end of the fix_fields() method the function
      Item_sum::check_sum_func() is called it is supposed to restore the value
      of THD::LEX::in_sum_func to point to the embedding set function. And in
      fact Item_sum::check_sum_func() did it, but only for regular set functions,
      not for those used in window functions. As a result after the context
      analysis of AF had finished THD::LEX::in_sum_func still pointed to AF.
      It confused the further context analysis. In particular it led to wrong
      resolution of Item_outer_ref objects in the fix_inner_refs() function.
      This wrong resolution forced reading the values of grouping fields referred
      in DSQ not from the temporary table used for aggregation from which they
      were supposed to be read, but from the table used as the source table for
      aggregation.
      
      This patch guarantees that the value of THD::LEX::in_sum_func is properly
      restored after the call of fix_fields() for any set function.
      4d38267f
    • Yuchen Pei's avatar
      MDEV-27186 spider/partition: Report error on info() failure · 042a0d85
      Yuchen Pei authored
      Like MDEV-28105, spider may attempt to connect to remote server in
      info(), and it may emit an error upon failure to connect. In this
      case, the downstream caller ha_partition::open() should return the
      error to avoid inconsistency.
      
      This fixes MDEV-27186, MDEV-27237, MDEV-27334, MDEV-28241, MDEV-34101.
      042a0d85
  2. 04 Jun, 2024 3 commits
  3. 03 Jun, 2024 4 commits
    • Julius Goryavsky's avatar
      c21aa486
    • Denis Protivensky's avatar
      MDEV-32633: Fix Galera cluster <-> native replication interaction · a4838721
      Denis Protivensky authored
      GTID events are applied without a running server transaction,
      we need to set next transaction ID for Wsrep transaction.
      
      The whole Galera cluster now has a single GTID value (including
      the server ID throughout the cluster), fix the config accordingly.
      
      Add force restart so that repeated MTR test execution prints
      consistent GTID values, otherwise they would have been recovered
      from the previous run.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      a4838721
    • Denis Protivensky's avatar
      MDEV-32633: Fix Galera cluster <-> native replication interaction · 0cc9b497
      Denis Protivensky authored
      It's possible to establish Galera multi-cluster setups connected
      through the native replication when every Galera cluster is configured
      to have a separate domain ID.
      For this setup to work, we need to replace domain ID values in generated
      GTID events when they are written at transaction commit to the values
      configured by Wsrep replication.
      
      At the same time, it's possible that the GTID event already contains
      a correct domain ID if it comes through the native replication from
      another Galera cluster.
      In this case, when such an event is applied either through a native
      replication slave thread or through Wsrep applier, we write GTID event
      on transaction start and avoid writing it during transaction commit.
      
      The code contained multiple problems that were fixed:
      - applying GTID events didn't work because it's applied without a
      running server transaction and Wsrep transaction was not started
      - GTID event generation on transaction start didn't contain proper
      "standalone" and "is_transactional" flags that the original applied
      GTID event contained
      - condition determining that GTID event is written on transaction start
      to avoid writing it on commit relied on the fact that the GTID event
      is the first found in transaction/statement caches, which wasn't the
      case and resulted in duplicate GTID events written
      - instead of relying on the caches to find a GTID event, a simple check
      is introduced that follows the exact rules for checking if event is
      written at transaction start as described above
      - the test case is improved to check that exact GTID events are
      applied after two Galera clusters have synced.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      0cc9b497
    • Denis Protivensky's avatar
      MDEV-33952: Fix flaky galera_create_table_as_select test with debug sync · a6b7203d
      Denis Protivensky authored
      The test that triggers multi-master conflict between two CTAS commands
      uses LOCK/UNLOCK TABLES to block local CTAS from progress. It could
      result in a race when UNLOCK TABLES command is issued a bit earlier
      then needed, causing local CTAS to run further and change wsrep
      transaction state, so that a different code path is taken later and
      the original error gets overridden, causing the test to fail.
      The solution is to replace LOCK/UNLOCK TABLES with debug sync points.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      a6b7203d
  4. 30 May, 2024 5 commits
    • Yuchen Pei's avatar
      MDEV-29027 ASAN errors in spider_db_free_result after partition DDL · 25476ba1
      Yuchen Pei authored
      Spider calls ha_spider::close() at least twice on ALTER TABLE ... ADD
      PARTITION. The first call frees wide_handler and the second call
      accesses wide_handler->trx->thd (heap-use-after-free).
      
      In general, there seems to be no problem with using THD obtained by
      the macro current_thd() except in background threads. Thus, we simply
      replace wide_handler->trx->thd with current_thd().
      
      Original author: Nayuta Yanagasawa
      25476ba1
    • Nayuta Yanagisawa's avatar
      MDEV-28522 Delete constant SPIDER_SQL_TYPE_*_HS · 6d0c9872
      Nayuta Yanagisawa authored
      The HandlerSocket support of Spider has been deleted by MDEV-26858.
      Thus, the constants, SPIDER_SQL_TYPE_*_HS, are no longer necessary.
      6d0c9872
    • Yuchen Pei's avatar
      MDEV-26858 Spider: Remove dead code related to HandlerSocket · 6c302207
      Yuchen Pei authored
      Remove the dead-code, in Spider, which is related to the Spider's
      HandlerSocket support. The code has been disabled for a long time
      and it is unlikely that the code will be enabled.
      
      - rm all files under storage/spider/hs_client/ except hs_compat.h
      - rm storage/spider/spd_db_handlersocket.*
      - unifdef -UHS_HAS_SQLCOM -UHAVE_HANDLERSOCKET \
        -m storage/spider/spd_* storage/spider/ha_spider.* storage/spider/hs_client/*
      - remove relevant files from storage/spider/CMakeLists.txt
      6c302207
    • Marko Mäkelä's avatar
      MDEV-31340 fixup: Add end-of-test marker · 0c440abd
      Marko Mäkelä authored
      0c440abd
    • Marko Mäkelä's avatar
      Fix ./mtr --repeat=2 main.func_str · c71275b6
      Marko Mäkelä authored
      c71275b6
  5. 29 May, 2024 2 commits
  6. 28 May, 2024 1 commit
    • Souradeep Saha's avatar
      Fix Various Typos · 83a04be8
      Souradeep Saha authored
      Fix various typos, in comments and DEBUG statements, and code changes
      are non-functional.
      
      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.
      83a04be8
  7. 27 May, 2024 2 commits
    • Alexander Barkov's avatar
      MDEV-34226 On startup: UBSAN: applying zero offset to null pointer in... · 4a158ec1
      Alexander Barkov authored
      MDEV-34226 On startup: UBSAN: applying zero offset to null pointer in my_copy_fix_mb from strings/ctype-mb.c and other locations
      
      nullptr+0 is an UB (undefined behavior).
      
      - Fixing my_string_metadata_get_mb() to handle {nullptr,0} without UB.
      - Fixing THD::copy_with_error() to disallow {nullptr,0} by DBUG_ASSERT().
      - Fixing parse_client_handshake_packet() to call THD::copy_with_error()
        with an empty string {"",0} instead of NULL string {nullptr,0}.
      4a158ec1
    • Alexander Barkov's avatar
      MDEV-30931 UBSAN: negation of -X cannot be represented in type 'long long... · 79253261
      Alexander Barkov authored
      MDEV-30931 UBSAN: negation of -X cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself in get_interval_value on SELECT
      
      - Fixing the code in get_interval_value() to use Longlong_hybrid_null.
        This allows to handle correctly:
      
        - Signed and unsigned arguments
          (the old code assumed the argument to be signed)
        - Avoid undefined negation behavior the corner case with LONGLONG_MIN
      
        This fixes the UBSAN warning:
          negation of -9223372036854775808 cannot be represented
          in type 'long long int';
      
      - Fixing the code in get_interval_value() to avoid overflow in
        the INTERVAL_QUARTER and INTERVAL_WEEK branches.
        This fixes the UBSAN warning:
          signed integer overflow: -9223372036854775808 * 7 cannot be represented
          in type 'long long int'
      
      - Fixing the INTERVAL_WEEK branch in date_add_interval() to handle
        huge numbers correctly. Before the change, huge positive numeber
        were treated as their negative complements.
        Note, some other branches still can be affected by this problem
        and should also be fixed eventually.
      79253261
  8. 24 May, 2024 2 commits
  9. 23 May, 2024 2 commits
    • Vladislav Vaintroub's avatar
      MDEV-34205: ASAN stack buffer overflow in strxnmov() in frm_file_exists · 736449d3
      Vladislav Vaintroub authored
      Correct the second parameter for strxnmov to prevent potential buffer
      overflows. The second parameter must be one less than the size of the
      input buffer to avoid writing past the end of the buffer.
      
      While the second parameter is usually correct, there are exceptions
      that need fixing.
      
      This commit addresses the issue within frm_file_exists() and other
      affected places.
      736449d3
    • Alexander Barkov's avatar
      MDEV-28387 UBSAN: runtime error: negation of -9223372036854775808 cannot be... · 7c4c0823
      Alexander Barkov authored
      MDEV-28387 UBSAN: runtime error: negation of -9223372036854775808 cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself in my_strtoll10 on SELECT
      
      Fixing the condition to raise an overflow in the ulonglong
      representation of the number is greater or equal to 0x8000000000000000ULL.
      Before this change the condition did not catch -9223372036854775808
      (the smallest possible signed negative longlong number).
      7c4c0823
  10. 21 May, 2024 5 commits
    • Yuchen Pei's avatar
    • Marko Mäkelä's avatar
      MDEV-33817 fixup: Disable for macOS · 266495b9
      Marko Mäkelä authored
      According to https://discussions.apple.com/thread/8256853
      an attempt to use AVX512 registers on macOS will result in #UD
      (crash at runtime).
      
      Also, starting with clang-18 and GCC 14, we must add "evex512" to the
      target flags so that AVX and SSE instructions can use AVX512 specific
      encodings. This flag was introduced together with the avx10.1-512 target.
      Older compiler versions do not recognize "evex512". We do not want to
      write "avx10.1-512" because it could enable some AVX512 subfeatures
      that we do not have any CPUID check for.
      
      Reviewed by: Vladislav Vaintroub
      Tested on macOS by: Valerii Kravchuk
      266495b9
    • Alexander Barkov's avatar
      Backporting bugs fixes fixed by MDEV-31340 from 11.5 · 310fd6ff
      Alexander Barkov authored
      The patch for MDEV-31340 fixed the following bugs:
      
      MDEV-33084 LASTVAL(t1) and LASTVAL(T1) do not work well with lower-case-table-names=0
      MDEV-33085 Tables T1 and t1 do not work well with ENGINE=CSV and lower-case-table-names=0
      MDEV-33086 SHOW OPEN TABLES IN DB1 -- is case insensitive with lower-case-table-names=0
      MDEV-33088 Cannot create triggers in the database `MYSQL`
      MDEV-33103 LOCK TABLE t1 AS t2 -- alias is not case sensitive with lower-case-table-names=0
      MDEV-33108 TABLE_STATISTICS and INDEX_STATISTICS are case insensitive with lower-case-table-names=0
      MDEV-33109 DROP DATABASE MYSQL -- does not drop SP with lower-case-table-names=0
      MDEV-33110 HANDLER commands are case insensitive with lower-case-table-names=0
      MDEV-33119 User is case insensitive in INFORMATION_SCHEMA.VIEWS
      MDEV-33120 System log table names are case insensitive with lower-cast-table-names=0
      
      Backporting the fixes from 11.5 to 10.5
      310fd6ff
    • mariadb-DebarunBanerjee's avatar
      MDEV-34166 Server could hang with BP < 80M under stress · b2944adb
      mariadb-DebarunBanerjee authored
      BUF_LRU_MIN_LEN (256) is too high value for low buffer pool(BP) size.
      For example, for BP size lower than 80M and 16 K page size, the limit is
      more than 5% of total BP and for lowest BP 5M, it is 80% of the BP.
      Non-data objects like explicit locks could occupy part of the BP pool
      reducing the pages available for LRU. If LRU reaches minimum limit and
      if no free pages are available, server would hang with page cleaner not
      able to free any more pages.
      
      Fix: To avoid such hang, we adjust the LRU limit lower than the limit
      for data objects as checked in buf_LRU_check_size_of_non_data_objects()
      i.e. one page less than 5% of BP.
      b2944adb
    • Marko Mäkelä's avatar
      MDEV-34204 Assertion `!*detailed_error' failed on shutdown after XA PREPARE · 0907df3d
      Marko Mäkelä authored
      trx_free_at_shutdown(): Similar to trx_t::commit_in_memory(),
      clear the detailed_error (FOREIGN KEY constraint error) before
      invoking trx_t::free(). We only do this on debug instrumented
      builds in order to avoid a debug assertion failure on shutdown.
      0907df3d
  11. 20 May, 2024 3 commits