An error occurred fetching the project authors.
  1. 03 Nov, 2023 1 commit
    • Kristian Nielsen's avatar
      MDEV-32672: Don't hold LOCK_thd_data over commit_ordered · 3c1f324a
      Kristian Nielsen authored
      Partial revert of this commit:
      
        commit 6b685ea7
        Author: Sergei Golubchik <serg@mariadb.org>
        Date:   Wed Sep 28 18:55:15 2022 +0200
      
      Don't hold LOCK_thd_data over run_commit_ordered(). Holding the mutex
      is unnecessary and will deadlock if any code in a commit_ordered
      handlerton call tries to take the mutex to change THD local data.
      
      Instead, set the current_thd for the duration of the call to keep
      asserts happy around LOCK_thd_data.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      3c1f324a
  2. 10 Aug, 2023 1 commit
  3. 12 Jul, 2023 1 commit
  4. 06 Jun, 2023 1 commit
    • Sergei Golubchik's avatar
      MDEV-31183 binlog_encryption.encrypted_master_switch_to_unencrypted_gtid fails... · 677d6f0f
      Sergei Golubchik authored
      MDEV-31183 binlog_encryption.encrypted_master_switch_to_unencrypted_gtid fails in BB with UBSAN runtime error: downcast of address
      
      sql/log.cc:11101:56: runtime error: downcast of address 0x7f9dc801e9c8 which does not point to an object of type 'Gtid_list_log_event'
      sql/sql_repl.cc:1429:12: runtime error: member call on address 0x7f1ca401ea48 which does not point to an object of type 'Gtid_list_log_event'
      677d6f0f
  5. 24 Apr, 2023 1 commit
    • Brandon Nesterenko's avatar
      MDEV-28798: Previously Binlog Encrypted Master Segfaults on Binlog Dump with Using_Gtid=Slave_Pos · d3e7dba3
      Brandon Nesterenko authored
      Problem:
      ========
      A master can segfault if it can't set up decryption for its binary
      log during a binlog dump with Using_Gtid=Slave_Pos. If slave
      connects using GTID mode, the master will call into
      log.cc::get_gtid_list_event(), which iterate through binlog events
      looking for a Gtid_list_log_event. On an encrypted binlog that the
      master cannot decrypt, the first event will be a
      START_ENCRYPTION_EVENT which will call into the following decryption branch
      
      if (fdle->start_decryption((Start_encryption_log_event*) ev))
        errormsg= ‘Could not set up decryption for binlog.’;
      
      The event iteration however, does not stop in spite of this error.
      The master will try to read the next event, but segfault while
      trying to decrypt it because decryption failed to initialize.
      
      Solution:
      ========
      Break the event iteration if decryption cannot be set up.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      d3e7dba3
  6. 10 Apr, 2023 1 commit
  7. 09 Feb, 2023 1 commit
    • Vicențiu Ciorbaru's avatar
      Apply clang-tidy to remove empty constructors / destructors · 08c85202
      Vicențiu Ciorbaru authored
      This patch is the result of running
      run-clang-tidy -fix -header-filter=.* -checks='-*,modernize-use-equals-default' .
      
      Code style changes have been done on top. The result of this change
      leads to the following improvements:
      
      1. Binary size reduction.
      * For a -DBUILD_CONFIG=mysql_release build, the binary size is reduced by
        ~400kb.
      * A raw -DCMAKE_BUILD_TYPE=Release reduces the binary size by ~1.4kb.
      
      2. Compiler can better understand the intent of the code, thus it leads
         to more optimization possibilities. Additionally it enabled detecting
         unused variables that had an empty default constructor but not marked
         so explicitly.
      
         Particular change required following this patch in sql/opt_range.cc
      
         result_keys, an unused template class Bitmap now correctly issues
         unused variable warnings.
      
         Setting Bitmap template class constructor to default allows the compiler
         to identify that there are no side-effects when instantiating the class.
         Previously the compiler could not issue the warning as it assumed Bitmap
         class (being a template) would not be performing a NO-OP for its default
         constructor. This prevented the "unused variable warning".
      08c85202
  8. 23 Jan, 2023 1 commit
    • Andrei's avatar
      MDEV-30423 Deadlock on Replica during BACKUP STAGE BLOCK_COMMIT on XA transactions · dc646c23
      Andrei authored
      The user XA commit execution branch was caught not have been covered
      with MDEV-21953 fixes.
      
      The XA involved deadlock is resolved now to apply the former fixes
      pattern.
      Along the fixes the following changes have been implemented.
      - MDL lock attribute correction
      - dissociation of the externally completed XA from the current
        thread's xid_state in the error branches
      - cleanup_context() preseves the prepared XA
      - wait_for_prior_commit() is relocated to satisfy both
        the binlog ON (log-slave-updates and skip-log-bin)
        and OFF slave execution branches.
      dc646c23
  9. 17 Nov, 2022 1 commit
    • Alexander Barkov's avatar
      MDEV-29473 UBSAN: Signed integer overflow: X * Y cannot be represented in type... · 6216a2df
      Alexander Barkov authored
      MDEV-29473 UBSAN: Signed integer overflow: X * Y cannot be represented in type 'int' in strings/dtoa.c
      
      Fixing a few problems relealed by UBSAN in type_float.test
      
      - multiplication overflow in dtoa.c
      
      - uninitialized Field::geom_type (and Field::srid as well)
      
      - Wrong call-back function types used in combination with SHOW_FUNC.
        Changes in the mysql_show_var_func data type definition were not
        properly addressed all around the code by the following commits:
          b4ff6456
          18feb62f
          0ee879ff
      
        Adding a helper SHOW_FUNC_ENTRY() function and replacing
        all mysql_show_var_func declarations using SHOW_FUNC
        to SHOW_FUNC_ENTRY, to catch mysql_show_var_func in the future
        at compilation time.
      6216a2df
  10. 25 Oct, 2022 1 commit
    • Brandon Nesterenko's avatar
      MDEV-25616 XA PREPARE event group is not binlogged when.. · 42802ad6
      Brandon Nesterenko authored
      the only query of the XA transaction is on a non-transactional table
      errors out:
      
      XA BEGIN 'x';
      --error ER_DUP_ENTRY
      INSERT INTO t1 VALUES (1),(1);
      XA END 'x';
      XA PREPARE 'x';
      
      The binlogging pattern is correctly started as expected with
      the errored-out Query or its ROW format events, but there is
      no empty XA_prepare_log_event group.
      The following
      
      XA COMMIT 'x';
      
      therefore should not be logged either, but it does.
      
      The bug is fixed with proper maintaining of a read-write binlog hton
      property and use it to enforce correct binlogging decisions.
      Specifically in the bug description case XA COMMIT won't be binlogged
      in both when given in the same connection and externally after disconnect.
      The same continue to apply to an empty XA that do not change any data in all
      transactional engines involved.
      42802ad6
  11. 29 Sep, 2022 1 commit
    • Sergei Golubchik's avatar
      correctness assert · 6b685ea7
      Sergei Golubchik authored
      thd_get_ha_data() can be used without a lock, but only from the
      current thd thread, when calling from anoher thread it *must*
      be protected by thd->LOCK_thd_data
      
      * fix group commit code to take thd->LOCK_thd_data
      * remove innobase_close_connection() from the innodb background thread,
        it's not needed after 87775402 and was failing the assert with
        current_thd==0
      6b685ea7
  12. 23 Sep, 2022 1 commit
    • Marko Mäkelä's avatar
      Fix build without either ENABLED_DEBUG_SYNC or DBUG_OFF · 3c92050d
      Marko Mäkelä authored
      There are separate flags DBUG_OFF for disabling the DBUG facility
      and ENABLED_DEBUG_SYNC for enabling the DEBUG_SYNC facility.
      Let us allow debug builds without DEBUG_SYNC.
      
      Note: For CMAKE_BUILD_TYPE=Debug, CMakeLists.txt will continue to
      define ENABLED_DEBUG_SYNC.
      3c92050d
  13. 09 Sep, 2022 1 commit
    • Andrei's avatar
      MDEV-24660 MYSQL_BIN_LOG::cleanup(): Assertion `b->xid_count == 0' · bc12478a
      Andrei authored
      The shutdown time assert was caused by untimely deactivation of
      the binlog background thread and related structs destruction.
      It could specifically occur when a transaction is replication unsafe
      and has to be completed with a ROLLBACK event in binlog.
      
      This gets fixed with the binlog background thread stop relocation
      to a point and user transactions have been completed.
      A test case is added to binlog.binlog_checkpoint which
      also receives as a bonus a minor correction to reactivate a MDEV-4322 test
      case that originally required a shutdown phase (that ceased to do).
      bc12478a
  14. 26 Jul, 2022 1 commit
    • Andrei's avatar
      MDEV-28948 FLUSH BINARY LOGS waits/hangs on mysql_mutex_unlock(&LOCK_index) · 5bf4dee3
      Andrei authored
      The hang may be caused by a 1pc branch that was fixed by MDEV-26031 in
      10.6 and up. That commit did not look relevant in 10.5 and below
      so  was not pushed to the low branches.
      
      To possibly tackle the reported issue
      the MDEV-26031 is backported now with a test that
      unlike 10.6 does not expose the former bug in 10.5.
      It is only needed for checking a refined logics
      inside MYSQL_BIN_LOG::write_transaction_to_binlog.
      The latter is made to do away with xid-unlogging (which is suspected
      to have been at fault) for xid-less transaction.
      5bf4dee3
  15. 25 Jul, 2022 1 commit
    • Brandon Nesterenko's avatar
      MDEV-21087/MDEV-21433: ER_SLAVE_INCIDENT arrives at slave without failure specifics · 555c12a5
      Brandon Nesterenko authored
      Problem:
      =======
      
      This patch addresses two issues:
      
       1. An incident event can be incorrectly reported for transactions
      which are rolled back successfully. That is, an incident event
      should only be generated for failed “non-transactional transactions”
      (i.e., those which modify non-transactional tables) because they
      cannot be rolled back.
      
       2. When the mariadb slave (error) stops at receiving the incident
      event there's no description of what led to it. Neither in the event
      nor in the master's error log.
      
      Solution:
      ========
      
      Before reporting an incident event for a transaction, first validate
      that it is “non-transactional” (i.e. cannot be safely rolled back).
      To determine if a transaction is non-transactional,
        lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE)
      is used because it is set previously in
      THD::decide_logging_format().
      
      Additionally, when an incident event is written, write an error
      message to the server’s error log to indicate the underlying issue.
      
      Reviewed by:
      ===========
      Andrei Elkin <andrei.elkin@mariadb.com>
      555c12a5
  16. 30 May, 2022 1 commit
    • mkaruza's avatar
      MDEV-27862 Galera should replicate nextval()-related changes in sequences with... · ebbd5ef6
      mkaruza authored
      MDEV-27862 Galera should replicate nextval()-related changes in sequences with INCREMENT <> 0, at least NOCACHE ones with engine=InnoDB
      
      Sequence storage engine is not transactionl so cache will be written in
      stmt_cache that is not replicated in cluster. To fix this replicate
      what is available in both trans_cache and stmt_cache.
      
      Sequences will only work when NOCACHE keyword is used when sequnce is
      created. If WSREP is enabled and we don't have this keyword report error
      indicting that sequence will not work correctly in cluster.
      
      When binlog is enabled statement cache will be cleared in transaction
      before COMMIT so cache generated from sequence will not be replicated.
      We need to keep cache until replication.
      
      Tests are re-recorded because of replication changes that were
      introducted with this PR.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      ebbd5ef6
  17. 12 Apr, 2022 1 commit
    • Sergei Golubchik's avatar
      MDEV-24317 Data race in LOGGER::init_error_log at sql/log.cc:1443 and in... · bbdec04d
      Sergei Golubchik authored
      MDEV-24317 Data race in LOGGER::init_error_log at sql/log.cc:1443 and in LOGGER::error_log_print at sql/log.cc:1181
      
      don't initialize error_log_handler_list in set_handlers()
      * error_log_handler_list is initialized to LOG_FILE early, in init_base()
      * set_handlers always reinitializes it to LOG_FILE, so it's pointless
      * after init_base() concurrent threads start using sql_log_warning,
        so following set_handlers() shouldn't modify error_log_handler_list
        without some protection
      bbdec04d
  18. 28 Mar, 2022 1 commit
  19. 22 Jan, 2022 1 commit
  20. 04 Jan, 2022 1 commit
    • Brandon Nesterenko's avatar
      MDEV-16091: Seconds_Behind_Master spikes to millions of seconds · 96de6bfd
      Brandon Nesterenko authored
      Problem:
      ========
      A slave’s relay log format description event is used when
      calculating Seconds_Behind_Master (SBM). This forces the SBM
      value to spike when processing these events, as their creation
      date is set to the timestamp that the IO thread begins.
      
      Solution:
      ========
      When the slave generates a format description event, mark the
      event as a relay log event so it does not update the
      rli->last_master_timestamp variable.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      96de6bfd
  21. 23 Dec, 2021 1 commit
  22. 05 Nov, 2021 1 commit
    • Andrei Elkin's avatar
      MDEV-26833 Missed statement rollback in case transaction drops or create temporary table · 561b6c7e
      Andrei Elkin authored
      When transaction creates or drops temporary tables and afterward its statement
      faces an error even the transactional table statement's cached ROW
      format events get involved into binlog and are visible after the transaction's commit.
      
      Fixed with proper analysis of whether the errored-out statement needs
      to be rolled back in binlog.
      For instance a fact of already cached CREATE or DROP for temporary
      tables by previous statements alone
      does not cause to retain the being errored-out statement events in the
      cache.
      Conversely, if the statement creates or drops a temporary table
      itself it can't be rolled back - this rule remains.
      561b6c7e
  23. 28 Oct, 2021 1 commit
    • Andrei Elkin's avatar
      MDEV-26833 Missed statement rollback in case transaction drops or create temporary table · 42ae7659
      Andrei Elkin authored
      When transaction creates or drops temporary tables and afterward its statement
      faces an error even the transactional table statement's cached ROW
      format events get involved into binlog and are visible after the transaction's commit.
      
      Fixed with proper analysis of whether the errored-out statement needs
      to be rolled back in binlog.
      For instance a fact of already cached CREATE or DROP for temporary
      tables by previous statements alone
      does not cause to retain the being errored-out statement events in the
      cache.
      Conversely, if the statement creates or drops a temporary table
      itself it can't be rolled back - this rule remains.
      42ae7659
  24. 13 Aug, 2021 1 commit
    • Brandon Nesterenko's avatar
      MDEV-20215: binlog.show_concurrent_rotate failed in buildbot with wrong result · 46c3e7e3
      Brandon Nesterenko authored
      Problem:
      =======
      There are two issues that are addressed in this patch:
       1) SHOW BINARY LOGS uses caching to store the binary logs that exist
      in the log directory; however, if new events are written to the logs,
      the caching strategy is unaware. This is okay for users, as it is
      okay for SHOW to return slightly old data. The test, however, can
      result in inconsistent data. It runs two connections concurrently,
      where one shows the logs, and the other adds a new file. The output
      of SHOW BINARY LOGS then depends on when the cache is built, with
      respect to the time that the second connection rotates the logs.
       2) There is a race condition between RESET MASTER and SHOW BINARY
      LOGS. More specifically, where they both need the binary log lock to
      begin, SHOW BINARY LOGS only needs the lock to build its cache. If
      RESET MASTER is issued after SHOW BINARY LOGS has built its cache and
      before it has returned the results, the presented data may be
      incorrect.
      
      Solution:
      ========
       1) As it is okay for users to see stale data, to make the test
      consistent, use DEBUG_SYNC to force the race condition (problem 2) to
      make SHOW BINARY LOGS build a cache before RESET MASTER is called.
      Then, use additional logic from the next part of the solution to
      rebuild the cache.
       2) Use an Atomic_counter to keep track of the number of times RESET
      MASTER has been called. If the value of the counter changes after
      building the cache, the cache should be rebuilt and the analysis
      should be restarted.
      
      Reviewed By:
      ============
      Andrei Elkin: <andrei.elkin@mariadb.com>
      46c3e7e3
  25. 28 Apr, 2021 1 commit
    • Daniele Sciascia's avatar
      MDEV-25553 : Avoid unnecessary rollbacks with SR · b1b2689f
      Daniele Sciascia authored
      This patch changes statement rollback for streaming replication.
      Previously, a statement rollback was turned into full transaction
      rollback in the case where the transaction had already replicated a
      fragment. This was introduced in the initial implementation of
      streaming replication due to the fact that we do not have a mechanism
      to perform a statement rollback on the applying side.
      This policy is however overly pessimistic, causing full rollbacks even
      in cases where a local statement rollback, would not require a
      statement rollback on the applying side. This happens to be case when
      the statement itself has not replicated any fragments.
      So the patch changes the condition that determines if a statement
      rollback should be turned into a full rollback accordingly.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      b1b2689f
  26. 21 Apr, 2021 1 commit
    • Andrei Elkin's avatar
      MDEV-24526 binlog rotate via FLUSH LOGS may obsolate binlog file for recovery too eary · 2a7dd644
      Andrei Elkin authored
      There was race between a committing transaction and the following in binlog
      order FLUSH LOGS that could create a 2nd Binlog checkpoint (BCP) event
      in the new file *before* the first logged-in-old-binlog transaction gets committed in
      Innodb. That would cause the transaction loss at recovery, should
      the server stop right after the BCP.
      
      The race is tackled by enforcing the necessary set of mutexes to be acquired
      by FLUSH-LOGS handler in the correct order (of the group commit leader
      pattern).
      
      Note, there remain two cases where a similar race is still possible:
        - the above race as it is when the server is run with ("unlikely")
          non-default `--binlog-optimize-thread-scheduling=0` (MDEV-24530), and
        - at unlikely event of bin-logging of Incident event (MDEV-24531) that
          also triggers binlog rotation,
          in both cases though with lesser chances after the current fixes.
      2a7dd644
  27. 19 Apr, 2021 1 commit
    • Andrei Elkin's avatar
      MDEV-22757 Assertion !binlog || exist_hton_without_prepare' failed in... · 675c22c0
      Andrei Elkin authored
      MDEV-22757 Assertion !binlog || exist_hton_without_prepare' failed in MYSQL_BIN_LOG::unlog_xa_prepare
      
      The assert fired falsely having not captured two more not apparent
      possiblities in its condition.
      
      They are masked out hton error out of REPLACE execution (so at later xa-prepare
      that engine is still present as read-write) and a prepare-capable engine
      which also may not be an actual participant in the xa transation. That
      engine, such as SEQUENCE, though does create its own event block.
      675c22c0
  28. 25 Mar, 2021 1 commit
    • Jan Lindström's avatar
      MDEV-24954 : 10.5.9 crashes on int wsrep::client_state::ordered_commit():... · 161f4036
      Jan Lindström authored
      MDEV-24954 : 10.5.9 crashes on int wsrep::client_state::ordered_commit(): Assertion `owning_thread_id_ == wsrep::this_thread::get_id()' failed.
      
      Binlog group commit could lead to a situation where group commit leader
      accesses participant thd's wsrep client state concurrently with the
      thread executing the participant thd.
      
      This is because of race condition in
      MYSQL_BIN_LOG::write_transaction_to_binlog_events(),
      and was fixed by moving wsrep_ordered_commit() to happen in
      MYSQL_BIN_LOG::queue_for_group_commit() under protection of
      LOCK_prepare_ordered mutex.
      161f4036
  29. 14 Feb, 2021 1 commit
    • Monty's avatar
      MDEV-23843 Assertions in Diagnostics_area upon table operations under FTWRL · af31e2c5
      Monty authored
      2 different problems:
      - MYSQL_BIN_LOG::write() did not check if mdl_context.acquire_lock() failed
      - Sql_cmd_optimize_table::execute() and Sql_cmd_repair_table::execute()
        called write_bin_log(), which could fail if sql_admin() had already
        called my_eof()
      
      Fixed by adding check for aquire_lock() return status and protect
      write_bin_log() in the above two functions with set_overwrite_status().
      af31e2c5
  30. 21 Dec, 2020 1 commit
  31. 12 Nov, 2020 1 commit
    • Sujatha's avatar
      MDEV-4633: multi_source.simple test fails sporadically · 984a06db
      Sujatha authored
      Analysis:
      ========
      Writes to 'rli->log_space_total' needs to be synchronized, otherwise both
      SQL_THREAD and IO_THREAD can try to modify the variable simultaneously
      resulting in incorrect rli->log_space_total.  In the current test scenario
      SQL_THREAD is trying to decrement 'rli->log_space_total' in 'purge_first_log'
      and IO_THREAD is trying to increment the 'rli->log_space_total' in
      'queue_event' simultaneously. Hence test occasionally fails with  result
      mismatch.
      
      Fix:
      ===
      Convert 'rli->log_space_total' variable to atomic type.
      984a06db
  32. 21 Oct, 2020 1 commit
    • Monty's avatar
      MDEV-23691 S3 storage engine: delayed slave can drop the table · 71d263a1
      Monty authored
      This commit fixed the problems with S3 after the "DROP TABLE FORCE" changes.
      It also fixes all failing replication S3 tests.
      
      A slave is delayed if it is trying to execute replicated queries on a
      table that is already converted to S3 by the master later in the binlog.
      
      Fixes for replication events on S3 tables for delayed slaves:
      - INSERT and INSERT ... SELECT and CREATE TABLE are ignored but written
        to the binary log.   UPDATE & DELETE will be fixed in a future commit.
      
      Other things:
      - On slaves with --s3-slave-ignore-updates set, allow S3 tables to be
        opened in read-write mode. This was done to be able to
        ignore-but-replicate queries like insert.  Without this change any
        open of an S3 table failed with 'Table is read only' which is too
        early to be able to replicate the original query.
      - Errors are now printed if handler::extra() call fails in
        wait_while_tables_are_used().
      - Error message for row changes are changed from HA_ERR_WRONG_COMMAND
        to HA_ERR_TABLE_READONLY.
      - Disable some maria_extra() calls for S3 tables. This could cause
        S3 tables to fail in some cases.
      - Added missing thr_lock_delete() to ma_open() in case of failure.
      - Removed from mysql_prepare_insert() the not needed argument 'table'.
      71d263a1
  33. 07 Oct, 2020 1 commit
    • Nisha Gopalakrishnan's avatar
      MDEV-4851: BUG#11763447: 'YOU CANNOT 'ALTER' A LOG TABLE IF LOGGING IS ENABLED' · 00c44fb1
      Nisha Gopalakrishnan authored
                     EVEN IF I LOG TO FILE.
      
      Analysis:
      ----------
      
      MYSQL_UPGRADE of the master breaks the replication when
      the query logging is enabled with FILE/NONE 'log-output'
      option on the slave.
      
      mysql_upgrade modifies the 'general_log' and 'slow_log'
      tables after the logging is disabled as below:
      
      SET @old_log_state = @@global.general_log;
      SET GLOBAL general_log = 'OFF';
      ALTER TABLE general_log
      MODIFY event_time TIMESTAMP NOT NULL,
      ( .... );
      SET GLOBAL general_log = @old_log_state;
      
      and
      
      SET @old_log_state = @@global.slow_query_log;
      SET GLOBAL slow_query_log = 'OFF';
      ALTER TABLE slow_log
      MODIFY start_time TIMESTAMP NOT NULL,
      ( .... );
      SET GLOBAL slow_query_log = @old_log_state;
      
      In the binary log, only the ALTER statements are logged
      but not the SET statements which turns ON/OFF the logging.
      So when the slave replays the binary log,the ALTER of LOG
      tables throws an error since the logging is enabled. Also
      the 'log-output' option is not checked to determine
      whether to allow/disallow the ALTER operation.
      
      Fix:
      ----
      The 'log-output' option is included in the check while
      determining whether the query logging happens using the
      log tables.
      
      Picked from mysql respository at 0daaf8aecd8f84ff1fb400029139222ea1f0d812
      00c44fb1
  34. 06 Oct, 2020 1 commit
  35. 02 Oct, 2020 1 commit
  36. 25 Sep, 2020 1 commit
    • Monty's avatar
      MDEV-23586 Mariabackup: GTID saved for replication in 10.4.14 is wrong · 16ea692e
      Monty authored
      MDEV-21953 deadlock between BACKUP STAGE BLOCK_COMMIT and parallel
      replication
      
      Fixed by partly reverting MDEV-21953 to put back MDL_BACKUP_COMMIT locking
      before log_and_order.
      
      The original problem for MDEV-21953 was that while a thread was waiting in
      for another threads to commit in 'log_and_order', it had the
      MDL_BACKUP_COMMIT lock. The backup thread was waiting to get the
      MDL_BACKUP_WAIT_COMMIT lock, which blocks all new MDL_BACKUP_COMMIT locks.
      This causes a deadlock as the waited-for thread can never get past the
      MDL_BACKUP_COMMIT lock in ha_commit_trans.
      
      The main part of the bug fix is to release the MDL_BACKUP_COMMIT lock while
      a thread is waiting for other 'previous' threads to commit. This ensures
      that no transactional thread keeps MDL_BACKUP_COMMIT while waiting, which
      ensures that there are no deadlocks anymore.
      16ea692e
  37. 23 Jul, 2020 1 commit
  38. 22 Jul, 2020 1 commit
  39. 03 Jul, 2020 2 commits