Markus Mäkelä d7d4ec29bb Add tests from develop
Added tests from develop. The test results need to be modified for 2.0.
2017-05-26 15:40:40 +03:00

194 lines
3.9 KiB
C++

/**
* @file bug471.cpp bug471 regression case ( Routing Hints route to server sometimes doesn't work )
*
* - try "select @@server_id; -- maxscale route to server server%d" (where %d - server number) and compares result
* with "select @@server_id;" sent directly to backend node.
* - do it 25 times.
*/
/*
Massimiliano 2014-08-06 13:27:05 UTC
I found using basic routing hints such as:
select @@server_id; -- maxscale route to server server4
select @@server_id; -- maxscale route to server server3
select @@server_id; -- maxscale route to server server2
server3 is the current master
and server4 server_id is 4
server3 server_id is 3
server2 server_id is 2
sometimes I cannot get the expected results that are:
4
3
2
Sometimes I got:
2
3
2
or
4
3
4
In maxScale configuration 5 servers defined:
server1 is not monitored but listed in [RW Split Service]
server5 is always stopped
MaxScale configuration:
[gateway]
threads=4
[RW Split Service]
#Please note server1 is not monitored n MySQL Monitor section
type=service
router=readwritesplit
servers=server1,server2,server3,server5,server4
max_slave_connections=100%
max_slave_replication_lag=21
user=massi
passwd=massi
enable_root_user=0
filters=Hint
# Definition of the servers
[server1]
#not monitored
type=server
address=127.0.0.1
port=3306
protocol=MySQLBackend
[server2]
type=server
address=127.0.0.1
port=3307
protocol=MySQLBackend
[server3]
type=server
address=127.0.0.1
port=3308
protocol=MySQLBackend
[server4]
type=server
address=127.0.0.1
port=3309
protocol=MySQLBackend
[server5]
#always stopped
type=server
address=127.0.0.1
port=3310
protocol=MySQLBackend
[RW Split Listener]
type=listener
service=RW Split Service
protocol=MySQLClient
port=4606
[Hint]
type=filter
module=hintfilter
[MySQL Monitor]
# Please note server1 is not monitored
type=monitor
module=mysqlmon
servers=server4,server2,server3,server5
user=massi
passwd=massi
detect_replication_lag=1
monitor_interval=10001
Removing server1 from the service section gives right results for server_id selection
# mysql -c -h 127.0.0.1 -P 4606 -umassi -pmassi
MariaDB> select @@server_id; -- maxscale route to server server4
Please not -c option that allows comments to be sent
Vilho Raatikka 2014-08-08 08:13:42 UTC
After further consideration we decided that the behavior is invalid. Routing hints should be followed if they don't violate database consistency nor cluster setup.
Comment 11 Vilho Raatikka 2014-08-08 17:26:25 UTC
Pushed fix in commit d4de582e1622908cc95396f57878f8691289c35b to Z2.
Replication lag is not checked if routing hint is used.
*/
#include <iostream>
#include <unistd.h>
#include "testconnections.h"
using namespace std;
int main(int argc, char *argv[])
{
TestConnections * Test = new TestConnections(argc, argv);
Test->set_timeout(10);
Test->repl->connect();
Test->add_result(Test->connect_maxscale(), "Failed to connect to MaxScale\n");
char server_id[256];
char server_id_d[256];
char hint_sql[64];
for (int i = 1; i < 25; i++)
{
for (int j = 0; j < Test->repl->N; j++)
{
if (j != 1 )
{
Test->set_timeout(5);
sprintf(hint_sql, "select @@server_id; -- maxscale route to server server%d", j + 1);
find_field(Test->conn_rwsplit, hint_sql, (char *) "@@server_id", &server_id[0]);
find_field(Test->repl->nodes[j], (char *) "select @@server_id;", (char *) "@@server_id", &server_id_d[0]);
Test->tprintf("server%d ID from Maxscale: \t%s\n", j + 1, server_id);
Test->tprintf("server%d ID directly from node: \t%s\n", j + 1, server_id_d);
Test->add_result(strcmp(server_id, server_id_d), "Hints does not work!\n");
}
}
}
Test->set_timeout(10);
Test->close_maxscale_connections();
Test->repl->close_connections();
Test->check_maxscale_alive();
int rval = Test->global_result;
delete Test;
return rval;
}