Merge branch '2.1' into 2.2
This commit is contained in:
commit
8b2aa52384
@ -14,6 +14,12 @@ cmake .. $cmake_flags
|
||||
export LD_LIBRARY_PATH=$PWD/log_manager:$PWD/query_classifier
|
||||
make
|
||||
|
||||
if [[ "$cmake_flags" =~ "BUILD_TESTS" ]]
|
||||
then
|
||||
# All tests must pass otherwise the build is considered a failure
|
||||
make test || exit 1
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=$(for i in `find $PWD/ -name '*.so*'`; do echo $(dirname $i); done|sort|uniq|xargs|sed -e 's/[[:space:]]/:/g')
|
||||
make package
|
||||
res=$?
|
||||
|
@ -12,6 +12,12 @@ cd _build
|
||||
cmake .. $cmake_flags
|
||||
make
|
||||
|
||||
if [[ "$cmake_flags" =~ "BUILD_TESTS" ]]
|
||||
then
|
||||
# All tests must pass otherwise the build is considered a failure
|
||||
make test || exit 1
|
||||
fi
|
||||
|
||||
if [ $remove_strip == "yes" ] ; then
|
||||
sudo rm -rf /usr/bin/strip
|
||||
sudo touch /usr/bin/strip
|
||||
|
@ -553,6 +553,10 @@ add_test_executable(mxs1476.cpp mxs1476 mxs1476 LABELS GALERA_BACKEND)
|
||||
# https://jira.mariadb.org/browse/MXS-1509
|
||||
add_test_executable(mxs1509.cpp mxs1509 mxs1509 LABELS REPL_BACKEND)
|
||||
|
||||
# MXS-1585: Crash in MaxScale 2.1.12
|
||||
# https://jira.mariadb.org/browse/MXS-1585
|
||||
add_test_executable(mxs1585.cpp mxs1585 mxs1585 LABELS REPL_BACKEND)
|
||||
|
||||
# 'namedserverfilter' test
|
||||
add_test_executable(namedserverfilter.cpp namedserverfilter namedserverfilter LABELS namedserverfilter LIGHT REPL_BACKEND)
|
||||
|
||||
|
88
maxscale-system-test/cnf/maxscale.cnf.template.mxs1585
Executable file
88
maxscale-system-test/cnf/maxscale.cnf.template.mxs1585
Executable file
@ -0,0 +1,88 @@
|
||||
[maxscale]
|
||||
threads=###threads###
|
||||
|
||||
[Galera Monitor]
|
||||
type=monitor
|
||||
module=galeramon
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
passwd=skysql
|
||||
monitor_interval=1000
|
||||
root_node_as_master=false
|
||||
|
||||
[RW Split Router]
|
||||
type=service
|
||||
router=readwritesplit
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
passwd=skysql
|
||||
master_failure_mode=fail_on_write
|
||||
|
||||
[Read Connection Router Slave]
|
||||
type=service
|
||||
router=readconnroute
|
||||
router_options=slave
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
passwd=skysql
|
||||
|
||||
[Read Connection Router Master]
|
||||
type=service
|
||||
router=readconnroute
|
||||
router_options=master
|
||||
servers=server1,server2,server3,server4
|
||||
user=maxskysql
|
||||
passwd=skysql
|
||||
|
||||
[RW Split Listener]
|
||||
type=listener
|
||||
service=RW Split Router
|
||||
protocol=MySQLClient
|
||||
port=4006
|
||||
|
||||
[Read Connection Listener Slave]
|
||||
type=listener
|
||||
service=Read Connection Router Slave
|
||||
protocol=MySQLClient
|
||||
port=4009
|
||||
|
||||
[Read Connection Listener Master]
|
||||
type=listener
|
||||
service=Read Connection Router Master
|
||||
protocol=MySQLClient
|
||||
port=4008
|
||||
|
||||
[CLI]
|
||||
type=service
|
||||
router=cli
|
||||
|
||||
[CLI Listener]
|
||||
type=listener
|
||||
service=CLI
|
||||
protocol=maxscaled
|
||||
socket=default
|
||||
|
||||
[server1]
|
||||
type=server
|
||||
address=###galera_server_IP_1###
|
||||
port=###galera_server_port_1###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server2]
|
||||
type=server
|
||||
address=###galera_server_IP_2###
|
||||
port=###galera_server_port_2###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server3]
|
||||
type=server
|
||||
address=###galera_server_IP_3###
|
||||
port=###galera_server_port_3###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server4]
|
||||
type=server
|
||||
address=###galera_server_IP_4###
|
||||
port=###galera_server_port_4###
|
||||
protocol=MySQLBackend
|
||||
|
87
maxscale-system-test/mxs1585.cpp
Normal file
87
maxscale-system-test/mxs1585.cpp
Normal file
@ -0,0 +1,87 @@
|
||||
/**
|
||||
* MXS-1585: https://jira.mariadb.org/browse/MXS-1585
|
||||
*
|
||||
* Check that MaxScale doesn't crash when the master is set into maintenance
|
||||
* mode when master_failure_mode is fail_on_write.
|
||||
*/
|
||||
|
||||
#include "testconnections.h"
|
||||
#include <vector>
|
||||
|
||||
static bool running = true;
|
||||
|
||||
void* query_thr(void* data)
|
||||
{
|
||||
TestConnections* test = (TestConnections*)data;
|
||||
|
||||
while (running)
|
||||
{
|
||||
MYSQL* mysql = test->open_rwsplit_connection();
|
||||
|
||||
while (running)
|
||||
{
|
||||
if (mysql_query(mysql, "SET sql_log_bin = 0") ||
|
||||
mysql_query(mysql, "INSERT INTO test.mxs1585 VALUES (1)") ||
|
||||
mysql_query(mysql, "DELETE FROM test.mxs1585"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mysql_close(mysql);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
TestConnections test(argc, argv);
|
||||
|
||||
test.connect_maxscale();
|
||||
test.try_query(test.conn_rwsplit, "DROP TABLE IF EXISTS test.mxs1585");
|
||||
test.try_query(test.conn_rwsplit, "CREATE TABLE test.mxs1585(id INT) ENGINE=MEMORY");
|
||||
test.close_maxscale_connections();
|
||||
|
||||
std::vector<pthread_t> threads;
|
||||
threads.resize(100);
|
||||
|
||||
for (auto& a: threads)
|
||||
{
|
||||
pthread_create(&a, NULL, query_thr, &test);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
for (int x = 1; x <= 4; x++)
|
||||
{
|
||||
test.ssh_maxscale(true, "maxadmin set server server%d maintenance", x);
|
||||
sleep(1);
|
||||
test.ssh_maxscale(true, "maxadmin clear server server%d maintenance", x);
|
||||
sleep(2);
|
||||
|
||||
test.ssh_maxscale(true, "maxadmin remove server server%d \"RW Split Router\" \"Galera Monitor\"", x);
|
||||
sleep(1);
|
||||
test.ssh_maxscale(true, "maxadmin add server server%d \"RW Split Router\" \"Galera Monitor\"", x);
|
||||
sleep(2);
|
||||
|
||||
test.galera->block_node(x - 1);
|
||||
sleep(5);
|
||||
test.galera->unblock_node(x - 1);
|
||||
sleep(5);
|
||||
}
|
||||
}
|
||||
|
||||
running = false;
|
||||
|
||||
for (auto& a: threads)
|
||||
{
|
||||
pthread_join(a, NULL);
|
||||
}
|
||||
|
||||
test.connect_maxscale();
|
||||
test.try_query(test.conn_rwsplit, "DROP TABLE test.mxs1585");
|
||||
test.check_maxscale_alive();
|
||||
|
||||
return test.global_result;
|
||||
}
|
@ -48,6 +48,7 @@ int main(int argc, char** argv)
|
||||
|
||||
qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL);
|
||||
qc_process_init(QC_INIT_BOTH);
|
||||
qc_thread_init(QC_INIT_BOTH);
|
||||
|
||||
infile = fopen(argv[1], "rb");
|
||||
outfile = fopen(argv[2], "wb");
|
||||
|
@ -1,5 +1,5 @@
|
||||
#! /bin/sh
|
||||
if [[ $# -lt 4 ]]
|
||||
if [ $# -lt 4 ]
|
||||
then
|
||||
echo "Usage: canontest.sh <logfile name> <input file> <output file> <expected output>"
|
||||
exit 0
|
||||
@ -11,7 +11,7 @@ EXPECTED=$4
|
||||
DIFFLOG=diff.out
|
||||
|
||||
if [ $# -eq 5 ]
|
||||
then
|
||||
then
|
||||
EXECUTABLE=$5
|
||||
else
|
||||
EXECUTABLE=$PWD/canonizer
|
||||
@ -20,11 +20,11 @@ fi
|
||||
$EXECUTABLE $INPUT $OUTPUT
|
||||
diff $OUTPUT $EXPECTED > $DIFFLOG
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
then
|
||||
echo "PASSED" >> $TESTLOG
|
||||
exval=0
|
||||
else
|
||||
echo "FAILED" >> $TESTLOG
|
||||
echo "FAILED" >> $TESTLOG
|
||||
echo "Diff output: " >> $TESTLOG
|
||||
cat $DIFFLOG >> $TESTLOG
|
||||
exval=1
|
||||
|
@ -15,3 +15,4 @@ QUERY_TYPE_SESSION_WRITE
|
||||
QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ
|
||||
QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ
|
||||
QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ
|
||||
QUERY_TYPE_READ|QUERY_TYPE_SYSVAR_READ
|
||||
|
@ -15,3 +15,4 @@ use X;
|
||||
select last_insert_id();
|
||||
select @@last_insert_id;
|
||||
select @@identity;
|
||||
select if(@@hostname='box02','prod_mariadb02','n');
|
||||
|
@ -183,6 +183,8 @@ int main(int argc, char* argv[])
|
||||
|
||||
if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT))
|
||||
{
|
||||
set_libdir(strdup("../../../query_classifier/qc_sqlite"));
|
||||
|
||||
// We have to setup something in order for the regexes to be compiled.
|
||||
if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL) &&
|
||||
qc_process_init(QC_INIT_BOTH) &&
|
||||
|
@ -420,6 +420,8 @@ int main(int argc, char* argv[])
|
||||
|
||||
if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT))
|
||||
{
|
||||
set_libdir(strdup("../../../query_classifier/qc_sqlite"));
|
||||
|
||||
// We have to setup something in order for the regexes to be compiled.
|
||||
if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL) &&
|
||||
qc_process_init(QC_INIT_BOTH) &&
|
||||
|
@ -590,7 +590,7 @@ static pcre2_code* remove_comments_re = NULL;
|
||||
static const PCRE2_SPTR remove_comments_pattern = (PCRE2_SPTR)
|
||||
"(?:`[^`]*`\\K)|"
|
||||
"(\\/[*](?!(M?!)).*?[*]\\/)|"
|
||||
"([[:space:]](?:#.*|--[[:space:]].*(\\n|\\r\\n)))";
|
||||
"((?:#.*|--[[:space:]].*)(\\n|\\r\\n|$))";
|
||||
|
||||
/**
|
||||
* Remove SQL comments from the end of a string
|
||||
|
@ -989,6 +989,8 @@ SRWBackend handle_slave_is_target(RWSplit *inst, RWSplitSession *rses,
|
||||
static void log_master_routing_failure(RWSplitSession *rses, bool found,
|
||||
SRWBackend& old_master, SRWBackend& curr_master)
|
||||
{
|
||||
ss_dassert(!old_master || old_master->dcb()->dcb_role == DCB_ROLE_BACKEND_HANDLER);
|
||||
ss_dassert(!curr_master || curr_master->dcb()->dcb_role == DCB_ROLE_BACKEND_HANDLER);
|
||||
char errmsg[MAX_SERVER_ADDRESS_LEN * 2 + 100]; // Extra space for error message
|
||||
|
||||
if (!found)
|
||||
@ -999,6 +1001,8 @@ static void log_master_routing_failure(RWSplitSession *rses, bool found,
|
||||
{
|
||||
/** We found a master but it's not the same connection */
|
||||
ss_dassert(old_master != curr_master);
|
||||
ss_dassert(old_master->dcb()->server && curr_master->dcb()->server);
|
||||
|
||||
if (old_master != curr_master)
|
||||
{
|
||||
sprintf(errmsg, "Master server changed from '%s' to '%s'",
|
||||
|
Loading…
x
Reference in New Issue
Block a user