From: Jon Olav Hauglid Date: September 9 2010 7:50am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3134) Bug#56494 List-Archive: http://lists.mysql.com/commits/117804 X-Bug: 56494 Message-Id: <201009090750.o894tOPF016464@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4021471594046127906==" --===============4021471594046127906== 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-bug56494/ based on revid:jon.hauglid@stripped 3134 Jon Olav Hauglid 2010-09-09 Bug #56494 Segfault in upgrade_shared_lock_to_exclusive() for REPAIR of merge table This crash happened if a table maintenance statement (ANALYZE TABLE, REPAIR TABLE, etc.) was executed on a MERGE table and opening and locking a child table failed. This could for example happen if a child table did not exist or if a lock timeout happened while waiting for a conflicting metadata lock to disappear. Since opening and locking the MERGE table and its children failed, the tables would be closed and the metadata locks released. However, TABLE_LIST::table for the MERGE table would still be set, with its value invalid since the tables had been closed. This caused the table maintenance statement to try to continue and upgrade the metadata lock on the MERGE table. But since the lock already had been released, this caused a segfault. This patch fixes the problem by setting TABLE_LIST::table to NULL if open_and_lock_tables() fails. This prevents the maintenance statement from continuing and trying to upgrade the metadata lock. The patch also fixes a problem where REPAIR TABLE ... USE_FRM would cause an assert for MERGE tables, even if child tables were opened successfully. Test case added to mdl_sync.test. modified: mysql-test/r/log_tables_upgrade.result mysql-test/r/mdl_sync.result mysql-test/r/merge.result mysql-test/r/myisampack.result mysql-test/r/mysql_upgrade.result mysql-test/r/mysql_upgrade_ssl.result mysql-test/t/mdl_sync.test sql/sql_admin.cc === modified file 'mysql-test/r/log_tables_upgrade.result' --- a/mysql-test/r/log_tables_upgrade.result 2010-02-26 12:22:48 +0000 +++ b/mysql-test/r/log_tables_upgrade.result 2010-09-09 07:50:04 +0000 @@ -19,7 +19,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -33,7 +33,7 @@ mysql.renamed_general_log mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -41,6 +41,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK DROP TABLE general_log; RENAME TABLE renamed_general_log TO general_log; SET GLOBAL general_log = @saved_general_log; === modified file 'mysql-test/r/mdl_sync.result' --- a/mysql-test/r/mdl_sync.result 2010-09-08 08:25:37 +0000 +++ b/mysql-test/r/mdl_sync.result 2010-09-09 07:50:04 +0000 @@ -2951,3 +2951,47 @@ SET DEBUG_SYNC= 'now SIGNAL continue'; # Connection default DROP TABLE m1, t1, t2; SET DEBUG_SYNC= 'RESET'; +# +# Bug#56494 Segfault in upgrade_shared_lock_to_exclusive() for +# REPAIR of merge table +# +DROP TABLE IF EXISTS t1, t2, t_not_exists; +CREATE TABLE t1(a INT); +ALTER TABLE t1 engine= MERGE UNION (t_not_exists); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze Error Table 'test.t_not_exists' doesn't exist +test.t1 analyze Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +test.t1 analyze error Corrupt +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check Error Table 'test.t_not_exists' doesn't exist +test.t1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +test.t1 check error Corrupt +CHECKSUM TABLE t1; +Table Checksum +test.t1 NULL +Warnings: +Error 1146 Table 'test.t_not_exists' doesn't exist +Error 1168 Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize Error Table 'test.t_not_exists' doesn't exist +test.t1 optimize Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +test.t1 optimize error Corrupt +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair Error Table 'test.t_not_exists' doesn't exist +test.t1 repair Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +test.t1 repair error Corrupt +REPAIR TABLE t1 USE_FRM; +Table Op Msg_type Msg_text +test.t1 repair Warning Can't open table +test.t1 repair error Corrupt +DROP TABLE t1; +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT) engine= MERGE UNION (t1); +REPAIR TABLE t2 USE_FRM; +Table Op Msg_type Msg_text +test.t2 repair note The storage engine for the table doesn't support repair +DROP TABLE t1, t2; === modified file 'mysql-test/r/merge.result' --- a/mysql-test/r/merge.result 2010-09-08 08:25:37 +0000 +++ b/mysql-test/r/merge.result 2010-09-09 07:50:04 +0000 @@ -2677,7 +2677,7 @@ OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize Error Table 'test.t_not_exists' doesn't exist test.t1 optimize Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist -test.t1 optimize note The storage engine for the table doesn't support optimize +test.t1 optimize error Corrupt DROP TABLE t1; # # Bug#36171 - CREATE TEMPORARY TABLE and MERGE engine === modified file 'mysql-test/r/myisampack.result' --- a/mysql-test/r/myisampack.result 2009-11-26 12:47:55 +0000 +++ b/mysql-test/r/myisampack.result 2010-09-09 07:50:04 +0000 @@ -46,14 +46,12 @@ insert into t1 select * from t1; flush tables; optimize table t1; Table Op Msg_type Msg_text -test.t1 optimize error Table 'test.t1' is read only -Warnings: -Error 1036 Table 't1' is read only +test.t1 optimize Error Table 't1' is read only +test.t1 optimize error Corrupt repair table t1; Table Op Msg_type Msg_text -test.t1 repair error Table 'test.t1' is read only -Warnings: -Error 1036 Table 't1' is read only +test.t1 repair Error Table 't1' is read only +test.t1 repair error Corrupt drop table t1; # # BUG#41541 - Valgrind warnings on packed MyISAM table === modified file 'mysql-test/r/mysql_upgrade.result' --- a/mysql-test/r/mysql_upgrade.result 2010-07-05 10:22:13 +0000 +++ b/mysql-test/r/mysql_upgrade.result 2010-09-09 07:50:04 +0000 @@ -7,7 +7,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -20,7 +20,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -28,6 +28,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK Run it again - should say already completed This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade Force should run it regardless of wether it's been run before @@ -39,7 +43,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -52,7 +56,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -60,6 +64,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila'; GRANT ALL ON *.* TO mysqltest1@'%'; Run mysql_upgrade with password protected account @@ -71,7 +79,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -84,7 +92,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -92,6 +100,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK DROP USER mysqltest1@'%'; Run mysql_upgrade with a non existing server socket mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect @@ -105,7 +117,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -118,7 +130,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -126,6 +138,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK set GLOBAL sql_mode=default; # # Bug #41569 mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table @@ -143,7 +159,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -156,7 +172,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -164,6 +180,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK CALL testproc(); DROP PROCEDURE testproc; WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (latin1). Please verify if necessary. @@ -184,7 +204,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -197,7 +217,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -205,6 +225,10 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK SHOW GRANTS FOR 'user3'@'%'; Grants for user3@% GRANT USAGE ON *.* TO 'user3'@'%' === modified file 'mysql-test/r/mysql_upgrade_ssl.result' --- a/mysql-test/r/mysql_upgrade_ssl.result 2010-08-11 17:56:56 +0000 +++ b/mysql-test/r/mysql_upgrade_ssl.result 2010-09-09 07:50:04 +0000 @@ -9,7 +9,7 @@ mysql.event mysql.func OK mysql.general_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK @@ -22,7 +22,7 @@ mysql.procs_priv mysql.servers OK mysql.slow_log Error : You can't use locks with log tables. -status : OK +error : Corrupt mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK @@ -30,3 +30,7 @@ mysql.time_zone_name mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK + +Repairing tables +mysql.general_log OK +mysql.slow_log OK === modified file 'mysql-test/t/mdl_sync.test' --- a/mysql-test/t/mdl_sync.test 2010-09-08 08:25:37 +0000 +++ b/mysql-test/t/mdl_sync.test 2010-09-09 07:50:04 +0000 @@ -4594,6 +4594,36 @@ disconnect con1; disconnect con2; +--echo # +--echo # Bug#56494 Segfault in upgrade_shared_lock_to_exclusive() for +--echo # REPAIR of merge table +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2, t_not_exists; +--enable_warnings + +CREATE TABLE t1(a INT); +ALTER TABLE t1 engine= MERGE UNION (t_not_exists); +# This caused the segfault +ANALYZE TABLE t1; +CHECK TABLE t1; +CHECKSUM TABLE t1; +OPTIMIZE TABLE t1; +REPAIR TABLE t1; + +# This caused an assert +REPAIR TABLE t1 USE_FRM; + +DROP TABLE t1; +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT) engine= MERGE UNION (t1); +# This caused an assert +REPAIR TABLE t2 USE_FRM; + +DROP TABLE t1, t2; + + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc === modified file 'sql/sql_admin.cc' --- a/sql/sql_admin.cc 2010-08-18 11:29:04 +0000 +++ b/sql/sql_admin.cc 2010-09-09 07:50:04 +0000 @@ -112,7 +112,8 @@ static int prepare_for_repair(THD *thd, } /* A MERGE table must not come here. */ - DBUG_ASSERT(table->file->ht->db_type != DB_TYPE_MRG_MYISAM); + if (table->file->ht->db_type == DB_TYPE_MRG_MYISAM) + goto end; /* REPAIR TABLE ... USE_FRM for temporary tables makes little sense. @@ -320,6 +321,14 @@ static bool mysql_admin_table(THD* thd, table->next_global= save_next_global; table->next_local= save_next_local; thd->open_options&= ~extra_open_options; + + /* + If open_and_lock_tables() failed, close_thread_tables() will close + the table and table->table can therefore be invalid. + */ + if (open_error) + table->table= NULL; + /* Under locked tables, we know that the table can be opened, so any errors opening the table are logical errors. --===============4021471594046127906== 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-bug56494/ # testament_sha1: 9e35cec0c06e015b52f92dc4df106e015a39c471 # timestamp: 2010-09-09 09:50:12 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # pst8wmfw6hcklpyd # # Begin bundle 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 5vYx4szJmEQ6HElM6i1H/xdyRThQkKrSkwM= --===============4021471594046127906==--