mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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
This commit is contained in:
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 ...
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user