diff options
author | Nirbhay Choubey <nirbhay@mariadb.com> | 2015-09-08 17:43:48 -0400 |
---|---|---|
committer | Nirbhay Choubey <nirbhay@mariadb.com> | 2015-09-08 17:43:48 -0400 |
commit | 28ad6a7f28d1bdfb0d10530f8ab667213005807a (patch) | |
tree | 909282e82bcd49a4c8a9f7c219952b80857f38a5 | |
parent | 067ed23c274df9b03d2574e3183dfd36566ba54d (diff) | |
download | mariadb-git-28ad6a7f28d1bdfb0d10530f8ab667213005807a.tar.gz |
MDEV-8763: Galera tests failures with --ps-protocol
(MDEV-8617: Post-fix for 10.1)
* Reset THD's PS members before returning when node is
not ready
* Add CF_SKIP_WSREP_CHECK flag to COM_STMT_XXX commands
* Skip TO replication of COM_STMT_PREPAREs for MyISAM
* Updated tests
-rw-r--r-- | mysql-test/suite/galera/r/galera_toi_ddl_locking.result | 2 | ||||
-rw-r--r-- | mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result | 2 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/galera_suspend_slave.test | 2 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/galera_toi_ddl_locking.test | 2 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test | 2 | ||||
-rw-r--r-- | sql/sql_base.cc | 8 | ||||
-rw-r--r-- | sql/sql_parse.cc | 39 |
7 files changed, 37 insertions, 20 deletions
diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_locking.result b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result index d72a80b5a23..f0a51db14d3 100644 --- a/mysql-test/suite/galera/r/galera_toi_ddl_locking.result +++ b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result @@ -10,7 +10,7 @@ SELECT COUNT(*) = 0 FROM t2; COUNT(*) = 0 1 INSERT INTO t1 VALUES (1); -ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +Got one of the listed errors SET AUTOCOMMIT=OFF; START TRANSACTION; INSERT INTO t2 VALUES (1); diff --git a/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result b/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result index 35dabb7654f..e6f37792569 100644 --- a/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result +++ b/mysql-test/suite/galera/r/galera_var_certify_nonPK_off.result @@ -3,7 +3,7 @@ SET GLOBAL wsrep_certify_nonPK = OFF; CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB /* Table has no primary key */; CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; INSERT INTO t1 VALUES (1), (2); -ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +Got one of the listed errors INSERT INTO t2 VALUES (1), (2); UPDATE t2 SET f1 = 3 WHERE f1 = 1; SELECT COUNT(*) = 0 FROM t1; diff --git a/mysql-test/suite/galera/t/galera_suspend_slave.test b/mysql-test/suite/galera/t/galera_suspend_slave.test index 236c65b73a7..b4302f7d195 100644 --- a/mysql-test/suite/galera/t/galera_suspend_slave.test +++ b/mysql-test/suite/galera/t/galera_suspend_slave.test @@ -30,7 +30,7 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; exit(0); EOF ---error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK +--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT INSERT INTO t1 VALUES (1); --echo Resuming node_2 ... diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_locking.test b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test index ebab030d9d6..12c83a1f87a 100644 --- a/mysql-test/suite/galera/t/galera_toi_ddl_locking.test +++ b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test @@ -33,7 +33,7 @@ SELECT COUNT(*) = 0 FROM t1; SELECT COUNT(*) = 0 FROM t2; # Not allowed ---error ER_LOCK_DEADLOCK +--error ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT INSERT INTO t1 VALUES (1); SET AUTOCOMMIT=OFF; diff --git a/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test b/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test index f7967daebe7..3e8f3d18859 100644 --- a/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test +++ b/mysql-test/suite/galera/t/galera_var_certify_nonPK_off.test @@ -16,7 +16,7 @@ CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB /* Table has no primary key */; CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; # All DML without a PK is rejected with an error ---error ER_LOCK_DEADLOCK +--error ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT INSERT INTO t1 VALUES (1), (2); # DML with a PK is allowed to proceed diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 86b37742bea..9162969e2d5 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -4698,8 +4698,12 @@ restart: if (!tbl) continue; - if (WSREP_ON && sqlcom_can_generate_row_events(thd) && - wsrep_replicate_myisam && tables && tbl->file->ht == myisam_hton && + if (WSREP_ON && + wsrep_replicate_myisam && + tables && + tbl->file->ht == myisam_hton && + sqlcom_can_generate_row_events(thd) && + thd->get_command() != COM_STMT_PREPARE && tables->lock_type >= TL_WRITE_ALLOW_WRITE) { WSREP_TO_ISOLATION_BEGIN(NULL, NULL, tables); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c09f13b1844..502782d65cf 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -271,9 +271,6 @@ void init_update_queries(void) server_command_flags[COM_STATISTICS]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; server_command_flags[COM_PING]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; - server_command_flags[COM_STMT_PREPARE]= CF_SKIP_QUESTIONS; - server_command_flags[COM_STMT_CLOSE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; - server_command_flags[COM_STMT_RESET]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; server_command_flags[COM_QUIT]= CF_SKIP_WSREP_CHECK; server_command_flags[COM_PROCESS_INFO]= CF_SKIP_WSREP_CHECK; @@ -284,11 +281,16 @@ void init_update_queries(void) server_command_flags[COM_END]= CF_SKIP_WSREP_CHECK; /* - COM_QUERY and COM_SET_OPTION are allowed to pass the early COM_xxx filter, - they're checked later in mysql_execute_command(). + COM_QUERY, COM_SET_OPTION and COM_STMT_XXX are allowed to pass the early + COM_xxx filter, they're checked later in mysql_execute_command(). */ server_command_flags[COM_QUERY]= CF_SKIP_WSREP_CHECK; server_command_flags[COM_SET_OPTION]= CF_SKIP_WSREP_CHECK; + server_command_flags[COM_STMT_PREPARE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; + server_command_flags[COM_STMT_CLOSE]= CF_SKIP_QUESTIONS | CF_SKIP_WSREP_CHECK; + 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; /* Initialize the sql command flags array. */ memset(sql_command_flags, 0, sizeof(sql_command_flags)); @@ -886,9 +888,9 @@ void cleanup_items(Item *item) #ifndef EMBEDDED_LIBRARY +#ifdef WITH_WSREP static bool wsrep_node_is_ready(THD *thd) { -#ifdef WITH_WSREP if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready) { my_message(ER_UNKNOWN_COM_ERROR, @@ -896,9 +898,9 @@ static bool wsrep_node_is_ready(THD *thd) MYF(0)); return false; } -#endif return true; } +#endif /** Read one command from connection and execute it (query or simple command). @@ -1081,14 +1083,25 @@ bool do_command(THD *thd) vio_description(net->vio), command, command_name[command].str)); - /* bail out if DB snapshot has not been installed. */ +#ifdef WITH_WSREP + /* + Bail out if DB snapshot has not been installed. + */ if (!(server_command_flags[command] & CF_SKIP_WSREP_CHECK) && !wsrep_node_is_ready(thd)) { thd->protocol->end_statement(); + + /* Performance Schema Interface instrumentation end. */ + MYSQL_END_STATEMENT(thd->m_statement_psi, thd->get_stmt_da()); + thd->m_statement_psi= NULL; + thd->m_digest= NULL; + return_value= FALSE; goto out; } +#endif + /* Restore read timeout value */ my_net_set_read_timeout(net, thd->variables.net_read_timeout); @@ -2637,13 +2650,13 @@ mysql_execute_command(THD *thd) } /* - Bail out if DB snapshot has not been installed. We however, - allow SET and SHOW queries. + Bail out if DB snapshot has not been installed. We however, allow SET, + SHOW and SELECT queries (only if wsrep_dirty_reads is set). */ - if (lex->sql_command != SQLCOM_SET_OPTION && + if (lex->sql_command != SQLCOM_SET_OPTION && !wsrep_is_show_query(lex->sql_command) && - !(thd->variables.wsrep_dirty_reads && - lex->sql_command == SQLCOM_SELECT) && + !(thd->variables.wsrep_dirty_reads && + lex->sql_command == SQLCOM_SELECT) && !wsrep_node_is_ready(thd)) goto error; } |