diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-04-27 13:28:13 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-04-27 13:28:13 +0300 |
commit | c06845d6f04e092b64c105eb6786056cea2ab593 (patch) | |
tree | cfd3f3abc32ab96fb918d3c00ffc68f072ca29bc /storage | |
parent | 2c5067b6890974d0df335a833ed7a4e4c6ced183 (diff) | |
parent | edbdfc2f995eb47ba49235195aca00888aeacbc4 (diff) | |
download | mariadb-git-c06845d6f04e092b64c105eb6786056cea2ab593.tar.gz |
Merge 10.1 into 10.2
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 128 | ||||
-rw-r--r-- | storage/innobase/include/lock0lock.h | 6 | ||||
-rw-r--r-- | storage/innobase/include/trx0trx.h | 7 | ||||
-rw-r--r-- | storage/innobase/lock/lock0lock.cc | 21 | ||||
-rw-r--r-- | storage/innobase/lock/lock0wait.cc | 10 | ||||
-rw-r--r-- | storage/innobase/row/row0ins.cc | 4 | ||||
-rw-r--r-- | storage/innobase/row/row0upd.cc | 2 | ||||
-rw-r--r-- | storage/innobase/srv/srv0conc.cc | 5 | ||||
-rw-r--r-- | storage/innobase/trx/trx0trx.cc | 12 | ||||
-rw-r--r-- | storage/maria/ha_maria.cc | 2 | ||||
-rw-r--r-- | storage/xtradb/handler/ha_innodb.cc | 122 | ||||
-rw-r--r-- | storage/xtradb/include/lock0lock.h | 3 | ||||
-rw-r--r-- | storage/xtradb/include/trx0trx.h | 14 | ||||
-rw-r--r-- | storage/xtradb/lock/lock0lock.cc | 13 | ||||
-rw-r--r-- | storage/xtradb/lock/lock0wait.cc | 7 | ||||
-rw-r--r-- | storage/xtradb/row/row0ins.cc | 4 | ||||
-rw-r--r-- | storage/xtradb/row/row0upd.cc | 4 | ||||
-rw-r--r-- | storage/xtradb/srv/srv0conc.cc | 11 | ||||
-rw-r--r-- | storage/xtradb/trx/trx0roll.cc | 11 | ||||
-rw-r--r-- | storage/xtradb/trx/trx0trx.cc | 8 |
20 files changed, 163 insertions, 231 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 10f5e0a2f4b..31841ccff2f 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1715,20 +1715,14 @@ thd_trx_is_auto_commit( /** Enter InnoDB engine after checking the max number of user threads allowed, else the thread is put into sleep. @param[in,out] prebuilt row prebuilt handler */ -static inline -void -innobase_srv_conc_enter_innodb( - row_prebuilt_t* prebuilt) +static inline void innobase_srv_conc_enter_innodb(row_prebuilt_t *prebuilt) { + trx_t* trx = prebuilt->trx; + #ifdef WITH_WSREP - if (wsrep_on(prebuilt->trx->mysql_thd) && - wsrep_thd_is_BF(prebuilt->trx->mysql_thd, FALSE)) { - return; - } + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; #endif /* WITH_WSREP */ - trx_t* trx = prebuilt->trx; - if (srv_thread_concurrency) { if (trx->n_tickets_to_enter_innodb > 0) { @@ -1755,22 +1749,16 @@ innobase_srv_conc_enter_innodb( /** Note that the thread wants to leave InnoDB only if it doesn't have any spare tickets. @param[in,out] m_prebuilt row prebuilt handler */ -static inline -void -innobase_srv_conc_exit_innodb( - row_prebuilt_t* prebuilt) +static inline void innobase_srv_conc_exit_innodb(row_prebuilt_t *prebuilt) { ut_ad(!sync_check_iterate(sync_check())); + trx_t* trx = prebuilt->trx; + #ifdef WITH_WSREP - if (wsrep_on(prebuilt->trx->mysql_thd) && - wsrep_thd_is_BF(prebuilt->trx->mysql_thd, FALSE)) { - return; - } + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; #endif /* WITH_WSREP */ - trx_t* trx = prebuilt->trx; - /* This is to avoid making an unnecessary function call. */ if (trx->declared_to_be_inside_innodb && trx->n_tickets_to_enter_innodb == 0) { @@ -2763,6 +2751,9 @@ innobase_trx_init( trx->check_unique_secondary = !thd_test_options( thd, OPTION_RELAXED_UNIQUE_CHECKS); +#ifdef WITH_WSREP + trx->wsrep = wsrep_on(thd); +#endif DBUG_VOID_RETURN; } @@ -4475,19 +4466,17 @@ innobase_commit_low( trx_t* trx) /*!< in: transaction handle */ { #ifdef WITH_WSREP - THD* thd = (THD*)trx->mysql_thd; const char* tmp = 0; - if (thd && wsrep_on(thd)) { + if (trx->is_wsrep()) { #ifdef WSREP_PROC_INFO char info[64]; info[sizeof(info) - 1] = '\0'; snprintf(info, sizeof(info) - 1, "innobase_commit_low():trx_commit_for_mysql(%lld)", - (long long) wsrep_thd_trx_seqno(thd)); - tmp = thd_proc_info(thd, info); - + (long long) wsrep_thd_trx_seqno(trx->mysql_thd)); + tmp = thd_proc_info(trx->mysql_thd, info); #else - tmp = thd_proc_info(thd, "innobase_commit_low()"); + tmp = thd_proc_info(trx->mysql_thd, "innobase_commit_low()"); #endif /* WSREP_PROC_INFO */ } #endif /* WITH_WSREP */ @@ -4497,7 +4486,7 @@ innobase_commit_low( } trx->will_lock = 0; #ifdef WITH_WSREP - if (thd && wsrep_on(thd)) { thd_proc_info(thd, tmp); } + if (trx->is_wsrep()) { thd_proc_info(trx->mysql_thd, tmp); } #endif /* WITH_WSREP */ } @@ -8113,7 +8102,7 @@ ha_innobase::write_row( { dberr_t error; #ifdef WITH_WSREP - ibool auto_inc_inserted= FALSE; /* if NULL was inserted */ + bool wsrep_auto_inc_inserted= false; #endif int error_result = 0; bool auto_inc_used = false; @@ -8144,7 +8133,7 @@ ha_innobase::write_row( } #ifdef WITH_WSREP - if (wsrep_is_load_multi_commit(m_user_thd)) + if (trx->is_wsrep() && wsrep_is_load_multi_commit(m_user_thd)) { /* Note that this transaction is still active. */ trx_register_for_2pc(m_prebuilt->trx); @@ -8161,7 +8150,9 @@ ha_innobase::write_row( m_prebuilt->autoinc_error = DB_SUCCESS; #ifdef WITH_WSREP - auto_inc_inserted= (table->next_number_field->val_int() == 0); + wsrep_auto_inc_inserted = trx->is_wsrep() + && wsrep_drupal_282555_workaround + && table->next_number_field->val_int() == 0; #endif if ((error_result = update_auto_increment())) { @@ -8255,18 +8246,14 @@ ha_innobase::write_row( m_prebuilt->autoinc_offset, m_prebuilt->autoinc_increment); - if (wsrep_on(m_user_thd) && - auto_inc_inserted && - wsrep_drupal_282555_workaround && + if (wsrep_auto_inc_inserted && wsrep_thd_retry_counter(m_user_thd) == 0 && !thd_test_options(m_user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { WSREP_DEBUG( "retrying insert: %s", - (*wsrep_thd_query(m_user_thd)) ? - wsrep_thd_query(m_user_thd) : - (char *)"void"); + wsrep_thd_query(m_user_thd)); error= DB_SUCCESS; wsrep_thd_set_conflict_state( m_user_thd, MUST_ABORT); @@ -8306,7 +8293,7 @@ set_max_autoinc: m_prebuilt autoinc values don't get properly assigned. Fetch values from server side. */ - if (wsrep_on(m_user_thd) && + if (trx->is_wsrep() && wsrep_thd_exec_mode(m_user_thd) == REPL_RECV) { wsrep_thd_auto_increment_variables( @@ -8355,8 +8342,7 @@ report_error: error, m_prebuilt->table->flags, m_user_thd); #ifdef WITH_WSREP - if (!error_result - && wsrep_on(m_user_thd) + if (!error_result && trx->is_wsrep() && wsrep_thd_exec_mode(m_user_thd) == LOCAL_STATE && !wsrep_consistency_check(m_user_thd) && !wsrep_thd_ignore_table(m_user_thd)) { @@ -8364,10 +8350,9 @@ report_error: NULL)) { DBUG_PRINT("wsrep", ("row key failed")); error_result = HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + goto func_exit; } } -wsrep_error: #endif /* WITH_WSREP */ if (error_result == HA_FTS_INVALID_DOCID) { @@ -9000,7 +8985,7 @@ ha_innobase::update_row( m_prebuilt autoinc values don't get properly assigned. Fetch values from server side. */ - if (wsrep_on(m_user_thd) && + if (trx->is_wsrep() && wsrep_thd_exec_mode(m_user_thd) == REPL_RECV) { wsrep_thd_auto_increment_variables( @@ -9051,9 +9036,8 @@ func_exit: innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && + if (error == DB_SUCCESS && trx->is_wsrep() && wsrep_thd_exec_mode(m_user_thd) == LOCAL_STATE && - wsrep_on(m_user_thd) && !wsrep_thd_ignore_table(m_user_thd)) { DBUG_PRINT("wsrep", ("update row key")); @@ -9061,14 +9045,11 @@ func_exit: new_row)) { WSREP_DEBUG("WSREP: UPDATE_ROW_KEY FAILED"); DBUG_PRINT("wsrep", ("row key failed")); - err = HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } } -wsrep_error: #endif /* WITH_WSREP */ - DBUG_RETURN(err); } @@ -9115,18 +9096,15 @@ ha_innobase::delete_row( innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS + if (error == DB_SUCCESS && trx->is_wsrep() && wsrep_thd_exec_mode(m_user_thd) == LOCAL_STATE - && wsrep_on(m_user_thd) && !wsrep_thd_ignore_table(m_user_thd)) { if (wsrep_append_keys(m_user_thd, WSREP_KEY_EXCLUSIVE, record, NULL)) { DBUG_PRINT("wsrep", ("delete fail")); - error = (dberr_t) HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } } -wsrep_error: #endif /* WITH_WSREP */ DBUG_RETURN(convert_error_code_to_mysql( error, m_prebuilt->table->flags, m_user_thd)); @@ -10320,30 +10298,27 @@ wsrep_append_foreign_key( wsrep_key_type key_type) /*!< in: access type of this key (shared, exclusive, semi...) */ { - ut_a(trx); - THD* thd = (THD*)trx->mysql_thd; - ulint rcode = DB_SUCCESS; - char cache_key[513] = {'\0'}; - int cache_key_len=0; - bool const copy = true; + THD* thd = trx->mysql_thd; - if (!wsrep_on(trx->mysql_thd) || - wsrep_thd_exec_mode(thd) != LOCAL_STATE) { + if (!trx->is_wsrep() || wsrep_thd_exec_mode(thd) != LOCAL_STATE) { return DB_SUCCESS; } - if (!thd || !foreign || + if (!foreign || (!foreign->referenced_table && !foreign->foreign_table)) { WSREP_INFO("FK: %s missing in: %s", - (!thd) ? "thread" : - ((!foreign) ? "constraint" : - ((!foreign->referenced_table) ? + (!foreign ? "constraint" : + (!foreign->referenced_table ? "referenced table" : "foreign table")), - (thd && wsrep_thd_query(thd)) ? - wsrep_thd_query(thd) : "void"); + wsrep_thd_query(thd)); return DB_ERROR; } + ulint rcode = DB_SUCCESS; + char cache_key[513] = {'\0'}; + int cache_key_len=0; + bool const copy = true; + if ( !((referenced) ? foreign->referenced_table : foreign->foreign_table)) { WSREP_DEBUG("pulling %s table into cache", @@ -15975,9 +15950,7 @@ ha_innobase::external_lock( DBUG_PRINT("enter",("lock_type: %d", lock_type)); update_thd(thd); - - trx_t* trx = m_prebuilt->trx; - + trx_t* trx = m_prebuilt->trx; ut_ad(m_prebuilt->table); /* Statement based binlogging does not work in isolation level @@ -15992,26 +15965,21 @@ ha_innobase::external_lock( && thd_binlog_format(thd) == BINLOG_FORMAT_STMT && thd_binlog_filter_ok(thd) && thd_sqlcom_can_generate_row_events(thd)) { - - bool skip = false; - + bool skip = false; +#ifdef WITH_WSREP + skip = trx->is_wsrep() + && wsrep_thd_exec_mode(thd) != LOCAL_STATE; +#endif /* WITH_WSREP */ /* used by test case */ DBUG_EXECUTE_IF("no_innodb_binlog_errors", skip = true;); if (!skip) { -#ifdef WITH_WSREP - if (!wsrep_on(thd) || wsrep_thd_exec_mode(thd) == LOCAL_STATE) - { -#endif /* WITH_WSREP */ my_error(ER_BINLOG_STMT_MODE_AND_ROW_ENGINE, MYF(0), " InnoDB is limited to row-logging when" " transaction isolation level is" " READ COMMITTED or READ UNCOMMITTED."); DBUG_RETURN(HA_ERR_LOGGING_IMPOSSIBLE); -#ifdef WITH_WSREP - } -#endif /* WITH_WSREP */ } } diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h index 21760d1dca9..6b30bc5ae1b 100644 --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2019, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1045,10 +1045,6 @@ std::string lock_get_info( const lock_t*); -/*******************************************************************//** -@return whether wsrep_on is true on trx->mysql_thd*/ -#define wsrep_on_trx(trx) ((trx)->mysql_thd && wsrep_on((trx)->mysql_thd)) - #endif /* WITH_WSREP */ #include "lock0lock.ic" diff --git a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h index 7e46304b6ee..60e6fc58089 100644 --- a/storage/innobase/include/trx0trx.h +++ b/storage/innobase/include/trx0trx.h @@ -873,6 +873,13 @@ public: rolled back by trx_rollback_or_clean_recovered(). Protected by trx_t::mutex for transactions that are in trx_sys. */ bool is_recovered; +#ifdef WITH_WSREP + /** whether wsrep_on(mysql_thd) held at the start of transaction */ + bool wsrep; + bool is_wsrep() const { return UNIV_UNLIKELY(wsrep); } +#else /* WITH_WSREP */ + bool is_wsrep() const { return false; } +#endif /* WITH_WSREP */ ReadView* read_view; /*!< consistent read view used in the transaction, or NULL if not yet set */ diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 006ecc28276..b17f2903e6e 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2019, MariaDB Corporation. +Copyright (c) 2014, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1100,9 +1100,7 @@ wsrep_kill_victim( ut_ad(trx_mutex_own(lock->trx)); /* quit for native mysql */ - if (!wsrep_on(trx->mysql_thd)) { - return; - } + if (!trx->is_wsrep()) return; my_bool bf_this = wsrep_thd_is_BF(trx->mysql_thd, FALSE); my_bool bf_other = wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE); @@ -1185,7 +1183,7 @@ lock_rec_other_has_conflicting( if (lock_rec_has_to_wait(true, trx, mode, lock, is_supremum)) { #ifdef WITH_WSREP - if (wsrep_on_trx(trx)) { + if (trx->is_wsrep()) { trx_mutex_enter(lock->trx); /* Below function will roll back either trx or lock->trx depending on priority of the @@ -1478,7 +1476,7 @@ lock_rec_create_low( ut_ad(index->table->get_ref_count() > 0 || !index->table->can_be_evicted); #ifdef WITH_WSREP - if (c_lock && wsrep_on_trx(trx) + if (c_lock && trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { lock_t *hash = (lock_t *)c_lock->hash; lock_t *prev = NULL; @@ -1879,8 +1877,7 @@ lock_rec_add_to_queue( #ifdef WITH_WSREP //ut_a(!other_lock || (wsrep_thd_is_BF(trx->mysql_thd, FALSE) && // wsrep_thd_is_BF(other_lock->trx->mysql_thd, TRUE))); - if (other_lock && - wsrep_on(trx->mysql_thd) && + if (other_lock && trx->is_wsrep() && !wsrep_thd_is_BF(trx->mysql_thd, FALSE) && !wsrep_thd_is_BF(other_lock->trx->mysql_thd, TRUE)) { @@ -3656,7 +3653,7 @@ lock_table_create( UT_LIST_ADD_LAST(trx->lock.trx_locks, lock); #ifdef WITH_WSREP - if (c_lock && wsrep_on_trx(trx)) { + if (c_lock && trx->is_wsrep()) { if (wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { ut_list_insert(table->locks, c_lock, lock, TableLockGetNode()); @@ -3886,7 +3883,7 @@ lock_table_enqueue_waiting( } #ifdef WITH_WSREP - if (trx->lock.was_chosen_as_deadlock_victim && wsrep_on_trx(trx)) { + if (trx->is_wsrep() && trx->lock.was_chosen_as_deadlock_victim) { return(DB_DEADLOCK); } #endif /* WITH_WSREP */ @@ -3959,7 +3956,7 @@ lock_table_other_has_incompatible( && (wait || !lock_get_wait(lock))) { #ifdef WITH_WSREP - if (wsrep_on(lock->trx->mysql_thd)) { + if (lock->trx->is_wsrep()) { if (wsrep_debug) { ib::info() << "WSREP: table lock abort for table:" << table->name.m_name; @@ -5253,7 +5250,7 @@ lock_rec_queue_validate( explicit granted lock. */ #ifdef WITH_WSREP - if (wsrep_on(other_lock->trx->mysql_thd)) { + if (other_lock->trx->is_wsrep()) { if (!lock_get_wait(other_lock) ) { ib::info() << "WSREP impl BF lock conflict for my impl lock:\n BF:" << ((wsrep_thd_is_BF(impl_trx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " << diff --git a/storage/innobase/lock/lock0wait.cc b/storage/innobase/lock/lock0wait.cc index 947e56ebeee..5d0d41ef494 100644 --- a/storage/innobase/lock/lock0wait.cc +++ b/storage/innobase/lock/lock0wait.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2019, MariaDB Corporation. +Copyright (c) 2014, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -192,8 +192,7 @@ wsrep_is_BF_lock_timeout( const trx_t* trx, bool locked = true) { - if (wsrep_on_trx(trx) - && wsrep_thd_is_BF(trx->mysql_thd, FALSE) + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE) && trx->error_state != DB_DEADLOCK) { ib::info() << "WSREP: BF lock wait long for trx:" << ib::hex(trx->id) << " query: " << wsrep_thd_query(trx->mysql_thd); @@ -402,8 +401,9 @@ lock_wait_suspend_thread( if (lock_wait_timeout < 100000000 && wait_time > (double) lock_wait_timeout #ifdef WITH_WSREP - && (!wsrep_on_trx(trx) || - (!wsrep_is_BF_lock_timeout(trx, false) && trx->error_state != DB_DEADLOCK)) + && (!trx->is_wsrep() + || (!wsrep_is_BF_lock_timeout(trx, false) + && trx->error_state != DB_DEADLOCK)) #endif /* WITH_WSREP */ ) { diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index c4410f15b84..5b7faa4888a 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, 2019, 2020 MariaDB Corporation. +Copyright (c) 2016, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1779,7 +1779,7 @@ row_ins_check_foreign_constraint( if (check_ref) { err = DB_SUCCESS; #ifdef WITH_WSREP - if (!wsrep_on(trx->mysql_thd)) { + if (!trx->is_wsrep()) { goto end_scan; } enum wsrep_key_type key_type; diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index 943e31d99fe..31d4d31c1f9 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -464,7 +464,7 @@ func_exit: inline bool wsrep_must_process_fk(const upd_node_t* node, const trx_t* trx) { - if (!wsrep_on_trx(trx)) { + if (!trx->is_wsrep()) { return false; } return que_node_get_type(node->common.parent) != QUE_NODE_UPDATE diff --git a/storage/innobase/srv/srv0conc.cc b/storage/innobase/srv/srv0conc.cc index 347e604479a..9936635a055 100644 --- a/storage/innobase/srv/srv0conc.cc +++ b/storage/innobase/srv/srv0conc.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2018, MariaDB Corporation. +Copyright (c) 2015, 2020, MariaDB Corporation. Portions of this file contain modifications contributed and copyrighted by Google, Inc. Those modifications are gratefully acknowledged and are described @@ -122,8 +122,7 @@ srv_conc_enter_innodb_with_atomics( for (;;) { ulint sleep_in_us; #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_trx_is_aborting(trx->mysql_thd)) { + if (trx->is_wsrep() && wsrep_trx_is_aborting(trx->mysql_thd)) { if (wsrep_debug) { ib::info() << "srv_conc_enter due to MUST_ABORT"; diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 458165a3816..80de62b8b28 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2019, MariaDB Corporation. +Copyright (c) 2015, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -102,6 +102,9 @@ trx_init( trx->state = TRX_STATE_NOT_STARTED; trx->is_recovered = false; +#ifdef WITH_WSREP + trx->wsrep = false; +#endif /* WITH_WSREP */ trx->op_info = ""; @@ -1814,12 +1817,7 @@ trx_commit_in_memory( trx_mutex_enter(trx); trx->dict_operation = TRX_DICT_OP_NONE; - -#ifdef WITH_WSREP - if (trx->mysql_thd && wsrep_on(trx->mysql_thd)) { - trx->lock.was_chosen_as_deadlock_victim = FALSE; - } -#endif + trx->lock.was_chosen_as_deadlock_victim = false; DBUG_LOG("trx", "Commit in memory: " << trx); trx->state = TRX_STATE_NOT_STARTED; diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index e82c76fd938..f1cabfd2039 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -296,7 +296,7 @@ static MYSQL_SYSVAR_BOOL(encrypt_tables, maria_encrypt_tables, PLUGIN_VAR_OPCMDA "and not FIXED/DYNAMIC)", 0, 0, 0); -#ifdef HAVE_PSI_INTERFACE +#if defined HAVE_PSI_INTERFACE && !defined EMBEDDED_LIBRARY static PSI_mutex_info all_aria_mutexes[]= { diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index 770f3dc2440..23a0e90f849 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -5,7 +5,7 @@ Copyright (c) 2013, 2018, MariaDB Corporation. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. Copyright (c) 2012, Facebook Inc. -Copyright (c) 2013, 2019, MariaDB Corporation. +Copyright (c) 2013, 2020, MariaDB Corporation. Portions of this file contain modifications contributed and copyrighted by Google, Inc. Those modifications are gratefully acknowledged and are described @@ -1939,8 +1939,7 @@ innobase_srv_conc_enter_innodb( trx_t* trx) /*!< in: transaction handle */ { #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; #endif /* WITH_WSREP */ if (srv_thread_concurrency) { if (trx->n_tickets_to_enter_innodb > 0) { @@ -1978,8 +1977,7 @@ innobase_srv_conc_exit_innodb( ut_ad(!sync_thread_levels_nonempty_trx(trx->has_search_latch)); #endif /* UNIV_SYNC_DEBUG */ #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return; #endif /* WITH_WSREP */ /* This is to avoid making an unnecessary function call. */ @@ -2922,6 +2920,9 @@ innobase_trx_init( trx->check_unique_secondary = !thd_test_options( thd, OPTION_RELAXED_UNIQUE_CHECKS); +#ifdef WITH_WSREP + trx->wsrep = wsrep_on(thd); +#endif /* Transaction on start caches the fake_changes state and uses it for complete transaction lifetime. @@ -4645,19 +4646,17 @@ innobase_commit_low( trx_t* trx) /*!< in: transaction handle */ { #ifdef WITH_WSREP - THD* thd = (THD*)trx->mysql_thd; const char* tmp = 0; - if (thd && wsrep_on(thd)) { + if (trx->is_wsrep()) { #ifdef WSREP_PROC_INFO char info[64]; info[sizeof(info) - 1] = '\0'; snprintf(info, sizeof(info) - 1, "innobase_commit_low():trx_commit_for_mysql(%lld)", - (long long) wsrep_thd_trx_seqno(thd)); - tmp = thd_proc_info(thd, info); - + (long long) wsrep_thd_trx_seqno(trx->mysql_thd)); + tmp = thd_proc_info(trx->mysql_thd, info); #else - tmp = thd_proc_info(thd, "innobase_commit_low()"); + tmp = thd_proc_info(trx->mysql_thd, "innobase_commit_low()"); #endif /* WSREP_PROC_INFO */ } #endif /* WITH_WSREP */ @@ -4666,7 +4665,7 @@ innobase_commit_low( trx_commit_for_mysql(trx); } #ifdef WITH_WSREP - if (thd && wsrep_on(thd)) { thd_proc_info(thd, tmp); } + if (trx->is_wsrep()) { thd_proc_info(trx->mysql_thd, tmp); } #endif /* WITH_WSREP */ } @@ -8676,19 +8675,19 @@ ha_innobase::write_row( sql_command = thd_sql_command(user_thd); - if ((sql_command == SQLCOM_ALTER_TABLE - || sql_command == SQLCOM_OPTIMIZE - || sql_command == SQLCOM_CREATE_INDEX + if (num_write_row >= 10000 + && (sql_command == SQLCOM_ALTER_TABLE + || sql_command == SQLCOM_OPTIMIZE + || sql_command == SQLCOM_CREATE_INDEX #ifdef WITH_WSREP - || (wsrep_on(user_thd) && wsrep_load_data_splitting && - sql_command == SQLCOM_LOAD && - !thd_test_options( - user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) + || (sql_command == SQLCOM_LOAD && + trx->is_wsrep() && wsrep_load_data_splitting && + !thd_test_options( + user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) #endif /* WITH_WSREP */ - || sql_command == SQLCOM_DROP_INDEX) - && num_write_row >= 10000) { + || sql_command == SQLCOM_DROP_INDEX)) { #ifdef WITH_WSREP - if (wsrep_on(user_thd) && sql_command == SQLCOM_LOAD) { + if (sql_command == SQLCOM_LOAD && trx->is_wsrep()) { WSREP_DEBUG("forced trx split for LOAD: %s", wsrep_thd_query(user_thd)); } @@ -8727,9 +8726,8 @@ no_commit: ; } else if (src_table == prebuilt->table) { #ifdef WITH_WSREP - if (wsrep_on(user_thd) && - wsrep_load_data_splitting && - sql_command == SQLCOM_LOAD && + if (sql_command == SQLCOM_LOAD && trx->is_wsrep() && + wsrep_load_data_splitting && !thd_test_options(user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { @@ -8759,9 +8757,8 @@ no_commit: prebuilt->sql_stat_start = TRUE; } else { #ifdef WITH_WSREP - if (wsrep_on(user_thd) && - wsrep_load_data_splitting && - sql_command == SQLCOM_LOAD && + if (sql_command == SQLCOM_LOAD && trx->is_wsrep() && + wsrep_load_data_splitting && !thd_test_options(user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { @@ -8906,21 +8903,19 @@ no_commit: prebuilt->autoinc_offset, prebuilt->autoinc_increment); - if (wsrep_on(current_thd) && + if (trx->is_wsrep() && auto_inc_inserted && wsrep_drupal_282555_workaround && - wsrep_thd_retry_counter(current_thd) == 0 && - !thd_test_options(current_thd, + wsrep_thd_retry_counter(user_thd) == 0 && + !thd_test_options(user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { WSREP_DEBUG( "retrying insert: %s", - (*wsrep_thd_query(current_thd)) ? - wsrep_thd_query(current_thd) : - (char *)"void"); + wsrep_thd_query(user_thd)); error= DB_SUCCESS; wsrep_thd_set_conflict_state( - current_thd, MUST_ABORT); + user_thd, MUST_ABORT); innobase_srv_conc_exit_innodb(prebuilt->trx); /* jump straight to func exit over * later wsrep hooks */ @@ -8989,18 +8984,16 @@ report_error: user_thd); #ifdef WITH_WSREP - if (!error_result - && wsrep_on(user_thd) - && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE + if (!error_result && trx->is_wsrep() + && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && !wsrep_consistency_check(user_thd) && !wsrep_thd_ignore_table(user_thd)) { if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record, NULL)) { DBUG_PRINT("wsrep", ("row key failed")); error_result = HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + goto func_exit; } } -wsrep_error: #endif /* WITH_WSREP */ if (error_result == HA_FTS_INVALID_DOCID) { @@ -9508,9 +9501,8 @@ func_exit: innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && + if (error == DB_SUCCESS && trx->is_wsrep() && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd) && !wsrep_thd_ignore_table(user_thd)) { DBUG_PRINT("wsrep", ("update row key")); @@ -9519,11 +9511,9 @@ func_exit: new_row)) { WSREP_DEBUG("WSREP: UPDATE_ROW_KEY FAILED"); DBUG_PRINT("wsrep", ("row key failed")); - err = HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } } -wsrep_error: #endif /* WITH_WSREP */ DBUG_RETURN(err); @@ -9570,25 +9560,20 @@ ha_innobase::delete_row( /* Tell the InnoDB server that there might be work for utility threads: */ - innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && + if (error == DB_SUCCESS && trx->is_wsrep() && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd) && !wsrep_thd_ignore_table(user_thd)) { if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record, - NULL)) { + NULL)) { DBUG_PRINT("wsrep", ("delete fail")); - error = (dberr_t) HA_ERR_INTERNAL_ERROR; - goto wsrep_error; + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } } -wsrep_error: #endif /* WITH_WSREP */ - DBUG_RETURN(convert_error_code_to_mysql( error, prebuilt->table->flags, user_thd)); } @@ -10844,8 +10829,7 @@ wsrep_append_foreign_key( int cache_key_len; bool const copy = true; - if (!wsrep_on(trx->mysql_thd) || - wsrep_thd_exec_mode(thd) != LOCAL_STATE) + if (!trx->is_wsrep() || wsrep_thd_exec_mode(thd) != LOCAL_STATE) return DB_SUCCESS; if (!thd || !foreign || @@ -15468,12 +15452,11 @@ ha_innobase::external_lock( THD* thd, /*!< in: handle to the user thread */ int lock_type) /*!< in: lock type */ { - trx_t* trx; - DBUG_ENTER("ha_innobase::external_lock"); DBUG_PRINT("enter",("lock_type: %d", lock_type)); update_thd(thd); + trx_t* trx = prebuilt->trx; /* Statement based binlogging does not work in isolation level READ UNCOMMITTED and READ COMMITTED since the necessary @@ -15487,22 +15470,19 @@ ha_innobase::external_lock( && thd_binlog_format(thd) == BINLOG_FORMAT_STMT && thd_binlog_filter_ok(thd) && thd_sqlcom_can_generate_row_events(thd)) { - bool skip = 0; + bool skip = false; +#ifdef WITH_WSREP + skip = trx->is_wsrep() + && wsrep_thd_exec_mode(thd) != LOCAL_STATE; +#endif /* WITH_WSREP */ /* used by test case */ DBUG_EXECUTE_IF("no_innodb_binlog_errors", skip = true;); if (!skip) { -#ifdef WITH_WSREP - if (!wsrep_on(thd) || wsrep_thd_exec_mode(thd) == LOCAL_STATE) - { -#endif /* WITH_WSREP */ - my_error(ER_BINLOG_STMT_MODE_AND_ROW_ENGINE, MYF(0), - " InnoDB is limited to row-logging when " - "transaction isolation level is " - "READ COMMITTED or READ UNCOMMITTED."); - DBUG_RETURN(HA_ERR_LOGGING_IMPOSSIBLE); -#ifdef WITH_WSREP - } -#endif /* WITH_WSREP */ + my_error(ER_BINLOG_STMT_MODE_AND_ROW_ENGINE, MYF(0), + " InnoDB is limited to row-logging when " + "transaction isolation level is " + "READ COMMITTED or READ UNCOMMITTED."); + DBUG_RETURN(HA_ERR_LOGGING_IMPOSSIBLE); } } @@ -15533,8 +15513,6 @@ ha_innobase::external_lock( } - trx = prebuilt->trx; - prebuilt->sql_stat_start = TRUE; prebuilt->hint_need_to_fetch_extra_cols = 0; diff --git a/storage/xtradb/include/lock0lock.h b/storage/xtradb/include/lock0lock.h index 878a42ea81b..a6b6e08b68b 100644 --- a/storage/xtradb/include/lock0lock.h +++ b/storage/xtradb/include/lock0lock.h @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1013,8 +1014,6 @@ std::string lock_get_info( const lock_t*); -#define wsrep_on_trx(trx) ((trx)->mysql_thd && wsrep_on((trx)->mysql_thd)) - #ifndef UNIV_NONINL #include "lock0lock.ic" #endif diff --git a/storage/xtradb/include/trx0trx.h b/storage/xtradb/include/trx0trx.h index e833bd0341f..2d7baff6b04 100644 --- a/storage/xtradb/include/trx0trx.h +++ b/storage/xtradb/include/trx0trx.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2019, MariaDB Corporation. +Copyright (c) 2015, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -815,15 +815,21 @@ struct trx_t{ ro_trx_list the first time they try to acquire a lock ie. by default we treat all read-only transactions as non-locking. */ trx_state_t state; - trx_lock_t lock; /*!< Information about the transaction locks and state. Protected by trx->mutex or lock_sys->mutex or both */ - ulint is_recovered; /*!< 0=normal transaction, - 1=recovered, must be rolled back, + bool is_recovered; /*!< false=normal transaction, + true=recovered, must be rolled back, protected by trx_sys->mutex when trx->in_rw_trx_list holds */ +#ifdef WITH_WSREP + /** whether wsrep_on(mysql_thd) held at the start of transaction */ + bool wsrep; + bool is_wsrep() const { return UNIV_UNLIKELY(wsrep); } +#else /* WITH_WSREP */ + bool is_wsrep() const { return false; } +#endif /* WITH_WSREP */ /* These fields are not protected by any mutex. */ const char* op_info; /*!< English text describing the diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc index c110c83cbe7..4d40111ac20 100644 --- a/storage/xtradb/lock/lock0lock.cc +++ b/storage/xtradb/lock/lock0lock.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2019, MariaDB Corporation. +Copyright (c) 2014, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1770,7 +1770,7 @@ wsrep_kill_victim( ut_ad(trx_mutex_own(lock->trx)); /* quit for native mysql */ - if (!wsrep_on(trx->mysql_thd)) return; + if (!trx->is_wsrep()) return; my_bool bf_this = wsrep_thd_is_BF(trx->mysql_thd, FALSE); my_bool bf_other = wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE); @@ -1856,7 +1856,7 @@ lock_rec_other_has_conflicting( #ifdef WITH_WSREP if (lock_rec_has_to_wait(TRUE, trx, mode, lock, is_supremum)) { - if (wsrep_on_trx(trx)) { + if (trx->is_wsrep()) { trx_mutex_enter(lock->trx); /* Below function will roll back either trx or lock->trx depending on priority of the @@ -2318,8 +2318,7 @@ lock_rec_create( ut_ad(index->table->n_ref_count > 0 || !index->table->can_be_evicted); #ifdef WITH_WSREP - if (c_lock && - wsrep_on_trx(trx) && + if (c_lock && trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { lock_t *hash = (lock_t *)c_lock->hash; lock_t *prev = NULL; @@ -5009,7 +5008,7 @@ lock_table_create( UT_LIST_ADD_LAST(trx_locks, trx->lock.trx_locks, lock); #ifdef WITH_WSREP - if (c_lock && wsrep_on_trx(trx)) { + if (c_lock && trx->is_wsrep()) { if (wsrep_thd_is_wsrep(trx->mysql_thd) && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { UT_LIST_INSERT_AFTER( @@ -5248,7 +5247,7 @@ lock_table_enqueue_waiting( /* Enqueue the lock request that will wait to be granted */ #ifdef WITH_WSREP - if (trx->lock.was_chosen_as_deadlock_victim && wsrep_on_trx(trx)) { + if (trx->lock.was_chosen_as_deadlock_victim && trx->is_wsrep()) { return(DB_DEADLOCK); } diff --git a/storage/xtradb/lock/lock0wait.cc b/storage/xtradb/lock/lock0wait.cc index fe43ef3cc73..70ade1191d7 100644 --- a/storage/xtradb/lock/lock0wait.cc +++ b/storage/xtradb/lock/lock0wait.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2019, MariaDB Corporation. +Copyright (c) 2014, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -255,8 +255,7 @@ wsrep_is_BF_lock_timeout( const trx_t* trx, bool locked = true) { - if (wsrep_on_trx(trx) - && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { + if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { fprintf(stderr, "WSREP: BF lock wait long for trx " TRX_ID_FMT "\n", trx->id); srv_print_innodb_monitor = TRUE; srv_print_innodb_lock_monitor = TRUE; @@ -447,7 +446,7 @@ lock_wait_suspend_thread( if (lock_wait_timeout < 100000000 && wait_time > (double) lock_wait_timeout) { #ifdef WITH_WSREP - if (!wsrep_on_trx(trx) || + if (!trx->is_wsrep() || (!wsrep_is_BF_lock_timeout(trx) && trx->error_state != DB_DEADLOCK)) { #endif /* WITH_WSREP */ diff --git a/storage/xtradb/row/row0ins.cc b/storage/xtradb/row/row0ins.cc index 50da7fb40ad..f7371d6b83e 100644 --- a/storage/xtradb/row/row0ins.cc +++ b/storage/xtradb/row/row0ins.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2018, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1651,7 +1651,7 @@ run_again: if (check_ref) { err = DB_SUCCESS; #ifdef WITH_WSREP - if (!wsrep_on(trx->mysql_thd)) { + if (!trx->is_wsrep()) { goto end_scan; } enum wsrep_key_type key_type; diff --git a/storage/xtradb/row/row0upd.cc b/storage/xtradb/row/row0upd.cc index 6324c1d71a1..a5e5988113d 100644 --- a/storage/xtradb/row/row0upd.cc +++ b/storage/xtradb/row/row0upd.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2018, 2019, MariaDB Corporation. +Copyright (c) 2018, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1814,7 +1814,7 @@ row_upd_store_row( inline bool wsrep_must_process_fk(const upd_node_t* node, const trx_t* trx) { - if (!wsrep_on_trx(trx)) { + if (!trx->is_wsrep()) { return false; } return que_node_get_type(node->common.parent) != QUE_NODE_UPDATE diff --git a/storage/xtradb/srv/srv0conc.cc b/storage/xtradb/srv/srv0conc.cc index 1a198fceaec..1a2a6e0342f 100644 --- a/storage/xtradb/srv/srv0conc.cc +++ b/storage/xtradb/srv/srv0conc.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2011, 2012, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. All Rights Reserved. +Copyright (c) 2017, 2020, MariaDB Corporation. Portions of this file contain modifications contributed and copyrighted by Google, Inc. Those modifications are gratefully acknowledged and are described @@ -218,8 +218,7 @@ srv_conc_enter_innodb_with_atomics( for (;;) { ulint sleep_in_us; #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_trx_is_aborting(trx->mysql_thd)) { + if (trx->is_wsrep() && wsrep_trx_is_aborting(trx->mysql_thd)) { if (wsrep_debug) fprintf(stderr, "srv_conc_enter due to MUST_ABORT"); @@ -430,8 +429,7 @@ retry: return; } #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_thd_is_brute_force(trx->mysql_thd)) { + if (trx->is_wsrep() && wsrep_thd_is_brute_force(trx->mysql_thd)) { srv_conc_force_enter_innodb(trx); return; } @@ -514,8 +512,7 @@ retry: srv_conc.n_waiting++; #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - wsrep_trx_is_aborting(trx->mysql_thd)) { + if (trx->is_wsrep() && wsrep_trx_is_aborting(trx->mysql_thd)) { os_fast_mutex_unlock(&srv_conc_mutex); if (wsrep_debug) fprintf(stderr, "srv_conc_enter due to MUST_ABORT"); diff --git a/storage/xtradb/trx/trx0roll.cc b/storage/xtradb/trx/trx0roll.cc index 97f08d1fa0c..7624d92a831 100644 --- a/storage/xtradb/trx/trx0roll.cc +++ b/storage/xtradb/trx/trx0roll.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, 2019, MariaDB Corporation. +Copyright (c) 2016, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -379,8 +379,7 @@ trx_rollback_to_savepoint_for_mysql_low( trx->op_info = ""; #ifdef WITH_WSREP - if (wsrep_on(trx->mysql_thd) && - trx->lock.was_chosen_as_deadlock_victim) { + if (trx->is_wsrep()) { trx->lock.was_chosen_as_deadlock_victim = FALSE; } #endif @@ -1083,12 +1082,6 @@ trx_roll_try_truncate( if (trx->update_undo) { trx_undo_truncate_end(trx, trx->update_undo, limit); } - -#ifdef WITH_WSREP_OUT - if (wsrep_on(trx->mysql_thd)) { - trx->lock.was_chosen_as_deadlock_victim = FALSE; - } -#endif /* WITH_WSREP */ } /***********************************************************************//** diff --git a/storage/xtradb/trx/trx0trx.cc b/storage/xtradb/trx/trx0trx.cc index a65132cf572..bfbd15d62a2 100644 --- a/storage/xtradb/trx/trx0trx.cc +++ b/storage/xtradb/trx/trx0trx.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2019, MariaDB Corporation. +Copyright (c) 2015, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1555,11 +1555,7 @@ trx_commit_in_memory( ut_ad(!trx->in_ro_trx_list); ut_ad(!trx->in_rw_trx_list); -#ifdef WITH_WSREP - if (trx->mysql_thd && wsrep_on(trx->mysql_thd)) { - trx->lock.was_chosen_as_deadlock_victim = FALSE; - } -#endif + trx->lock.was_chosen_as_deadlock_victim = FALSE; trx->dict_operation = TRX_DICT_OP_NONE; trx->error_state = DB_SUCCESS; |