diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-09-30 16:25:06 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-09-30 16:25:06 +0300 |
commit | 323500bfa9a8f80ca210f4a010ad6a4b5bba689d (patch) | |
tree | ee8c08b079183123099d3c94025aa475f85d2702 | |
parent | 6cbbd6bd96a8b5c97ec4d0b687aac29fb0f63a6a (diff) | |
parent | cd5f4d2a5939aa047734f023b28462c65f3e4569 (diff) | |
download | mariadb-git-323500bfa9a8f80ca210f4a010ad6a4b5bba689d.tar.gz |
Merge 10.2 into 10.3
-rw-r--r-- | mysql-test/suite/innodb/r/foreign_key.result | 14 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/foreign_key.test | 14 | ||||
-rw-r--r-- | storage/innobase/btr/btr0defragment.cc | 7 | ||||
-rw-r--r-- | storage/innobase/fts/fts0fts.cc | 3 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 35 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.h | 3 | ||||
-rw-r--r-- | storage/innobase/handler/handler0alter.cc | 6 | ||||
-rw-r--r-- | storage/innobase/ibuf/ibuf0ibuf.cc | 5 | ||||
-rw-r--r-- | storage/innobase/include/btr0defragment.h | 2 | ||||
-rw-r--r-- | storage/innobase/include/fts0types.h | 2 | ||||
-rw-r--r-- | storage/innobase/include/sync0rw.h | 8 | ||||
-rw-r--r-- | storage/innobase/include/sync0sync.h | 1 | ||||
-rw-r--r-- | storage/innobase/include/sync0types.h | 1 | ||||
-rw-r--r-- | storage/innobase/sync/sync0debug.cc | 3 | ||||
-rw-r--r-- | storage/innobase/sync/sync0sync.cc | 1 |
15 files changed, 45 insertions, 60 deletions
diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result index 6ae396529ef..43cee8a6e6b 100644 --- a/mysql-test/suite/innodb/r/foreign_key.result +++ b/mysql-test/suite/innodb/r/foreign_key.result @@ -405,6 +405,20 @@ Opened_table_definitions 2 Opened_tables 2 drop function foo; drop table t2, t1; +CREATE TABLE t1 (pk INT, a INT, PRIMARY KEY (pk)) ENGINE=InnoDB; +XA START 'xid'; +INSERT INTO t1 VALUES (1,2); +CREATE TABLE x AS SELECT * FROM t1; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state +connect con1,localhost,root,,test; +SET foreign_key_checks= OFF, innodb_lock_wait_timeout= 1; +ALTER TABLE t1 ADD FOREIGN KEY f (a) REFERENCES t1 (pk), LOCK=EXCLUSIVE; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +disconnect con1; +connection default; +XA END 'xid'; +XA ROLLBACK 'xid'; +DROP TABLE t1; # Start of 10.2 tests # # MDEV-13246 Stale rows despite ON DELETE CASCADE constraint diff --git a/mysql-test/suite/innodb/t/foreign_key.test b/mysql-test/suite/innodb/t/foreign_key.test index 9b9c639f86b..190461a4f7b 100644 --- a/mysql-test/suite/innodb/t/foreign_key.test +++ b/mysql-test/suite/innodb/t/foreign_key.test @@ -407,6 +407,20 @@ show status like '%opened_tab%'; drop function foo; drop table t2, t1; +CREATE TABLE t1 (pk INT, a INT, PRIMARY KEY (pk)) ENGINE=InnoDB; +XA START 'xid'; +INSERT INTO t1 VALUES (1,2); +--error ER_XAER_RMFAIL +CREATE TABLE x AS SELECT * FROM t1; +--connect (con1,localhost,root,,test) +SET foreign_key_checks= OFF, innodb_lock_wait_timeout= 1; +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD FOREIGN KEY f (a) REFERENCES t1 (pk), LOCK=EXCLUSIVE;# Cleanup +--disconnect con1 +--connection default +XA END 'xid'; +XA ROLLBACK 'xid'; +DROP TABLE t1; # # End of 10.1 tests # diff --git a/storage/innobase/btr/btr0defragment.cc b/storage/innobase/btr/btr0defragment.cc index 2a83e9c3e8e..522c356fbb0 100644 --- a/storage/innobase/btr/btr0defragment.cc +++ b/storage/innobase/btr/btr0defragment.cc @@ -154,8 +154,6 @@ synchronized defragmentation. */ os_event_t btr_defragment_add_index( dict_index_t* index, /*!< index to be added */ - bool async, /*!< whether this is an async - defragmentation */ dberr_t* err) /*!< out: error code */ { mtr_t mtr; @@ -188,10 +186,7 @@ btr_defragment_add_index( return NULL; } btr_pcur_t* pcur = btr_pcur_create_for_mysql(); - os_event_t event = NULL; - if (!async) { - event = os_event_create(0); - } + os_event_t event = os_event_create(0); btr_pcur_open_at_index_side(true, index, BTR_SEARCH_LEAF, pcur, true, 0, &mtr); btr_pcur_move_to_next(pcur, &mtr); diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 7ae663d7cbf..031a1011699 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -286,7 +286,6 @@ fts_cache_destroy(fts_cache_t* cache) { rw_lock_free(&cache->lock); rw_lock_free(&cache->init_lock); - mutex_free(&cache->optimize_lock); mutex_free(&cache->deleted_lock); mutex_free(&cache->doc_id_lock); os_event_destroy(cache->sync->event); @@ -622,8 +621,6 @@ fts_cache_create( mutex_create(LATCH_ID_FTS_DELETE, &cache->deleted_lock); - mutex_create(LATCH_ID_FTS_OPTIMIZE, &cache->optimize_lock); - mutex_create(LATCH_ID_FTS_DOC_ID, &cache->doc_id_lock); /* This is the heap used to create the cache itself. */ diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8cc4717c523..03c99f14dee 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -612,7 +612,6 @@ static PSI_mutex_info all_innodb_mutexes[] = { PSI_KEY(flush_list_mutex), PSI_KEY(fts_bg_threads_mutex), PSI_KEY(fts_delete_mutex), - PSI_KEY(fts_optimize_mutex), PSI_KEY(fts_doc_id_mutex), PSI_KEY(log_flush_order_mutex), PSI_KEY(hash_table_mutex), @@ -14423,25 +14422,14 @@ ha_innobase::analyze(THD*, HA_CHECK_OPT*) /*****************************************************************//** Defragment table. @return error number */ -UNIV_INTERN -int -ha_innobase::defragment_table( -/*==========================*/ - const char* name, /*!< in: table name */ - const char* index_name, /*!< in: index name */ - bool async) /*!< in: whether to wait until finish */ +inline int ha_innobase::defragment_table(const char *name) { char norm_name[FN_REFLEN]; dict_table_t* table = NULL; dict_index_t* index = NULL; - ibool one_index = (index_name != 0); int ret = 0; dberr_t err = DB_SUCCESS; - if (!srv_defragment) { - return ER_FEATURE_DISABLED; - } - normalize_table_name(norm_name, name); table = dict_table_open_on_name(norm_name, FALSE, @@ -14469,10 +14457,6 @@ ha_innobase::defragment_table( continue; } - if (one_index && strcasecmp(index_name, index->name) != 0) { - continue; - } - if (btr_defragment_find_index(index)) { // We borrow this error code. When the same index is // already in the defragmentation queue, issue another @@ -14488,7 +14472,7 @@ ha_innobase::defragment_table( break; } - os_event_t event = btr_defragment_add_index(index, async, &err); + os_event_t event = btr_defragment_add_index(index, &err); if (err != DB_SUCCESS) { push_warning_printf( @@ -14504,7 +14488,7 @@ ha_innobase::defragment_table( break; } - if (!async && event) { + if (event) { while(os_event_wait_time(event, 1000000)) { if (thd_killed(current_thd)) { btr_defragment_remove_index(index); @@ -14518,19 +14502,9 @@ ha_innobase::defragment_table( if (ret) { break; } - - if (one_index) { - one_index = FALSE; - break; - } } dict_table_close(table, FALSE, FALSE); - - if (ret == 0 && one_index) { - ret = ER_NO_SUCH_INDEX; - } - return ret; } @@ -14556,8 +14530,7 @@ ha_innobase::optimize( bool try_alter = true; if (!m_prebuilt->table->is_temporary() && srv_defragment) { - int err= defragment_table( - m_prebuilt->table->name.m_name, NULL, false); + int err = defragment_table(m_prebuilt->table->name.m_name); if (err == 0) { try_alter = false; diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 56b70d816c6..6facc9d2e6f 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -217,8 +217,7 @@ public: int delete_table(const char *name); int rename_table(const char* from, const char* to); - int defragment_table(const char* name, const char* index_name, - bool async); + inline int defragment_table(const char* name); int check(THD* thd, HA_CHECK_OPT* check_opt); char* update_table_comment(const char* comment); diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index e55eda2d331..f85bf8e7338 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -6020,6 +6020,12 @@ err_exit: } trx_commit_for_mysql(ctx->prebuilt->trx); + for (uint i = 0; i < ctx->num_to_add_fk; i++) { + if (ctx->add_fk[i]) { + dict_foreign_free(ctx->add_fk[i]); + } + } + delete ctx; ha_alter_info->handler_ctx = NULL; diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 9228e377f69..c6c934c76c4 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -4457,7 +4457,10 @@ ibuf_merge_or_delete_for_page( /* No changes are buffered for this page. */ space->release(); if (UNIV_UNLIKELY(srv_shutdown_state) - && !srv_fast_shutdown) { + && !srv_fast_shutdown + && (!block + || btr_page_get_index_id(block->frame) + != DICT_IBUF_ID_MIN + IBUF_SPACE_ID)) { /* Prevent an infinite loop on slow shutdown, in case the bitmap bits are wrongly clear even though buffered diff --git a/storage/innobase/include/btr0defragment.h b/storage/innobase/include/btr0defragment.h index 57f8c2f3811..d622c3c7c39 100644 --- a/storage/innobase/include/btr0defragment.h +++ b/storage/innobase/include/btr0defragment.h @@ -64,8 +64,6 @@ is a synchronized defragmentation. */ os_event_t btr_defragment_add_index( dict_index_t* index, /*!< index to be added */ - bool async, /*!< whether this is an async - defragmentation */ dberr_t* err); /*!< out: error code */ /******************************************************************//** When table is dropped, this function is called to mark a table as removed in diff --git a/storage/innobase/include/fts0types.h b/storage/innobase/include/fts0types.h index 44c3ab77695..f5760a16c0e 100644 --- a/storage/innobase/include/fts0types.h +++ b/storage/innobase/include/fts0types.h @@ -131,8 +131,6 @@ struct fts_cache_t { intialization, it has different SYNC level as above cache lock */ - ib_mutex_t optimize_lock; /*!< Lock for OPTIMIZE */ - ib_mutex_t deleted_lock; /*!< Lock covering deleted_doc_ids */ ib_mutex_t doc_id_lock; /*!< Lock covering Doc ID */ diff --git a/storage/innobase/include/sync0rw.h b/storage/innobase/include/sync0rw.h index 5de22c74fa1..34619f9b5d8 100644 --- a/storage/innobase/include/sync0rw.h +++ b/storage/innobase/include/sync0rw.h @@ -2,7 +2,7 @@ Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. -Copyright (c) 2017, 2019, MariaDB Corporation. +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 @@ -577,12 +577,6 @@ struct rw_lock_t /** number of granted SX locks. */ volatile ulint sx_recursive; - /** This is TRUE if the writer field is RW_LOCK_X_WAIT; this field - is located far from the memory update hotspot fields which are at - the start of this struct, thus we can peek this field without - causing much memory bus traffic */ - bool writer_is_wait_ex; - /** The value is typically set to thread id of a writer thread making normal rw_locks recursive. In case of asynchronous IO, when a non-zero value of 'pass' is passed then we keep the lock non-recursive. diff --git a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h index ddbfa451d22..c21d7f81e26 100644 --- a/storage/innobase/include/sync0sync.h +++ b/storage/innobase/include/sync0sync.h @@ -61,7 +61,6 @@ extern mysql_pfs_key_t fil_system_mutex_key; extern mysql_pfs_key_t flush_list_mutex_key; extern mysql_pfs_key_t fts_bg_threads_mutex_key; extern mysql_pfs_key_t fts_delete_mutex_key; -extern mysql_pfs_key_t fts_optimize_mutex_key; extern mysql_pfs_key_t fts_doc_id_mutex_key; extern mysql_pfs_key_t fts_pll_tokenize_mutex_key; extern mysql_pfs_key_t hash_table_mutex_key; diff --git a/storage/innobase/include/sync0types.h b/storage/innobase/include/sync0types.h index d08ca94d787..60b22247d62 100644 --- a/storage/innobase/include/sync0types.h +++ b/storage/innobase/include/sync0types.h @@ -295,7 +295,6 @@ enum latch_id_t { LATCH_ID_FLUSH_LIST, LATCH_ID_FTS_BG_THREADS, LATCH_ID_FTS_DELETE, - LATCH_ID_FTS_OPTIMIZE, LATCH_ID_FTS_DOC_ID, LATCH_ID_FTS_PLL_TOKENIZE, LATCH_ID_HASH_TABLE_MUTEX, diff --git a/storage/innobase/sync/sync0debug.cc b/storage/innobase/sync/sync0debug.cc index 2a11bf65637..3cad82ef3df 100644 --- a/storage/innobase/sync/sync0debug.cc +++ b/storage/innobase/sync/sync0debug.cc @@ -1306,9 +1306,6 @@ sync_latch_meta_init() LATCH_ADD_MUTEX(FTS_DELETE, SYNC_FTS_OPTIMIZE, fts_delete_mutex_key); - LATCH_ADD_MUTEX(FTS_OPTIMIZE, SYNC_FTS_OPTIMIZE, - fts_optimize_mutex_key); - LATCH_ADD_MUTEX(FTS_DOC_ID, SYNC_FTS_OPTIMIZE, fts_doc_id_mutex_key); LATCH_ADD_MUTEX(FTS_PLL_TOKENIZE, SYNC_FTS_TOKENIZE, diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc index c52064c7bb9..eab07df19dc 100644 --- a/storage/innobase/sync/sync0sync.cc +++ b/storage/innobase/sync/sync0sync.cc @@ -47,7 +47,6 @@ mysql_pfs_key_t fil_system_mutex_key; mysql_pfs_key_t flush_list_mutex_key; mysql_pfs_key_t fts_bg_threads_mutex_key; mysql_pfs_key_t fts_delete_mutex_key; -mysql_pfs_key_t fts_optimize_mutex_key; mysql_pfs_key_t fts_doc_id_mutex_key; mysql_pfs_key_t fts_pll_tokenize_mutex_key; mysql_pfs_key_t hash_table_mutex_key; |