summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@mariadb.com>2015-09-08 17:43:48 -0400
committerNirbhay Choubey <nirbhay@mariadb.com>2015-09-08 17:43:48 -0400
commit28ad6a7f28d1bdfb0d10530f8ab667213005807a (patch)
tree909282e82bcd49a4c8a9f7c219952b80857f38a5
parent067ed23c274df9b03d2574e3183dfd36566ba54d (diff)
downloadmariadb-git-28ad6a7f28d1bdfb0d10530f8ab667213005807a.tar.gz
MDEV-8763: Galera tests failures with --ps-protocol
(MDEV-8617: Post-fix for 10.1) * Reset THD's PS members before returning when node is not ready * Add CF_SKIP_WSREP_CHECK flag to COM_STMT_XXX commands * Skip TO replication of COM_STMT_PREPAREs for MyISAM * Updated tests
-rw-r--r--mysql-test/suite/galera/r/galera_toi_ddl_locking.result2
-rw-r--r--mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result2
-rw-r--r--mysql-test/suite/galera/t/galera_suspend_slave.test2
-rw-r--r--mysql-test/suite/galera/t/galera_toi_ddl_locking.test2
-rw-r--r--mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test2
-rw-r--r--sql/sql_base.cc8
-rw-r--r--sql/sql_parse.cc39
7 files changed, 37 insertions, 20 deletions
diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_locking.result b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result
index d72a80b5a23..f0a51db14d3 100644
--- a/mysql-test/suite/galera/r/galera_toi_ddl_locking.result
+++ b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result
@@ -10,7 +10,7 @@ SELECT COUNT(*) = 0 FROM t2;
COUNT(*) = 0
1
INSERT INTO t1 VALUES (1);
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
+Got one of the listed errors
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t2 VALUES (1);
diff --git a/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result b/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result
index 35dabb7654f..e6f37792569 100644
--- a/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result
+++ b/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result
@@ -3,7 +3,7 @@ SET GLOBAL wsrep_certify_nonPK = OFF;
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB /* Table has no primary key */;
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1), (2);
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
+Got one of the listed errors
INSERT INTO t2 VALUES (1), (2);
UPDATE t2 SET f1 = 3 WHERE f1 = 1;
SELECT COUNT(*) = 0 FROM t1;
diff --git a/mysql-test/suite/galera/t/galera_suspend_slave.test b/mysql-test/suite/galera/t/galera_suspend_slave.test
index 236c65b73a7..b4302f7d195 100644
--- a/mysql-test/suite/galera/t/galera_suspend_slave.test
+++ b/mysql-test/suite/galera/t/galera_suspend_slave.test
@@ -30,7 +30,7 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
exit(0);
EOF
---error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK
+--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
INSERT INTO t1 VALUES (1);
--echo Resuming node_2 ...
diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_locking.test b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test
index ebab030d9d6..12c83a1f87a 100644
--- a/mysql-test/suite/galera/t/galera_toi_ddl_locking.test
+++ b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test
@@ -33,7 +33,7 @@ SELECT COUNT(*) = 0 FROM t1;
SELECT COUNT(*) = 0 FROM t2;
# Not allowed
---error ER_LOCK_DEADLOCK
+--error ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
INSERT INTO t1 VALUES (1);
SET AUTOCOMMIT=OFF;
diff --git a/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test b/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test
index f7967daebe7..3e8f3d18859 100644
--- a/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test
+++ b/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test
@@ -16,7 +16,7 @@ CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB /* Table has no primary key */;
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
# All DML without a PK is rejected with an error
---error ER_LOCK_DEADLOCK
+--error ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
INSERT INTO t1 VALUES (1), (2);
# DML with a PK is allowed to proceed
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 86b37742bea..9162969e2d5 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4698,8 +4698,12 @@ restart:
if (!tbl)
continue;
- if (WSREP_ON && sqlcom_can_generate_row_events(thd) &&
- wsrep_replicate_myisam && tables && tbl->file->ht == myisam_hton &&
+ if (WSREP_ON &&
+ wsrep_replicate_myisam &&
+ tables &&
+ tbl->file->ht == myisam_hton &&
+ sqlcom_can_generate_row_events(thd) &&
+ thd->get_command() != COM_STMT_PREPARE &&
tables->lock_type >= TL_WRITE_ALLOW_WRITE)
{
WSREP_TO_ISOLATION_BEGIN(NULL, NULL, tables);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index c09f13b1844..502782d65cf 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -271,9 +271,6 @@ void init_update_queries(void)
server_command_flags[COM_STATISTICS]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
server_command_flags[COM_PING]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
- server_command_flags[COM_STMT_PREPARE]= CF_SKIP_QUESTIONS;
- server_command_flags[COM_STMT_CLOSE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
- server_command_flags[COM_STMT_RESET]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
server_command_flags[COM_QUIT]= CF_SKIP_WSREP_CHECK;
server_command_flags[COM_PROCESS_INFO]= CF_SKIP_WSREP_CHECK;
@@ -284,11 +281,16 @@ void init_update_queries(void)
server_command_flags[COM_END]= CF_SKIP_WSREP_CHECK;
/*
- COM_QUERY and COM_SET_OPTION are allowed to pass the early COM_xxx filter,
- they're checked later in mysql_execute_command().
+ COM_QUERY, COM_SET_OPTION and COM_STMT_XXX are allowed to pass the early
+ COM_xxx filter, they're checked later in mysql_execute_command().
*/
server_command_flags[COM_QUERY]= CF_SKIP_WSREP_CHECK;
server_command_flags[COM_SET_OPTION]= CF_SKIP_WSREP_CHECK;
+ server_command_flags[COM_STMT_PREPARE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
+ server_command_flags[COM_STMT_CLOSE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
+ server_command_flags[COM_STMT_RESET]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK;
+ server_command_flags[COM_STMT_EXECUTE]= CF_SKIP_WSREP_CHECK;
+ server_command_flags[COM_STMT_SEND_LONG_DATA]= CF_SKIP_WSREP_CHECK;
/* Initialize the sql command flags array. */
memset(sql_command_flags, 0, sizeof(sql_command_flags));
@@ -886,9 +888,9 @@ void cleanup_items(Item *item)
#ifndef EMBEDDED_LIBRARY
+#ifdef WITH_WSREP
static bool wsrep_node_is_ready(THD *thd)
{
-#ifdef WITH_WSREP
if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready)
{
my_message(ER_UNKNOWN_COM_ERROR,
@@ -896,9 +898,9 @@ static bool wsrep_node_is_ready(THD *thd)
MYF(0));
return false;
}
-#endif
return true;
}
+#endif
/**
Read one command from connection and execute it (query or simple command).
@@ -1081,14 +1083,25 @@ bool do_command(THD *thd)
vio_description(net->vio), command,
command_name[command].str));
- /* bail out if DB snapshot has not been installed. */
+#ifdef WITH_WSREP
+ /*
+ Bail out if DB snapshot has not been installed.
+ */
if (!(server_command_flags[command] & CF_SKIP_WSREP_CHECK) &&
!wsrep_node_is_ready(thd))
{
thd->protocol->end_statement();
+
+ /* Performance Schema Interface instrumentation end. */
+ MYSQL_END_STATEMENT(thd->m_statement_psi, thd->get_stmt_da());
+ thd->m_statement_psi= NULL;
+ thd->m_digest= NULL;
+
return_value= FALSE;
goto out;
}
+#endif
+
/* Restore read timeout value */
my_net_set_read_timeout(net, thd->variables.net_read_timeout);
@@ -2637,13 +2650,13 @@ mysql_execute_command(THD *thd)
}
/*
- Bail out if DB snapshot has not been installed. We however,
- allow SET and SHOW queries.
+ Bail out if DB snapshot has not been installed. We however, allow SET,
+ SHOW and SELECT queries (only if wsrep_dirty_reads is set).
*/
- if (lex->sql_command != SQLCOM_SET_OPTION &&
+ if (lex->sql_command != SQLCOM_SET_OPTION &&
!wsrep_is_show_query(lex->sql_command) &&
- !(thd->variables.wsrep_dirty_reads &&
- lex->sql_command == SQLCOM_SELECT) &&
+ !(thd->variables.wsrep_dirty_reads &&
+ lex->sql_command == SQLCOM_SELECT) &&
!wsrep_node_is_ready(thd))
goto error;
}