From: Jon Olav Hauglid Date: March 23 2011 2:10pm Subject: bzr commit into mysql-5.1 branch (jon.hauglid:3627) Bug#11763784 List-Archive: http://lists.mysql.com/commits/133651 X-Bug: 11763784 Message-Id: <201103231410.p2NEAxqd019734@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4442224402688205972==" --===============4442224402688205972== 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.1-bug11763784/ based on revid:magne.mahre@stripped 3627 Jon Olav Hauglid 2011-03-23 Bug# 11763784 (former 56541) ASSERTION TABLE->DB_STAT FAILED IN SQL_BASE.CC::OPEN_TABLE() DURING I_S Q This assert could be triggered if a statement requiring a name lock on a table (e.g. DROP TRIGGER) executed concurrently with an I_S query which also used the table. One connection first started an I_S query that opened a given table. Then another connection started a statement requiring a name lock on the same table. This statement was blocked since the table was in use by the I_S query. When the I_S query resumed and tried to open the table again as part of get_all_tables(), it would encounter a table instance with an old version number representing the pending name lock. Since I_S queries ignore version checks and thus pending name locks, it would try to continue. This caused it to encounter the assert. The assert checked that the table found with a different version, was in fact in use. However, since this table represented a pending name lock and therefore was not in actual use, the check would fail and trigger the assert. This patch fixes the problem by removing the assert. It is ok for a old table instance to not be in use in this case since it can represent a pending name lock. Test case added to lock_sync.test. modified: mysql-test/r/lock_sync.result mysql-test/t/lock_sync.test sql/sql_base.cc === modified file 'mysql-test/r/lock_sync.result' --- a/mysql-test/r/lock_sync.result 2010-05-27 20:07:40 +0000 +++ b/mysql-test/r/lock_sync.result 2011-03-23 14:10:47 +0000 @@ -629,3 +629,30 @@ drop procedure p1; drop procedure p2; drop table t1, t2, t3, t4, t5, te; set @@global.concurrent_insert= @old_concurrent_insert; +# +# Bug#11763784 56541: ASSERTION TABLE->DB_STAT FAILED IN +# SQL_BASE.CC::OPEN_TABLE() DURING I_S Q +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(a int); +INSERT INTO t1 VALUES (1), (2); +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW BEGIN END; +# Connection con2 +SET DEBUG_SYNC= 'before_open_in_get_all_tables SIGNAL is_waits WAIT_FOR is_cont'; +# Sending: +SELECT * FROM information_schema.table_constraints JOIN t1 ON table_name = a; +# Connection con1 +SET DEBUG_SYNC= 'now WAIT_FOR is_waits'; +# Sending: +DROP TRIGGER t1_bi; +# Connection default +# Wait until DROP TRIGGER is blocked, waiting for t1 +SET DEBUG_SYNC= 'now SIGNAL is_cont'; +# Connection con2 +# Reaping SELECT * FROM information_schema.table_constraints JOIN t1... +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE a +# Connection con1 +# Reaping DROP TRIGGER t1_bi +# Connection default +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; === modified file 'mysql-test/t/lock_sync.test' --- a/mysql-test/t/lock_sync.test 2010-05-27 20:07:40 +0000 +++ b/mysql-test/t/lock_sync.test 2011-03-23 14:10:47 +0000 @@ -862,6 +862,60 @@ disconnect con2; set @@global.concurrent_insert= @old_concurrent_insert; +--echo # +--echo # Bug#11763784 56541: ASSERTION TABLE->DB_STAT FAILED IN +--echo # SQL_BASE.CC::OPEN_TABLE() DURING I_S Q +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1(a int); +INSERT INTO t1 VALUES (1), (2); +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW BEGIN END; + +connect (con1, localhost, root); +--echo # Connection con2 +connect (con2, localhost, root); +SET DEBUG_SYNC= 'before_open_in_get_all_tables SIGNAL is_waits WAIT_FOR is_cont'; +--echo # Sending: +--send SELECT * FROM information_schema.table_constraints JOIN t1 ON table_name = a + +--echo # Connection con1 +connection con1; +SET DEBUG_SYNC= 'now WAIT_FOR is_waits'; +--echo # Sending: +--send DROP TRIGGER t1_bi + +--echo # Connection default +connection default; +--echo # Wait until DROP TRIGGER is blocked, waiting for t1 +let $wait_condition= + SELECT COUNT(*) = 1 FROM information_schema.processlist + WHERE state = "Waiting for table" AND + info = "DROP TRIGGER t1_bi"; +--source include/wait_condition.inc +SET DEBUG_SYNC= 'now SIGNAL is_cont'; + +--echo # Connection con2 +connection con2; +--echo # Reaping SELECT * FROM information_schema.table_constraints JOIN t1... +--reap + +--echo # Connection con1 +connection con1; +--echo # Reaping DROP TRIGGER t1_bi +--reap + +--echo # Connection default +connection default; +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; +disconnect con1; +disconnect con2; + + # 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_base.cc' --- a/sql/sql_base.cc 2011-01-25 14:42:40 +0000 +++ b/sql/sql_base.cc 2011-03-23 14:10:47 +0000 @@ -2798,10 +2798,9 @@ TABLE *open_table(THD *thd, TABLE_LIST * ("Found table '%s.%s' with different refresh version", table_list->db, table_list->table_name)); - /* Ignore FLUSH, but not name locks! */ + /* Ignore FLUSH and pending name locks, but not acquired name locks! */ if (flags & MYSQL_LOCK_IGNORE_FLUSH && !table->open_placeholder) { - DBUG_ASSERT(table->db_stat); /* Force close at once after usage */ thd->version= table->s->version; continue; --===============4442224402688205972== 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.1-bug11763784/ # testament_sha1: 38ef0df473559a26eed8ae0da3b8e90b706a7b1a # timestamp: 2011-03-23 15:10:51 +0100 # base_revision_id: magne.mahre@stripped\ # ojl71u5lx0bzssk8 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWWAZ7ZcABJp/gFQwIAB89/// f/f/4L////BgC6+9qzRtkQABbAGrs5xqyllW2VCqVBhJJNTajUzSamzRoaSe1J7UeqemhNqM1BkN GJpk0DQNRR6jQaGgNGgZMgA0DIAGmgABkOMjTJiaDJkwmmQMhoDQGmTQwAmgMJEQiaaE0aepT9Mk wKeQagaDRo00NDagAA4yNMmJoMmTCaZAyGgNAaZNDACaAwkiCaATE0KPTTSang0mpAPUZGg00xNq DRtT9UfGb1fA5h6z3O/oi64neM5zNRQVmZiHhYM5b39D+LT+a7vNfkvDbZ5QK91fSyyJNkwtbPQh aHjOvSD0jNcLL4WMSdzS/ZiRptgz+PwcCvadw8CRXl2R7++/bF069d2elfx8Dvo8bl695R1CUhiG N0kSUHAdRrIiXc2/oHHyKhYkw2m29nSjCl+jgiemLY0lw/mrXKpWjcQojn4tfUzgpJDsJS+wJgPE koKdpdZoOksqXAvaH8tchqTEDlVDkNSroEywn2r+htDTQ7/kWEgt+82DG1MhxlBXkyopQl2/jdcd 34wynF9pVJjLzwj1VFUWVJQXT/spFCIsk2Ddp7uytRfHanTSblGnRrT96vDhfoeMVIf5IYkfMR/A cYYjVmDhsZVF5JvJVzt2QeqGMc6lMsaoshzRk9VCFAvJFT2z67C2w5h8SQ5eOZJVXFz1wra1qy8W FJPPLFq5GNlCDuUi8GGZyJwbOUrQ6NzoPc8s6dXPYpL0Dj4bLuNys66KUoWNBEhNysw0zoYxjGMb GxpwPP5HrbcSBvVJkOAaHn5/YuuI9ewZVB++L+BazVVVHXw9hyzEie4b2HARWHiAcz4G9YLqP7IC q9sDpepB2NHEp9Bpp5W+hB+bxRwZ6mo14bOFXLiGAcSE115Jgw8Xr3q2m5daefRoi4A0+hR1UL6n 8m4lh6bEGYsOACChtMJCzSW4jGRF480ySxjRJZEqKf6q083pvK/8Ip2GW1g6nVkoRVo47BMYv8Cm ZykY1hbjmECCFYI+MFyNvplESy+B2zq4zKsu7qlEkbL7kx7itkTEQpxc+u6ZMqUsw03cg6zv6jgq q248QYvTpX4rjt0OOUi8R0PAmrjexsh1kPaRUSgvaMJYkPbtVsVODiN5nXrEtrIPQGw4kh7GQ63b 6C2GJtNpMRUfLkuR4DnUV/Qd5jgtGlOSW6LSL4b2ZjQRib2JoUBjeVEnJnVQHGgVdCuqdtXD1Or5 nEZRN5iW+yVfiZsngbOWKKMIY5PUsq4Wtpc5ZO7fQRCZHiTKyhcF4OQJFpQlxL/dsLfXmOczZZgc IZZSqv9DQrUzEOGti7NVbzN81G8uwMTpvGvWMeBi1pgFB+PAHjmaYTtXjDM8JF9haOSw01R3FhKe 7LKTVpGubEKTLVOI1D9lUr7A0Cwr2heZba8kbC4nTvLdjQRcYUYaCeIaJihjwMCstsV1xfZheTJF xMjA2FxXUbU18GO/nsDKVCujF5w3UHyJTNtR5aHzCJbS06yskFhdbtdf7W2Wii+d5sZqG5kzhKcE NDoGArXOP1PXyxHkg8+FpOidzqSyBuj84b+1mwBk+DUprCxxMzIaTWsaq+RHGmSOg5xLmPmtgdQf UEvyHM/JMayWtgXqKYYb1Uw/ASkB1Ju6JRWgVeaof0Lf8qjhYhwVHTHxUAIgyPa7hqfd9puNAZxF ymQDMDSQG0Jo+4qK194iEUvkWDiJlD8hxbg0HR+G1WiJiJDBYBwLGONYXCIhwUFWWhJakQkG1f+H CAlxcNoLFGKcguX+lciZEmiCGBi8ND1AlMmlMNHFBYGvqGaJLYGoQBZLYBCBHS4FgygtqcvGBgLw cegdCIjFWo4gqypJgYzAmMZqN7LgF6gBUWSCH5FSoqBmOBNGCKwJrIILqismugtimFysSFRDLTmB rPVjb4z3ANMlCJAZLm2BaBnNMiDWgM9a4AXKPmvpXvSg6Q8A71BKcDERPtoiRepJ3KoWOD59sHgM RBQCmvED8HkDAKTVkBAZgYhozDGEHwOtZzwYHBDqYfz3IDha6+370lT7JOZ6bCEZi1WAyp9cQ+B9 gMwfbsPr+dXZiL2Wc4pyx0djZi/r26oMBqDhOs1To3Mw0IA4XuekYBZrUuM4MZkMZ25TrwGeMd58 q333SY2GDIUiLKUiQdjKC7jRVEpVTwIP3k0MPScUFNZxijUZw9iv7mjwPLbmPL3WjMtKNqSub5Gq sCWNqUlbFAZXh3tJtbTIzjRJIDLi/AG0gZEGeCA7WxhDhkDGQODnRfm2cJyma9E0NqTIpaskdRvw 39mQoew6BC5BhgOWbi7hz3e1zXv8ZyWgIeeQnKsjuSsS6sJoq3WcxZj2RCZJca0617+F518NOqvz qalRyK+J0W1aKBa0mfFKsTFgYeZpnmwJjKknq8kjutuYuNZhhdqHZcURXf3ap2xRxwFJmJRF3ejn uNN1uJ5kYFbd2toiYn0GIiRsBqycck4ONWmEWEbM+ue3nVGfPutaidF8AvOXN3xV3d1yiieEcqyF LxYIJQkq2uIyjsJjgNRnM9seJxUVGMKBrqJ/JVKRFomHBhtpxW9FcXmEPeAUL3t5UERDPMbiwrj3 l08x9S0F20X0T3eNZ7MDn1MMzD7AJNiQzraRlUCfkodcw09ZVJdhw518BbcvEkyGzdG7uezDj3JQ kRQv3dSJIk0bUEEksXsVm7pwUeYp/KCLjuC8uUFq7hkTDtxCXdyuwoIG2Ntg0cq4ssBjaYGK0Cyk xGM3pqQwd/dXcqeLHkvifUDLPTn2HQ7VRg7xtS9OlWwbfDSL1vCP1elTXw2wyEZhGCbwU8YQT1V0 2lgZqzQmg1JKFANNGA106jUC1QyYWbnCWc3Mxs9Ey5lVSDIywxPduXY+zWQB6DOjqW9d4F+Ak35x E1GfA0OvC26ltAri/qehK1ig9GcQMxBoDchAlDAOoYSORofJ0DW5jar2JML05lTEEZxFBBE56rp0 SRKTE0hUYwzJJIoXK3oCa3FgvQwghGIOWEoaHe138fL3JKIDr25+cbEDzcCasc4g9s4oRyM7UhlU kxDXjYewGMGwaFgrbi+dQcySxFG0YLllcRRZDfZj7qvgyyuD6uYmiPpN5r6mmhlQ0KEM0UDdlSrk qeFkvhjt8TXJB7r7Ubbzdo4Zs6Y9jJ0IxDu4JDQmdBbxPHCGG9o5qBqWSjKkBcatUMwLkGtp4XE6 yuGz5y1WsVsmGtGK2dm1IxCIx3TowpBDd7JpUiDEoFGHK+rbq07DgRYz6NA2NM4yVswQwm5YLMsw pVl5NId7ntWbzLvceZRBBhsR2p72wbgML2mQsxOEAfNL0EbNgTn7i+FhjdjYdI+XKl95dF6lmFJD MxwEmNLqM0pI+GxmvVhRU/aJqJHuBi1QQUPI1qpeYzUDhaGBcJr04u1gMmD6a4W2G4onNUgcmica I7jMUFU4RUGYKgrdDy+k8j0EZus+edfH3o+peegKJFUNAukGaYreKzLSEo7NJhFro9N0uRrcnocL +y+Qujh5nWbe/1tO0TBkUcvboM7csVe12GTJQ57mGZGoRlCYxpaUMIddJAtSadpT/8XckU4UJBgG e2XA --===============4442224402688205972==--