Merge branch '2.1' into 2.2

This commit is contained in:
Markus Mäkelä 2017-12-29 08:42:49 +02:00
commit 8b2aa52384
13 changed files with 207 additions and 5 deletions

View File

@ -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=$?

View File

@ -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

View File

@ -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)

View 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

View 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;
}

View File

@ -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");

View File

@ -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

View File

@ -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

View File

@ -15,3 +15,4 @@ use X;
select last_insert_id();
select @@last_insert_id;
select @@identity;
select if(@@hostname='box02','prod_mariadb02','n');

View File

@ -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) &&

View File

@ -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) &&

View File

@ -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

View File

@ -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'",