summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/rpl_killed_ddl.result12
-rw-r--r--mysql-test/t/rpl_killed_ddl.test23
-rw-r--r--sql/sql_db.cc5
3 files changed, 22 insertions, 18 deletions
diff --git a/mysql-test/r/rpl_killed_ddl.result b/mysql-test/r/rpl_killed_ddl.result
index aa419a8556e..b9ee915bdce 100644
--- a/mysql-test/r/rpl_killed_ddl.result
+++ b/mysql-test/r/rpl_killed_ddl.result
@@ -53,7 +53,7 @@ source include/diff_master_slave.inc;
DROP DATABASE d1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
-DROP DATABASE d2;
+DROP DATABASE IF EXISTS d2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE FUNCTION f2 () RETURNS INT DETERMINISTIC
@@ -63,10 +63,7 @@ source include/diff_master_slave.inc;
ALTER FUNCTION f1 SQL SECURITY INVOKER;
source include/kill_query.inc;
source include/diff_master_slave.inc;
-DROP FUNCTION IF EXISTS f1;
-source include/kill_query.inc;
-source include/diff_master_slave.inc;
-DROP FUNCTION IF EXISTS f2;
+DROP FUNCTION f1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE PROCEDURE p2 (OUT rows INT)
@@ -79,10 +76,7 @@ source include/diff_master_slave.inc;
ALTER PROCEDURE p1 SQL SECURITY INVOKER COMMENT 'return rows of table t1';
source include/kill_query.inc;
source include/diff_master_slave.inc;
-DROP PROCEDURE IF EXISTS p1;
-source include/kill_query.inc;
-source include/diff_master_slave.inc;
-DROP PROCEDURE IF EXISTS p2;
+DROP PROCEDURE p1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE TABLE t2 (b int);
diff --git a/mysql-test/t/rpl_killed_ddl.test b/mysql-test/t/rpl_killed_ddl.test
index f4f2f6ac320..7c07d5eecf0 100644
--- a/mysql-test/t/rpl_killed_ddl.test
+++ b/mysql-test/t/rpl_killed_ddl.test
@@ -123,7 +123,7 @@ source include/kill_query_and_diff_master_slave.inc;
send DROP DATABASE d1;
source include/kill_query_and_diff_master_slave.inc;
-send DROP DATABASE d2;
+send DROP DATABASE IF EXISTS d2;
source include/kill_query_and_diff_master_slave.inc;
######## FUNCTION ########
@@ -139,13 +139,21 @@ source include/kill_query_and_diff_master_slave.inc;
# function f1 probably does not exist because the ALTER query was
# killed
-send DROP FUNCTION IF EXISTS f1;
+send DROP FUNCTION f1;
source include/kill_query_and_diff_master_slave.inc;
# function f2 probably does not exist because the CREATE query was
# killed
-send DROP FUNCTION IF EXISTS f2;
-source include/kill_query_and_diff_master_slave.inc;
+#
+# Temporarily disabled. Because of BUG#43353, KILL the query may
+# result in function not found, and for 5.1, DROP statements will be
+# logged if the function is not found on master, so the following DROP
+# FUNCTION statement may be interrupted and not drop the function on
+# master, but still get logged and executed on slave and cause
+# inconsistence. Also disable the following DROP PROCEDURE IF EXITS
+# below.
+#send DROP FUNCTION IF EXISTS f2;
+#source include/kill_query_and_diff_master_slave.inc;
######## PROCEDURE ########
@@ -163,11 +171,12 @@ source include/kill_query_and_diff_master_slave.inc;
send ALTER PROCEDURE p1 SQL SECURITY INVOKER COMMENT 'return rows of table t1';
source include/kill_query_and_diff_master_slave.inc;
-send DROP PROCEDURE IF EXISTS p1;
+send DROP PROCEDURE p1;
source include/kill_query_and_diff_master_slave.inc;
-send DROP PROCEDURE IF EXISTS p2;
-source include/kill_query_and_diff_master_slave.inc;
+# Temporarily disabled because of bug#43353, see comment above for DROP FUNCTION IF EXISTS
+#send DROP PROCEDURE IF EXISTS p2;
+#source include/kill_query_and_diff_master_slave.inc;
######## TABLE ########
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index be538783458..2ad3953625f 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -541,6 +541,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info,
file. In this case it's best to just continue as if nothing has
happened. (This is a very unlikely senario)
*/
+ thd->clear_error();
}
if (!silent)
@@ -644,6 +645,7 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
if (mysql_bin_log.is_open())
{
+ thd->clear_error();
Query_log_event qinfo(thd, thd->query, thd->query_length, 0,
/* suppress_use */ TRUE, THD::NOT_KILLED);
@@ -655,7 +657,6 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
qinfo.db = db;
qinfo.db_len = (uint) strlen(db);
- thd->clear_error();
/* These DDL methods and logging protected with LOCK_mysql_create_db */
mysql_bin_log.write(&qinfo);
}
@@ -769,6 +770,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
}
if (mysql_bin_log.is_open())
{
+ thd->clear_error();
Query_log_event qinfo(thd, query, query_length, 0,
/* suppress_use */ TRUE, THD::NOT_KILLED);
/*
@@ -779,7 +781,6 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
qinfo.db = db;
qinfo.db_len = (uint) strlen(db);
- thd->clear_error();
/* These DDL methods and logging protected with LOCK_mysql_create_db */
mysql_bin_log.write(&qinfo);
}