1. 27 Jun, 2023 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31086 MODIFY COLUMN can break FK constraints, and lead to unrestorable dumps · 5f09b53b
      Thirunarayanan Balathandayuthapani authored
      - When foreign_key_check is disabled, allowing to modify the
      column which is part of foreign key constraint can lead to
      refusal of TRUNCATE TABLE, OPTIMIZE TABLE later. So it make
      sense to block the column modify operation when foreign key
      is involved irrespective of foreign_key_check variable.
      
      Correct way to modify the charset of the column when fk is involved:
      
      SET foreign_key_checks=OFF;
      ALTER TABLE child DROP FOREIGN KEY fk, MODIFY m VARCHAR(200) CHARSET utf8mb4;
      ALTER TABLE parent MODIFY m VARCHAR(200) CHARSET utf8mb4;
      ALTER TABLE child ADD CONSTRAINT FOREIGN KEY (m) REFERENCES PARENT(m);
      SET foreign_key_checks=ON;
      
      fk_check_column_changes(): Remove the FOREIGN_KEY_CHECKS while
      checking the column change for foreign key constraint. This
      is the partial revert of commit 5f1f2fc0
      and it changes the behaviour of copy alter algorithm
      
      ha_innobase::prepare_inplace_alter_table(): Find the modified
      column and check whether it is part of existing and newly
      added foreign key constraint.
      5f09b53b
    • Yuchen Pei's avatar
      MDEV-29447 MDEV-26285 MDEV-31338 Refactor spider_db_mbase_util::open_item_func · 423c28f0
      Yuchen Pei authored
      spider_db_mbase_util::open_item_func() is a monster function.
      It is difficult to maintain while it is expected that we need to
      modify it when a new SQL function or a new func_type is added.
      
      We split the function into two distinct functions: one handles the
      case of str != NULL and the other handles the case of str == NULL.
      
      This refactoring was done in a conservative way because we do not
      have comprehensive tests on the function.
      
      It also fixes MDEV-29447 and MDEV-31338 where field items that are
      arguments of a func item may be used before created / initialised.
      
      Note this commit is adapted from a patch by Nayuta for MDEV-26285.
      423c28f0
  2. 26 Jun, 2023 1 commit
  3. 22 Jun, 2023 2 commits
  4. 19 Jun, 2023 1 commit
  5. 08 Jun, 2023 2 commits
  6. 07 Jun, 2023 3 commits
  7. 06 Jun, 2023 2 commits
  8. 05 Jun, 2023 2 commits
    • Brandon Nesterenko's avatar
      MDEV-13915: STOP SLAVE takes very long time on a busy system · 0a99d457
      Brandon Nesterenko authored
      The problem is that a parallel replica would not immediately stop
      running/queued transactions when issued STOP SLAVE. That is, it
      allowed the current group of transactions to run, and sometimes the
      transactions which belong to the next group could be started and run
      through commit after STOP SLAVE was issued too, if the last group
      had started committing. This would lead to long periods to wait for
      all waiting transactions to finish.
      
      This patch updates a parallel replica to try and abort immediately
      and roll-back any ongoing transactions. The exception to this is any
      transactions which are non-transactional (e.g. those modifying
      sequences or non-transactional tables), and any prior transactions,
      will be run to completion.
      
      The specifics are as follows:
      
       1. A new stage was added to SHOW PROCESSLIST output for the SQL
      Thread when it is waiting for a replica thread to either rollback or
      finish its transaction before stopping. This stage presents as
      “Waiting for worker thread to stop”
      
       2. Worker threads which error or are killed no longer perform GCO
      cleanup if there is a concurrently running prior transaction. This
      is because a worker thread scheduled to run in a future GCO could be
      killed and incorrectly perform cleanup of the active GCO.
      
       3. Refined cases when the FL_TRANSACTIONAL flag is added to GTID
      binlog events to disallow adding it to transactions which modify
      both transactional and non-transactional engines when the binlogging
      configuration allow the modifications to exist in the same event,
      i.e. when using binlog_direct_non_trans_update == 0 and
      binlog_format == statement.
      
       4. A few existing MTR tests relied on the completion of certain
      transactions after issuing STOP SLAVE, and were re-recorded
      (potentially with added synchronizations) under the new rollback
      behavior.
      
      Reviewed By
      ===========
      Andrei Elkin <andrei.elkin@mariadb.com>
      0a99d457
    • Sergei Petrunia's avatar
      MDEV-31403: Server crashes in st_join_table::choose_best_splitting · 928012a2
      Sergei Petrunia authored
      The code in choose_best_splitting() assumed that the join prefix is
      in join->positions[].
      
      This is not necessarily the case. This function might be called when
      the join prefix is in join->best_positions[], too.
      Follow the approach from best_access_path(), which calls this function:
      pass the current join prefix as an argument,
      "const POSITION *join_positions" and use that.
      928012a2
  9. 04 Jun, 2023 1 commit
  10. 03 Jun, 2023 5 commits
  11. 02 Jun, 2023 9 commits
  12. 01 Jun, 2023 1 commit
  13. 31 May, 2023 2 commits
  14. 27 May, 2023 1 commit
  15. 25 May, 2023 1 commit
  16. 24 May, 2023 1 commit
  17. 22 May, 2023 2 commits
    • Jan Lindström's avatar
      MDEV-30197 : Missing DBUG_RETURN or DBUG_VOID_RETURN macro in function... · 9f909e54
      Jan Lindström authored
      MDEV-30197 : Missing DBUG_RETURN or DBUG_VOID_RETURN macro in function "Wsrep_schema::restore_view()"
      
      Here user is starting server with unsupported client charset.
      We need to create wsrep_schema tables using explicit latin1
      charset to avoid errors in restoring view.
      9f909e54
    • Daniele Sciascia's avatar
      MDEV-30855 Remove test galera.galera_bf_abort_group_commit · 1ac00c5e
      Daniele Sciascia authored
      This test was re-enabled in commit 0174a9ff, and
      has been failing since then.
      The test is configured such that Galera runs with commit ordering
      disabled, a configuration which is which was meant for testing the
      performance penalty of commit ordering (not meant to be used in
      practice).
      Moreover, we have test galera_sr.galera_sr_bf_abort, which is
      identical, but runs with commit ordering enabled.
      No reasons to keep the failing test around.
      1ac00c5e
  18. 21 May, 2023 1 commit
    • Teemu Ollakka's avatar
      MDEV-29293 MariaDB stuck on starting commit state · 6966d7fe
      Teemu Ollakka authored
      This is a backport from 10.5.
      
      The problem seems to be a deadlock between KILL command execution
      and BF abort issued by an applier, where:
      * KILL has locked victim's LOCK_thd_kill and LOCK_thd_data.
      * Applier has innodb side global lock mutex and victim trx mutex.
      * KILL is calling innobase_kill_query, and is blocked by innodb
        global lock mutex.
      * Applier is in wsrep_innobase_kill_one_trx and is blocked by
        victim's LOCK_thd_kill.
      
      The fix in this commit removes the TOI replication of KILL command
      and makes KILL execution less intrusive operation. Aborting the
      victim happens now by using awake_no_mutex() and ha_abort_transaction().
      If the KILL happens when the transaction is committing, the
      KILL operation is postponed to happen after the statement
      has completed in order to avoid KILL to interrupt commit
      processing.
      
      Notable changes in this commit:
      * wsrep client connections's error state may remain sticky after
        client connection is closed. This error message will then pop
        up for the next client session issuing first SQL statement.
        This problem raised with test galera.galera_bf_kill.
        The fix is to reset wsrep client error state, before a THD is
        reused for next connetion.
      * Release THD locks in wsrep_abort_transaction when locking
        innodb mutexes. This guarantees same locking order as with applier
        BF aborting.
      * BF abort from MDL was changed to do BF abort on server/wsrep-lib
        side first, and only then do the BF abort on InnoDB side. This
        removes the need to call back from InnoDB for BF aborts which originate
        from MDL and simplifies the locking.
      * Removed wsrep_thd_set_wsrep_aborter() from service_wsrep.h.
        The manipulation of the wsrep_aborter can be done solely on
        server side. Moreover, it is now debug only variable and
        could be excluded from optimized builds.
      * Remove LOCK_thd_kill from wsrep_thd_LOCK/UNLOCK to allow more
        fine grained locking for SR BF abort which may require locking
        of victim LOCK_thd_kill. Added explicit call for
        wsrep_thd_kill_LOCK/UNLOCK where appropriate.
      * Wsrep-lib was updated to version which allows external
        locking for BF abort calls.
      
      Changes to MTR tests:
      * Disable galera_bf_abort_group_commit. This test is going to
        be removed (MDEV-30855).
      * Record galera_gcache_recover_manytrx as result file was incomplete.
        Trivial change.
      * Make galera_create_table_as_select more deterministic:
        Wait until CTAS execution has reached MDL wait for multi-master
        conflict case. Expected error from multi-master conflict is
        ER_QUERY_INTERRUPTED. This is because CTAS does not yet have open
        wsrep transaction when it is waiting for MDL, query gets interrupted
        instead of BF aborted. This should be addressed in separate task.
      * A new test galera_kill_group_commit to verify correct behavior
        when KILL is executed while the transaction is committing.
      Co-authored-by: default avatarSeppo Jaakola <seppo.jaakola@iki.fi>
      Co-authored-by: default avatarJan Lindström <jan.lindstrom@galeracluster.com>
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      6966d7fe
  19. 20 May, 2023 1 commit
    • Oleg Smirnov's avatar
      MDEV-30143 Segfault on select query using index for group-by and filesort · 60f0765b
      Oleg Smirnov authored
      The problem was trying to access JOIN_TAB::select which is set to NULL
      when using the filesort. The correct way is accessing either
      JOIN_TAB::select or JOIN_TAB::filesort->select depending on whether
      the filesort is used.
      This commit introduces member function JOIN_TAB::get_sql_select()
      encapsulating that check so the code duplication is eliminated.
      
      The new condition (s->table->quick_keys.is_set(best_key->key))
      was added to  best_access_path() to eliminate a Valgrind error.
      The cause of that error was using TRASH_ALLOC(quick_key_parts)
      instead of bzero(quick_key_parts); hence, accessing
      s->table->quick_key_parts[best_key->key]) without prior checking
      for quick_keys.is_set() might have caused reading "dirty" memory
      60f0765b