Files
MaxScale/maxscale-system-test/bug519.cpp
Markus Mäkelä af08647fa2 Add variadic ssh function to mariadb_nodes
The ssh_node function now supports printf style arguments. This is used to
simplify command execution on the nodes.

Curreltny, in addition to its old usage, it is used to drop extra
databases when replication is started.
2017-10-01 10:49:11 +03:00

145 lines
5.4 KiB
C++

/**
* @file bug519.cpp - Jira task is MAX-345
* - fill t1 with data
* - execute SELECT * INTO OUTFILE '/tmp/t1.csv' FROM t1; against all routers
* - DROP TABLE t1
* - LOAD DATA LOCAL INFILE 't1.csv' INTO TABLE t1; using RWSplit
* - check if t1 contains right data
* - DROP t1 again and repeat LOAD DATA LOCAL INFILE 't1.csv' INTO TABLE t1; using ReadConn master
*/
/*
It seems that LOAD DATA LOCAL INFILE is not handled by readwritesplit? Maybe it's a bigger problem elsewhere in MaxScale?
I can execute the command, it looks like it is getting sent to the master, but ... no data is actually loaded. Does/can MaxScale handle LOAD DATA LOCAL INFILE?
Comment 1 Kolbe Kegel 2014-09-03 02:39:47 UTC
The LOAD DATA LOCAL INFILE statement is stuck in "Reading from net" until some timeout is hit:
| 22 | maxuser | 192.168.30.38:59996 | test | Query | 10 | Reading from net | load data local infile '/Users/kolbe/Devel/seattleparking/Street_Parking_Signs.csv' into table parki | 0.000 |
The client never sees the statement end, though, even after the server has long ago killed its connection...
When I start a *new* connection to MaxScale and I try to execute the LOAD DATA LOCAL INFILE statement again, I have some problems:
mysql 5.5.38-MariaDB (maxuser) [test]> source /Users/kolbe/Devel/seattleparking/loaddata.sql
ERROR 2013 (HY000) at line 1 in file: '/Users/kolbe/Devel/seattleparking/loaddata.sql': Lost connection to MySQL server during query
mysql 5.5.38-MariaDB (maxuser) [test]> select @@wsrep_node_address;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1709
Current database: test
+----------------------+
| @@wsrep_node_address |
+----------------------+
| 192.168.30.32 |
+----------------------+
1 row in set (0.01 sec)
mysql 5.5.38-MariaDB (maxuser) [test]> source /Users/kolbe/Devel/seattleparking/loaddata.sql
ERROR 2013 (HY000) at line 1 in file: '/Users/kolbe/Devel/seattleparking/loaddata.sql': Lost connection to MySQL server during query
mysql 5.5.38-MariaDB (maxuser) [test]> select @@wsrep_node_address;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1709
Current database: test
+----------------------+
| @@wsrep_node_address |
+----------------------+
| 192.168.30.32 |
+----------------------+
1 row in set (0.01 sec)
mysql 5.5.38-MariaDB (maxuser) [test]> source /Users/kolbe/Devel/seattleparking/loaddata.sql
ERROR 2013 (HY000) at line 1 in file: '/Users/kolbe/Devel/seattleparking/loaddata.sql': Lost connection to MySQL server during query
mysql 5.5.38-MariaDB (maxuser) [test]> Bye
*/
#include <iostream>
#include "testconnections.h"
#include "sql_t1.h"
using namespace std;
int main(int argc, char *argv[])
{
TestConnections * Test = new TestConnections(argc, argv);
int N = 4;
int iterations = 2;
if (Test->smoke)
{
iterations = 1;
}
char str[1024];
Test->set_timeout(10);
Test->connect_maxscale();
Test->repl->connect();
Test->tprintf("Create t1\n");
create_t1(Test->conn_rwsplit);
Test->tprintf("Insert data into t1\n");
Test->set_timeout(60);
insert_into_t1(Test->conn_rwsplit, N);
Test->stop_timeout();
Test->repl->sync_slaves();
Test->set_timeout(200);
for (int k = 0; k < Test->repl->N; k++)
{
Test->repl->ssh_node(k, false, "%s rm -f /tmp/t*.csv; %s chmod 777 /tmp",
Test->repl->access_sudo[0], Test->repl->access_sudo[0]);
}
Test->tprintf("Copying data from t1 to file...\n");
Test->tprintf("using RWSplit: SELECT * INTO OUTFILE '/tmp/t1.csv' FROM t1;\n");
Test->try_query(Test->conn_rwsplit, (char *) "SELECT * INTO OUTFILE '/tmp/t1.csv' FROM t1;");
Test->tprintf("using ReadConn master: SELECT * INTO OUTFILE '/tmp/t2.csv' FROM t1;\n");
Test->try_query(Test->conn_master, (char *) "SELECT * INTO OUTFILE '/tmp/t2.csv' FROM t1;");
Test->tprintf("using ReadConn slave: SELECT * INTO OUTFILE '/tmp/t3.csv' FROM t1;\n");
Test->try_query(Test->conn_slave, (char *) "SELECT * INTO OUTFILE '/tmp/t3.csv' FROM t1;");
Test->tprintf("Copying t1.cvs from Maxscale machine:\n");
Test->repl->copy_from_node("/tmp/t1.csv", "./t1.csv", 0);
MYSQL *srv[2];
srv[0] = Test->conn_rwsplit;
srv[1] = Test->conn_master;
for (int i = 0; i < iterations; i++)
{
Test->set_timeout(100);
Test->tprintf("Dropping t1 \n");
Test->try_query(Test->conn_rwsplit, (char *) "DROP TABLE t1;");
Test->stop_timeout();
Test->repl->sync_slaves();
Test->set_timeout(100);
Test->tprintf("Create t1\n");
create_t1(Test->conn_rwsplit);
Test->tprintf("Loading data to t1 from file\n");
Test->try_query(srv[i], (char *) "LOAD DATA LOCAL INFILE 't1.csv' INTO TABLE t1;");
Test->stop_timeout();
Test->repl->sync_slaves();
Test->set_timeout(100);
Test->tprintf("SELECT: rwsplitter\n");
Test->add_result(select_from_t1(Test->conn_rwsplit, N), "Wrong data in 't1'");
Test->tprintf("SELECT: master\n");
Test->add_result(select_from_t1(Test->conn_master, N), "Wrong data in 't1'");
Test->tprintf("SELECT: slave\n");
Test->add_result(select_from_t1(Test->conn_slave, N), "Wrong data in 't1'");
}
Test->repl->close_connections();
Test->check_maxscale_alive();
int rval = Test->global_result;
delete Test;
return rval;
}