 c447e5cf15
			
		
	
	c447e5cf15
	
	
	
		
			
			See script directory for method. The script to run in the top level MaxScale directory is called maxscale-uncrustify.sh, which uses another script, list-src, from the same directory (so you need to set your PATH). The uncrustify version was 0.66.
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * Test for MXS-1323.
 | |
|  * - Check that retried reads work with persistent connections
 | |
|  */
 | |
| 
 | |
| #include "testconnections.h"
 | |
| #include <sstream>
 | |
| 
 | |
| static bool running = true;
 | |
| 
 | |
| void* async_query(void* data)
 | |
| {
 | |
|     TestConnections* test = (TestConnections*)data;
 | |
| 
 | |
|     while (running && test->global_result == 0)
 | |
|     {
 | |
|         MYSQL* conn = test->maxscales->open_rwsplit_connection(0);
 | |
| 
 | |
|         for (int i = 0; i < 50 && running && test->global_result == 0; i++)
 | |
|         {
 | |
|             const char* query = "SET @a = (SELECT SLEEP(1))";
 | |
|             test->try_query(conn, "%s", query);
 | |
|         }
 | |
| 
 | |
|         mysql_close(conn);
 | |
|     }
 | |
| 
 | |
|     return NULL;
 | |
| }
 | |
| 
 | |
| #define NUM_THR 5
 | |
| 
 | |
| int main(int argc, char* argv[])
 | |
| {
 | |
|     TestConnections test(argc, argv);
 | |
|     pthread_t query_thr[NUM_THR];
 | |
|     std::stringstream ss;
 | |
| 
 | |
|     ss << "CREATE OR REPLACE TABLE test.t1 (id INT)";
 | |
|     test.maxscales->connect_maxscale(0);
 | |
|     test.try_query(test.maxscales->conn_rwsplit[0], "%s", ss.str().c_str());
 | |
| 
 | |
|     ss.str("");
 | |
|     ss << "INSERT INTO test.t1 VALUES (0)";
 | |
|     for (int i = 1; i <= 10000; i++)
 | |
|     {
 | |
|         ss << ",(" << i << ")";
 | |
|     }
 | |
|     test.try_query(test.maxscales->conn_rwsplit[0], "%s", ss.str().c_str());
 | |
| 
 | |
|     test.maxscales->close_maxscale_connections(0);
 | |
| 
 | |
|     if (test.global_result)
 | |
|     {
 | |
|         return test.global_result;
 | |
|     }
 | |
| 
 | |
|     for (int i = 0; i < NUM_THR; i++)
 | |
|     {
 | |
|         pthread_create(&query_thr[i], NULL, async_query, &test);
 | |
|     }
 | |
| 
 | |
|     for (int i = 0; i < 3 && test.global_result == 0; i++)
 | |
|     {
 | |
|         test.tprintf("Round %d", i + 1);
 | |
|         test.repl->block_node(1);
 | |
|         sleep(5);
 | |
|         test.repl->unblock_node(1);
 | |
|         sleep(5);
 | |
|     }
 | |
| 
 | |
|     running = false;
 | |
| 
 | |
|     for (int i = 0; i < NUM_THR; i++)
 | |
|     {
 | |
|         test.set_timeout(10);
 | |
|         pthread_join(query_thr[i], NULL);
 | |
|     }
 | |
| 
 | |
|     return test.global_result;
 | |
| }
 |