From: Date: April 16 2008 10:54am Subject: bk commit into 6.0 tree (svoj:1.2643) BUG#33723 List-Archive: http://lists.mysql.com/commits/45474 X-Bug: 33723 Message-Id: <20080416085459.0E8D341CECD@june.myoffice.izhnet.ru> Below is the list of changes that have just been committed into a local 6.0 repository of svoj. When svoj does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2008-04-16 13:54:53+05:00, svoj@stripped +3 -0 BUG#33723 - ALTER TABLE into non-existing Falcon tablespace blocks further ALTERs BUG#34048 - Falcon: after error with tablespace, I can't create table BUG#34617 - Falcon assertion in StorageHandler::addTable, line 622 If Falcon fails to create a table for some reason (e.g. non-existent tablespace), it is not possible to create a table in the same database with the same name anymore (until server is restarted). Or assertion failure (=server crash) may occur for further create table statements. The above is true for ALTER TABLE as well, when it fails to create temporary table. The problem was that table share was not removed from table share hash on error. mysql-test/suite/falcon/r/falcon_bug_34617.result@stripped, 2008-04-16 13:54:50+05:00, svoj@stripped +8 -0 A test case for BUG#34617. mysql-test/suite/falcon/r/falcon_bug_34617.result@stripped, 2008-04-16 13:54:50+05:00, svoj@stripped +0 -0 mysql-test/suite/falcon/t/falcon_bug_34617.test@stripped, 2008-04-16 13:54:50+05:00, svoj@stripped +18 -0 A test case for BUG#34617. mysql-test/suite/falcon/t/falcon_bug_34617.test@stripped, 2008-04-16 13:54:50+05:00, svoj@stripped +0 -0 storage/falcon/StorageTableShare.cpp@stripped, 2008-04-16 13:54:50+05:00, svoj@stripped +1 -2 When a table is being created, falcon adds table share to table share hash and creates a table. If an error occurs between these operations, table share entry was not removed from the hash. Attempt to remove table share from table share hash even if table was not actually created yet (in other words when storageDatabase::deleteTable returns StorageErrorTableNotFound). diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_34617.result b/mysql-test/suite/falcon/r/falcon_bug_34617.result --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/falcon/r/falcon_bug_34617.result 2008-04-16 13:54:50 +05:00 @@ -0,0 +1,8 @@ +CREATE TABLE t1(a INT) ENGINE=Falcon TABLESPACE nosuchtablespace; +ERROR HY000: Can't create table 'test.t1' (errno: 156) +CREATE TABLE t1(a INT) ENGINE=Falcon; +ALTER TABLE t1 TABLESPACE nosuchtablespace; +ERROR HY000: Can't create table 'test.#sql-temporary' (errno: 156) +ALTER TABLE t1 TABLESPACE nosuchtablespace; +ERROR HY000: Can't create table 'test.#sql-temporary' (errno: 156) +DROP TABLE t1; diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_34617.test b/mysql-test/suite/falcon/t/falcon_bug_34617.test --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/falcon/t/falcon_bug_34617.test 2008-04-16 13:54:50 +05:00 @@ -0,0 +1,18 @@ +--source include/have_falcon.inc + +# +# BUG#33723 - ALTER TABLE into non-existing Falcon tablespace blocks +# further ALTERs +# BUG#34048 - Falcon: after error with tablespace, I can't create table +# BUG#34617 - Falcon assertion in StorageHandler::addTable, line 622 +# +--error ER_CANT_CREATE_TABLE +CREATE TABLE t1(a INT) ENGINE=Falcon TABLESPACE nosuchtablespace; +CREATE TABLE t1(a INT) ENGINE=Falcon; +--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ +--error ER_CANT_CREATE_TABLE +ALTER TABLE t1 TABLESPACE nosuchtablespace; +--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ +--error ER_CANT_CREATE_TABLE +ALTER TABLE t1 TABLESPACE nosuchtablespace; +DROP TABLE t1; diff -Nrup a/storage/falcon/StorageTableShare.cpp b/storage/falcon/StorageTableShare.cpp --- a/storage/falcon/StorageTableShare.cpp 2008-03-12 16:15:13 +04:00 +++ b/storage/falcon/StorageTableShare.cpp 2008-04-16 13:54:50 +05:00 @@ -141,8 +141,7 @@ int StorageTableShare::deleteTable(Stora { unRegisterTable(); - if (res == 0) - storageHandler->removeTable(this); + storageHandler->removeTable(this); delete this; }