diff options
author | Nirbhay Choubey <nirbhay@mariadb.com> | 2014-12-31 19:28:20 -0500 |
---|---|---|
committer | Nirbhay Choubey <nirbhay@mariadb.com> | 2014-12-31 19:28:20 -0500 |
commit | 952b575272d47a48a1c55e83d3ff9a548857e564 (patch) | |
tree | f921dfb867b2ee55f3fc6899f6e668309fe6db51 | |
parent | eda3db826f741b6cb62bb6903bd6b55a6aca4c3a (diff) | |
download | mariadb-git-952b575272d47a48a1c55e83d3ff9a548857e564.tar.gz |
MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUSmariadb-galera-5.5.41
Synchronous read view should not be needed for
SHOW commands.
-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 | 3 | ||||
-rw-r--r-- | sql/wsrep_var.cc | 7 |
7 files changed, 34 insertions, 5 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 bbd969c735a..675cdf724cc 100644 --- a/mysql-test/suite/wsrep/r/variables.result +++ b/mysql-test/suite/wsrep/r/variables.result @@ -16,7 +16,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 f71735f64c4..2ae610d0e33 100644 --- a/mysql-test/suite/wsrep/t/variables.test +++ b/mysql-test/suite/wsrep/t/variables.test @@ -31,7 +31,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 cde856b7ff3..0926e22cc72 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2485,9 +2485,6 @@ mysql_execute_command(THD *thd) break; case SQLCOM_SHOW_STATUS: { -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ execute_show_status(thd, all_tables); #ifdef WITH_WSREP if (lex->sql_command == SQLCOM_SHOW_STATUS) wsrep_free_status(thd); diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index 687c9e1fd31..ba92c6a4773 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()) { |