summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorTor Didriksen <tor.didriksen@oracle.com>2012-03-14 12:28:41 +0100
committerTor Didriksen <tor.didriksen@oracle.com>2012-03-14 12:28:41 +0100
commitcfea7c7dfc00821b1c39a9f8024d60fb337b7ab3 (patch)
tree11d95f49b95896464dc0e1bd0b0fcc0ac06a4b9d /mysql-test
parent7a4e8d9959ad3fcc2396e0290b5d20e56b8b693f (diff)
downloadmariadb-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.result44
-rw-r--r--mysql-test/t/filesort_debug.test44
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;