From 1c879717eca205a4cad421882c4ed14bbd549a99 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 17 Apr 2012 20:28:21 +0200 Subject: [PATCH] bugfix: mysqld failed to start if a compiled-in plugin failed to initialize (--xxx=ON behaving as --xxx=FORCE) --- .../r/information_schema_all_engines.result | 104 +++++++++++++++++- mysql-test/r/plugin_loaderr.result | 10 ++ mysql-test/suite.pm | 3 + mysql-test/t/plugin_loaderr.opt | 1 + mysql-test/t/plugin_loaderr.test | 10 ++ sql/sql_plugin.cc | 6 +- 6 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 mysql-test/r/plugin_loaderr.result create mode 100644 mysql-test/t/plugin_loaderr.opt create mode 100644 mysql-test/t/plugin_loaderr.test diff --git a/mysql-test/r/information_schema_all_engines.result b/mysql-test/r/information_schema_all_engines.result index 9304febcc5a..7d47f0404bb 100644 --- a/mysql-test/r/information_schema_all_engines.result +++ b/mysql-test/r/information_schema_all_engines.result @@ -13,9 +13,26 @@ FILES GLOBAL_STATUS GLOBAL_VARIABLES INDEX_STATISTICS +INNODB_BUFFER_POOL_PAGES +INNODB_BUFFER_POOL_PAGES_BLOB +INNODB_BUFFER_POOL_PAGES_INDEX +INNODB_CMP INNODB_CMPMEM +INNODB_CMPMEM_RESET +INNODB_CMP_RESET +INNODB_INDEX_STATS INNODB_LOCKS +INNODB_LOCK_WAITS +INNODB_RSEG +INNODB_SYS_COLUMNS +INNODB_SYS_FIELDS +INNODB_SYS_FOREIGN +INNODB_SYS_FOREIGN_COLS INNODB_SYS_INDEXES +INNODB_SYS_STATS +INNODB_SYS_TABLES +INNODB_SYS_TABLESTATS +INNODB_TABLE_STATS INNODB_TRX KEY_CACHES KEY_COLUMN_USAGE @@ -68,9 +85,26 @@ FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME GLOBAL_VARIABLES VARIABLE_NAME INDEX_STATISTICS TABLE_SCHEMA +INNODB_BUFFER_POOL_PAGES page_type +INNODB_BUFFER_POOL_PAGES_BLOB space_id +INNODB_BUFFER_POOL_PAGES_INDEX index_id +INNODB_CMP page_size INNODB_CMPMEM page_size +INNODB_CMPMEM_RESET page_size +INNODB_CMP_RESET page_size +INNODB_INDEX_STATS table_schema INNODB_LOCKS lock_id +INNODB_LOCK_WAITS requesting_trx_id +INNODB_RSEG rseg_id +INNODB_SYS_COLUMNS TABLE_ID +INNODB_SYS_FIELDS INDEX_ID +INNODB_SYS_FOREIGN ID +INNODB_SYS_FOREIGN_COLS ID INNODB_SYS_INDEXES INDEX_ID +INNODB_SYS_STATS INDEX_ID +INNODB_SYS_TABLES SCHEMA +INNODB_SYS_TABLESTATS SCHEMA +INNODB_TABLE_STATS table_schema INNODB_TRX trx_id KEY_CACHES KEY_CACHE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA @@ -123,9 +157,26 @@ FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME GLOBAL_VARIABLES VARIABLE_NAME INDEX_STATISTICS TABLE_SCHEMA +INNODB_BUFFER_POOL_PAGES page_type +INNODB_BUFFER_POOL_PAGES_BLOB space_id +INNODB_BUFFER_POOL_PAGES_INDEX index_id +INNODB_CMP page_size INNODB_CMPMEM page_size +INNODB_CMPMEM_RESET page_size +INNODB_CMP_RESET page_size +INNODB_INDEX_STATS table_schema INNODB_LOCKS lock_id +INNODB_LOCK_WAITS requesting_trx_id +INNODB_RSEG rseg_id +INNODB_SYS_COLUMNS TABLE_ID +INNODB_SYS_FIELDS INDEX_ID +INNODB_SYS_FOREIGN ID +INNODB_SYS_FOREIGN_COLS ID INNODB_SYS_INDEXES INDEX_ID +INNODB_SYS_STATS INDEX_ID +INNODB_SYS_TABLES SCHEMA +INNODB_SYS_TABLESTATS SCHEMA +INNODB_TABLE_STATS table_schema INNODB_TRX trx_id KEY_CACHES KEY_CACHE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA @@ -184,9 +235,26 @@ FILES information_schema.FILES 1 GLOBAL_STATUS information_schema.GLOBAL_STATUS 1 GLOBAL_VARIABLES information_schema.GLOBAL_VARIABLES 1 INDEX_STATISTICS information_schema.INDEX_STATISTICS 1 +INNODB_BUFFER_POOL_PAGES information_schema.INNODB_BUFFER_POOL_PAGES 1 +INNODB_BUFFER_POOL_PAGES_BLOB information_schema.INNODB_BUFFER_POOL_PAGES_BLOB 1 +INNODB_BUFFER_POOL_PAGES_INDEX information_schema.INNODB_BUFFER_POOL_PAGES_INDEX 1 +INNODB_CMP information_schema.INNODB_CMP 1 INNODB_CMPMEM information_schema.INNODB_CMPMEM 1 +INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM_RESET 1 +INNODB_CMP_RESET information_schema.INNODB_CMP_RESET 1 +INNODB_INDEX_STATS information_schema.INNODB_INDEX_STATS 1 INNODB_LOCKS information_schema.INNODB_LOCKS 1 +INNODB_LOCK_WAITS information_schema.INNODB_LOCK_WAITS 1 +INNODB_RSEG information_schema.INNODB_RSEG 1 +INNODB_SYS_COLUMNS information_schema.INNODB_SYS_COLUMNS 1 +INNODB_SYS_FIELDS information_schema.INNODB_SYS_FIELDS 1 +INNODB_SYS_FOREIGN information_schema.INNODB_SYS_FOREIGN 1 +INNODB_SYS_FOREIGN_COLS information_schema.INNODB_SYS_FOREIGN_COLS 1 INNODB_SYS_INDEXES information_schema.INNODB_SYS_INDEXES 1 +INNODB_SYS_STATS information_schema.INNODB_SYS_STATS 1 +INNODB_SYS_TABLES information_schema.INNODB_SYS_TABLES 1 +INNODB_SYS_TABLESTATS information_schema.INNODB_SYS_TABLESTATS 1 +INNODB_TABLE_STATS information_schema.INNODB_TABLE_STATS 1 INNODB_TRX information_schema.INNODB_TRX 1 KEY_CACHES information_schema.KEY_CACHES 1 KEY_COLUMN_USAGE information_schema.KEY_COLUMN_USAGE 1 @@ -228,9 +296,26 @@ Database: information_schema | GLOBAL_STATUS | | GLOBAL_VARIABLES | | INDEX_STATISTICS | +| INNODB_BUFFER_POOL_PAGES | +| INNODB_BUFFER_POOL_PAGES_BLOB | +| INNODB_BUFFER_POOL_PAGES_INDEX | +| INNODB_CMP | | INNODB_CMPMEM | +| INNODB_CMPMEM_RESET | +| INNODB_CMP_RESET | +| INNODB_INDEX_STATS | | INNODB_LOCKS | +| INNODB_LOCK_WAITS | +| INNODB_RSEG | +| INNODB_SYS_COLUMNS | +| INNODB_SYS_FIELDS | +| INNODB_SYS_FOREIGN | +| INNODB_SYS_FOREIGN_COLS | | INNODB_SYS_INDEXES | +| INNODB_SYS_STATS | +| INNODB_SYS_TABLES | +| INNODB_SYS_TABLESTATS | +| INNODB_TABLE_STATS | | INNODB_TRX | | KEY_CACHES | | KEY_COLUMN_USAGE | @@ -273,9 +358,26 @@ Database: INFORMATION_SCHEMA | GLOBAL_STATUS | | GLOBAL_VARIABLES | | INDEX_STATISTICS | +| INNODB_BUFFER_POOL_PAGES | +| INNODB_BUFFER_POOL_PAGES_BLOB | +| INNODB_BUFFER_POOL_PAGES_INDEX | +| INNODB_CMP | | INNODB_CMPMEM | +| INNODB_CMPMEM_RESET | +| INNODB_CMP_RESET | +| INNODB_INDEX_STATS | | INNODB_LOCKS | +| INNODB_LOCK_WAITS | +| INNODB_RSEG | +| INNODB_SYS_COLUMNS | +| INNODB_SYS_FIELDS | +| INNODB_SYS_FOREIGN | +| INNODB_SYS_FOREIGN_COLS | | INNODB_SYS_INDEXES | +| INNODB_SYS_STATS | +| INNODB_SYS_TABLES | +| INNODB_SYS_TABLESTATS | +| INNODB_TABLE_STATS | | INNODB_TRX | | KEY_CACHES | | KEY_COLUMN_USAGE | @@ -309,5 +411,5 @@ Wildcard: inf_rmation_schema | information_schema | SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA; table_schema count(*) -information_schema 40 +information_schema 57 mysql 23 diff --git a/mysql-test/r/plugin_loaderr.result b/mysql-test/r/plugin_loaderr.result new file mode 100644 index 00000000000..95e5ec794d2 --- /dev/null +++ b/mysql-test/r/plugin_loaderr.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB"); +SELECT +PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE,PLUGIN_LIBRARY,PLUGIN_LIBRARY_VERSION,LOAD_OPTION +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name = 'innodb'; +PLUGIN_NAME InnoDB +PLUGIN_STATUS DISABLED +PLUGIN_TYPE STORAGE ENGINE +PLUGIN_LIBRARY NULL +PLUGIN_LIBRARY_VERSION NULL +LOAD_OPTION ON diff --git a/mysql-test/suite.pm b/mysql-test/suite.pm index 7c234afffb1..1c2f55660c2 100644 --- a/mysql-test/suite.pm +++ b/mysql-test/suite.pm @@ -26,6 +26,9 @@ sub skip_combinations { $skip{'include/not_windows.inc'} = 'Requires not Windows' if IS_WINDOWS; + $skip{'t/plugin_loaderr.test'} = 'needs compiled-in innodb' + unless $::mysqld_variables{'innodb'} eq "ON"; + # disable tests that use ipv6, if unsupported use Socket; $skip{'include/check_ipv6.inc'} = 'No IPv6' diff --git a/mysql-test/t/plugin_loaderr.opt b/mysql-test/t/plugin_loaderr.opt new file mode 100644 index 00000000000..38cb906723d --- /dev/null +++ b/mysql-test/t/plugin_loaderr.opt @@ -0,0 +1 @@ +--innodb --innodb-page-size=6000 diff --git a/mysql-test/t/plugin_loaderr.test b/mysql-test/t/plugin_loaderr.test new file mode 100644 index 00000000000..e319e2fb54d --- /dev/null +++ b/mysql-test/t/plugin_loaderr.test @@ -0,0 +1,10 @@ + +# We used an invalid command-line option and InnoDB failed to start. +# Ignore all related warnings +call mtr.add_suppression("InnoDB"); + +--vertical_results +SELECT +PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE,PLUGIN_LIBRARY,PLUGIN_LIBRARY_VERSION,LOAD_OPTION +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name = 'innodb'; + diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 0dc71550b73..8a5eab23959 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1587,7 +1587,11 @@ int plugin_init(int *argc, char **argv, int flags) { if (plugin_ptr->state == PLUGIN_IS_UNINITIALIZED && plugin_initialize(plugin_ptr)) - goto err_unlock; + { + if (mandatory) + goto err_unlock; + plugin_ptr->state= PLUGIN_IS_DISABLED; + } } /*