diff options
author | Tor Didriksen <tor.didriksen@oracle.com> | 2012-03-14 12:28:41 +0100 |
---|---|---|
committer | Tor Didriksen <tor.didriksen@oracle.com> | 2012-03-14 12:28:41 +0100 |
commit | cfea7c7dfc00821b1c39a9f8024d60fb337b7ab3 (patch) | |
tree | 11d95f49b95896464dc0e1bd0b0fcc0ac06a4b9d /mysql-test | |
parent | 7a4e8d9959ad3fcc2396e0290b5d20e56b8b693f (diff) | |
download | mariadb-git-cfea7c7dfc00821b1c39a9f8024d60fb337b7ab3.tar.gz |
Bug#13832772 ASSERTION `THD->IS_ERROR() || KILL_ERRNO'
We are trying to sort a lot of text/blob fields,
so the buffer is indeed too small.
Memory available = thd->variables.sortbuff_size = 262144
min_sort_memory = param.sort_length*MERGEBUFF2 = 292245
So the decision to abort the query is correct.
filesort() calls my_error(), the error is reported.
But, since we have DELETE IGNORE ... the error is converted to a warning by
THD::raise_condition
filesort currently expects an error to be recorded in the THD diagnostics
area.
If we lift this restriction (remove the assert) we end up in the familiar
void Protocol::end_statement()
default:
DBUG_ASSERT(0);
The solution seems to be to call my_error(ME_FATALERROR) in filesort,
so that the error is propagated as an error rather than a warning.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/filesort_debug.result | 44 | ||||
-rw-r--r-- | mysql-test/t/filesort_debug.test | 44 |
2 files changed, 88 insertions, 0 deletions
diff --git a/mysql-test/r/filesort_debug.result b/mysql-test/r/filesort_debug.result index c35a6753353..1ccf779b903 100644 --- a/mysql-test/r/filesort_debug.result +++ b/mysql-test/r/filesort_debug.result @@ -31,3 +31,47 @@ SET DEBUG_SYNC='now SIGNAL filesort_killed'; # connection default SET DEBUG_SYNC= "RESET"; DROP TABLE t1; +# +# Bug#13832772 ASSERTION `THD->IS_ERROR() || KILL_ERRNO' +# FAILED IN FILESORT/MYSQL_DELETE +# +CREATE TABLE t1 ( +c1 BLOB, +c2 TEXT, +c3 TEXT, +c4 TEXT, +c5 TEXT, +c6 TEXT, +c7 TEXT, +c8 BLOB, +c9 TEXT, +c19 TEXT, +pk INT, +c20 TEXT, +c21 BLOB, +c22 TEXT, +c23 TEXT, +c24 TEXT, +c25 TEXT, +c26 BLOB, +c27 TEXT, +c28 TEXT, +primary key (pk) +) ENGINE=InnoDB +; +CALL mtr.add_suppression("Out of sort memory"); +DELETE IGNORE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20, +c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2; +ERROR HY001: Out of sort memory, consider increasing server sort buffer size +SHOW WARNINGS; +Level Code Message +Error 1038 Out of sort memory, consider increasing server sort buffer size +Error 1028 Sort aborted: Out of sort memory, consider increasing server sort buffer size +DELETE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20, +c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2; +ERROR HY001: Out of sort memory, consider increasing server sort buffer size +SHOW WARNINGS; +Level Code Message +Error 1038 Out of sort memory, consider increasing server sort buffer size +Error 1028 Sort aborted: Out of sort memory, consider increasing server sort buffer size +DROP TABLE t1; diff --git a/mysql-test/t/filesort_debug.test b/mysql-test/t/filesort_debug.test index 724ebc90368..7909a1047c9 100644 --- a/mysql-test/t/filesort_debug.test +++ b/mysql-test/t/filesort_debug.test @@ -57,3 +57,47 @@ disconnect con2; --source include/wait_until_count_sessions.inc SET DEBUG_SYNC= "RESET"; DROP TABLE t1; + +--echo # +--echo # Bug#13832772 ASSERTION `THD->IS_ERROR() || KILL_ERRNO' +--echo # FAILED IN FILESORT/MYSQL_DELETE +--echo # + +CREATE TABLE t1 ( + c1 BLOB, + c2 TEXT, + c3 TEXT, + c4 TEXT, + c5 TEXT, + c6 TEXT, + c7 TEXT, + c8 BLOB, + c9 TEXT, + c19 TEXT, + pk INT, + c20 TEXT, + c21 BLOB, + c22 TEXT, + c23 TEXT, + c24 TEXT, + c25 TEXT, + c26 BLOB, + c27 TEXT, + c28 TEXT, + primary key (pk) +) ENGINE=InnoDB +; + +CALL mtr.add_suppression("Out of sort memory"); + +--error ER_OUT_OF_SORTMEMORY +DELETE IGNORE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20, +c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2; +SHOW WARNINGS; + +--error ER_OUT_OF_SORTMEMORY +DELETE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20, +c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2; +SHOW WARNINGS; + +DROP TABLE t1; |