diff options
author | SachinSetiya <sachinsetia1001@gmail.com> | 2016-12-01 11:24:04 +0530 |
---|---|---|
committer | SachinSetiya <sachinsetia1001@gmail.com> | 2016-12-01 11:27:31 +0530 |
commit | 52ea5ad865b4f6b4b37176296a3be0a716c5109a (patch) | |
tree | fbc252418db686ae409b95128bafb71bed257f35 | |
parent | 41e11a8ac6ae62a9320beff451dbd031540c1f7a (diff) | |
download | mariadb-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.result | 13 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/galera_var_dirty_reads.test | 7 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 |
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, |