summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2021-07-26 16:31:22 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2021-09-06 18:12:45 +0530
commitedde990e35f4760e419bad1f0cb5b57ea9e2f863 (patch)
treeae5dbd9bb98e2cf28431740b436f5ef7f6a61c5a
parentf17537579ad0270b5d79f00ff30192506dce0e59 (diff)
downloadmariadb-git-bb-10.2-MDEV-23365.tar.gz
MDEV-23365: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'bb-10.2-MDEV-23365
failed upon killed TRUNCATE Note: This is a backport of 1cb4caa66d5fd2a9bc095d68988324b7b358d70f from 10.3 Analysis: Assertion failure happens because less session memory is set and so table can't be reopened. So the statement can't be used. This error goes unreported. Fix: Return the error state.
-rw-r--r--mysql-test/r/truncate.result22
-rw-r--r--mysql-test/t/truncate.test29
-rw-r--r--sql/sql_truncate.cc4
3 files changed, 54 insertions, 1 deletions
diff --git a/mysql-test/r/truncate.result b/mysql-test/r/truncate.result
index 48839f0eadb..0ab921c2438 100644
--- a/mysql-test/r/truncate.result
+++ b/mysql-test/r/truncate.result
@@ -159,3 +159,25 @@ HANDLER t1 READ FIRST;
ERROR 42S02: Unknown table 't1' in HANDLER
DROP TABLE t1;
# End of 6.0 tests
+#
+# 10.2 Test
+#
+# MDEV-23365: Assertion `!is_set() || (m_status == DA_OK_BULK &&
+# is_bulk_op())' failed upon killed TRUNCATE
+#
+CREATE TABLE t1 (a INT) ENGINE=MyISAM;
+LOCK TABLE t1 READ;
+connect con1,localhost,root,,test;
+SET SESSION max_session_mem_used= 65536;
+LOCK TABLE t1 WRITE;
+connection default;
+SELECT * FROM t1;
+a
+UNLOCK TABLES;
+connection con1;
+TRUNCATE TABLE t1;
+ERROR HY000: The MariaDB server is running with the --max-thread-mem-used=65536 option so it cannot execute this statement
+disconnect con1;
+connection default;
+DROP TABLE t1;
+# End of 10.2 Test
diff --git a/mysql-test/t/truncate.test b/mysql-test/t/truncate.test
index c7a066cc203..b12a8fa50d4 100644
--- a/mysql-test/t/truncate.test
+++ b/mysql-test/t/truncate.test
@@ -163,3 +163,32 @@ DROP TABLE t1;
--echo # End of 6.0 tests
+--echo #
+--echo # 10.2 Test
+--echo #
+--echo # MDEV-23365: Assertion `!is_set() || (m_status == DA_OK_BULK &&
+--echo # is_bulk_op())' failed upon killed TRUNCATE
+--echo #
+
+CREATE TABLE t1 (a INT) ENGINE=MyISAM;
+LOCK TABLE t1 READ;
+
+--connect (con1,localhost,root,,test)
+SET SESSION max_session_mem_used= 65536;
+--send
+ LOCK TABLE t1 WRITE;
+
+--connection default
+SELECT * FROM t1;
+UNLOCK TABLES;
+
+--connection con1
+--reap
+--error ER_OPTION_PREVENTS_STATEMENT
+TRUNCATE TABLE t1;
+
+--disconnect con1
+--connection default
+DROP TABLE t1;
+
+--echo # End of 10.2 Test
diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc
index 7d1f630b88c..e5165c5a855 100644
--- a/sql/sql_truncate.cc
+++ b/sql/sql_truncate.cc
@@ -426,8 +426,10 @@ bool Sql_cmd_truncate_table::truncate_table(THD *thd, TABLE_LIST *table_ref)
error= dd_recreate_table(thd, table_ref->db, table_ref->table_name);
if (thd->locked_tables_mode && thd->locked_tables_list.reopen_tables(thd, false))
+ {
thd->locked_tables_list.unlink_all_closed_tables(thd, NULL, 0);
-
+ error= 1;
+ }
/* No need to binlog a failed truncate-by-recreate. */
binlog_stmt= !error;
}