Merge branch '2.1' into 2.2
This commit is contained in:
@ -4,6 +4,8 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <execinfo.h>
|
||||
|
||||
#include "mariadb_func.h"
|
||||
#include "maxadmin_operations.h"
|
||||
@ -18,6 +20,28 @@ static std::string required_repl_version;
|
||||
static std::string required_galera_version;
|
||||
}
|
||||
|
||||
static int signal_set(int sig, void (*handler)(int))
|
||||
{
|
||||
struct sigaction sigact = {};
|
||||
sigact.sa_handler = handler;
|
||||
|
||||
do
|
||||
{
|
||||
errno = 0;
|
||||
sigaction(sig, &sigact, NULL);
|
||||
}
|
||||
while (errno == EINTR);
|
||||
}
|
||||
|
||||
void sigfatal_handler(int i)
|
||||
{
|
||||
void *addrs[128];
|
||||
int count = backtrace(addrs, 128);
|
||||
backtrace_symbols_fd(addrs, count, STDERR_FILENO);
|
||||
signal_set(i, SIG_DFL);
|
||||
raise(i);
|
||||
}
|
||||
|
||||
void TestConnections::check_nodes(bool value)
|
||||
{
|
||||
maxscale::check_nodes = value;
|
||||
@ -45,6 +69,14 @@ TestConnections::TestConnections(int argc, char *argv[]):
|
||||
no_galera(false), binlog_master_gtid(false), binlog_slave_gtid(false),
|
||||
no_vm_revert(true)
|
||||
{
|
||||
signal_set(SIGSEGV, sigfatal_handler);
|
||||
signal_set(SIGABRT, sigfatal_handler);
|
||||
signal_set(SIGFPE, sigfatal_handler);
|
||||
signal_set(SIGILL, sigfatal_handler);
|
||||
#ifdef SIGBUS
|
||||
signal_set(SIGBUS, sigfatal_handler);
|
||||
#endif
|
||||
|
||||
chdir(test_dir);
|
||||
gettimeofday(&start_time, NULL);
|
||||
ports[0] = rwsplit_port;
|
||||
@ -214,7 +246,7 @@ TestConnections::TestConnections(int argc, char *argv[]):
|
||||
|
||||
if (use_snapshots)
|
||||
{
|
||||
snapshot_reverted = revert_snapshot((char *) "clean");
|
||||
snapshot_reverted = revert_snapshot("clean");
|
||||
}
|
||||
|
||||
if (!snapshot_reverted && maxscale::check_nodes)
|
||||
@ -616,7 +648,7 @@ void TestConnections::process_template(const char *template_name, const char *de
|
||||
}
|
||||
|
||||
mdn[j]->connect();
|
||||
execute_query(mdn[j]->nodes[0], (char *) "CREATE DATABASE IF NOT EXISTS test");
|
||||
execute_query(mdn[j]->nodes[0], "CREATE DATABASE IF NOT EXISTS test");
|
||||
mdn[j]->close_connections();
|
||||
}
|
||||
|
||||
@ -630,7 +662,7 @@ void TestConnections::process_template(const char *template_name, const char *de
|
||||
{
|
||||
system("sed -i \"s/###repl51###/mysql51_replication=true/g\" maxscale.cnf");
|
||||
}
|
||||
copy_to_maxscale((char *) "maxscale.cnf", (char *) dest);
|
||||
copy_to_maxscale("maxscale.cnf", (char *) dest);
|
||||
}
|
||||
|
||||
int TestConnections::init_maxscale()
|
||||
@ -657,6 +689,7 @@ int TestConnections::init_maxscale()
|
||||
"%s"
|
||||
"iptables -I INPUT -p tcp --dport 4001 -j ACCEPT;"
|
||||
"rm -f %s/maxscale.log %s/maxscale1.log;"
|
||||
"rm -f /var/log/maxscale/.secrets;" // Needs to be explicitly deleted
|
||||
"rm -rf /tmp/core* /dev/shm/* /var/lib/maxscale/maxscale.cnf.d/ /var/lib/maxscale/*;"
|
||||
"%s",
|
||||
maxscale_access_homedir, maxscale_access_homedir, maxscale_access_homedir,
|
||||
@ -721,7 +754,7 @@ int TestConnections::stop_maxscale()
|
||||
return res;
|
||||
}
|
||||
|
||||
int TestConnections::copy_mariadb_logs(Mariadb_nodes * repl, char * prefix)
|
||||
int TestConnections::copy_mariadb_logs(Mariadb_nodes * repl, const char* prefix)
|
||||
{
|
||||
int local_result = 0;
|
||||
char * mariadb_log;
|
||||
@ -736,7 +769,7 @@ int TestConnections::copy_mariadb_logs(Mariadb_nodes * repl, char * prefix)
|
||||
{
|
||||
if (strcmp(repl->IP[i], "127.0.0.1") != 0) // Do not copy MariaDB logs in case of local backend
|
||||
{
|
||||
mariadb_log = repl->ssh_node_output(i, (char *) "cat /var/lib/mysql/*.err", true, &exit_code);
|
||||
mariadb_log = repl->ssh_node_output(i, "cat /var/lib/mysql/*.err", true, &exit_code);
|
||||
sprintf(str, "LOGS/%s/%s%d_mariadb_log", test_name, prefix, i);
|
||||
f = fopen(str, "w");
|
||||
if (f != NULL)
|
||||
@ -762,8 +795,8 @@ int TestConnections::copy_all_logs()
|
||||
|
||||
if (!no_backend_log_copy)
|
||||
{
|
||||
copy_mariadb_logs(repl, (char *) "node");
|
||||
copy_mariadb_logs(galera, (char *) "galera");
|
||||
copy_mariadb_logs(repl, "node");
|
||||
copy_mariadb_logs(galera, "galera");
|
||||
}
|
||||
|
||||
sprintf(str, "%s/copy_logs.sh %s", test_dir, test_name);
|
||||
@ -867,9 +900,9 @@ int TestConnections::start_binlog()
|
||||
repl->stop_nodes();
|
||||
|
||||
binlog = open_conn_no_db(binlog_port, maxscale_IP, repl->user_name, repl->password, ssl);
|
||||
execute_query(binlog, (char *) "stop slave");
|
||||
execute_query(binlog, (char *) "reset slave all");
|
||||
execute_query(binlog, (char *) "reset master");
|
||||
execute_query(binlog, "stop slave");
|
||||
execute_query(binlog, "reset slave all");
|
||||
execute_query(binlog, "reset master");
|
||||
mysql_close(binlog);
|
||||
|
||||
tprintf("Stopping maxscale\n");
|
||||
@ -994,13 +1027,12 @@ int TestConnections::start_binlog()
|
||||
tprintf("Maxscale binlog master pos : %s\n", log_pos);
|
||||
fflush(stdout);
|
||||
|
||||
tprintf("Setup all backend nodes except first one to be slaves of binlog Maxscale node\n");
|
||||
fflush(stdout);
|
||||
for (i = 2; i < repl->N; i++)
|
||||
{
|
||||
try_query(repl->nodes[i], (char *) "stop slave");
|
||||
repl->set_slave(repl->nodes[i], maxscale_IP, binlog_port, log_file, log_pos);
|
||||
}
|
||||
tprintf("Setup all backend nodes except first one to be slaves of binlog Maxscale node\n");
|
||||
fflush(stdout);
|
||||
for (i = 2; i < repl->N; i++)
|
||||
{
|
||||
try_query(repl->nodes[i], "stop slave;");
|
||||
repl->set_slave(repl->nodes[i], maxscale_IP, binlog_port, log_file, log_pos);
|
||||
}
|
||||
|
||||
repl->close_connections();
|
||||
@ -1069,23 +1101,23 @@ int TestConnections::start_mm()
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
tprintf("Starting back node %d\n", i);
|
||||
global_result += repl->start_node(i, (char *) "");
|
||||
global_result += repl->start_node(i, "");
|
||||
}
|
||||
|
||||
repl->connect();
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
execute_query(repl->nodes[i], (char *) "stop slave");
|
||||
execute_query(repl->nodes[i], (char *) "reset master");
|
||||
execute_query(repl->nodes[i], "stop slave");
|
||||
execute_query(repl->nodes[i], "reset master");
|
||||
}
|
||||
|
||||
execute_query(repl->nodes[0], (char *) "SET GLOBAL READ_ONLY=ON");
|
||||
execute_query(repl->nodes[0], "SET GLOBAL READ_ONLY=ON");
|
||||
|
||||
find_field(repl->nodes[0], (char *) "show master status", (char *) "File", log_file1);
|
||||
find_field(repl->nodes[0], (char *) "show master status", (char *) "Position", log_pos1);
|
||||
find_field(repl->nodes[0], "show master status", "File", log_file1);
|
||||
find_field(repl->nodes[0], "show master status", "Position", log_pos1);
|
||||
|
||||
find_field(repl->nodes[1], (char *) "show master status", (char *) "File", log_file2);
|
||||
find_field(repl->nodes[1], (char *) "show master status", (char *) "Position", log_pos2);
|
||||
find_field(repl->nodes[1], "show master status", "File", log_file2);
|
||||
find_field(repl->nodes[1], "show master status", "Position", log_pos2);
|
||||
|
||||
repl->set_slave(repl->nodes[0], repl->IP[1], repl->port[1], log_file2, log_pos2);
|
||||
repl->set_slave(repl->nodes[1], repl->IP[0], repl->port[0], log_file1, log_pos1);
|
||||
@ -1113,11 +1145,11 @@ void TestConnections::check_log_err(const char * err_msg, bool expected)
|
||||
set_timeout(50);
|
||||
|
||||
tprintf("Reading maxscale.log\n");
|
||||
if ( ( read_log((char *) "maxscale.log", &err_log_content) != 0) || (strlen(err_log_content) < 2) )
|
||||
if ( ( read_log("maxscale.log", &err_log_content) != 0) || (strlen(err_log_content) < 2) )
|
||||
{
|
||||
tprintf("Reading maxscale1.log\n");
|
||||
free(err_log_content);
|
||||
if (read_log((char *) "maxscale1.log", &err_log_content) != 0)
|
||||
if (read_log("maxscale1.log", &err_log_content) != 0)
|
||||
{
|
||||
add_result(1, "Error reading log\n");
|
||||
}
|
||||
@ -1160,7 +1192,7 @@ int TestConnections::find_connected_slave(int * global_result)
|
||||
repl->connect();
|
||||
for (int i = 0; i < repl->N; i++)
|
||||
{
|
||||
conn_num = get_conn_num(repl->nodes[i], maxscale_ip(), maxscale_hostname, (char *) "test");
|
||||
conn_num = get_conn_num(repl->nodes[i], maxscale_ip(), maxscale_hostname, "test");
|
||||
tprintf("connections to %d: %u\n", i, conn_num);
|
||||
if ((i == 0) && (conn_num != 1))
|
||||
{
|
||||
@ -1191,7 +1223,7 @@ int TestConnections::find_connected_slave1()
|
||||
repl->connect();
|
||||
for (int i = 0; i < repl->N; i++)
|
||||
{
|
||||
conn_num = get_conn_num(repl->nodes[i], maxscale_ip(), maxscale_hostname, (char *) "test");
|
||||
conn_num = get_conn_num(repl->nodes[i], maxscale_ip(), maxscale_hostname, "test");
|
||||
tprintf("connections to %d: %u\n", i, conn_num);
|
||||
all_conn += conn_num;
|
||||
if ((i != 0) && (conn_num != 0))
|
||||
@ -1240,13 +1272,13 @@ int TestConnections::check_maxscale_alive()
|
||||
tprintf("Trying simple query against all sevices\n");
|
||||
tprintf("RWSplit \n");
|
||||
set_timeout(10);
|
||||
try_query(conn_rwsplit, (char *) "show databases;");
|
||||
try_query(conn_rwsplit, "show databases;");
|
||||
tprintf("ReadConn Master \n");
|
||||
set_timeout(10);
|
||||
try_query(conn_master, (char *) "show databases;");
|
||||
try_query(conn_master, "show databases;");
|
||||
tprintf("ReadConn Slave \n");
|
||||
set_timeout(10);
|
||||
try_query(conn_slave, (char *) "show databases;");
|
||||
try_query(conn_slave, "show databases;");
|
||||
set_timeout(10);
|
||||
close_maxscale_connections() ;
|
||||
add_result(global_result - gr, "Maxscale is not alive\n");
|
||||
@ -1434,7 +1466,7 @@ int TestConnections::copy_to_maxscale(const char* src, const char* dest)
|
||||
{
|
||||
|
||||
sprintf(sys, "scp -q -i %s -o UserKnownHostsFile=/dev/null "
|
||||
"-o StrictHostKeyChecking=no -o LogLevel=quiet %s %s@%s:%s",
|
||||
"-o StrictHostKeyChecking=no -o LogLevel=quiet %s %s@%s:%s",
|
||||
maxscale_keyfile, src, maxscale_access_user, maxscale_IP, dest);
|
||||
}
|
||||
return system(sys);
|
||||
@ -1452,7 +1484,7 @@ int TestConnections::copy_from_maxscale(char* src, char* dest)
|
||||
else
|
||||
{
|
||||
sprintf(sys, "scp -i %s -o UserKnownHostsFile=/dev/null "
|
||||
"-o StrictHostKeyChecking=no -o LogLevel=quiet %s@%s:%s %s",
|
||||
"-o StrictHostKeyChecking=no -o LogLevel=quiet %s@%s:%s %s",
|
||||
maxscale_keyfile, maxscale_access_user, maxscale_IP, src, dest);
|
||||
}
|
||||
return system(sys);
|
||||
@ -1619,12 +1651,12 @@ int TestConnections::get_client_ip(char * ip)
|
||||
unsigned int conn_num = 0;
|
||||
|
||||
connect_rwsplit();
|
||||
if (execute_query(conn_rwsplit, (char *) "CREATE DATABASE IF NOT EXISTS db_to_check_client_ip") != 0 )
|
||||
if (execute_query(conn_rwsplit, "CREATE DATABASE IF NOT EXISTS db_to_check_clent_ip") != 0 )
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
close_rwsplit();
|
||||
conn = open_conn_db(rwsplit_port, maxscale_IP, (char *) "db_to_check_client_ip", maxscale_user,
|
||||
conn = open_conn_db(rwsplit_port, maxscale_IP, "db_to_check_clent_ip", maxscale_user,
|
||||
maxscale_password, ssl);
|
||||
|
||||
if (conn != NULL)
|
||||
@ -1888,7 +1920,8 @@ int TestConnections::try_query(MYSQL *conn, const char *format, ...)
|
||||
va_end(valist);
|
||||
|
||||
int res = execute_query1(conn, sql, false);
|
||||
add_result(res, "Query '%.*s%s' failed!\n", message_len < 100 ? message_len : 100, sql, message_len < 100 ? "" : "...");
|
||||
add_result(res, "Query '%.*s%s' failed!\n", message_len < 100 ? message_len : 100, sql,
|
||||
message_len < 100 ? "" : "...");
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -1909,7 +1942,7 @@ int TestConnections::find_master_maxadmin(Mariadb_nodes * nodes)
|
||||
char show_server[256];
|
||||
char res[256];
|
||||
sprintf(show_server, "show server server%d", i + 1);
|
||||
get_maxadmin_param(show_server, (char *) "Status", res);
|
||||
get_maxadmin_param(show_server, "Status", res);
|
||||
|
||||
if (strstr(res, "Master"))
|
||||
{
|
||||
@ -1937,7 +1970,7 @@ int TestConnections::find_slave_maxadmin(Mariadb_nodes * nodes)
|
||||
char show_server[256];
|
||||
char res[256];
|
||||
sprintf(show_server, "show server server%d", i + 1);
|
||||
get_maxadmin_param(show_server, (char *) "Status", res);
|
||||
get_maxadmin_param(show_server, "Status", res);
|
||||
|
||||
if (strstr(res, "Slave"))
|
||||
{
|
||||
@ -1992,14 +2025,9 @@ int TestConnections::check_maxadmin_param(const char *command, const char *param
|
||||
return rval;
|
||||
}
|
||||
|
||||
int TestConnections::get_maxadmin_param(const char *command, const char *param, char *result)
|
||||
int TestConnections::get_maxadmin_param(const char* command, const char* param, char* result)
|
||||
{
|
||||
char * buf;
|
||||
|
||||
buf = ssh_maxscale_output(true, "maxadmin %s", command);
|
||||
|
||||
//printf("%s\n", buf);
|
||||
|
||||
char* buf = ssh_maxscale_output(true, "maxadmin %s", command);
|
||||
char *x = strstr(buf, param);
|
||||
|
||||
if (x == NULL)
|
||||
@ -2039,7 +2067,7 @@ int TestConnections::list_dirs()
|
||||
for (int i = 0; i < repl->N; i++)
|
||||
{
|
||||
tprintf("ls on node %d\n", i);
|
||||
repl->ssh_node(i, (char *) "ls -la /var/lib/mysql", true);
|
||||
repl->ssh_node(i, true, "ls -la /var/lib/mysql");
|
||||
fflush(stdout);
|
||||
}
|
||||
tprintf("ls maxscale \n");
|
||||
@ -2092,7 +2120,7 @@ int TestConnections::take_snapshot(char * snapshot_name)
|
||||
return system(str);
|
||||
}
|
||||
|
||||
int TestConnections::revert_snapshot(char * snapshot_name)
|
||||
int TestConnections::revert_snapshot(const char* snapshot_name)
|
||||
{
|
||||
char str[4096];
|
||||
sprintf(str, "%s %s", revert_snapshot_command, snapshot_name);
|
||||
|
Reference in New Issue
Block a user