summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSachinSetiya <sachinsetia1001@gmail.com>2016-12-01 11:24:04 +0530
committerSachinSetiya <sachinsetia1001@gmail.com>2016-12-01 11:27:31 +0530
commit52ea5ad865b4f6b4b37176296a3be0a716c5109a (patch)
treefbc252418db686ae409b95128bafb71bed257f35
parent41e11a8ac6ae62a9320beff451dbd031540c1f7a (diff)
downloadmariadb-git-52ea5ad865b4f6b4b37176296a3be0a716c5109a.tar.gz
MDEV-11016 wsrep_node_is_ready() check is too strict
Problem:- The condition that checks for node readiness is too strict as it does not allow SELECTs even if these selects do not access any tables. For example,if we run SELECT 1; OR SELECT @@max_allowed_packet; Solution:- We need not to report this error when all_tables(lex->query_tables) is NULL:
-rw-r--r--mysql-test/suite/galera/r/galera_var_dirty_reads.result13
-rw-r--r--mysql-test/suite/galera/t/galera_var_dirty_reads.test7
-rw-r--r--sql/sql_parse.cc4
3 files changed, 24 insertions, 0 deletions
diff --git a/mysql-test/suite/galera/r/galera_var_dirty_reads.result b/mysql-test/suite/galera/r/galera_var_dirty_reads.result
index 6d703c8cf95..6a2aa1eb5e7 100644
--- a/mysql-test/suite/galera/r/galera_var_dirty_reads.result
+++ b/mysql-test/suite/galera/r/galera_var_dirty_reads.result
@@ -18,6 +18,19 @@ SET @@session.wsrep_dirty_reads=ON;
SELECT * FROM t1;
i
1
+SET @@session.wsrep_dirty_reads=OFF;
+SELECT 2;
+2
+2
+SELECT @@max_allowed_packet;
+@@max_allowed_packet
+4194304
+SELECT 2+2 from DUAL;
+2+2
+4
+SELECT sysdate() from DUAL;
+sysdate()
+2016-10-28 23:13:06
SELECT * FROM t1;
i
1
diff --git a/mysql-test/suite/galera/t/galera_var_dirty_reads.test b/mysql-test/suite/galera/t/galera_var_dirty_reads.test
index dfd8d5ecf29..0c81779ca65 100644
--- a/mysql-test/suite/galera/t/galera_var_dirty_reads.test
+++ b/mysql-test/suite/galera/t/galera_var_dirty_reads.test
@@ -36,6 +36,13 @@ SET @@session.wsrep_dirty_reads=ON;
SELECT * FROM t1;
+#Select query which does not access table should be allowed MDEV-11016
+SET @@session.wsrep_dirty_reads=OFF;
+SELECT 2;
+SELECT @@max_allowed_packet;
+SELECT 2+2 from DUAL;
+SELECT sysdate() from DUAL;
+
--disable_query_log
--eval SET @@global.wsrep_cluster_address = '$wsrep_cluster_address_saved'
--enable_query_log
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 4ed1b7a5323..11613fac026 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2635,11 +2635,15 @@ mysql_execute_command(THD *thd)
/*
Bail out if DB snapshot has not been installed. We however,
allow SET and SHOW queries.
+ SHOW and SELECT queries (only if wsrep_dirty_reads is set or when it
+ does not access ant table)
*/
if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready &&
lex->sql_command != SQLCOM_SET_OPTION &&
!(thd->variables.wsrep_dirty_reads &&
lex->sql_command == SQLCOM_SELECT) &&
+ !(lex->sql_command == SQLCOM_SELECT &&
+ !all_table) &&
!wsrep_is_show_query(lex->sql_command))
{
my_message(ER_UNKNOWN_COM_ERROR,