summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@mariadb.com>2016-12-19 16:11:27 -0500
committerNirbhay Choubey <nirbhay@mariadb.com>2016-12-19 16:11:27 -0500
commitb800264e495d5a61d47dacaf6005cb65e5d05b72 (patch)
tree7552489201aa1e92bc7cb2fb21b6a1b2e63142a6
parentd51e7f90bfb59676e21c128cf84cf54c2023b058 (diff)
downloadmariadb-git-b800264e495d5a61d47dacaf6005cb65e5d05b72.tar.gz
MDEV-11152: wsrep_replicate_myisam: SELECT gets replicated
... using TO Fixed the 'wsrep_replicate_myisam' check to allow only limited set of commands. Added a debug assert to discover such cases.
-rw-r--r--mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result10
-rw-r--r--mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test10
-rw-r--r--sql/sql_base.cc24
-rw-r--r--sql/sql_parse.cc4
4 files changed, 40 insertions, 8 deletions
diff --git a/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result b/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result
index bf5a09f6a77..87f8862df7e 100644
--- a/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result
+++ b/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result
@@ -94,6 +94,16 @@ connection node_1;
COMMIT;
DROP TABLE t1;
DROP TABLE t2;
+#
+# MDEV-11152: wsrep_replicate_myisam: SELECT gets replicated using TO
+#
+connection node_1;
+CREATE TABLE t1 (i INT) ENGINE=INNODB;
+INSERT INTO t1 VALUES(1);
+SELECT * FROM t1;
+i
+1
+DROP TABLE t1;
connection node_1;
SET GLOBAL wsrep_replicate_myisam = 0;
connection node_2;
diff --git a/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test b/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test
index 9cb0edf1810..90c786f0af0 100644
--- a/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test
+++ b/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test
@@ -132,6 +132,16 @@ COMMIT;
DROP TABLE t1;
DROP TABLE t2;
+--echo #
+--echo # MDEV-11152: wsrep_replicate_myisam: SELECT gets replicated using TO
+--echo #
+--connection node_1
+CREATE TABLE t1 (i INT) ENGINE=INNODB;
+INSERT INTO t1 VALUES(1);
+# This command should not get replicated.
+SELECT * FROM t1;
+DROP TABLE t1;
+
--connection node_1
--eval SET GLOBAL wsrep_replicate_myisam = $wsrep_replicate_myisam_orig
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 0a39d74cbf8..5e9ca14c2db 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4063,14 +4063,22 @@ restart:
}
}
- if (WSREP_ON &&
- wsrep_replicate_myisam &&
- (*start) &&
- (*start)->table &&
- (*start)->table->file->ht == myisam_hton &&
- !is_stat_table((*start)->db, (*start)->alias) &&
- sqlcom_can_generate_row_events(thd) &&
- thd->get_command() != COM_STMT_PREPARE)
+ if (WSREP_ON &&
+ wsrep_replicate_myisam &&
+ (*start) &&
+ (*start)->table &&
+ (*start)->table->file->ht == myisam_hton &&
+ wsrep_thd_exec_mode(thd) == LOCAL_STATE &&
+ !is_stat_table((*start)->db, (*start)->alias) &&
+ thd->get_command() != COM_STMT_PREPARE &&
+ ((thd->lex->sql_command == SQLCOM_INSERT ||
+ thd->lex->sql_command == SQLCOM_INSERT_SELECT ||
+ thd->lex->sql_command == SQLCOM_REPLACE ||
+ thd->lex->sql_command == SQLCOM_REPLACE_SELECT ||
+ thd->lex->sql_command == SQLCOM_UPDATE ||
+ thd->lex->sql_command == SQLCOM_UPDATE_MULTI ||
+ thd->lex->sql_command == SQLCOM_LOAD ||
+ thd->lex->sql_command == SQLCOM_DELETE)))
{
WSREP_TO_ISOLATION_BEGIN(NULL, NULL, (*start));
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 6dc91928ded..796c8f3386e 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3350,6 +3350,10 @@ mysql_execute_command(THD *thd)
case SQLCOM_SHOW_STORAGE_ENGINES:
case SQLCOM_SHOW_PROFILE:
{
+#ifdef WITH_WSREP
+ DBUG_ASSERT(thd->wsrep_exec_mode != REPL_RECV);
+#endif /* WITH_WSREP */
+
thd->status_var.last_query_cost= 0.0;
/*