1
0
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:
SachinSetiya
2016-10-26 14:52:24 +05:30
parent ea0ae42d83
commit 7ed5563bbe
3 changed files with 24 additions and 1 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;
} }