mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed
This patch corrects a bug involving a LOAD DATA INFILE operation on a transactional table. It corrects a problem in the error handler by moving the transactional table check and autocommit_or_rollback operation to the end of the error handler. The problem was an assert was thrown after the operation completed. The assert found a non-sunk event in the transaction cache. The events in the transaction cache were added after commit_or_rollack and thereafter nothing removed them. An additional test case was added to detect this condition. mysql-test/extra/rpl_tests/rpl_loaddata.test: BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed This patch adds an additional test to rpl_loaddata for handling the duplicate key error on LOAD DATA INFILE. mysql-test/r/rpl_loaddata.result: BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed This patch adds the results for the additional test for properly handling the duplicate key error on LOAD DATA INFILE. sql/sql_load.cc: BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed This patch moves the check for a transactional table and rollback in the error handler for mysql_load(). The patch moves the transactional table check to the end of the error handler matching the implementation for other similar operations (see sql_insert).
This commit is contained in:
parent
4598bb9e8d
commit
f508249f8b
3 changed files with 19 additions and 3 deletions
|
@ -15,6 +15,7 @@
|
||||||
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986)
|
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986)
|
||||||
|
|
||||||
-- source include/master-slave.inc
|
-- source include/master-slave.inc
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
reset master;
|
reset master;
|
||||||
|
@ -156,4 +157,15 @@ drop table t2;
|
||||||
connection master;
|
connection master;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
# BUG#17233 LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||||
|
LOAD DATA INFILE "../std_data_ln/words.dat" INTO TABLE t1;
|
||||||
|
|
||||||
|
--disable warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable warnings
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -86,3 +86,7 @@ ERROR 23000: Duplicate entry '2003-03-22' for key 'day'
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||||
|
LOAD DATA INFILE "../std_data_ln/words.dat" INTO TABLE t1;
|
||||||
|
ERROR 23000: Duplicate entry 'Aarhus' for key 'PRIMARY'
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
|
|
@ -413,9 +413,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
if (transactional_table)
|
|
||||||
ha_autocommit_or_rollback(thd,error);
|
|
||||||
|
|
||||||
if (read_file_from_client)
|
if (read_file_from_client)
|
||||||
while (!read_info.next_line())
|
while (!read_info.next_line())
|
||||||
;
|
;
|
||||||
|
@ -463,6 +460,9 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /*!EMBEDDED_LIBRARY*/
|
#endif /*!EMBEDDED_LIBRARY*/
|
||||||
|
if (transactional_table)
|
||||||
|
ha_autocommit_or_rollback(thd,error);
|
||||||
|
|
||||||
error= -1; // Error on read
|
error= -1; // Error on read
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue