2017-12-08 12:23:04 +02:00

90 lines
3.4 KiB
C++

/**
* @file bug469 bug469 regression test case ("rwsplit counts every connection twice in master - counnection counts leak")
* - use maxadmin command "show server server1" and check "Current no. of conns" and "Number of connections" - both should be 0
* - execute simple query against RWSplit
* - use maxadmin command "show server server1" and check "Current no. of conns" (should be 0) and "Number of connections" (should be 1)
*/
/*
Vilho Raatikka 2014-08-05 12:28:21 UTC
Every connection is counted twice in master and decremented only once. As a result master seems always to have active connections after first connection is established.
Server 0x21706e0 (server1)
Server: 127.0.0.1
Status: Master, Running
Protocol: MySQLBackend
Port: 3000
Server Version: 5.5.37-MariaDB-debug-log
Node Id: 3000
Master Id: -1
Slave Ids: 3001, 3002 , 3003
Repl Depth: 0
Number of connections: 6
Current no. of conns: 3
Current no. of operations: 0
Server 0x21705e0 (server2)
Server: 127.0.0.1
Status: Slave, Running
Protocol: MySQLBackend
Port: 3001
Server Version: 5.5.37-MariaDB-debug-log
Node Id: 3001
Master Id: 3000
Slave Ids:
Repl Depth: 1
Number of connections: 3
Current no. of conns: 0
Current no. of operations: 0
*/
#include <iostream>
#include "testconnections.h"
#include "maxadmin_operations.h"
int main(int argc, char *argv[])
{
TestConnections * Test = new TestConnections(argc, argv);
char res[1024];
int res_d;
Test->set_timeout(10);
Test->maxscales->get_maxadmin_param(0, (char *) "show server server1", (char *) "Current no. of conns:", res);
sscanf(res, "%d", &res_d);
Test->tprintf("Before: Current num of conn %d\n", res_d);
Test->add_result(res_d, "curr num of conn is not 0\n");
Test->maxscales->get_maxadmin_param(0, (char *) "show server server1", (char *) "Number of connections:", res);
sscanf(res, "%d", &res_d);
Test->tprintf("Before: num of conn %d\n", res_d);
Test->add_result(res_d, "num of conn is not 0");
Test->maxscales->connect_rwsplit(0);
Test->try_query(Test->maxscales->conn_rwsplit[0], (char *) "select 1");
Test->maxscales->close_rwsplit(0);
Test->stop_timeout();
sleep(10);
Test->set_timeout(10);
Test->maxscales->get_maxadmin_param(0, (char *) "show server server1", (char *) "Current no. of conns:", res);
sscanf(res, "%d", &res_d);
Test->tprintf("After: Current num of conn %d\n", res_d);
Test->add_result(res_d, "curr num of conn is not 0\n");
Test->maxscales->get_maxadmin_param(0, (char *) "show server server1", (char *) "Number of connections:", res);
sscanf(res, "%d", &res_d);
Test->tprintf("After: num of conn %d\n", res_d);
if (res_d != 1)
{
Test->add_result(1, "num of conn is not 1");
}
Test->check_maxscale_alive(0);
int rval = Test->global_result;
delete Test;
return rval;
}