diff options
author | Nirbhay Choubey <nirbhay@mariadb.com> | 2016-12-19 16:11:27 -0500 |
---|---|---|
committer | Nirbhay Choubey <nirbhay@mariadb.com> | 2016-12-19 16:11:27 -0500 |
commit | b800264e495d5a61d47dacaf6005cb65e5d05b72 (patch) | |
tree | 7552489201aa1e92bc7cb2fb21b6a1b2e63142a6 | |
parent | d51e7f90bfb59676e21c128cf84cf54c2023b058 (diff) | |
download | mariadb-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.result | 10 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test | 10 | ||||
-rw-r--r-- | sql/sql_base.cc | 24 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 |
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; /* |