diff --git a/maxscale-system-test/CMakeLists.txt b/maxscale-system-test/CMakeLists.txt index f439f101a..fe6f107dc 100644 --- a/maxscale-system-test/CMakeLists.txt +++ b/maxscale-system-test/CMakeLists.txt @@ -951,6 +951,9 @@ add_test_executable(pam_authentication.cpp pam_authentication pam_authentication # MXS-2520: Allow master reconnection on reads add_test_executable(mxs2520_master_read_reconnect.cpp mxs2520_master_read_reconnect mxs2520_master_read_reconnect LABELS REPL_BACKEND readwritesplit) +# MXS-2464: Crash in route_stored_query with ReadWriteSplit +add_test_executable(mxs2464_sescmd_reconnect.cpp mxs2464_sescmd_reconnect mxs2464_sescmd_reconnect LABELS REPL_BACKEND readwritesplit) + ############################################ # BEGIN: binlogrouter and avrorouter tests # ############################################ diff --git a/maxscale-system-test/cnf/maxscale.cnf.template.mxs2464_sescmd_reconnect b/maxscale-system-test/cnf/maxscale.cnf.template.mxs2464_sescmd_reconnect new file mode 100644 index 000000000..db6bd2478 --- /dev/null +++ b/maxscale-system-test/cnf/maxscale.cnf.template.mxs2464_sescmd_reconnect @@ -0,0 +1,29 @@ +[maxscale] +threads=###threads### + +[MySQL-Monitor] +type=monitor +module=mysqlmon +servers=###server_line### +user=maxskysql +password=skysql +monitor_interval=1000 +backend_read_timeout=1 +backend_connect_timeout=1 + +[RW-Split-Router] +type=service +router=readwritesplit +servers=###server_line### +user=maxskysql +password=skysql +delayed_retry_timeout=1 +transaction_replay=true + +[RW-Split-Listener] +type=listener +service=RW-Split-Router +protocol=MySQLClient +port=4006 + +###server### diff --git a/maxscale-system-test/mxs2464_sescmd_reconnect.cpp b/maxscale-system-test/mxs2464_sescmd_reconnect.cpp new file mode 100644 index 000000000..989e62560 --- /dev/null +++ b/maxscale-system-test/mxs2464_sescmd_reconnect.cpp @@ -0,0 +1,35 @@ +/** + * MXS-2464: Crash in route_stored_query with ReadWriteSplit + * https://jira.mariadb.org/browse/MXS-2464 + */ + +#include "testconnections.h" + +int main(int argc, char* argv[]) +{ + TestConnections test(argc, argv); + + test.maxscales->connect(); + std::thread thr([&]() { + sleep(5); + test.tprintf("block node 0"); + test.repl->block_node(0); + test.tprintf("wait for monitor"); + test.maxscales->wait_for_monitor(2); + test.tprintf("unblock node 0"); + test.repl->unblock_node(0); + }); + + constexpr const char* query = "SET @a = (SELECT SLEEP(10))"; + test.set_timeout(60); + test.tprintf("%s", query); + test.try_query(test.maxscales->conn_rwsplit[0], query); + test.stop_timeout(); + + test.tprintf("disconnect"); + test.maxscales->disconnect(); + test.tprintf("join"); + thr.join(); + + return test.global_result; +}