diff --git a/mysql-test/suite/galera/r/galera_server.result b/mysql-test/suite/galera/r/galera_server.result new file mode 100644 index 00000000000..ef81bf376b0 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_server.result @@ -0,0 +1,20 @@ +# On node_1 +CREATE SERVER s1 +FOREIGN DATA WRAPPER mysql +OPTIONS (HOST 'foo'); +# On node_2 +SELECT * FROM mysql.servers; +Server_name Host Db Username Password Port Socket Wrapper Owner +s1 foo 3306 mysql +ALTER SERVER s1 +OPTIONS (HOST 'bar'); +# On node_1 +SELECT * FROM mysql.servers; +Server_name Host Db Username Password Port Socket Wrapper Owner +s1 bar 3306 mysql +DROP SERVER s1; +# On node_2 +SELECT COUNT(*)=0 FROM mysql.servers; +COUNT(*)=0 +1 +# End of test diff --git a/mysql-test/suite/galera/t/galera_server.test b/mysql-test/suite/galera/t/galera_server.test new file mode 100644 index 00000000000..30b39028b96 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_server.test @@ -0,0 +1,28 @@ +# Test for CREATE/ALTER/DROP SERVER in Galera cluster + +--source include/galera_cluster.inc + +--connection node_1 +--echo # On node_1 +CREATE SERVER s1 + FOREIGN DATA WRAPPER mysql + OPTIONS (HOST 'foo'); + +--connection node_2 +--echo # On node_2 +SELECT * FROM mysql.servers; +ALTER SERVER s1 + OPTIONS (HOST 'bar'); + +--connection node_1 +--echo # On node_1 +SELECT * FROM mysql.servers; +DROP SERVER s1; + +--connection node_2 +--echo # On node_2 +SELECT COUNT(*)=0 FROM mysql.servers; + +--source include/galera_end.inc +--echo # End of test + diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 177e61a4c98..176b2e9768d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5649,6 +5649,8 @@ create_sp_error: if (check_global_access(thd, SUPER_ACL)) break; + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + res= create_server(thd, &lex->server_options); break; } @@ -5660,6 +5662,8 @@ create_sp_error: if (check_global_access(thd, SUPER_ACL)) break; + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + if ((error= alter_server(thd, &lex->server_options))) { DBUG_PRINT("info", ("problem altering server <%s>", @@ -5678,6 +5682,8 @@ create_sp_error: if (check_global_access(thd, SUPER_ACL)) break; + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + if ((err_code= drop_server(thd, &lex->server_options))) { if (! lex->if_exists() && err_code == ER_FOREIGN_SERVER_DOESNT_EXIST)