Browse Source

MDEV-23365: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'

failed upon killed TRUNCATE

Note: This is a backport of 1cb4caa66d 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.
pull/1265/head
Rucha Deodhar 4 years ago
parent
commit
edde990e35
  1. 22
      mysql-test/r/truncate.result
  2. 29
      mysql-test/t/truncate.test
  3. 4
      sql/sql_truncate.cc

22
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

29
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

4
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;
}

Loading…
Cancel
Save