From: Tor Didriksen Date: February 24 2011 7:18am Subject: bzr push into mysql-5.5 branch (tor.didriksen:3355 to 3356) Bug#11747102 List-Archive: http://lists.mysql.com/commits/131991 X-Bug: 11747102 Message-Id: <20110224071850.6E79E3793@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3356 Tor Didriksen 2011-02-24 Bug #11747102 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES @ mysql-test/r/filesort_debug.result New test case. @ mysql-test/t/filesort_debug.test New test case. @ sql/filesort.cc thd->killed does not imply thd->is_error(), so test for that separately. modified: mysql-test/r/filesort_debug.result mysql-test/t/filesort_debug.test sql/filesort.cc 3355 Vasil Dimov 2011-02-23 [merge] Merge mysql-5.5-innodb -> mysql-5.5 added: storage/innobase/include/ut0bh.h storage/innobase/include/ut0bh.ic storage/innobase/ut/ut0bh.c modified: mysql-test/suite/sys_vars/r/all_vars.result storage/innobase/CMakeLists.txt storage/innobase/handler/ha_innodb.cc storage/innobase/include/buf0flu.h storage/innobase/include/srv0srv.h storage/innobase/include/sync0sync.h storage/innobase/include/trx0purge.h storage/innobase/include/trx0rseg.h storage/innobase/include/trx0sys.h storage/innobase/include/trx0sys.ic storage/innobase/srv/srv0srv.c storage/innobase/sync/sync0sync.c storage/innobase/trx/trx0purge.c storage/innobase/trx/trx0rseg.c storage/innobase/trx/trx0sys.c storage/innobase/trx/trx0trx.c storage/innobase/ut/ut0ut.c === modified file 'mysql-test/r/filesort_debug.result' --- a/mysql-test/r/filesort_debug.result 2011-02-02 11:54:49 +0000 +++ b/mysql-test/r/filesort_debug.result 2011-02-24 07:00:12 +0000 @@ -14,3 +14,20 @@ DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1 ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1 DROP TABLE t1; DROP FUNCTION f1; +# +# Bug #11747102 +# 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES +# +# connection 1 +CREATE TABLE t1(f0 int auto_increment primary key, f1 int); +INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5); +SET DEBUG_SYNC='filesort_start SIGNAL filesort_started WAIT_FOR filesort_killed'; +# Sending: (not reaped since connection is killed later) +SELECT * FROM t1 ORDER BY f1 ASC, f0; +# connection 2 +SET DEBUG_SYNC='now WAIT_FOR filesort_started'; +KILL @id; +SET DEBUG_SYNC='now SIGNAL filesort_killed'; +# connection default +SET DEBUG_SYNC= "RESET"; +DROP TABLE t1; === modified file 'mysql-test/t/filesort_debug.test' --- a/mysql-test/t/filesort_debug.test 2011-02-02 11:54:49 +0000 +++ b/mysql-test/t/filesort_debug.test 2011-02-24 07:00:12 +0000 @@ -1,4 +1,6 @@ --source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/count_sessions.inc SET @old_debug= @@session.debug; @@ -21,3 +23,37 @@ DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1 DROP TABLE t1; DROP FUNCTION f1; + +--echo # +--echo # Bug #11747102 +--echo # 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES +--echo # + +connect (con1, localhost, root); +connect (con2, localhost, root); + +--echo # connection 1 +connection con1; +CREATE TABLE t1(f0 int auto_increment primary key, f1 int); +INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5); + +let $ID= `SELECT @id := CONNECTION_ID()`; + +SET DEBUG_SYNC='filesort_start SIGNAL filesort_started WAIT_FOR filesort_killed'; +--echo # Sending: (not reaped since connection is killed later) +--send SELECT * FROM t1 ORDER BY f1 ASC, f0 + +--echo # connection 2 +connection con2; +let $ignore= `SELECT @id := $ID`; +SET DEBUG_SYNC='now WAIT_FOR filesort_started'; +KILL @id; +SET DEBUG_SYNC='now SIGNAL filesort_killed'; + +--echo # connection default +connection default; +disconnect con1; +disconnect con2; +--source include/wait_until_count_sessions.inc +SET DEBUG_SYNC= "RESET"; +DROP TABLE t1; === modified file 'sql/filesort.cc' --- a/sql/filesort.cc 2011-02-02 11:54:49 +0000 +++ b/sql/filesort.cc 2011-02-24 07:00:12 +0000 @@ -32,6 +32,7 @@ #include "probes_mysql.h" #include "sql_test.h" // TEST_filesort #include "opt_range.h" // SQL_SELECT +#include "debug_sync.h" /// How to write record_ref. #define WRITE_REF(file,from) \ @@ -123,6 +124,7 @@ ha_rows filesort(THD *thd, TABLE *table, Item_subselect *subselect= tab ? tab->containing_subselect() : 0; MYSQL_FILESORT_START(table->s->db.str, table->s->table_name.str); + DEBUG_SYNC(thd, "filesort_start"); /* Release InnoDB's adaptive hash index latch (if holding) before @@ -325,12 +327,13 @@ ha_rows filesort(THD *thd, TABLE *table, } if (error) { - DBUG_ASSERT(thd->is_error()); + int kill_errno= thd->killed_errno(); + DBUG_ASSERT(thd->is_error() || kill_errno); my_printf_error(ER_FILSORT_ABORT, "%s: %s", MYF(ME_ERROR + ME_WAITTANG), ER_THD(thd, ER_FILSORT_ABORT), - thd->stmt_da->message()); + kill_errno ? ER(kill_errno) : thd->stmt_da->message()); if (global_system_variables.log_warnings > 1) { No bundle (reason: useless for push emails).