From: Tor Didriksen Date: January 6 2011 2:38pm Subject: bzr commit into mysql-trunk branch (tor.didriksen:3465) Bug#59331 List-Archive: http://lists.mysql.com/commits/128085 X-Bug: 59331 Message-Id: <20110106143842.AAAFF377A@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6303801105012592597==" --===============6303801105012592597== 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:saikumar.v@stripped 3465 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. --===============6303801105012592597== 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\ # 6o1ukphiwpc34crc # target_branch: file:///export/home/didrik/repo/trunk-bugxxxxx-\ # pqinit-error/ # testament_sha1: c140c9404922e9e2479e5cc1109671c179ad339a # timestamp: 2011-01-06 15:38:42 +0100 # base_revision_id: saikumar.v@stripped # # Begin bundle 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 AfRQSA== --===============6303801105012592597==--