Commit 061c767c authored by Sergey Vojtovich's avatar Sergey Vojtovich

MDEV-15773 - Simplified away trx_t::in_mysql_trx_list

parent d6d58836
...@@ -1504,7 +1504,7 @@ dict_create_or_check_foreign_constraint_tables(void) ...@@ -1504,7 +1504,7 @@ dict_create_or_check_foreign_constraint_tables(void)
return(DB_READ_ONLY); return(DB_READ_ONLY);
} }
trx = trx_allocate_for_mysql(); trx = trx_create();
trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE);
...@@ -1588,7 +1588,7 @@ dict_create_or_check_foreign_constraint_tables(void) ...@@ -1588,7 +1588,7 @@ dict_create_or_check_foreign_constraint_tables(void)
row_mysql_unlock_data_dictionary(trx); row_mysql_unlock_data_dictionary(trx);
trx_free_for_mysql(trx); trx_free_for_background(trx);
srv_file_per_table = srv_file_per_table_backup; srv_file_per_table = srv_file_per_table_backup;
...@@ -1634,7 +1634,7 @@ dict_create_or_check_sys_virtual() ...@@ -1634,7 +1634,7 @@ dict_create_or_check_sys_virtual()
return(DB_READ_ONLY); return(DB_READ_ONLY);
} }
trx = trx_allocate_for_mysql(); trx = trx_create();
trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE);
...@@ -1692,7 +1692,7 @@ dict_create_or_check_sys_virtual() ...@@ -1692,7 +1692,7 @@ dict_create_or_check_sys_virtual()
row_mysql_unlock_data_dictionary(trx); row_mysql_unlock_data_dictionary(trx);
trx_free_for_mysql(trx); trx_free_for_background(trx);
srv_file_per_table = srv_file_per_table_backup; srv_file_per_table = srv_file_per_table_backup;
...@@ -2289,7 +2289,7 @@ dict_create_or_check_sys_tablespace(void) ...@@ -2289,7 +2289,7 @@ dict_create_or_check_sys_tablespace(void)
return(DB_READ_ONLY); return(DB_READ_ONLY);
} }
trx = trx_allocate_for_mysql(); trx = trx_create();
trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE);
...@@ -2356,7 +2356,7 @@ dict_create_or_check_sys_tablespace(void) ...@@ -2356,7 +2356,7 @@ dict_create_or_check_sys_tablespace(void)
row_mysql_unlock_data_dictionary(trx); row_mysql_unlock_data_dictionary(trx);
trx_free_for_mysql(trx); trx_free_for_background(trx);
srv_file_per_table = srv_file_per_table_backup; srv_file_per_table = srv_file_per_table_backup;
......
...@@ -2320,7 +2320,7 @@ dict_stats_save_index_stat( ...@@ -2320,7 +2320,7 @@ dict_stats_save_index_stat(
char db_utf8[MAX_DB_UTF8_LEN]; char db_utf8[MAX_DB_UTF8_LEN];
char table_utf8[MAX_TABLE_UTF8_LEN]; char table_utf8[MAX_TABLE_UTF8_LEN];
ut_ad(!trx || trx->internal || trx->in_mysql_trx_list); ut_ad(!trx || trx->internal || trx->mysql_thd);
ut_ad(rw_lock_own(dict_operation_lock, RW_LOCK_X)); ut_ad(rw_lock_own(dict_operation_lock, RW_LOCK_X));
ut_ad(mutex_own(&dict_sys->mutex)); ut_ad(mutex_own(&dict_sys->mutex));
......
...@@ -521,7 +521,7 @@ The tranasction must be in the mysql_trx_list. */ ...@@ -521,7 +521,7 @@ The tranasction must be in the mysql_trx_list. */
trx_state_t t_state = (t)->state; \ trx_state_t t_state = (t)->state; \
ut_ad((t)->read_only); \ ut_ad((t)->read_only); \
ut_ad(!(t)->is_recovered); \ ut_ad(!(t)->is_recovered); \
ut_ad((t)->in_mysql_trx_list); \ ut_ad((t)->mysql_thd); \
ut_ad(t_state == TRX_STATE_NOT_STARTED \ ut_ad(t_state == TRX_STATE_NOT_STARTED \
|| t_state == TRX_STATE_ACTIVE); \ || t_state == TRX_STATE_ACTIVE); \
} else { \ } else { \
...@@ -854,7 +854,7 @@ struct trx_t { ...@@ -854,7 +854,7 @@ struct trx_t {
do we remove it from the read-only list and put it on the read-write do we remove it from the read-only list and put it on the read-write
list. During this switch we assign it a rollback segment. list. During this switch we assign it a rollback segment.
When a transaction is NOT_STARTED, it can be in_mysql_trx_list if When a transaction is NOT_STARTED, it can be in mysql_trx_list if
it is a user transaction. It cannot be in rw_trx_hash. it is a user transaction. It cannot be in rw_trx_hash.
ACTIVE->PREPARED->COMMITTED is only possible when trx is in rw_trx_hash. ACTIVE->PREPARED->COMMITTED is only possible when trx is in rw_trx_hash.
...@@ -976,11 +976,6 @@ struct trx_t { ...@@ -976,11 +976,6 @@ struct trx_t {
UT_LIST_NODE_T(trx_t) UT_LIST_NODE_T(trx_t)
mysql_trx_list; /*!< list of transactions created for mysql_trx_list; /*!< list of transactions created for
MySQL; protected by trx_sys.mutex */ MySQL; protected by trx_sys.mutex */
#ifdef UNIV_DEBUG
bool in_mysql_trx_list;
/*!< true if in
trx_sys.mysql_trx_list */
#endif /* UNIV_DEBUG */
/*------------------------------*/ /*------------------------------*/
dberr_t error_state; /*!< 0 if no error, otherwise error dberr_t error_state; /*!< 0 if no error, otherwise error
number; NOTE That ONLY the thread number; NOTE That ONLY the thread
......
...@@ -4674,7 +4674,7 @@ struct PrintNotStarted { ...@@ -4674,7 +4674,7 @@ struct PrintNotStarted {
void operator()(const trx_t* trx) void operator()(const trx_t* trx)
{ {
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
ut_ad(mutex_own(&trx_sys.mutex)); ut_ad(mutex_own(&trx_sys.mutex));
/* See state transitions and locking rules in trx0trx.h */ /* See state transitions and locking rules in trx0trx.h */
......
...@@ -279,7 +279,7 @@ trx_purge_add_undo_to_history(const trx_t* trx, trx_undo_t*& undo, mtr_t* mtr) ...@@ -279,7 +279,7 @@ trx_purge_add_undo_to_history(const trx_t* trx, trx_undo_t*& undo, mtr_t* mtr)
&& purge_sys.state == PURGE_STATE_INIT) && purge_sys.state == PURGE_STATE_INIT)
|| (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND
&& purge_sys.state == PURGE_STATE_DISABLED) && purge_sys.state == PURGE_STATE_DISABLED)
|| ((trx->undo_no == 0 || trx->in_mysql_trx_list || ((trx->undo_no == 0 || trx->mysql_thd
|| trx->internal) || trx->internal)
&& srv_fast_shutdown)); && srv_fast_shutdown));
......
...@@ -201,11 +201,11 @@ dberr_t trx_rollback_for_mysql(trx_t* trx) ...@@ -201,11 +201,11 @@ dberr_t trx_rollback_for_mysql(trx_t* trx)
switch (trx->state) { switch (trx->state) {
case TRX_STATE_NOT_STARTED: case TRX_STATE_NOT_STARTED:
trx->will_lock = 0; trx->will_lock = 0;
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
return(DB_SUCCESS); return(DB_SUCCESS);
case TRX_STATE_ACTIVE: case TRX_STATE_ACTIVE:
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
assert_trx_nonlocking_or_in_list(trx); assert_trx_nonlocking_or_in_list(trx);
return(trx_rollback_for_mysql_low(trx)); return(trx_rollback_for_mysql_low(trx));
...@@ -282,7 +282,7 @@ trx_rollback_last_sql_stat_for_mysql( ...@@ -282,7 +282,7 @@ trx_rollback_last_sql_stat_for_mysql(
here, because the statement rollback should be invoked for a here, because the statement rollback should be invoked for a
running active MySQL transaction that is associated with the running active MySQL transaction that is associated with the
current thread. */ current thread. */
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
switch (trx->state) { switch (trx->state) {
case TRX_STATE_NOT_STARTED: case TRX_STATE_NOT_STARTED:
...@@ -404,7 +404,7 @@ trx_rollback_to_savepoint_for_mysql_low( ...@@ -404,7 +404,7 @@ trx_rollback_to_savepoint_for_mysql_low(
dberr_t err; dberr_t err;
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE)); ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE));
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
/* Free all savepoints strictly later than savep. */ /* Free all savepoints strictly later than savep. */
...@@ -461,7 +461,7 @@ trx_rollback_to_savepoint_for_mysql( ...@@ -461,7 +461,7 @@ trx_rollback_to_savepoint_for_mysql(
here, because the savepoint rollback should be invoked for a here, because the savepoint rollback should be invoked for a
running active MySQL transaction that is associated with the running active MySQL transaction that is associated with the
current thread. */ current thread. */
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
savep = trx_savepoint_find(trx, savepoint_name); savep = trx_savepoint_find(trx, savepoint_name);
...@@ -554,7 +554,7 @@ trx_release_savepoint_for_mysql( ...@@ -554,7 +554,7 @@ trx_release_savepoint_for_mysql(
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE, true) ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE, true)
|| trx_state_eq(trx, TRX_STATE_PREPARED, true)); || trx_state_eq(trx, TRX_STATE_PREPARED, true));
ut_ad(trx->in_mysql_trx_list); ut_ad(trx->mysql_thd);
savep = trx_savepoint_find(trx, savepoint_name); savep = trx_savepoint_find(trx, savepoint_name);
......
...@@ -238,7 +238,7 @@ struct TrxFactory { ...@@ -238,7 +238,7 @@ struct TrxFactory {
static void destroy(trx_t* trx) static void destroy(trx_t* trx)
{ {
ut_a(trx->magic_n == TRX_MAGIC_N); ut_a(trx->magic_n == TRX_MAGIC_N);
ut_ad(!trx->in_mysql_trx_list); ut_ad(!trx->mysql_thd);
ut_a(trx->lock.wait_lock == NULL); ut_a(trx->lock.wait_lock == NULL);
ut_a(trx->lock.wait_thr == NULL); ut_a(trx->lock.wait_thr == NULL);
...@@ -303,8 +303,6 @@ struct TrxFactory { ...@@ -303,8 +303,6 @@ struct TrxFactory {
ut_ad(trx->mysql_thd == 0); ut_ad(trx->mysql_thd == 0);
ut_ad(!trx->in_mysql_trx_list);
ut_a(trx->lock.wait_thr == NULL); ut_a(trx->lock.wait_thr == NULL);
ut_a(trx->lock.wait_lock == NULL); ut_a(trx->lock.wait_lock == NULL);
ut_a(trx->dict_operation_lock_mode == 0); ut_a(trx->dict_operation_lock_mode == 0);
...@@ -475,10 +473,7 @@ trx_allocate_for_mysql(void) ...@@ -475,10 +473,7 @@ trx_allocate_for_mysql(void)
trx = trx_create(); trx = trx_create();
mutex_enter(&trx_sys.mutex); mutex_enter(&trx_sys.mutex);
ut_d(trx->in_mysql_trx_list = TRUE);
UT_LIST_ADD_FIRST(trx_sys.mysql_trx_list, trx); UT_LIST_ADD_FIRST(trx_sys.mysql_trx_list, trx);
mutex_exit(&trx_sys.mutex); mutex_exit(&trx_sys.mutex);
return(trx); return(trx);
...@@ -586,13 +581,10 @@ trx_disconnect_from_mysql( ...@@ -586,13 +581,10 @@ trx_disconnect_from_mysql(
trx_t* trx, trx_t* trx,
bool prepared) bool prepared)
{ {
ut_ad(trx->mysql_thd);
trx->read_view.close(); trx->read_view.close();
mutex_enter(&trx_sys.mutex); mutex_enter(&trx_sys.mutex);
ut_ad(trx->in_mysql_trx_list);
ut_d(trx->in_mysql_trx_list = FALSE);
UT_LIST_REMOVE(trx_sys.mysql_trx_list, trx); UT_LIST_REMOVE(trx_sys.mysql_trx_list, trx);
if (prepared) { if (prepared) {
...@@ -604,7 +596,6 @@ trx_disconnect_from_mysql( ...@@ -604,7 +596,6 @@ trx_disconnect_from_mysql(
/* todo/fixme: suggest to do it at innodb prepare */ /* todo/fixme: suggest to do it at innodb prepare */
trx->will_lock = 0; trx->will_lock = 0;
} }
mutex_exit(&trx_sys.mutex); mutex_exit(&trx_sys.mutex);
} }
...@@ -1061,11 +1052,6 @@ trx_start_low( ...@@ -1061,11 +1052,6 @@ trx_start_low(
ut_a(ib_vector_is_empty(trx->autoinc_locks)); ut_a(ib_vector_is_empty(trx->autoinc_locks));
ut_a(trx->lock.table_locks.empty()); ut_a(trx->lock.table_locks.empty());
/* If this transaction came from trx_allocate_for_mysql(),
trx->in_mysql_trx_list would hold. In that case, the trx->state
change must be protected by the trx_sys.mutex, so that
lock_print_info_all_transactions() will have a consistent view. */
/* No other thread can access this trx object through rw_trx_hash, thus /* No other thread can access this trx object through rw_trx_hash, thus
we don't need trx_sys.mutex protection for that purpose. Still this we don't need trx_sys.mutex protection for that purpose. Still this
trx can be found through trx_sys.mysql_trx_list, which means state trx can be found through trx_sys.mysql_trx_list, which means state
...@@ -1541,7 +1527,7 @@ trx_commit_in_memory( ...@@ -1541,7 +1527,7 @@ trx_commit_in_memory(
DBUG_LOG("trx", "Commit in memory: " << trx); DBUG_LOG("trx", "Commit in memory: " << trx);
trx->state = TRX_STATE_NOT_STARTED; trx->state = TRX_STATE_NOT_STARTED;
/* trx->in_mysql_trx_list would hold between /* trx->mysql_thd != 0 would hold between
trx_allocate_for_mysql() and trx_free_for_mysql(). It does not trx_allocate_for_mysql() and trx_free_for_mysql(). It does not
hold for recovered transactions or system transactions. */ hold for recovered transactions or system transactions. */
assert_trx_is_free(trx); assert_trx_is_free(trx);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment