summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSachin Setiya <sachinsetia1001@gmail.com>2016-12-27 12:43:01 +0530
committerSachin Setiya <sachinsetia1001@gmail.com>2016-12-27 12:43:01 +0530
commit4b2207e34aa09e9d74e7f9b6701ae62add30c6ab (patch)
tree982585d2c32d03a9c880c85b11e40ac1549ec31c
parent545c9126963b26a093d5c8b6225cc52e360892e0 (diff)
downloadmariadb-git-bb-mdev-11016.tar.gz
Mdev-11016 wsrep_node_is_ready() check is too strict , version-2bb-mdev-11016
Problem:- Problem:- Previous commit of Mdev-11016 was causing galera-MW-284 test to fail Solution:- Added server_command_flags[COM_REGISTER_SLAVE]= CF_SKIP_WSREP_CHECK. So that COM_REGISTER_SLAVE should not fail when node is not ready.
-rw-r--r--mysql-test/suite/galera/r/MW-284.result2
-rw-r--r--mysql-test/suite/galera/r/galera_var_dirty_reads.result9
-rw-r--r--mysql-test/suite/galera/t/MW-284.test3
-rw-r--r--mysql-test/suite/galera/t/galera_var_dirty_reads.test5
-rw-r--r--sql/sql_parse.cc5
5 files changed, 23 insertions, 1 deletions
diff --git a/mysql-test/suite/galera/r/MW-284.result b/mysql-test/suite/galera/r/MW-284.result
index 3ff131674ea..f8ced56fd06 100644
--- a/mysql-test/suite/galera/r/MW-284.result
+++ b/mysql-test/suite/galera/r/MW-284.result
@@ -2,12 +2,14 @@ CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
SET SESSION wsrep_on = OFF;
SET SESSION wsrep_on = ON;
+SET global wsrep_sync_wait=0;
START SLAVE;
include/wait_for_slave_param.inc [Slave_IO_Running]
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
include/wait_for_slave_to_start.inc
INSERT INTO t1 VALUES (1);
DROP TABLE t1;
+SET global wsrep_sync_wait=7;;
STOP SLAVE;
RESET SLAVE ALL;
CALL mtr.add_suppression('failed registering on master');
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 8a3175912c7..52729395b19 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,15 @@ Variable_name Value
wsrep_cluster_status non-Primary
SELECT * FROM t1;
ERROR 08S01: WSREP has not yet prepared node for application use
+SELECT @@wsrep_dirty_reads;
+@@wsrep_dirty_reads
+0
+SELECT 2;
+2
+2
+SELECT 2+2 FROM DUAL;
+2+2
+4
SET @@session.wsrep_dirty_reads=ON;
SELECT * FROM t1;
i
diff --git a/mysql-test/suite/galera/t/MW-284.test b/mysql-test/suite/galera/t/MW-284.test
index f3ce1b0dc91..1e0371b43da 100644
--- a/mysql-test/suite/galera/t/MW-284.test
+++ b/mysql-test/suite/galera/t/MW-284.test
@@ -11,12 +11,14 @@
--enable_query_log
--connection node_1
+--let $wsrep_sync_wait_state= `SELECT @@wsrep_sync_wait;`
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
SET SESSION wsrep_on = OFF;
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'
--source include/wait_condition.inc
SET SESSION wsrep_on = ON;
+SET global wsrep_sync_wait=0;
--connection node_3
START SLAVE;
@@ -47,6 +49,7 @@ INSERT INTO t1 VALUES (1);
--connection node_1
DROP TABLE t1;
+--eval SET global wsrep_sync_wait=$wsrep_sync_wait_state;
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
--source include/wait_condition.inc
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 bcdb1574a3d..1fd30c69a7b 100644
--- a/mysql-test/suite/galera/t/galera_var_dirty_reads.test
+++ b/mysql-test/suite/galera/t/galera_var_dirty_reads.test
@@ -37,6 +37,11 @@ SHOW STATUS LIKE 'wsrep_cluster_status';
--error ER_UNKNOWN_COM_ERROR
SELECT * FROM t1;
+#Select query which does not access table should be allowed MDEV-11016
+SELECT @@wsrep_dirty_reads;
+SELECT 2;
+SELECT 2+2 FROM DUAL;
+
SET @@session.wsrep_dirty_reads=ON;
SELECT * FROM t1;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index b214a1759be..5717c3dd6c4 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -288,6 +288,7 @@ void init_update_queries(void)
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;
+ server_command_flags[COM_REGISTER_SLAVE]= CF_SKIP_WSREP_CHECK;
/* Initialize the sql command flags array. */
memset(sql_command_flags, 0, sizeof(sql_command_flags));
@@ -2651,7 +2652,7 @@ mysql_execute_command(THD *thd)
/*
Bail out if DB snapshot has not been installed. SET and SHOW commands,
however, are always allowed.
-
+ Select query is also allowed if it does not access any table.
We additionally allow all other commands that do not change data in
case wsrep_dirty_reads is enabled.
*/
@@ -2659,6 +2660,8 @@ mysql_execute_command(THD *thd)
!wsrep_is_show_query(lex->sql_command) &&
!(thd->variables.wsrep_dirty_reads &&
!is_update_query(lex->sql_command)) &&
+ !(lex->sql_command == SQLCOM_SELECT &&
+ !all_tables) &&
!wsrep_node_is_ready(thd))
goto error;
}