diff options
-rw-r--r-- | mysql-test/suite/wsrep/r/mdev_6832.result | 11 | ||||
-rw-r--r-- | mysql-test/suite/wsrep/r/variables.result | 1 | ||||
-rw-r--r-- | mysql-test/suite/wsrep/t/mdev_6832.opt | 1 | ||||
-rw-r--r-- | mysql-test/suite/wsrep/t/mdev_6832.test | 15 | ||||
-rw-r--r-- | mysql-test/suite/wsrep/t/variables.test | 1 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 | ||||
-rw-r--r-- | sql/wsrep_var.cc | 7 |
7 files changed, 36 insertions, 4 deletions
diff --git a/mysql-test/suite/wsrep/r/mdev_6832.result b/mysql-test/suite/wsrep/r/mdev_6832.result new file mode 100644 index 00000000000..43894a6ec49 --- /dev/null +++ b/mysql-test/suite/wsrep/r/mdev_6832.result @@ -0,0 +1,11 @@ +# +# MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS +# +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready ON +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SET @@global.wsrep_cluster_address='gcomm://'; +# End of test. diff --git a/mysql-test/suite/wsrep/r/variables.result b/mysql-test/suite/wsrep/r/variables.result index 438e4730f57..98130dfaf65 100644 --- a/mysql-test/suite/wsrep/r/variables.result +++ b/mysql-test/suite/wsrep/r/variables.result @@ -141,7 +141,6 @@ SET GLOBAL wsrep_provider=none; # # MDEV#6206: wsrep_slave_threads subtracts from max_connections # -call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_slave_threads' and 'LOCK_global_system_variables'"); call mtr.add_suppression("WSREP: Failed to get provider options"); SELECT @@global.wsrep_provider; @@global.wsrep_provider diff --git a/mysql-test/suite/wsrep/t/mdev_6832.opt b/mysql-test/suite/wsrep/t/mdev_6832.opt new file mode 100644 index 00000000000..61f3f1bee5b --- /dev/null +++ b/mysql-test/suite/wsrep/t/mdev_6832.opt @@ -0,0 +1 @@ +--wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep_provider_options='base_port=$GALERA_BASE_PORT' --wsrep-on=1 --wsrep_causal_reads=ON diff --git a/mysql-test/suite/wsrep/t/mdev_6832.test b/mysql-test/suite/wsrep/t/mdev_6832.test new file mode 100644 index 00000000000..9efccface57 --- /dev/null +++ b/mysql-test/suite/wsrep/t/mdev_6832.test @@ -0,0 +1,15 @@ +--source include/have_wsrep_provider.inc +--source include/have_binlog_format_row.inc + +--echo # +--echo # MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS +--echo # + +SHOW STATUS LIKE 'wsrep_ready'; +--disable_query_log +eval SET @@global.wsrep_provider='$WSREP_PROVIDER'; +--enable_query_log +SHOW STATUS LIKE 'wsrep_ready'; +SET @@global.wsrep_cluster_address='gcomm://'; + +--echo # End of test. diff --git a/mysql-test/suite/wsrep/t/variables.test b/mysql-test/suite/wsrep/t/variables.test index 22f4c6cb940..c631423b695 100644 --- a/mysql-test/suite/wsrep/t/variables.test +++ b/mysql-test/suite/wsrep/t/variables.test @@ -78,7 +78,6 @@ SET GLOBAL wsrep_provider=none; --echo # --echo # MDEV#6206: wsrep_slave_threads subtracts from max_connections --echo # -call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_slave_threads' and 'LOCK_global_system_variables'"); call mtr.add_suppression("WSREP: Failed to get provider options"); --disable_query_log diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index eb87139e6f6..b389e591bc0 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2754,10 +2754,10 @@ mysql_execute_command(THD *thd) #endif case SQLCOM_SHOW_STATUS: { + execute_show_status(thd, all_tables); #ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; + wsrep_free_status(thd); #endif /* WITH_WSREP */ - execute_show_status(thd, all_tables); break; } case SQLCOM_SHOW_EXPLAIN: diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index e917c8f7d42..b8c454dafac 100644 --- a/sql/wsrep_var.cc +++ b/sql/wsrep_var.cc @@ -365,7 +365,14 @@ bool wsrep_cluster_address_update (sys_var *self, THD* thd, enum_var_type type) */ mysql_mutex_unlock(&LOCK_global_system_variables); wsrep_stop_replication(thd); + + /* + Unlock and lock LOCK_wsrep_slave_threads to maintain lock order & avoid + any potential deadlock. + */ + mysql_mutex_unlock(&LOCK_wsrep_slave_threads); mysql_mutex_lock(&LOCK_global_system_variables); + mysql_mutex_lock(&LOCK_wsrep_slave_threads); if (wsrep_start_replication()) { |