1. 10 Apr, 2024 4 commits
    • Andrei's avatar
      MDEV-31779 Server crash in Rows_log_event::update_sequence upon replaying binary log · 0da1653f
      Andrei authored
      The crash at running mysqlbinlog on a SEQUENCE containing binlog file
      was caused MDEV-29621 fixes that did not check which of the slave
      or binlog applier executes a block introduced there.
      
      The block is meaningful only for the parallel slave applier, so
      it's safe to fix this bug with identified the actual applier and
      skipping the block when it's the mysqlbinlog one.
      0da1653f
    • Alexander Barkov's avatar
      MDEV-29149 Assertion `!is_valid_datetime() ||... · b697dce8
      Alexander Barkov authored
      MDEV-29149 Assertion `!is_valid_datetime() || fraction_remainder(((item->decimals) < (6) ? (item->decimals) : (6))) == 0' failed in Datetime_truncation_not_needed::Datetime_truncation_not_needed
      
      TIME-alike string and numeric arguments to TIMEDIFF()
      can get additional fractional seconds during the supported
      TIME range adjustment in get_time().
      
      For example, during TIMEDIFF('839:00:00','00:00:00') evaluation
      in Item_func_timediff::get_date(), the call for args[0]->get_time()
      returns MYSQL_TIME '838:59:59.999999'.
      
      Item_func_timediff::get_date() did not handle these extra digits
      and returned a MYSQL_TIME result with fractional digits outside
      of Item_func_timediff::decimals. This mismatch could further be
      caught by a DBUG_ASSERT() in various other pieces of the code,
      leading to a crash.
      
      Fix:
      
      In case if get_time() returned MYSQL_TIMESTAMP_TIME,
      let's truncate all extra digits using my_time_trunc(&l_time,decimals).
      This guarantees that the rest of the code returns a MYSQL_TIME
      with second_part not conflicting with Item_func_timediff::decimals.
      b697dce8
    • Jan Lindström's avatar
      MDEV-25089 : Assertion `error.len > 0' failed in galera::ReplicatorSMM::handle_apply_error() · 0304dbc3
      Jan Lindström authored
      Additional corrections after merge from 10.4 branch
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      0304dbc3
    • Alexander Barkov's avatar
      MDEV-28366 GLOBAL debug_dbug setting affected by collation_connection=utf16... · 9fb8881e
      Alexander Barkov authored
      When the system variables @@debug_dbug was assigned to
      some expression, Sys_debug_dbug::do_check() did not properly
      convert the value from the expression character set to utf8.
      So the value was erroneously re-interpretted as utf8 without
      conversion. In case of a tricky expression character set
      (e.g. utf16le), this led to unexpected results.
      
      Fix:
      
      Re-using Sys_var_charptr::do_string_check() in Sys_debug_dbug::do_check().
      9fb8881e
  2. 09 Apr, 2024 7 commits
    • Brandon Nesterenko's avatar
      MDEV-30260: Slave crashed:reload_acl_and_cache during shutdown · 952ab9a5
      Brandon Nesterenko authored
      The signal handler thread can use various different runtime
      resources when processing a SIGHUP (e.g. master-info information)
      due to calling into reload_acl_and_cache(). Currently, the shutdown
      process waits for the termination of the signal thread after
      performing cleanup. However, this could cause resources actively
      used by the signal handler to be freed while reload_acl_and_cache()
      is processing.
      
      The specific resource that caused MDEV-30260 is a race condition for
      the hostname_cache, such that mysqld would delete it in
      clean_up()::hostname_cache_free(), before the signal handler would
      use it in reload_acl_and_cache()::hostname_cache_refresh().
      
      Another similar resource is the active_mi/master_info_index. There
      was a race between its deletion by the main thread in end_slave(),
      and their usage by the Signal Handler as a part of
      Master_info_index::flush_all_relay_logs.read(active_mi) in
      reload_acl_and_cache().
      
      This patch fixes these race conditions by relocating where server
      shutdown waits for the signal handler to die until after
      server-level threads have been killed (i.e., as a last step of
      close_connections()). With respect to the hostname_cache, active_mi
      and master_info_cache, this ensures that they cannot be destroyed
      while the signal handler is still active, and potentially using
      them.
      
      Additionally:
      
       1) This requires that Events memory is still in place for SIGHUP
      handling's mysql_print_status(). So event deinitialization is moved
      into clean_up(), but the event scheduler still needs to be stopped
      in close_connections() at the same spot.
      
       2) The function kill_server_thread is no longer used, so it is
      deleted
      
       3) The timeout to wait for the death of the signal thread was not
      consistent with the comment. The comment mentioned up to 10 seconds,
      whereas it was actually 0.01s. The code has been fixed to wait up to
      10 seconds.
      
       4) A warning has been added if the signal handler thread fails to
      exit in time.
      
       5) Added pthread_join() to end of wait_for_signal_thread_to_end()
      if it hadn't ended in 10s with a warning. Note this also removes
      the pthread_detached attribute from the signal_thread to allow
      for the pthread_join().
      
      Reviewed By:
      ===========
      Vladislav Vaintroub <wlad@mariadb.com>
      Andrei Elkin <andrei.elkin@mariadb.com>
      952ab9a5
    • Sergei Golubchik's avatar
      MDEV-33867 main.query_cache_debug fails with heap-use-after-free · 4980fcb9
      Sergei Golubchik authored
      What's happening:
      1. Query_cache::insert() locks the QC and verifies that it's enabled
      2. parallel thread tries to disable it. trylock fails (QC is locked)
         so the status becomes DISABLE_REQUEST
      3. Query_cache::insert() calls Query_cache::write_result_data()
         which allocates a new block and unlocks the QC.
      4. Query_cache::unlock() notices there are no more QC users and a
         pending DISABLE_REQUEST so it disables the QC and frees all the
         memory, including the new block that was just allocated
      5. Query_cache::write_result_data() proceeds to write into the freed block
      
      Fix: change m_cache_status under a mutex.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      4980fcb9
    • Alexander Barkov's avatar
      MDEV-18898 SELECT using wrong index when using operator IN with mixed types · d4936c8b
      Alexander Barkov authored
      These patches:
      
        # commit 74891ed2
        #
        #  MDEV-11514, MDEV-11497, MDEV-11554, MDEV-11555 - IN and CASE type aggregation problems
      
        # commit 53499cd1
        #
        # MDEV-31303 Key not used when IN clause has both signed and usigned values
      
      earlier fixed MDEV-18898.
      
      Adding only an MTR case.
      
      	modified:   mysql-test/main/func_in.result
      	modified:   mysql-test/main/func_in.test
      d4936c8b
    • Jan Lindström's avatar
      MDEV-33828 : Transactional commit not supported by involved engine(s) · 7aa86eb1
      Jan Lindström authored
      Problem was too tight condition on ha_commit_trans to not
      allow non transactional storage engines participate 2pc
      in Galera case. This is required because transaction
      using e.g. procedures might read mysql.proc table inside
      a trasaction and these tables use at the moment Aria
      storage engine that does not support 2pc.
      
      Fixed by allowing read only transactions to storage
      engines that do not support two phase commit to participate
      2pc transaction. These will be committed later separately.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      7aa86eb1
    • Julius Goryavsky's avatar
      galera: wsrep-lib submodule update · 3003a3da
      Julius Goryavsky authored
      3003a3da
    • Alexander Barkov's avatar
      MDEV-18319 BIGINT UNSIGNED Performance issue · 6606abb6
      Alexander Barkov authored
      The patch for MDEV-18319 BIGINT UNSIGNED Performance issue
      fixed this problem in 10.5.23.
      
      This patch adds only an MTR test to cover MDEV-18319.
      6606abb6
    • Vladislav Vaintroub's avatar
      MDEV-33840 tpool : switch off maintenance timer when not needed. · 09bae92c
      Vladislav Vaintroub authored
      Before patch, maintenance timer will tick every 0.4 seconds.
      After this patch, timer will tick every 0.4 seconds when necessary(
      there are delayed thread creation), switching off completely after 20
      seconds of being idle.
      09bae92c
  3. 08 Apr, 2024 5 commits
  4. 07 Apr, 2024 2 commits
  5. 06 Apr, 2024 1 commit
    • Sergei Golubchik's avatar
      sporadic failures of main.mdl_sync · a7bf0a42
      Sergei Golubchik authored
      main.mdl_sync 'innodb'                   w32 [ fail ]
              Test ended at 2024-04-06 14:11:15
      
      CURRENT_TEST: main.mdl_sync
      --- main/mdl_sync.result
      +++ main/mdl_sync.reject
      @@ -2458,6 +2458,7 @@
       SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
       LOCK_MODE	LOCK_TYPE	TABLE_SCHEMA	TABLE_NAME
       MDL_BACKUP_FTWRL2	Backup lock
      +MDL_SHARED	Table metadata lock	test	t2
       unlock tables;
       connection default;
       # Reaping UPDATE
      a7bf0a42
  6. 05 Apr, 2024 13 commits
  7. 04 Apr, 2024 1 commit
    • sjaakola's avatar
      MDEV-33749 hyphen in table name can cause galera certification failures · 2fcf2ec2
      sjaakola authored
      Fix in this commit handles foreign key value appending into write set
      so that db and table names are converted from the filepath format
      to tablename format. This is compatible with key values appended from
      elsewhere in the code base
      
      There is a mtr test galera.galera_table_with_hyphen for regression testing
      
      Reviewer: monty@mariadb.com
      2fcf2ec2
  8. 02 Apr, 2024 1 commit
  9. 29 Mar, 2024 1 commit
    • Alexander Barkov's avatar
      MDEV-33788 HEX(COLUMN_CREATE(.. AS CHAR ...)) fails with --view-protocol · 29bb321f
      Alexander Barkov authored
      Item_func_dyncol_create::print_arguments() printed only CHARSET clause
      without COLLATE.
      
      Therefore,
      
      HEX(column_create(1,'1212' AS CHAR CHARACTER SET utf8mb3 COLLATE utf8mb3_bin))
      
      inside a VIEW changed to just:
      
      HEX(column_create(1,'1212' AS CHAR CHARACTER SET utf8mb3))
      
      which changed the collation ID seen in the HEX output.
      
      Note, the collation ID inside column_create() is not really much important.
      (It's only important what the character set is).
      And for COLLATE, the more important thing is what's later written
      in the AS clause of COLUMN_GET:
      
      SELECT
         COLUMN_GET(
          column_create(1,'1212' AS CHAR CHARACTER SET utf8mb3 COLLATE utf8mb3_bin)
          column_nr AS type  -- this type is more important
         );
      
      Still, let's add the COLLATE clause into the COLUMN_CREATE() print output,
      although it's not important for now for anything else than just the HEX output.
      At least to make VIEW work in a more predictable way with HEX(COLUMN_CREATE()).
      
      Also, in the future we can start using somehow the collation ID written inside
      COLUMN_CREATE(), for example by making the `AS type` clause optional in
      COLUMN_GET():
        COLUMN_GET(dyncol_blob, column_nr [AS type]);
      instead of:
        COLUMN_GET(dyncol_blob, column_nr AS type);
      
      SQL Server compatibility layer may need this for
      the SQL_Variant data type support.
      29bb321f
  10. 28 Mar, 2024 3 commits
    • Dmitry Shulga's avatar
      MDEV-33768: Memory leak found in the test main.constraints run with... · e1876e7f
      Dmitry Shulga authored
      MDEV-33768: Memory leak found in the test main.constraints run with --ps-protocol against a server built with the option -DWITH_PROTECT_STATEMENT_MEMROOT
      
      The discovered memory leak was introduced by the commit
        762bf7a0
          (MDEV-22602 Disable UPDATE CASCADE for SQL constraints)
      
      The reason why a memory leaked on running the test main.constraints
      is that a statement arena was used for allocation a memory
      for storing a constraint name. A constraint name is an entity having
      temporary nature by its design so runtime arena should be used for its
      allocation.
      e1876e7f
    • Dmitry Shulga's avatar
      MDEV-33767: Memory leaks found in some tests run with --ps-protocol against a... · f44e41db
      Dmitry Shulga authored
      MDEV-33767: Memory leaks found in some tests run with --ps-protocol against a server built with the option -DWITH_PROTECT_STATEMENT_MEMROOT
      
      Found memory leaks were introduced by the commit
        a896bebf
        MDEV-18844 Implement EXCEPT ALL and INTERSECT ALL operations
      and caused by using a statement arena instead a runtime arena for
      allocation of objects having temporary life span by their nature.
      Aforementioned memory leaks were produced by running queries
      that typically use select with intersect, union or table values
      constructors.
      
      To fix these memory leaks use the runtime arena for allocation
      of Item_field objects used by set operations.
      
      Additionally, OOM handling added on allocation of aforementioned
      Item_field objects.
      f44e41db
    • Daniel Black's avatar
      MDEV-33044 Loading time zones does not work with alter_algorithm INPLACE (postfix) · 9f1019ba
      Daniel Black authored
      Test case doesn't work on embedded builds.
      9f1019ba
  11. 27 Mar, 2024 2 commits
    • Anson Chung's avatar
      MDEV-33044 Loading time zones does not work with alter_algorithm INPLACE · 7890388d
      Anson Chung authored
      $MYSQL_TZINFO_TO_SQL works by truncating tables. Truncation is an
      operation that cannot be done in-place and therefore is fundamentally
      incompatible with alter_algorithm='INPLACE'. As a result, we override
      the default alter_algorithm setting in tztime.cc to
      alter_algorithm='COPY' so that timezones can be loaded regardless
      of the previously set alter_algorithm.
      
      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.
      7890388d
    • Sergei Golubchik's avatar
      Fixed random failure in main.kill_processlist-6619 · 81f75ca8
      Sergei Golubchik authored
      wait for all previous connections to disconnect and for all previous
      queries to finish running
      81f75ca8