From: Jon Olav Hauglid Date: August 18 2010 1:11pm Subject: bzr commit into mysql-5.5-bugfixing branch (jon.hauglid:3113) Bug#56085 List-Archive: http://lists.mysql.com/commits/116113 X-Bug: 56085 Message-Id: <201008181311.o7I1Iqno004821@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8228068943365760857==" --===============8228068943365760857== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug56085/ based on revid:jon.hauglid@stripped 3113 Jon Olav Hauglid 2010-08-18 Bug #56085 Embedded server tests fails with assert in check_if_table_exists() This assert was triggered when the server tried to load plugins while running in embedded server mode. In embedded server mode, check_if_table_exists() was used to check if mysql.plugin existed so that ER_NO_SUCH_TABLE could be silently ignored. The problem was that this check was done without acquiring a metadata lock on mysql.plugin first. This triggered the assert. This patch fixes the problem by removing the call to check_if_table_exists() from plugin_load(). Instead an error handler which traps ER_NO_SUCH_TABLE is installed before trying to open mysql.plugin when running in embedded server mode. No test coverage added since this assert was triggered by existing tests running in embedded server mode. modified: sql/sql_plugin.cc === modified file 'sql/sql_plugin.cc' --- a/sql/sql_plugin.cc 2010-08-05 12:34:19 +0000 +++ b/sql/sql_plugin.cc 2010-08-18 13:11:30 +0000 @@ -1382,6 +1382,60 @@ static bool register_builtin(struct st_m } +#ifdef EMBEDDED_LIBRARY +/** + This internal handler is used to trap ER_NO_SUCH_TABLE. + During loading of plugins using an embedded library, + we wish to ignore ER_NO_SUCH_TABLE when opening mysql.plugin. +*/ +class Plugin_load_error_handler : public Internal_error_handler +{ +public: + Plugin_load_error_handler() + : m_no_such_table(FALSE) + {} + + virtual ~Plugin_load_error_handler() {} + + virtual bool handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + MYSQL_ERROR::enum_warning_level level, + const char* msg, + MYSQL_ERROR ** cond_hdl); + + bool no_such_table(); + +private: + bool m_no_such_table; +}; + + +bool +Plugin_load_error_handler::handle_condition(THD *, + uint sql_errno, + const char*, + MYSQL_ERROR::enum_warning_level, + const char*, + MYSQL_ERROR ** cond_hdl) +{ + *cond_hdl= NULL; + if (sql_errno == ER_NO_SUCH_TABLE) + { + m_no_such_table= TRUE; + return TRUE; + } + return FALSE; +} + + +bool Plugin_load_error_handler::no_such_table() +{ + return m_no_such_table; +} +#endif /* EMBEDDED_LIBRARY */ + + /* called only by plugin_init() */ @@ -1393,9 +1447,7 @@ static void plugin_load(MEM_ROOT *tmp_ro READ_RECORD read_record_info; int error; THD *new_thd= &thd; -#ifdef EMBEDDED_LIBRARY - bool table_exists; -#endif /* EMBEDDED_LIBRARY */ + bool result; DBUG_ENTER("plugin_load"); new_thd->thread_stack= (char*) &tables; @@ -1410,13 +1462,19 @@ static void plugin_load(MEM_ROOT *tmp_ro When building an embedded library, if the mysql.plugin table does not exist, we silently ignore the missing table */ - if (check_if_table_exists(new_thd, &tables, &table_exists)) - table_exists= FALSE; - if (!table_exists) + Plugin_load_error_handler error_handler; + new_thd->push_internal_handler(&error_handler); +#endif /* EMBEDDED_LIBRARY */ + + result= open_and_lock_tables(new_thd, &tables, FALSE, MYSQL_LOCK_IGNORE_TIMEOUT); + +#ifdef EMBEDDED_LIBRARY + new_thd->pop_internal_handler(); + if (error_handler.no_such_table()) goto end; #endif /* EMBEDDED_LIBRARY */ - if (open_and_lock_tables(new_thd, &tables, FALSE, MYSQL_LOCK_IGNORE_TIMEOUT)) + if (result) { DBUG_PRINT("error",("Can't open plugin table")); sql_print_error("Can't open the mysql.plugin table. Please " --===============8228068943365760857== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug56085/ # testament_sha1: 51581710eb989d8fb5779639422aa243b1dd7aee # timestamp: 2010-08-18 15:11:33 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # ks8jtogq0mw4b7cc # # Begin bundle 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 --===============8228068943365760857==--