From: Tor Didriksen Date: January 10 2011 8:42am Subject: bzr commit into mysql-trunk branch (tor.didriksen:3471) Bug#59331 List-Archive: http://lists.mysql.com/commits/128252 X-Bug: 59331 Message-Id: <20110110084202.43EAF3127@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0582877630986099326==" --===============0582877630986099326== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/trunk-bugxxxxx-pqinit-error/ based on revid:vasil.dimov@stripped 3471 Tor Didriksen 2011-01-06 Bug#59331 filesort with priority queue: handling of out-of-memory Verifies that we have an error if init_queue() fails. @ mysql-test/r/filesort_debug.result New test case. @ mysql-test/t/filesort_debug.test New test case. @ sql/bounded_queue.h Add DBUG code to simulate out-of-memory. @ sql/filesort.cc Terminate filesort if pq.init() fails. Also: don't allocate more memory than we actually need for the 'strip-off-addon-fields' case. added: mysql-test/r/filesort_debug.result mysql-test/t/filesort_debug.test modified: sql/bounded_queue.h sql/filesort.cc === added file 'mysql-test/r/filesort_debug.result' --- a/mysql-test/r/filesort_debug.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/filesort_debug.result 2011-01-06 14:38:38 +0000 @@ -0,0 +1,11 @@ +# +# Bug#59331 filesort with priority queue: handling of out-of-memory +# +CREATE TABLE t1(f0 int auto_increment primary key, f1 int, f2 varchar(200)); +INSERT INTO t1(f1, f2) VALUES +(0,"0"),(1,"1"),(2,"2"),(3,"3"),(4,"4"),(5,"5"), +(6,"6"),(7,"7"),(8,"8"),(9,"9"),(10,"10"); +set debug= '+d,bounded_queue_init_fail'; +SELECT * FROM t1 ORDER BY f1 ASC, f0 LIMIT 1; +ERROR HY000: Out of memory (Needed 24 bytes) +DROP TABLE t1; === added file 'mysql-test/t/filesort_debug.test' --- a/mysql-test/t/filesort_debug.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/filesort_debug.test 2011-01-06 14:38:38 +0000 @@ -0,0 +1,16 @@ +--source include/have_debug.inc + +--echo # +--echo # Bug#59331 filesort with priority queue: handling of out-of-memory +--echo # + +CREATE TABLE t1(f0 int auto_increment primary key, f1 int, f2 varchar(200)); +INSERT INTO t1(f1, f2) VALUES +(0,"0"),(1,"1"),(2,"2"),(3,"3"),(4,"4"),(5,"5"), +(6,"6"),(7,"7"),(8,"8"),(9,"9"),(10,"10"); + +set debug= '+d,bounded_queue_init_fail'; +--error 5 +SELECT * FROM t1 ORDER BY f1 ASC, f0 LIMIT 1; + +DROP TABLE t1; === modified file 'sql/bounded_queue.h' --- a/sql/bounded_queue.h 2010-12-17 09:41:21 +0000 +++ b/sql/bounded_queue.h 2011-01-06 14:38:38 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -166,6 +166,10 @@ int Bounded_queue(get_ptr_compare(compare_length)); + + DBUG_EXECUTE_IF("bounded_queue_init_fail", + DBUG_SET("+d,simulate_out_of_memory");); + // We allocate space for one extra element, for replace when queue is full. return init_queue(&m_queue, (uint) max_elements + 1, 0, max_at_top, === modified file 'sql/filesort.cc' --- a/sql/filesort.cc 2011-01-04 15:23:59 +0000 +++ b/sql/filesort.cc 2011-01-06 14:38:38 +0000 @@ -226,10 +226,15 @@ ha_rows filesort(THD *thd, TABLE *table, compare_length, &make_sortkey, ¶m, table_sort.sort_keys)) { - // If failed to init pq, fall back to merge-sort. - DBUG_PRINT("info", ("failed to allocate PQ, fallback to sort-merge")); + /* + If we fail to init pq, we have to give up: + out of memory means my_malloc() will call my_error(). + */ + DBUG_PRINT("info", ("failed to allocate PQ")); my_free(table_sort.sort_keys); table_sort.sort_keys= NULL; + DBUG_ASSERT(thd->is_error()); + goto err; } } else @@ -1222,7 +1227,8 @@ bool check_if_pq_applicable(Sort_param * DBUG_RETURN(false); make_char_array(filesort_info, - param->max_keys_per_buffer, param->rec_length); + param->max_keys_per_buffer, + param->sort_length + param->ref_length); if (filesort_info->sort_keys) { // Make attached data to be references instead of fields. --===============0582877630986099326== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # 1qkyblc3essctrtf # target_branch: file:///export/home/didrik/repo/trunk-bugxxxxx-\ # pqinit-error/ # testament_sha1: 9707d8b24cb4dbeab2ba0c8f15fbece4ac5dc76b # timestamp: 2011-01-10 09:42:02 +0100 # base_revision_id: vasil.dimov@stripped\ # 8qygun7nuaqf9d3u # # Begin bundle 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 XPn/8XckU4UJBeORMnA= --===============0582877630986099326==--