mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
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:
This commit is contained in:
@@ -18,6 +18,19 @@ SET @@session.wsrep_dirty_reads=ON;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
i
|
i
|
||||||
1
|
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;
|
SELECT * FROM t1;
|
||||||
i
|
i
|
||||||
1
|
1
|
||||||
|
@@ -36,6 +36,13 @@ SET @@session.wsrep_dirty_reads=ON;
|
|||||||
|
|
||||||
SELECT * FROM t1;
|
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
|
--disable_query_log
|
||||||
--eval SET @@global.wsrep_cluster_address = '$wsrep_cluster_address_saved'
|
--eval SET @@global.wsrep_cluster_address = '$wsrep_cluster_address_saved'
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@@ -2650,12 +2650,15 @@ mysql_execute_command(THD *thd)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Bail out if DB snapshot has not been installed. We however, allow SET,
|
Bail out if DB snapshot has not been installed. We however, allow SET,
|
||||||
SHOW and SELECT queries (only if wsrep_dirty_reads is set).
|
SHOW and SELECT queries (only if wsrep_dirty_reads is set or when it
|
||||||
|
does not access any table).
|
||||||
*/
|
*/
|
||||||
if (lex->sql_command != SQLCOM_SET_OPTION &&
|
if (lex->sql_command != SQLCOM_SET_OPTION &&
|
||||||
!wsrep_is_show_query(lex->sql_command) &&
|
!wsrep_is_show_query(lex->sql_command) &&
|
||||||
!(thd->variables.wsrep_dirty_reads &&
|
!(thd->variables.wsrep_dirty_reads &&
|
||||||
lex->sql_command == SQLCOM_SELECT) &&
|
lex->sql_command == SQLCOM_SELECT) &&
|
||||||
|
!(lex->sql_command == SQLCOM_SELECT &&
|
||||||
|
!all_tables) &&
|
||||||
!wsrep_node_is_ready(thd))
|
!wsrep_node_is_ready(thd))
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user