Merge branch '2.2' into 2.2-mrm
This commit is contained in:
@ -501,6 +501,10 @@ add_test_executable(mxs1451_skip_auth.cpp mxs1451_skip_auth mxs1451_skip_auth LA
|
||||
# https://jira.mariadb.org/browse/MXS-1457
|
||||
add_test_executable(mxs1457_ignore_deleted.cpp mxs1457_ignore_deleted mxs1457_ignore_deleted LABELS REPL_BACKEND)
|
||||
|
||||
# MXS-1468: Using dynamic commands to create readwritesplit configs fail after restart
|
||||
# https://jira.mariadb.org/browse/MXS-1468
|
||||
add_test_executable(mxs1468.cpp mxs1468 mxs1468 LABELS REPL_BACKEND)
|
||||
|
||||
# MXS-1493: Use replication heartbeat in mysqlmon
|
||||
# https://jira.mariadb.org/browse/MXS-1493
|
||||
add_test_executable(verify_master_failure.cpp verify_master_failure verify_master_failure LABELS REPL_BACKEND)
|
||||
@ -567,7 +571,7 @@ add_test_executable(rwsplit_multi_stmt.cpp rwsplit_multi_stmt rwsplit_multi_stmt
|
||||
add_test_executable(rwsplit_read_only_trx.cpp rwsplit_read_only_trx rwsplit_read_only_trx LABELS readwritesplit REPL_BACKEND)
|
||||
|
||||
# Test replication-manager with MaxScale
|
||||
#add_test_executable(replication_manager.cpp replication_manager replication_manager LABELS maxscale REPL_BACKEND)
|
||||
add_test_executable_notest(replication_manager.cpp replication_manager replication_manager LABELS maxscale REPL_BACKEND)
|
||||
#add_test_executable_notest(replication_manager_2nodes.cpp replication_manager_2nodes replication_manager_2nodes LABELS maxscale REPL_BACKEND)
|
||||
#add_test_executable_notest(replication_manager_3nodes.cpp replication_manager_3nodes replication_manager_3nodes LABELS maxscale REPL_BACKEND)
|
||||
|
||||
@ -640,6 +644,9 @@ add_test_executable(temporal_tables.cpp temporal_tables replication LABELS readw
|
||||
# Test routing hints
|
||||
add_test_executable(test_hints.cpp test_hints hints2 LABELS hintfilter LIGHT REPL_BACKEND)
|
||||
|
||||
# Run MaxCtrl test suite
|
||||
add_test_executable(test_maxctrl.cpp test_maxctrl maxctrl LABELS REPL_BACKEND)
|
||||
|
||||
# Binlogrouter tests, these heavily alter the replication so they are run last
|
||||
add_test_executable(avro.cpp avro avro LABELS avrorouter binlogrouter LIGHT BREAKS_REPL)
|
||||
add_test_executable(avro_alter.cpp avro_alter avro LABELS avrorouter binlogrouter LIGHT BREAKS_REPL)
|
||||
|
132
maxscale-system-test/cnf/maxscale.cnf.template.maxctrl
Normal file
132
maxscale-system-test/cnf/maxscale.cnf.template.maxctrl
Normal file
@ -0,0 +1,132 @@
|
||||
[maxscale]
|
||||
threads=4
|
||||
admin_auth=false
|
||||
log_info=1
|
||||
admin_host=::
|
||||
|
||||
[MySQL Monitor]
|
||||
type=monitor
|
||||
module=mysqlmon
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
monitor_interval=10000
|
||||
|
||||
[RW Split Router]
|
||||
type=service
|
||||
router=readwritesplit
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
max_slave_connections=100%
|
||||
|
||||
[SchemaRouter Router]
|
||||
type=service
|
||||
router=schemarouter
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
auth_all_servers=1
|
||||
|
||||
[RW Split Hint Router]
|
||||
type=service
|
||||
router=readwritesplit
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
max_slave_connections=100%
|
||||
filters=Hint
|
||||
|
||||
[Read Connection Router]
|
||||
type=service
|
||||
router=readconnroute
|
||||
router_options=master
|
||||
servers=server1
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
filters=QLA
|
||||
|
||||
[Hint]
|
||||
type=filter
|
||||
module=hintfilter
|
||||
|
||||
[recurse3]
|
||||
type=filter
|
||||
module=tee
|
||||
service=RW Split Router
|
||||
|
||||
[recurse2]
|
||||
type=filter
|
||||
module=tee
|
||||
service=Read Connection Router
|
||||
|
||||
[recurse1]
|
||||
type=filter
|
||||
module=tee
|
||||
service=RW Split Hint Router
|
||||
|
||||
[QLA]
|
||||
type=filter
|
||||
module=qlafilter
|
||||
log_type=unified
|
||||
append=false
|
||||
flush=true
|
||||
filebase=/tmp/qla.log
|
||||
|
||||
[CLI]
|
||||
type=service
|
||||
router=cli
|
||||
|
||||
[Read Connection Listener]
|
||||
type=listener
|
||||
service=Read Connection Router
|
||||
protocol=MySQLClient
|
||||
port=4008
|
||||
|
||||
[RW Split Listener]
|
||||
type=listener
|
||||
service=RW Split Router
|
||||
protocol=MySQLClient
|
||||
port=4006
|
||||
|
||||
[SchemaRouter Listener]
|
||||
type=listener
|
||||
service=SchemaRouter Router
|
||||
protocol=MySQLClient
|
||||
port=4010
|
||||
|
||||
[RW Split Hint Listener]
|
||||
type=listener
|
||||
service=RW Split Hint Router
|
||||
protocol=MySQLClient
|
||||
port=4009
|
||||
|
||||
[CLI Listener]
|
||||
type=listener
|
||||
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
|
18
maxscale-system-test/cnf/maxscale.cnf.template.mxs1468
Executable file
18
maxscale-system-test/cnf/maxscale.cnf.template.mxs1468
Executable file
@ -0,0 +1,18 @@
|
||||
[maxscale]
|
||||
threads=###threads###
|
||||
|
||||
[rwsplit-service]
|
||||
type=service
|
||||
router=readwritesplit
|
||||
user=maxskysql
|
||||
passwd=skysql
|
||||
|
||||
[CLI]
|
||||
type=service
|
||||
router=cli
|
||||
|
||||
[CLI Listener]
|
||||
type=listener
|
||||
service=CLI
|
||||
protocol=maxscaled
|
||||
socket=default
|
@ -12,6 +12,8 @@ monitor_interval=1000
|
||||
detect_standalone_master=true
|
||||
failcount=2
|
||||
allow_cluster_recovery=true
|
||||
events=master_down
|
||||
script=/home/vagrant/replication-manager --hosts=$LIST --user=skysql:skysql --rpluser=skysql:skysql --switchover-at-sync=false --log-level=3 --logfile=/tmp/mrm.log switchover
|
||||
|
||||
[RW Split Router]
|
||||
type=service
|
||||
|
@ -117,9 +117,6 @@ EOF
|
||||
do_ssh <<EOF
|
||||
sudo mkdir -p /etc/replication-manager/
|
||||
sudo cp ./config.toml /etc/replication-manager/config.toml
|
||||
sudo systemctl stop replication-manager
|
||||
sudo replication-manager bootstrap --clean-all
|
||||
sudo systemctl restart replication-manager
|
||||
EOF
|
||||
}
|
||||
|
||||
|
@ -1270,6 +1270,7 @@ static void wait_until_pos(MYSQL *mysql, int filenum, int pos)
|
||||
{
|
||||
int slave_filenum = 0;
|
||||
int slave_pos = 0;
|
||||
bool error = false;
|
||||
|
||||
do
|
||||
{
|
||||
@ -1284,17 +1285,23 @@ static void wait_until_pos(MYSQL *mysql, int filenum, int pos)
|
||||
if (res)
|
||||
{
|
||||
MYSQL_ROW row = mysql_fetch_row(res);
|
||||
error = true;
|
||||
|
||||
if (row && row[6] && row[21])
|
||||
if (row && row[5] && row[21])
|
||||
{
|
||||
char *file_suffix = strchr(row[5], '.') + 1;
|
||||
slave_filenum = atoi(file_suffix);
|
||||
slave_pos = atoi(row[21]);
|
||||
char *file_suffix = strchr(row[5], '.');
|
||||
if (file_suffix)
|
||||
{
|
||||
file_suffix++;
|
||||
slave_filenum = atoi(file_suffix);
|
||||
slave_pos = atoi(row[21]);
|
||||
error = false;
|
||||
}
|
||||
}
|
||||
mysql_free_result(res);
|
||||
}
|
||||
}
|
||||
while (slave_filenum < filenum || slave_pos < pos);
|
||||
while ((slave_filenum < filenum || slave_pos < pos) && !error);
|
||||
}
|
||||
|
||||
void Mariadb_nodes::sync_slaves(int node)
|
||||
|
47
maxscale-system-test/maxctrl_scripts.sh.in
Normal file
47
maxscale-system-test/maxctrl_scripts.sh.in
Normal file
@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
|
||||
cat <<EOF > start_maxscale.sh
|
||||
#!/bin/bash
|
||||
sudo systemctl start maxscale
|
||||
EOF
|
||||
|
||||
cat <<EOF >stop_maxscale.sh
|
||||
#!/bin/bash
|
||||
|
||||
sudo systemctl stop maxscale
|
||||
|
||||
sudo rm -rf /var/lib/maxscale/*
|
||||
sudo rm -rf /var/cache/maxscale/*
|
||||
sudo rm -rf /var/run/maxscale/*
|
||||
|
||||
if [ -f /tmp/maxadmin.sock ]
|
||||
then
|
||||
sudo rm /tmp/maxadmin.sock
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
cat <<EOF >start_double_maxscale.sh
|
||||
#!/bin/bash
|
||||
sudo systemctl start maxscale
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo systemctl start maxscale"
|
||||
EOF
|
||||
|
||||
cat <<EOF >stop_double_maxscale.sh
|
||||
#!/bin/bash
|
||||
|
||||
sudo systemctl stop maxscale
|
||||
sudo rm -rf /var/lib/maxscale/*
|
||||
sudo rm -rf /var/cache/maxscale/*
|
||||
sudo rm -rf /var/run/maxscale/*
|
||||
test ! -f /tmp/maxadmin.sock || sudo rm /tmp/maxadmin.sock
|
||||
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo systemctl stop maxscale"
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/lib/maxscale/*"
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/cache/maxscale/*"
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/run/maxscale/*"
|
||||
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /tmp/maxadmin.sock"
|
||||
|
||||
EOF
|
||||
|
||||
chmod +x *.sh
|
37
maxscale-system-test/mxs1468.cpp
Normal file
37
maxscale-system-test/mxs1468.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* MXS-1468: Using dynamic commands to create readwritesplit configs fail after restart
|
||||
*
|
||||
* https://jira.mariadb.org/browse/MXS-1468
|
||||
*/
|
||||
|
||||
#include "testconnections.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
TestConnections test(argc, argv);
|
||||
|
||||
test.verbose = true;
|
||||
test.ssh_maxscale(true,
|
||||
"maxadmin create monitor cluster-monitor mysqlmon;"
|
||||
"maxadmin alter monitor cluster-monitor user=maxskysql password=skysql monitor_interval=1000;"
|
||||
"maxadmin restart monitor cluster-monitor;"
|
||||
"maxadmin create listener rwsplit-service rwsplit-listener 0.0.0.0 4006;"
|
||||
"maxadmin create listener rwsplit-service rwsplit-listener2 0.0.0.0 4008;"
|
||||
"maxadmin create listener rwsplit-service rwsplit-listener3 0.0.0.0 4009;"
|
||||
"maxadmin list listeners;"
|
||||
"maxadmin create server prod_mysql01 %s 3306;"
|
||||
"maxadmin create server prod_mysql02 %s 3306;"
|
||||
"maxadmin create server prod_mysql03 %s 3306;"
|
||||
"maxadmin list servers;"
|
||||
"maxadmin add server prod_mysql02 cluster-monitor rwsplit-service;"
|
||||
"maxadmin add server prod_mysql01 cluster-monitor rwsplit-service;"
|
||||
"maxadmin add server prod_mysql03 cluster-monitor rwsplit-service;"
|
||||
"maxadmin list servers;", test.repl->IP[0], test.repl->IP[1], test.repl->IP[2]);
|
||||
test.verbose = false;
|
||||
|
||||
test.tprintf("Restarting MaxScale");
|
||||
test.add_result(test.restart_maxscale(), "Restart should succeed");
|
||||
test.check_maxscale_alive();
|
||||
|
||||
return test.global_result;
|
||||
}
|
@ -21,9 +21,9 @@ void get_output(TestConnections& test)
|
||||
test.tprintf("%s", output);
|
||||
free(output);
|
||||
|
||||
test.tprintf("replication-manager output:");
|
||||
test.tprintf("MaxScale output:");
|
||||
output = test.ssh_maxscale_output(true,
|
||||
"cat /var/log/replication-manager.log && sudo truncate -s 0 /var/log/replication-manager.log");
|
||||
"cat /var/log/maxscale/maxscale.log && sudo truncate -s 0 /var/log/maxscale/maxscale.log");
|
||||
test.tprintf("%s", output);
|
||||
free(output);
|
||||
}
|
||||
@ -66,6 +66,21 @@ void check(TestConnections& test)
|
||||
mysql_close(conn);
|
||||
}
|
||||
|
||||
int get_server_id(TestConnections& test)
|
||||
{
|
||||
MYSQL *conn = test.open_rwsplit_connection();
|
||||
int id = -1;
|
||||
char str[1024];
|
||||
|
||||
if (find_field(conn, "SELECT @@server_id", "@@server_id", str) == 0)
|
||||
{
|
||||
id = atoi(str);
|
||||
}
|
||||
|
||||
mysql_close(conn);
|
||||
return id;
|
||||
}
|
||||
|
||||
static bool interactive = false;
|
||||
|
||||
void get_input()
|
||||
@ -83,8 +98,9 @@ int main(int argc, char** argv)
|
||||
prepare();
|
||||
|
||||
TestConnections test(argc, argv);
|
||||
|
||||
test.tprintf("Installing replication-manager");
|
||||
int rc = system("./manage_mrm.sh install > manage_mrm.log");
|
||||
int rc = system("new_replication_manager=yes ./manage_mrm.sh install > manage_mrm.log");
|
||||
if (!WIFEXITED(rc) || WEXITSTATUS(rc) != 0)
|
||||
{
|
||||
test.tprintf("Failed to install replication-manager, see manage_mrm.log for more details");
|
||||
@ -98,6 +114,7 @@ int main(int argc, char** argv)
|
||||
get_input();
|
||||
test.connect_maxscale();
|
||||
test.try_query(test.conn_rwsplit, "CREATE OR REPLACE TABLE test.t1(id INT)");
|
||||
test.repl->sync_slaves();
|
||||
|
||||
check(test);
|
||||
get_output(test);
|
||||
@ -127,31 +144,34 @@ int main(int argc, char** argv)
|
||||
check(test);
|
||||
get_output(test);
|
||||
|
||||
test.tprintf("Starting all nodes and wait for replication-manager to fix the replication");
|
||||
get_input();
|
||||
|
||||
test.repl->start_node(0, (char*)"");
|
||||
sleep(5);
|
||||
test.repl->start_node(1, (char*)"");
|
||||
sleep(5);
|
||||
test.repl->start_node(2, (char*)"");
|
||||
sleep(5);
|
||||
test.tprintf("Fix replication and recreate table");
|
||||
test.close_maxscale_connections();
|
||||
test.repl->fix_replication();
|
||||
test.connect_maxscale();
|
||||
test.try_query(test.conn_rwsplit, "CREATE OR REPLACE TABLE test.t1(id INT)");
|
||||
test.repl->sync_slaves();
|
||||
inserts = 0;
|
||||
|
||||
check(test);
|
||||
get_output(test);
|
||||
|
||||
test.tprintf("Dropping tables");
|
||||
get_input();
|
||||
test.close_maxscale_connections();
|
||||
test.connect_maxscale();
|
||||
test.try_query(test.conn_rwsplit, "DROP TABLE test.t1");
|
||||
test.close_maxscale_connections();
|
||||
test.tprintf("Disable replication on a slave and kill master, check that it is not promoted");
|
||||
execute_query(test.repl->nodes[1], "STOP SLAVE; RESET SLAVE; RESET SLAVE ALL;");
|
||||
test.repl->stop_node(0);
|
||||
sleep(10);
|
||||
|
||||
check(test);
|
||||
get_output(test);
|
||||
|
||||
test.tprintf("Removing replication-manager");
|
||||
get_input();
|
||||
system("./manage_mrm.sh remove >> manage_mrm.log");
|
||||
int id = get_server_id(test);
|
||||
test.add_result(id == test.repl->get_server_id(1), "Invalid slave should not be used");
|
||||
|
||||
// TODO: Figure this also out, remove the component if it's not needed
|
||||
// test.tprintf("Removing replication-manager");
|
||||
// get_input();
|
||||
// system("./manage_mrm.sh remove >> manage_mrm.log");
|
||||
|
||||
test.repl->fix_replication();
|
||||
return test.global_result;
|
||||
}
|
||||
|
37
maxscale-system-test/test_maxctrl.cpp
Normal file
37
maxscale-system-test/test_maxctrl.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Run MaxCtrl test suite on the MaxScale machine
|
||||
*/
|
||||
|
||||
#include "testconnections.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Use galera_003 as the secondary MaxScale node
|
||||
TestConnections::set_secondary_maxscale("galera_003_network", "galera_003_network6");
|
||||
TestConnections test(argc, argv);
|
||||
|
||||
// This is not very nice as it's a bit too intrusive
|
||||
system("envsubst < maxctrl_scripts.sh.in > maxctrl_scripts.sh");
|
||||
system("chmod +x maxctrl_scripts.sh");
|
||||
test.copy_to_maxscale("test_maxctrl.sh", "~");
|
||||
test.copy_to_maxscale("maxctrl_scripts.sh", "~");
|
||||
test.ssh_maxscale(true,"ssh-keygen -f maxscale_key -P \"\"");
|
||||
test.copy_from_maxscale((char*)"~/maxscale_key.pub", (char*)".");
|
||||
test.galera->copy_to_node("./maxscale_key.pub", "~", 3);
|
||||
test.galera->ssh_node(3, false, "cat ~/maxscale_key.pub >> ~/.ssh/authorized_keys;"
|
||||
"sudo iptables -I INPUT -p tcp --dport 8989 -j ACCEPT;");
|
||||
|
||||
// TODO: Don't handle test dependencies in tests
|
||||
test.tprintf("Installing NPM");
|
||||
test.ssh_maxscale(true,"yum -y install epel-release;yum -y install npm git;");
|
||||
|
||||
test.tprintf("Starting test");
|
||||
test.verbose = true;
|
||||
int rv = test.ssh_maxscale(true, "export maxscale2_API=%s:8989; ./test_maxctrl.sh", test.galera->IP[3]);
|
||||
test.verbose = false;
|
||||
|
||||
test.tprintf("Removing NPM");
|
||||
test.ssh_maxscale(true, "yum -y remove npm epel-release");
|
||||
|
||||
return rv;
|
||||
}
|
32
maxscale-system-test/test_maxctrl.sh
Executable file
32
maxscale-system-test/test_maxctrl.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check branch name
|
||||
ref=$(maxscale --version-full 2>&1|grep -o ' - .*'|sed 's/ - //')
|
||||
|
||||
if [ -z "$ref" ]
|
||||
then
|
||||
echo "Error: No commit ID in --version-full output"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d MaxScale ]
|
||||
then
|
||||
git clone https://www.github.com/mariadb-corporation/MaxScale.git
|
||||
cd MaxScale
|
||||
git checkout $ref
|
||||
cd ..
|
||||
fi
|
||||
|
||||
cd MaxScale/maxctrl
|
||||
|
||||
# Create the scripts that start and stop MaxScale
|
||||
~/maxctrl_scripts.sh
|
||||
chmod +x *.sh
|
||||
|
||||
npm i
|
||||
|
||||
# Export the value for --basedir where maxscale binaries are located
|
||||
export MAXSCALE_DIR=/usr
|
||||
./stop_maxscale.sh
|
||||
|
||||
npm test
|
@ -68,6 +68,25 @@ void TestConnections::multiple_maxscales(bool value)
|
||||
maxscale::multiple_maxscales = value;
|
||||
}
|
||||
|
||||
void TestConnections::set_secondary_maxscale(const char* ip_var, const char* ip6_var)
|
||||
{
|
||||
const char* ip = getenv(ip_var);
|
||||
const char* ip6 = getenv(ip6_var);
|
||||
|
||||
if (ip || ip6)
|
||||
{
|
||||
TestConnections::multiple_maxscales(true);
|
||||
if (ip)
|
||||
{
|
||||
setenv("maxscale2_IP", ip, 1);
|
||||
}
|
||||
if (ip6)
|
||||
{
|
||||
setenv("maxscale2_network6", ip6, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TestConnections::TestConnections(int argc, char *argv[]):
|
||||
enable_timeouts(true),
|
||||
global_result(0),
|
||||
@ -1484,7 +1503,7 @@ int TestConnections::ssh_maxscale(bool sudo, const char* format, ...)
|
||||
|
||||
free(sys);
|
||||
free(cmd);
|
||||
return rc;
|
||||
return WEXITSTATUS(rc);
|
||||
}
|
||||
|
||||
int TestConnections::copy_to_maxscale(const char* src, const char* dest)
|
||||
|
@ -338,7 +338,10 @@ public:
|
||||
static void require_galera_version(const char *version);
|
||||
|
||||
/** Initialize multiple MaxScale instances */
|
||||
void multiple_maxscales(bool value);
|
||||
static void multiple_maxscales(bool value);
|
||||
|
||||
/** Set secondary MaxScale address */
|
||||
static void set_secondary_maxscale(const char* ip_var, const char* ip6_var);
|
||||
|
||||
/**
|
||||
* @brief add_result adds result to global_result and prints error message if result is not 0
|
||||
|
Reference in New Issue
Block a user