diff --git a/maxscale-system-test/CMakeLists.txt b/maxscale-system-test/CMakeLists.txt index 49b364d11..11cf0fbf2 100644 --- a/maxscale-system-test/CMakeLists.txt +++ b/maxscale-system-test/CMakeLists.txt @@ -1054,34 +1054,42 @@ add_test_executable(mxs2057_systemd_watchdog.cpp mxs2057_systemd_watchdog mxs205 #add_test_executable_notest(long_test.cpp long_test_big replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Tries INSERTs with size close to 0x0ffffff * N -add_test_derived(different_size_rwsplit_big different_size_rwsplit replication_big LABELS readwritesplit UNSTABLE HEAVY REPL_BACKEND BIG_REPL_BACKEND) +add_test_derived(different_size_rwsplit_big different_size_rwsplit replication LABELS readwritesplit UNSTABLE HEAVY REPL_BACKEND BIG_REPL_BACKEND UNSTABLE) # Check how Maxscale works in case of one slave failure, only one slave is configured -add_test_derived(slave_failover_big slave_failover replication.one_slave_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(slave_failover_big slave_failover replication.one_slave LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Execute queries of different size, check data is the same when accessing via Maxscale and directly to backend -add_test_derived(sql_queries_big sql_queries replication_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(sql_queries_big sql_queries replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Check temporal tables commands functionality -add_test_derived(temporal_tables_big temporal_tables replication_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(temporal_tables_big temporal_tables replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Check if prepared statement works via Maxscale (via RWSplit) -add_test_derived(prepared_statement_big prepared_statement replication_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(prepared_statement_big prepared_statement replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Connect to ReadConn in master mode and check if there is only one backend connection to master -add_test_derived(readconnrouter_master_big readconnrouter_master replication_big LABELS readconnroute REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(readconnrouter_master_big readconnrouter_master replication LABELS readconnroute REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Creates 100 connections to ReadConn in slave mode and check if connections are distributed among all slaves -add_test_derived(readconnrouter_slave_big readconnrouter_slave replication_big LABELS readconnroute REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(readconnrouter_slave_big readconnrouter_slave replication LABELS readconnroute REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Checks changes of COM_SELECT and COM_INSERT after queris to check if RWSplit sends queries to master or to slave depending on if it is write or read only query -add_test_derived(rw_select_insert_big rw_select_insert replication_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(rw_select_insert_big rw_select_insert replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Checks connections are distributed equaly among backends -add_test_derived(rwsplit_conn_num_big rwsplit_conn_num repl_lgc_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(rwsplit_conn_num_big rwsplit_conn_num repl_lgc LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) # Check that there is one connection to Master and one connection to one of slaves -add_test_derived(rwsplit_connect_big rwsplit_connect replication_big LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) +add_test_derived(rwsplit_connect_big rwsplit_connect replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY) + +# Regression cases for the bug "Hint filter don't work if listed before regex filter in configuration file" +# (different filter sequence and configuration, but the same test, see .cnf for details) +add_test_derived(bug585_big bug587 bug585 LABELS regexfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE) +add_test_derived(bug587_big bug587 bug587 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE) +add_test_derived(bug587_1_big bug587 bug587_1 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE) +# Regression case for the bug "Routing Hints route to server sometimes doesn't work" +add_test_derived(bug471_big bug471 bug471_big LABELS readwritesplit hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE) set_tests_properties(different_size_rwsplit_big PROPERTIES TIMEOUT 3600) set_tests_properties(different_size_rwsplit PROPERTIES TIMEOUT 3600) @@ -1094,6 +1102,10 @@ set_tests_properties(readconnrouter_slave_big PROPERTIES TIMEOUT 3600) set_tests_properties(rw_select_insert_big PROPERTIES TIMEOUT 3600) set_tests_properties(rwsplit_conn_num_big PROPERTIES TIMEOUT 3600) set_tests_properties(rwsplit_connect_big PROPERTIES TIMEOUT 3600) +set_tests_properties(bug585_big PROPERTIES TIMEOUT 3600) +set_tests_properties(bug587_big PROPERTIES TIMEOUT 3600) +set_tests_properties(bug587_1_big PROPERTIES TIMEOUT 3600) +set_tests_properties(bug471_big PROPERTIES TIMEOUT 3600) ############################################ # END: tests with 15 machines backend # diff --git a/maxscale-system-test/backend_auth_fail.cpp b/maxscale-system-test/backend_auth_fail.cpp index c7bff2180..06db352f0 100644 --- a/maxscale-system-test/backend_auth_fail.cpp +++ b/maxscale-system-test/backend_auth_fail.cpp @@ -10,7 +10,6 @@ int main(int argc, char** argv) { MYSQL* mysql[1000]; TestConnections* Test = new TestConnections(argc, argv); - Test->repl->limit_nodes(4); Test->repl->execute_query_all_nodes((char*) "set global max_connections = 10;"); @@ -34,7 +33,7 @@ int main(int argc, char** argv) // Wait for the connections to clean up Test->stop_timeout(); - sleep(5); + sleep(2 * Test->repl->N); Test->check_maxscale_alive(0); int rval = Test->global_result; diff --git a/maxscale-system-test/bug471.cpp b/maxscale-system-test/bug471.cpp index 2175a2c35..378523b1e 100644 --- a/maxscale-system-test/bug471.cpp +++ b/maxscale-system-test/bug471.cpp @@ -152,7 +152,7 @@ using namespace std; int main(int argc, char* argv[]) { TestConnections* Test = new TestConnections(argc, argv); - Test->repl->limit_nodes(4); + Test->repl->limit_nodes(Test->maxscales->get_backend_servers_num(0, "RW-Split-Router")); Test->set_timeout(10); Test->repl->connect(); diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.bug471 b/maxscale-system-test/cnf/maxscale.cnf.template.bug471 old mode 100755 new mode 100644 index db4050adf..04990d2d4 --- a/maxscale-system-test/cnf/maxscale.cnf.template.bug471 +++ b/maxscale-system-test/cnf/maxscale.cnf.template.bug471 @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers= server1,server3 ,server4 +servers=server1,server3,server4 user=maxskysql password= skysql @@ -22,7 +22,7 @@ replace=select [RW Split Router] type=service router= readwritesplit -servers=server1, server2, server3,server4 +servers=###server_line### user=maxskysql password=skysql max_slave_connections=100% @@ -77,6 +77,7 @@ protocol=maxscaled socket=default + [server1] type=server address=###node_server_IP_1### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.bug471_big b/maxscale-system-test/cnf/maxscale.cnf.template.bug471_big new file mode 100755 index 000000000..b5ddde973 --- /dev/null +++ b/maxscale-system-test/cnf/maxscale.cnf.template.bug471_big @@ -0,0 +1,80 @@ +[maxscale] +threads=###threads### +log_warning=1 + +[MySQL Monitor] +type=monitor +module=mysqlmon +servers=server1,server3,server4,server5,server6,server7,server8,server9,server10,server11,server12,server13,server14,server15 +user=maxskysql +password= skysql + +[hints] +type=filter +module=hintfilter + +[regex] +type=filter +module=regexfilter +match=fetch +replace=select + +[RW Split Router] +type=service +router= readwritesplit +servers=###server_line### +user=maxskysql +password=skysql +max_slave_connections=100% +use_sql_variables_in=all +slave_selection_criteria=LEAST_BEHIND_MASTER +filters=hints|regex + + +[Read Connection Router Slave] +type=service +router=readconnroute +router_options= slave +servers=server1,server2,server3,server4 +user=maxskysql +password=skysql + +[Read Connection Router Master] +type=service +router=readconnroute +router_options=master +servers=server1,server2,server3,server4 +user=maxskysql +password=skysql + +[RW Split Listener] +type=listener +service=RW Split Router +protocol=MySQLClient +port=4006 +#socket=/tmp/rwsplit.sock + +[Read Connection Listener Slave] +type=listener +service=Read Connection Router Slave +protocol=MySQLClient +port=4009 + +[Read Connection Listener Master] +type=listener +service=Read Connection Router Master +protocol=MySQLClient +port=4008 + +[CLI] +type=service +router=cli + +[CLI Listener] +type=listener +service=CLI +protocol=maxscaled + +socket=default + +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.bug585 b/maxscale-system-test/cnf/maxscale.cnf.template.bug585 index a4c3c8d01..851a155bd 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.bug585 +++ b/maxscale-system-test/cnf/maxscale.cnf.template.bug585 @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers= server1, server2,server3 ,server4 +servers=###server_line### user=maxskysql password= skysql @@ -24,7 +24,7 @@ replace=from [RW Split Router] type=service router= readwritesplit -servers=server1, server2, server3,server4 +servers=###server_line### user=maxskysql password=skysql max_slave_connections=100% @@ -82,27 +82,4 @@ protocol=maxscaled socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend - +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.bug587 b/maxscale-system-test/cnf/maxscale.cnf.template.bug587 index 3dee6d5b6..d5d349e7b 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.bug587 +++ b/maxscale-system-test/cnf/maxscale.cnf.template.bug587 @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers= server1, server2,server3 ,server4 +servers=###server_line### user=maxskysql password= skysql @@ -22,7 +22,7 @@ replace=select [RW Split Router] type=service router= readwritesplit -servers=server1, server2, server3,server4 +servers=###server_line### user=maxskysql password=skysql max_slave_connections=100% @@ -76,27 +76,4 @@ protocol=maxscaled socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend - +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.bug587_1 b/maxscale-system-test/cnf/maxscale.cnf.template.bug587_1 index 5857707ad..77e7be61b 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.bug587_1 +++ b/maxscale-system-test/cnf/maxscale.cnf.template.bug587_1 @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers= server1, server2,server3 ,server4 +servers=###server_line### user=maxskysql password= skysql @@ -22,7 +22,7 @@ replace=select [RW Split Router] type=service router= readwritesplit -servers=server1, server2, server3,server4 +servers=###server_line### user=maxskysql password=skysql max_slave_connections=100% @@ -76,27 +76,4 @@ protocol=maxscaled socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend - +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.repl_lgc b/maxscale-system-test/cnf/maxscale.cnf.template.repl_lgc index c5ef7a076..ef9cf52b2 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.repl_lgc +++ b/maxscale-system-test/cnf/maxscale.cnf.template.repl_lgc @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers= server1, server2,server3 ,server4 +servers=###server_line### user=maxskysql password= skysql monitor_interval=1000 @@ -13,7 +13,7 @@ monitor_interval=1000 [RW Split Router] type=service router= readwritesplit -servers=server1, server2, server3,server4 +servers=###server_line### user=maxskysql password=skysql slave_selection_criteria=LEAST_GLOBAL_CONNECTIONS @@ -23,7 +23,7 @@ max_slave_connections=1 type=service router=readconnroute router_options= slave -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -31,7 +31,7 @@ password=skysql type=service router=readconnroute router_options=master -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -65,27 +65,4 @@ protocol=maxscaled #address=localhost socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend - +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.replication b/maxscale-system-test/cnf/maxscale.cnf.template.replication index 17825911a..73e07e857 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.replication +++ b/maxscale-system-test/cnf/maxscale.cnf.template.replication @@ -5,7 +5,7 @@ threads=###threads### [MySQL-Monitor] type=monitor module=mysqlmon -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql monitor_interval=1000 @@ -15,7 +15,7 @@ detect_standalone_master=false [RW-Split-Router] type=service router=readwritesplit -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql slave_selection_criteria=LEAST_GLOBAL_CONNECTIONS @@ -25,7 +25,7 @@ max_slave_connections=1 type=service router=readconnroute router_options=slave -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -33,7 +33,7 @@ password=skysql type=service router=readconnroute router_options=master -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -65,26 +65,4 @@ service=CLI protocol=maxscaled socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend +###server### diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.replication.one_slave b/maxscale-system-test/cnf/maxscale.cnf.template.replication.one_slave index a773b8694..97bf69890 100755 --- a/maxscale-system-test/cnf/maxscale.cnf.template.replication.one_slave +++ b/maxscale-system-test/cnf/maxscale.cnf.template.replication.one_slave @@ -5,7 +5,7 @@ log_warning=1 [MySQL Monitor] type=monitor module=mysqlmon -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -13,7 +13,7 @@ password=skysql type=service router=readwritesplit max_slave_connections=1 -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql disable_sescmd_history=false @@ -22,7 +22,7 @@ disable_sescmd_history=false type=service router=readconnroute router_options=slave -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -30,7 +30,7 @@ password=skysql type=service router=readconnroute router_options=master -servers=server1,server2,server3,server4 +servers=###server_line### user=maxskysql password=skysql @@ -63,27 +63,4 @@ service=CLI protocol=maxscaled socket=default -[server1] -type=server -address=###node_server_IP_1### -port=###node_server_port_1### -protocol=MySQLBackend - -[server2] -type=server -address=###node_server_IP_2### -port=###node_server_port_2### -protocol=MySQLBackend - -[server3] -type=server -address=###node_server_IP_3### -port=###node_server_port_3### -protocol=MySQLBackend - -[server4] -type=server -address=###node_server_IP_4### -port=###node_server_port_4### -protocol=MySQLBackend - +###server### diff --git a/maxscale-system-test/mariadb_nodes.cpp b/maxscale-system-test/mariadb_nodes.cpp index d8530e57d..f4e8baa2c 100644 --- a/maxscale-system-test/mariadb_nodes.cpp +++ b/maxscale-system-test/mariadb_nodes.cpp @@ -51,6 +51,15 @@ Mariadb_nodes::Mariadb_nodes(const char *pref, const char *test_cwd, bool verbos truncate_mariadb_logs(); flush_hosts(); close_active_connections(); + cnf_server_name = std::string(prefix); + if (strcmp(prefix, "node") == 0) + { + cnf_server_name = std::string("server"); + } + if (strcmp(prefix, "galera") == 0) + { + cnf_server_name = std::string("gserver"); + } } Mariadb_nodes::~Mariadb_nodes() @@ -1453,3 +1462,32 @@ void Mariadb_nodes::limit_nodes(int new_N) sleep(10); } } + +std::string Mariadb_nodes::cnf_servers() +{ + std::string s; + for (int i = 0; i < N; i++) + { + s += std::string("\\n[") + + cnf_server_name + + std::to_string(i + 1) + + std::string("]\\ntype=server\\naddress=") + + std::string(IP[i]) + + std::string("\\nport=") + + std::to_string(port[i]) + + std::string("\\nprotocol=MySQLBackend\\n"); + } + return s; +} + +std::string Mariadb_nodes::cnf_servers_line() +{ + std::string s = cnf_server_name + std::to_string(1); + for (int i = 1; i < N; i++) + { + s += std::string(",") + + cnf_server_name + + std::to_string(i + 1); + } + return s; +} diff --git a/maxscale-system-test/mariadb_nodes.h b/maxscale-system-test/mariadb_nodes.h index cf0e8c7ab..297045058 100644 --- a/maxscale-system-test/mariadb_nodes.h +++ b/maxscale-system-test/mariadb_nodes.h @@ -482,6 +482,23 @@ public: */ void limit_nodes(int new_N); + /** + * @brief cnf_servers Generates backend servers description for maxscale.cnf + * @return Servers description including IPs, ports + */ + std::string cnf_servers(); + + /** + * @brief cnf_servers_line Generates list of backend servers for serivces definition in maxscale.cnf + * @return List of servers, e.g server1,server2,server3,... + */ + std::string cnf_servers_line(); + + /** + * @brief cnf_server_name Prefix for backend server name ('server', 'gserver') + */ + std::string cnf_server_name; + private: bool check_master_node(MYSQL* conn); diff --git a/maxscale-system-test/maxscales.cpp b/maxscale-system-test/maxscales.cpp index 065ce1b2d..16894d35e 100644 --- a/maxscale-system-test/maxscales.cpp +++ b/maxscale-system-test/maxscales.cpp @@ -332,6 +332,21 @@ int Maxscales::get_maxadmin_param(int m, const char* command, const char* param, return exit_code; } +int Maxscales::get_backend_servers_num(int m, const char* service) +{ + char* buf; + int exit_code; + int i = 0; + + buf = ssh_node_output_f(m, true, &exit_code, "maxadmin show service %s | grep Name: | grep Protocol: | wc -l", service); + if (buf && !exit_code) + { + sscanf(buf, "%d", &i); + } + return i; +} + + long unsigned Maxscales::get_maxscale_memsize(int m) { diff --git a/maxscale-system-test/maxscales.h b/maxscale-system-test/maxscales.h index 9cde97e04..e0964aaf7 100644 --- a/maxscale-system-test/maxscales.h +++ b/maxscale-system-test/maxscales.h @@ -288,8 +288,17 @@ public: int check_maxadmin_param(int m, const char* command, const char* param, const char* value); int get_maxadmin_param(int m, const char* command, const char* param, char* result); + /** + * @brief get_backend_servers_num Gets number of backend servers configure for service + * @param m Number of Maxscale node + * @param service Name of service to ask + * @return number of backend servers + */ + int get_backend_servers_num(int m, const char* service); + /** * @brief get_maxscale_memsize Gets size of the memory consumed by Maxscale process + * @param m Number of Maxscale node * @return memory size in kilobytes */ long unsigned get_maxscale_memsize(int m = 0); diff --git a/maxscale-system-test/testconnections.cpp b/maxscale-system-test/testconnections.cpp index 731af1105..53df020f2 100644 --- a/maxscale-system-test/testconnections.cpp +++ b/maxscale-system-test/testconnections.cpp @@ -774,6 +774,11 @@ void TestConnections::process_template(int m, const char* template_name, const c system(str); } + sprintf(str, "sed -i \"s/###%s###/%s/\" maxscale.cnf", mdn[j]->cnf_server_name.c_str(), mdn[j]->cnf_servers().c_str()); + system(str); + sprintf(str, "sed -i \"s/###%s_line###/%s/\" maxscale.cnf", mdn[j]->cnf_server_name.c_str(), mdn[j]->cnf_servers_line().c_str()); + system(str); + mdn[j]->connect(); execute_query(mdn[j]->nodes[0], (char *) "CREATE DATABASE IF NOT EXISTS test"); mdn[j]->close_connections();