MXS-1418: Keep connections open if server is removed

The removal of a server from a service is intended to affect only new
sessions.

Added a test that checks that the connections are kept open even if the
server is removed from the service.
This commit is contained in:
Markus Mäkelä
2017-09-16 07:27:32 +03:00
parent 2d02cc9973
commit 9267f8ad70
4 changed files with 79 additions and 8 deletions

View File

@ -484,6 +484,10 @@ add_test_executable(mxs1123.cpp mxs1123 mxs1123 LABELS maxscale REPL_BACKEND)
# https://jira.mariadb.org/browse/MXS-1319
add_test_executable(mxs1319.cpp mxs1319 replication LABELS MySQLAuth REPL_BACKEND)
# MXS-1418: Removing a server from a service breaks the connection
# https://jira.mariadb.org/browse/MXS-1418
add_test_executable(mxs1418.cpp mxs1418 replication LABELS maxscale REPL_BACKEND)
# 'namedserverfilter' test
add_test_executable(namedserverfilter.cpp namedserverfilter namedserverfilter LABELS namedserverfilter LIGHT REPL_BACKEND)

View File

@ -0,0 +1,73 @@
/**
* @file Check that removing a server from a service doesn't break active connections
*/
#include "testconnections.h"
static volatile bool running = true;
void* thr(void* data)
{
TestConnections* test = (TestConnections*)data;
while (running && test->global_result == 0)
{
test->set_timeout(60);
if (test->try_query(test->conn_rwsplit, "SELECT 1"))
{
test->tprintf("Failed to select via readwritesplit");
}
if (test->try_query(test->conn_master, "SELECT 1"))
{
test->tprintf("Failed to select via readconnroute master");
}
if (test->try_query(test->conn_slave, "SELECT 1"))
{
test->tprintf("Failed to select via readconnroute slave");
}
}
test->stop_timeout();
return NULL;
}
int main(int argc, char *argv[])
{
TestConnections test(argc, argv);
test.connect_maxscale();
test.tprintf("Connect to MaxScale and continuously execute queries");
pthread_t thread;
pthread_create(&thread, NULL, thr, &test);
sleep(5);
test.tprintf("Remove all servers from all services");
for (int i = 3; i > -1; i--)
{
test.ssh_maxscale(true, "maxadmin remove server server%d \"RW Split Router\"", i);
test.ssh_maxscale(true, "maxadmin remove server server%d \"Read Connection Router Slave\"", i);
test.ssh_maxscale(true, "maxadmin remove server server%d \"Read Connection Router Master\"", i);
}
sleep(5);
test.tprintf("Stop queries and close the connections");
running = false;
pthread_join(thread, NULL);
test.close_maxscale_connections();
test.tprintf("Add all servers to all services");
for (int i = 3; i > -1; i--)
{
test.ssh_maxscale(true, "maxadmin add server server%d \"RW Split Router\"", i);
test.ssh_maxscale(true, "maxadmin add server server%d \"Read Connection Router Slave\"", i);
test.ssh_maxscale(true, "maxadmin add server server%d \"Read Connection Router Master\"", i);
}
test.check_maxscale_alive();
return test.global_result;
}