From e33e9825a4316164ce304c321985ba19ff98be7d Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Thu, 25 Jul 2013 13:40:18 +0400 Subject: [PATCH] MDEV-4786 - merge 10.0-monty - 10.0 Fixed main.innodb_mysql_sync failure. TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE is not same as TDC_RT_REMOVE_NOT_OWN_AND_MARK_NOT_USABLE. Comment in sql_table.cc says: Storage engine has requested exclusive lock only for prepare phase and we are not under LOCK TABLES. Don't mark TABLE_SHARE as old in this case, as this won't allow opening of table by other threads during main phase of in-place ALTER TABLE. At this moment we hold exclusive metadata lock, all we should do is purge unused TABLE objects. sql/sql_base.cc: Restore 5.6 behavior of TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE. sql/sql_base.h: Restore 5.6 behavior of TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE. --- sql/sql_base.cc | 2 +- sql/sql_base.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 5baf05c7f38..c39786c7c45 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -9611,7 +9611,7 @@ void tdc_remove_table(THD *thd, enum_tdc_remove_table_type remove_type, */ if (remove_type == TDC_RT_REMOVE_NOT_OWN) share->remove_from_cache_at_close(); - else + else if (remove_type != TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE) { /* Ensure that no can open the table while it's used */ share->protect_against_usage(); diff --git a/sql/sql_base.h b/sql/sql_base.h index a4f35b59ba9..cff7432d00f 100644 --- a/sql/sql_base.h +++ b/sql/sql_base.h @@ -61,8 +61,8 @@ enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND, enum enum_tdc_remove_table_type {TDC_RT_REMOVE_ALL, TDC_RT_REMOVE_NOT_OWN, TDC_RT_REMOVE_UNUSED, - TDC_RT_REMOVE_NOT_OWN_AND_MARK_NOT_USABLE}; -#define TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE TDC_RT_REMOVE_NOT_OWN_AND_MARK_NOT_USABLE + TDC_RT_REMOVE_NOT_OWN_AND_MARK_NOT_USABLE, + TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE}; /* bits for last argument to remove_table_from_cache() */ #define RTFC_NO_FLAG 0x0000