135 lines
3.6 KiB
C++
135 lines
3.6 KiB
C++
/**
|
|
* @file sysbanch_kill_slave.cpp Kill slave during sysbanch test
|
|
*
|
|
* - start sysbanch test
|
|
* - wait 20 seconds and kill active slave
|
|
* - repeat for all services
|
|
* - DROP sysbanch tables
|
|
* - check if Maxscale is alive
|
|
*/
|
|
|
|
#include "testconnections.h"
|
|
#include "sysbench_commands.h"
|
|
|
|
TestConnections* Test;
|
|
|
|
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
|
|
int exit_flag = 0;
|
|
int start_flag = 0;
|
|
int old_slave;
|
|
void* kill_vm_thread(void* ptr);
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
Test = new TestConnections(argc, argv);
|
|
pthread_t kill_vm_thread1;
|
|
char sys1[4096];
|
|
int port[3];
|
|
|
|
port[0] = Test->maxscales->rwsplit_port[0];
|
|
port[1] = Test->maxscales->readconn_master_port[0];
|
|
// port[2] = Test->maxscales->readconn_slave_port[0];
|
|
|
|
Test->tprintf("Connecting to RWSplit %s\n", Test->maxscales->IP[0]);
|
|
|
|
if (Test->smoke)
|
|
{
|
|
sprintf(&sys1[0], SYSBENCH_PREPARE1, Test->maxscales->IP[0]);
|
|
}
|
|
else
|
|
{
|
|
sprintf(&sys1[0], SYSBENCH_PREPARE, Test->maxscales->IP[0]);
|
|
}
|
|
|
|
Test->tprintf("Preparing sysbench tables\n%s\n", sys1);
|
|
Test->set_timeout(5000);
|
|
Test->add_result(system(sys1), "Error executing sysbench prepare\n");
|
|
|
|
Test->set_timeout(2000);
|
|
for (int k = 0; k < 2; k++)
|
|
{
|
|
Test->tprintf("Trying test with port %d\n", port[k]);
|
|
pthread_create(&kill_vm_thread1, NULL, kill_vm_thread, NULL);
|
|
|
|
if (Test->smoke)
|
|
{
|
|
sprintf(&sys1[0], SYSBENCH_COMMAND1, Test->maxscales->IP[0], port[k]);
|
|
}
|
|
else
|
|
{
|
|
sprintf(&sys1[0], SYSBENCH_COMMAND, Test->maxscales->IP[0], port[k]);
|
|
}
|
|
Test->tprintf("Executing sysbench tables\n%s\n", sys1);
|
|
if (system(sys1) != 0)
|
|
{
|
|
Test->tprintf("Error executing sysbench test\n");
|
|
}
|
|
|
|
Test->tprintf("Starting VM back\n");
|
|
if ((old_slave >= 1) && (old_slave <= Test->repl->N))
|
|
{
|
|
Test->repl->unblock_node(old_slave);
|
|
}
|
|
sleep(60);
|
|
Test->tprintf("Restarting replication\n");
|
|
Test->repl->start_replication();
|
|
sleep(30);
|
|
}
|
|
|
|
Test->maxscales->connect_maxscale(0);
|
|
|
|
printf("Dropping sysbanch tables!\n");
|
|
fflush(stdout);
|
|
|
|
/*
|
|
* Test->try_query(Test->maxscales->conn_rwsplit[0], (char *) "DROP TABLE sbtest1");
|
|
* if (!Test->smoke)
|
|
* {
|
|
* Test->try_query(Test->maxscales->conn_rwsplit[0], (char *) "DROP TABLE sbtest2");
|
|
* Test->try_query(Test->maxscales->conn_rwsplit[0], (char *) "DROP TABLE sbtest3");
|
|
* Test->try_query(Test->maxscales->conn_rwsplit[0], (char *) "DROP TABLE sbtest4");
|
|
* }
|
|
*/
|
|
Test->global_result += execute_query(Test->maxscales->conn_rwsplit[0], (char*) "DROP TABLE sbtest1");
|
|
|
|
printf("closing connections to MaxScale!\n");
|
|
fflush(stdout);
|
|
|
|
Test->maxscales->close_maxscale_connections(0);
|
|
|
|
Test->tprintf("Checxking if MaxScale is still alive!\n");
|
|
fflush(stdout);
|
|
Test->check_maxscale_alive(0);
|
|
|
|
int rval = Test->global_result;
|
|
delete Test;
|
|
return rval;
|
|
}
|
|
|
|
|
|
void* kill_vm_thread(void* ptr)
|
|
{
|
|
// int global_result = 0;
|
|
sleep(20);
|
|
printf("Checking current slave\n");
|
|
fflush(stdout);
|
|
old_slave = Test->find_connected_slave1(0);
|
|
|
|
if ((old_slave >= 1) && (old_slave <= Test->repl->N))
|
|
{
|
|
printf("Active slave is %d\n", old_slave);
|
|
fflush(stdout);
|
|
}
|
|
else
|
|
{
|
|
printf("Active slave is not found, killing slave1\n");
|
|
fflush(stdout);
|
|
old_slave = 1;
|
|
}
|
|
|
|
printf("Killing VM %s\n", Test->repl->IP[old_slave]);
|
|
fflush(stdout);
|
|
Test->repl->block_node(old_slave);
|
|
return NULL;
|
|
}
|