1. 07 Jun, 2024 1 commit
  2. 06 Jun, 2024 10 commits
    • Julius Goryavsky's avatar
      MDEV-32158: wsrep_sst_mariabackup use /tmp dir during SST rather then user defined tmpdir · 238798d9
      Julius Goryavsky authored
      wsrep_sst_mariabackup should use the tmpdir defined by
      the user under the '[mysqld]' section of the configuration
      file rather than the default '/tmp' directory.
      238798d9
    • Julius Goryavsky's avatar
      galera: wsrep-lib submodule update · 654f6ece
      Julius Goryavsky authored
      654f6ece
    • Julius Goryavsky's avatar
      mtr: сhange the default setting for the port group size parameter · c2d97620
      Julius Goryavsky authored
      Some galera tests starts 6 galera nodes. Each galera node requires
      three ports: 6*3 = 18. Plus 6 ports are needed for 6 mariadbd servers.
      Since the number of ports is rounded up to 10 everywhere in mtr, we
      will take 30 as the default value for the port group size parameter.
      c2d97620
    • Daniele Sciascia's avatar
      MDEV-33523 Spurious deadlock error when wsrep_on=OFF · c1dc0397
      Daniele Sciascia authored
      Avoid starting transactions in wsrep-lib side when wsrep is
      disabled. It is unnecessary, and causes spurious deadlock errors on
      transaction clean up.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      c1dc0397
    • Jan Lindström's avatar
      MDEV-34170 : table gtid_slave_pos entries never been deleted with wsrep_gtid_mode = 0 · d328705a
      Jan Lindström authored
      Problem was that updates to mysql.gtid_slave_pos table were
      replicated even when they were newer used and because that
      newer deleted. Avoid replication of mysql.gtid_slave_pos
      table if wsrep_gtid_mode=OFF.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      d328705a
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-34057 Inconsistent FTS state in concurrent scenarios · a02773f7
      Thirunarayanan Balathandayuthapani authored
      Problem:
      =======
      - This commit is a merge of mysql commit 129ee47ef994652081a11ee9040c0488e5275b14.
      InnoDB FTS can be in inconsistent state when sync operation
      terminates the server before committing the operation. This
      could lead to incorrect synced doc id and incorrect query results.
      
      Solution:
      ========
      - During sync commit operation, InnoDB should pass
      the sync transaction to update the max doc id
      in the config table.
      
      fts_read_synced_doc_id() : This function is used
      to read only synced doc id from the config table.
      a02773f7
    • Marko Mäkelä's avatar
      MDEV-34296 extern thread_local is a CPU waste · 699d38d9
      Marko Mäkelä authored
      In commit 99bd2260 (MDEV-31558)
      we wrongly thought that there would be minimal overhead for accessing
      a thread-local variable mariadb_stats.
      
      It turns out that in C++11, each access to an extern thread_local
      variable requires conditionally invoking an initialization function.
      In fact, the initializer expression of mariadb_stats is dynamic, and
      those calls were actually unavoidable.
      
      In C++20, one could declare constinit thread_local variables, but
      the address of a thread_local variable (&mariadb_dummy_stats) is not
      a compile-time constant. We did not want to declare mariadb_dummy_stats
      without thread_local, because then the dummy accesses could lead to
      cache line contention between threads.
      
      mariadb_stats: Declare as __thread or __declspec(thread) so that
      there will be no dynamic initialization, but zero-initialization.
      
      mariadb_dummy_stats: Remove. It is a lesser evil to let
      the environment perform zero-initialization and check if
      !mariadb_stats.
      
      Reviewed by: Sergei Petrunia
      699d38d9
    • Marko Mäkelä's avatar
      MDEV-34283 A misplaced btr_cur_need_opposite_intention() check may fail to prevent hangs · 9fac857f
      Marko Mäkelä authored
      btr_cur_t::search_leaf(): Invoke btr_cur_need_opposite_intention() after
      positioning page_cur.rec so that the record will be in the intended page.
      This is something that was broken in
      commit f2096478 or
      commit de4030e4 or related changes.
      
      btr_cur_need_opposite_intention(): Add a debug assertion that would
      catch the misuse.
      
      The "next line of defence" that should have caught this bug in debug builds
      are assertions that mtr_t::m_memo contains MTR_MEMO_X_LOCK for the
      dict_index_t::lock. When btr_cur_need_opposite_intention() holds,
      we should escalate to acquiring an exclusive index->lock in
      btr_cur_t::pessimistic_search_leaf().
      
      Reviewed by: Debarun Banerjee
      9fac857f
    • Marko Mäkelä's avatar
      MDEV-34307 On startup, [FATAL] InnoDB: Page ... still fixed or dirty · bc366092
      Marko Mäkelä authored
      buf_pool_invalidate(): Properly wait for
      os_aio_wait_until_no_pending_writes() to ensure so that there
      are no pending buf_page_t::write_complete() or buf_page_write_complete()
      operations. This will avoid a failure of buf_pool.assert_all_freed().
      
      This bug should affect debug builds only. At this point, the
      buf_pool.flush_list should be clear and all changes should have
      been written out. The loop around buf_LRU_scan_and_free_block() should
      have eventually completed and freed all pages as soon as
      buf_page_t::write_complete() had a chance to release the page latches.
      
      It is worth noting that buf_flush_wait() is working as intended.
      As soon as buf_flush_page_cleaner() invokes
      buf_pool.get_oldest_modification() it will observe that
      buf_page_t::write_complete() had assigned oldest_modification_ to 1,
      and remove such blocks from buf_pool.flush_list. Upon reaching
      buf_pool.flush_list.count=0 the buf_flush_page_cleaner() will mark
      itself idle and wake buf_flush_wait() by broadcasting
      buf_pool.done_flush_list.
      
      This regression was introduced in
      commit a55b951e (MDEV-26827).
      
      Reviewed by: Debarun Banerjee
      bc366092
    • Rucha Deodhar's avatar
      MDEV-34143: Server crashes when executing JSON_EXTRACT after setting · 0406b2a4
      Rucha Deodhar authored
      non-default collation_connection
      
      Analysis:
      Due to different collation, the string has nothing to chop off.
      
      Fix:
      Got rid of chop(), only append " ," only when we have more elements to
      add to the result.
      0406b2a4
  3. 05 Jun, 2024 13 commits
    • Vladislav Vaintroub's avatar
    • Nikita Malyavin's avatar
      7d86751d
    • mariadb-DebarunBanerjee's avatar
      MDEV-34265 Possible hang during IO burst with innodb_flush_sync enabled · b12c14e3
      mariadb-DebarunBanerjee authored
      When checkpoint age goes beyond the sync flush threshold and
      buf_flush_sync_lsn is set, page cleaner enters into "furious flush"
      stage to aggressively flush dirty pages from flush list and pull
      checkpoint LSN above safe margin. In this stage, page cleaner skips
      doing LRU flush and eviction.
      
      In 10.6, all other threads entirely rely on page cleaner to generate
      free pages. If free pages get over while page cleaner is busy in
      "furious flush" stage, a session thread could wait for free page in the
      middle of a min-transaction(mtr) while holding latches on other pages.
      
      It, in turn, can prevent page cleaner to flush such pages preventing
      checkpoint LSN to move forward creating a deadlock situation. Even
      otherwise, it could create a stall and hang like situation for large BP
      with plenty of dirty pages to flush before the stage could finish.
      
      Fix: During furious flush, check and evict LRU pages after each flush
      iteration.
      b12c14e3
    • 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
    • Tuukka Pasanen's avatar
      MDEV-34261: Detect if build is running under 32-bit container · b2048179
      Tuukka Pasanen authored
      When building on 64-bit kernel machine in 32-bit docker container
      CMake falsely (but it works as expected) detects that container
      runtime in also 64-bits. Use linux32 command to change runtime
      enviroment to 32-bit and then CMake will correctly disable for
      example ColumnStore and not try to build it
      
      This commit only works with debian/autobake-debs.sh
      b2048179
    • 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
  4. 04 Jun, 2024 3 commits
  5. 03 Jun, 2024 5 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-34223 Innodb - add status variable for number of bulk inserts · 58a0e1e3
      Thirunarayanan Balathandayuthapani authored
      - Added a counter innodb_num_bulk_insert_operation in
      INFORMATION_SCHEMA.GLOBAL_STATUS. This counter is incremented
      whenever a InnoDB undergoes bulk insert operation.
      
      - Change the innodb_instant_alter_column to atomic variable.
      58a0e1e3
    • 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
  6. 30 May, 2024 7 commits
  7. 29 May, 2024 1 commit