master update from 'release-0.5'
This commit is contained in:
Binary file not shown.
@ -674,7 +674,7 @@ static int logmanager_write_log(
|
|||||||
if (use_valist) {
|
if (use_valist) {
|
||||||
vsnprintf(wp+timestamp_len, safe_str_len, str, valist);
|
vsnprintf(wp+timestamp_len, safe_str_len, str, valist);
|
||||||
} else {
|
} else {
|
||||||
snprintf(wp+timestamp_len, safe_str_len, str);
|
snprintf(wp+timestamp_len, safe_str_len, "%s", str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** write to syslog */
|
/** write to syslog */
|
||||||
@ -682,11 +682,11 @@ static int logmanager_write_log(
|
|||||||
{
|
{
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case LOGFILE_ERROR:
|
case LOGFILE_ERROR:
|
||||||
syslog(LOG_ERR, wp+timestamp_len);
|
syslog(LOG_ERR, "%s", wp+timestamp_len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOGFILE_MESSAGE:
|
case LOGFILE_MESSAGE:
|
||||||
syslog(LOG_NOTICE, wp+timestamp_len);
|
syslog(LOG_NOTICE, "%s", wp+timestamp_len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -742,7 +742,7 @@ static int logmanager_write_log(
|
|||||||
* Copy original string from block buffer to
|
* Copy original string from block buffer to
|
||||||
* other logs' block buffers.
|
* other logs' block buffers.
|
||||||
*/
|
*/
|
||||||
snprintf(wp_c, timestamp_len+str_len, wp);
|
snprintf(wp_c, timestamp_len+str_len, "%s", wp);
|
||||||
|
|
||||||
/** remove double line feed */
|
/** remove double line feed */
|
||||||
if (wp_c[timestamp_len-1+str_len-2] == '\n')
|
if (wp_c[timestamp_len-1+str_len-2] == '\n')
|
||||||
|
@ -22,6 +22,7 @@ ifdef DYNLIB
|
|||||||
LIB := libmysqld.so.18
|
LIB := libmysqld.so.18
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fPIC
|
||||||
|
|
||||||
CFLAGS := $(CFLAGS) -Wall
|
CFLAGS := $(CFLAGS) -Wall
|
||||||
LDLIBS := $(LDLIBS) -pthread
|
LDLIBS := $(LDLIBS) -pthread
|
||||||
@ -32,7 +33,7 @@ CPP_LDLIBS := -lstdc++
|
|||||||
# Compiler flags, httpd arguments and debugger options
|
# Compiler flags, httpd arguments and debugger options
|
||||||
#
|
#
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
DEBUG_FLAGS := -DSS_DEBUG
|
DEBUG_FLAGS := -DSS_DEBUG -pipe -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -fPIC
|
||||||
CFLAGS := $(CFLAGS) -ggdb -O0 -pthread $(DEBUG_FLAGS)
|
CFLAGS := $(CFLAGS) -ggdb -O0 -pthread $(DEBUG_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
2
maxscale.conf
Normal file
2
maxscale.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/usr/local/sbin/MaxScale/modules
|
||||||
|
/usr/local/sbin/lib
|
@ -2,7 +2,6 @@
|
|||||||
%define name maxscale
|
%define name maxscale
|
||||||
%define release ##RELEASE_TAG##
|
%define release ##RELEASE_TAG##
|
||||||
%define version ##VERSION_TAG##
|
%define version ##VERSION_TAG##
|
||||||
%define buildroot %{_topdir}/%{name}-%{version}-%{release}root
|
|
||||||
%define install_path /usr/local/sbin/
|
%define install_path /usr/local/sbin/
|
||||||
|
|
||||||
BuildRoot: %{buildroot}
|
BuildRoot: %{buildroot}
|
||||||
@ -15,7 +14,7 @@ Source: %{name}-%{version}-%{release}.tar.gz
|
|||||||
Prefix: /
|
Prefix: /
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
#Requires:
|
#Requires:
|
||||||
BuildRequires: gcc gcc-c++ ncurses-devel bison glibc-devel cmake libgcc perl make libtool openssl-devel
|
BuildRequires: gcc gcc-c++ ncurses-devel bison glibc-devel cmake libgcc perl make libtool openssl-devel libaio MariaDB-devel MariaDB-server
|
||||||
|
|
||||||
%description
|
%description
|
||||||
MaxScale
|
MaxScale
|
||||||
@ -25,22 +24,27 @@ MaxScale
|
|||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
%build
|
%build
|
||||||
MARIADB_SRC_PATH=/home/ec2-user/.jenkins/jobs/MariaDB_for_MaxScale/workspace
|
ln -s /lib64/libaio.so.1 /lib64/libaio.so
|
||||||
make ROOT_PATH=`pwd` MARIADB_SRC_PATH=$MARIADB_SRC_PATH depend
|
make ROOT_PATH=`pwd` HOME="" clean
|
||||||
make ROOT_PATH=`pwd` MARIADB_SRC_PATH=$MARIADB_SRC_PATH
|
make ROOT_PATH=`pwd` HOME="" depend
|
||||||
make DEST=`pwd`/binaries ROOT_PATH=`pwd` MARIADB_SRC_PATH=$MARIADB_SRC_PATH install
|
make ROOT_PATH=`pwd` HOME=""
|
||||||
|
make DEST=`pwd`/binaries ROOT_PATH=`pwd` HOME="" ERRMSG="/usr/share/mysql/english" install
|
||||||
|
|
||||||
%post
|
%post
|
||||||
|
ln -s /lib64/libaio.so.1 /lib64/libaio.so
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d/
|
||||||
mkdir -p $RPM_BUILD_ROOT%{install_path}
|
mkdir -p $RPM_BUILD_ROOT%{install_path}
|
||||||
cp -r binaries/* $RPM_BUILD_ROOT%{install_path}
|
cp -r binaries/* $RPM_BUILD_ROOT%{install_path}
|
||||||
|
cp maxscale.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d/
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%{install_path}
|
%{install_path}
|
||||||
|
/etc/ld.so.conf.d/maxscale.conf
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
|
||||||
|
@ -73,6 +73,9 @@ static bool create_parse_tree(
|
|||||||
|
|
||||||
static skygw_query_type_t resolve_query_type(
|
static skygw_query_type_t resolve_query_type(
|
||||||
THD* thd);
|
THD* thd);
|
||||||
|
static bool skygw_stmt_causes_implicit_commit(
|
||||||
|
LEX* lex,
|
||||||
|
uint mask);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @node (write brief function description here)
|
* @node (write brief function description here)
|
||||||
@ -393,6 +396,44 @@ static skygw_query_type_t resolve_query_type(
|
|||||||
type = QUERY_TYPE_SESSION_WRITE;
|
type = QUERY_TYPE_SESSION_WRITE;
|
||||||
goto return_qtype;
|
goto return_qtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (skygw_stmt_causes_implicit_commit(lex, CF_AUTO_COMMIT_TRANS))
|
||||||
|
{
|
||||||
|
if (LOG_IS_ENABLED(LOGFILE_TRACE))
|
||||||
|
{
|
||||||
|
if (sql_command_flags[lex->sql_command] &
|
||||||
|
CF_IMPLICT_COMMIT_BEGIN)
|
||||||
|
{
|
||||||
|
skygw_log_write(
|
||||||
|
LOGFILE_TRACE,
|
||||||
|
"Implicit COMMIT before executing the "
|
||||||
|
"next command.");
|
||||||
|
}
|
||||||
|
else if (sql_command_flags[lex->sql_command] &
|
||||||
|
CF_IMPLICIT_COMMIT_END)
|
||||||
|
{
|
||||||
|
skygw_log_write(
|
||||||
|
LOGFILE_TRACE,
|
||||||
|
"Implicit COMMIT after executing the "
|
||||||
|
"next command.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type |= QUERY_TYPE_COMMIT;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* REVOKE ALL, ASSIGN_TO_KEYCACHE,
|
||||||
|
* PRELOAD_KEYS, FLUSH, RESET, CREATE|ALTER|DROP SERVER
|
||||||
|
*/
|
||||||
|
if (lex->option_type == OPT_GLOBAL)
|
||||||
|
{
|
||||||
|
type |= QUERY_TYPE_GLOBAL_WRITE;
|
||||||
|
goto return_qtype;
|
||||||
|
}
|
||||||
|
else if (lex->option_type == OPT_SESSION)
|
||||||
|
{
|
||||||
|
type |= QUERY_TYPE_SESSION_WRITE;
|
||||||
|
goto return_qtype;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 1:ALTER TABLE, TRUNCATE, REPAIR, OPTIMIZE, ANALYZE, CHECK.
|
* 1:ALTER TABLE, TRUNCATE, REPAIR, OPTIMIZE, ANALYZE, CHECK.
|
||||||
* 2:CREATE|ALTER|DROP|TRUNCATE|RENAME TABLE, LOAD, CREATE|DROP|ALTER DB,
|
* 2:CREATE|ALTER|DROP|TRUNCATE|RENAME TABLE, LOAD, CREATE|DROP|ALTER DB,
|
||||||
@ -415,26 +456,10 @@ static skygw_query_type_t resolve_query_type(
|
|||||||
|
|
||||||
goto return_qtype;
|
goto return_qtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* REVOKE ALL, ASSIGN_TO_KEYCACHE,
|
|
||||||
* PRELOAD_KEYS, FLUSH, RESET, CREATE|ALTER|DROP SERVER
|
|
||||||
*/
|
|
||||||
if (sql_command_flags[lex->sql_command] & CF_AUTO_COMMIT_TRANS) {
|
|
||||||
if (lex->option_type == OPT_GLOBAL)
|
|
||||||
{
|
|
||||||
type |= (QUERY_TYPE_GLOBAL_WRITE|QUERY_TYPE_COMMIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
type |= (QUERY_TYPE_SESSION_WRITE|QUERY_TYPE_COMMIT);
|
|
||||||
}
|
|
||||||
goto return_qtype;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Try to catch session modifications here */
|
/** Try to catch session modifications here */
|
||||||
switch (lex->sql_command) {
|
switch (lex->sql_command) {
|
||||||
case SQLCOM_SET_OPTION:
|
case SQLCOM_SET_OPTION: /*< SET commands. */
|
||||||
if (lex->option_type == OPT_GLOBAL)
|
if (lex->option_type == OPT_GLOBAL)
|
||||||
{
|
{
|
||||||
type |= QUERY_TYPE_GLOBAL_WRITE;
|
type |= QUERY_TYPE_GLOBAL_WRITE;
|
||||||
@ -622,3 +647,34 @@ return_qtype:
|
|||||||
qtype = (skygw_query_type_t)type;
|
qtype = (skygw_query_type_t)type;
|
||||||
return qtype;
|
return qtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool skygw_stmt_causes_implicit_commit(LEX* lex, uint mask)
|
||||||
|
{
|
||||||
|
bool succp;
|
||||||
|
|
||||||
|
if (!(sql_command_flags[lex->sql_command] & mask))
|
||||||
|
{
|
||||||
|
succp = false;
|
||||||
|
goto return_succp;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (lex->sql_command) {
|
||||||
|
case SQLCOM_DROP_TABLE:
|
||||||
|
succp = !(lex->drop_temporary);
|
||||||
|
break;
|
||||||
|
case SQLCOM_ALTER_TABLE:
|
||||||
|
case SQLCOM_CREATE_TABLE:
|
||||||
|
/* If CREATE TABLE of non-temporary table, do implicit commit */
|
||||||
|
succp = !(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE);
|
||||||
|
break;
|
||||||
|
case SQLCOM_SET_OPTION:
|
||||||
|
succp = lex->autocommit ? true : false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
succp = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return_succp:
|
||||||
|
return succp;
|
||||||
|
}
|
||||||
|
@ -22,7 +22,7 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MAXSCALE_BINARY_TARFILE=maxscale.preview.${MAXSCALE_VERSION}.tar
|
MAXSCALE_BINARY_TARFILE=maxscale.${MAXSCALE_VERSION}.tar
|
||||||
TARFILE_BASEDIR=maxscale-${MAXSCALE_VERSION}
|
TARFILE_BASEDIR=maxscale-${MAXSCALE_VERSION}
|
||||||
TARFILE_BASEDIR_SUBST='s,^\.,'${TARFILE_BASEDIR}','
|
TARFILE_BASEDIR_SUBST='s,^\.,'${TARFILE_BASEDIR}','
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MAXSCALE_SOURCE_TARFILE=maxscale.src.preview.${MAXSCALE_VERSION}.tar
|
MAXSCALE_SOURCE_TARFILE=maxscale.src.${MAXSCALE_VERSION}.tar
|
||||||
TARFILE_BASEDIR=maxscale-${MAXSCALE_VERSION}
|
TARFILE_BASEDIR=maxscale-${MAXSCALE_VERSION}
|
||||||
TARFILE_BASEDIR_SUBST='s,^\.,'${TARFILE_BASEDIR}','
|
TARFILE_BASEDIR_SUBST='s,^\.,'${TARFILE_BASEDIR}','
|
||||||
|
|
||||||
|
@ -72,24 +72,29 @@ router=debugcli
|
|||||||
# service=<name of service defined elsewhere>
|
# service=<name of service defined elsewhere>
|
||||||
# protocol=<name of protocol module with which to listen>
|
# protocol=<name of protocol module with which to listen>
|
||||||
# port=<Listening port>
|
# port=<Listening port>
|
||||||
|
# address=<Address to bind to>
|
||||||
|
# socket=<Listening socket>
|
||||||
|
|
||||||
[RW Split Listener]
|
[RW Split Listener]
|
||||||
type=listener
|
type=listener
|
||||||
service=RW Split Router
|
service=RW Split Router
|
||||||
protocol=MySQLClient
|
protocol=MySQLClient
|
||||||
port=4006
|
port=4006
|
||||||
|
#socket=/tmp/rwsplit.sock
|
||||||
|
|
||||||
[Read Connection Listener]
|
[Read Connection Listener]
|
||||||
type=listener
|
type=listener
|
||||||
service=Read Connection Router
|
service=Read Connection Router
|
||||||
protocol=MySQLClient
|
protocol=MySQLClient
|
||||||
port=4008
|
port=4008
|
||||||
|
#socket=/tmp/readconn.sock
|
||||||
|
|
||||||
[Debug Listener]
|
[Debug Listener]
|
||||||
type=listener
|
type=listener
|
||||||
service=Debug Interface
|
service=Debug Interface
|
||||||
protocol=telnetd
|
protocol=telnetd
|
||||||
port=4442
|
port=4442
|
||||||
|
#address=127.0.0.1
|
||||||
|
|
||||||
[HTTPD Listener]
|
[HTTPD Listener]
|
||||||
type=listener
|
type=listener
|
||||||
|
@ -304,7 +304,7 @@ getUsers(SERVICE *service, struct users *users)
|
|||||||
}
|
}
|
||||||
num_fields = mysql_num_fields(result);
|
num_fields = mysql_num_fields(result);
|
||||||
|
|
||||||
users_data = (char *)malloc(nusers * (users_data_row_len * sizeof(char)) + 1);
|
users_data = (char *)calloc(nusers, (users_data_row_len * sizeof(char)) + 1);
|
||||||
|
|
||||||
if(users_data == NULL)
|
if(users_data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
@ -571,7 +571,7 @@ char *mysql_format_user_entry(void *data)
|
|||||||
if (entry->ipv4.sin_addr.s_addr == INADDR_ANY) {
|
if (entry->ipv4.sin_addr.s_addr == INADDR_ANY) {
|
||||||
snprintf(mysql_user, mysql_user_len, "%s@%%", entry->user);
|
snprintf(mysql_user, mysql_user_len, "%s@%%", entry->user);
|
||||||
} else {
|
} else {
|
||||||
snprintf(mysql_user, MYSQL_USER_MAXLEN, entry->user);
|
strncpy(mysql_user, entry->user, MYSQL_USER_MAXLEN);
|
||||||
strcat(mysql_user, "@");
|
strcat(mysql_user, "@");
|
||||||
inet_ntop(AF_INET, &(entry->ipv4).sin_addr, mysql_user+strlen(mysql_user), INET_ADDRSTRLEN);
|
inet_ntop(AF_INET, &(entry->ipv4).sin_addr, mysql_user+strlen(mysql_user), INET_ADDRSTRLEN);
|
||||||
}
|
}
|
||||||
|
@ -670,6 +670,13 @@ static int routeQuery(
|
|||||||
"Packet type\t%s",
|
"Packet type\t%s",
|
||||||
STRPACKETTYPE(packet_type))));
|
STRPACKETTYPE(packet_type))));
|
||||||
|
|
||||||
|
if (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) &&
|
||||||
|
transaction_active)
|
||||||
|
{
|
||||||
|
transaction_active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (qtype) {
|
switch (qtype) {
|
||||||
case QUERY_TYPE_WRITE:
|
case QUERY_TYPE_WRITE:
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
@ -724,12 +731,6 @@ static int routeQuery(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case QUERY_TYPE_SESSION_WRITE:
|
case QUERY_TYPE_SESSION_WRITE:
|
||||||
case (QUERY_TYPE_SESSION_WRITE|QUERY_TYPE_COMMIT):
|
|
||||||
if (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) &&
|
|
||||||
transaction_active)
|
|
||||||
{
|
|
||||||
transaction_active = false;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Execute in backends used by current router session.
|
* Execute in backends used by current router session.
|
||||||
* Save session variable commands to router session property
|
* Save session variable commands to router session property
|
||||||
|
41
server/modules/routing/readwritesplit/test/makefile
Normal file
41
server/modules/routing/readwritesplit/test/makefile
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# cleantests - clean local and subdirectories' tests
|
||||||
|
# buildtests - build all local and subdirectories' tests
|
||||||
|
# runtests - run all local tests
|
||||||
|
# testall - clean, build and run local and subdirectories' tests
|
||||||
|
|
||||||
|
include ../../../../../build_gateway.inc
|
||||||
|
include $(ROOT_PATH)/makefile.inc
|
||||||
|
include $(ROOT_PATH)/test.inc
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
TESTLOG := $(shell pwd)/testrouters.log
|
||||||
|
RET := -1
|
||||||
|
|
||||||
|
cleantests:
|
||||||
|
- $(DEL) *.o
|
||||||
|
- $(DEL) *~
|
||||||
|
|
||||||
|
|
||||||
|
testall:
|
||||||
|
-$(MAKE) cleantests
|
||||||
|
-$(MAKE) DEBUG=Y buildtests
|
||||||
|
-$(MAKE) runtests
|
||||||
|
|
||||||
|
buildtests:
|
||||||
|
|
||||||
|
|
||||||
|
runtests:
|
||||||
|
@echo "" >> $(TESTLOG)
|
||||||
|
@echo "-------------------------------" >> $(TESTLOG)
|
||||||
|
@echo $(shell date) >> $(TESTLOG)
|
||||||
|
@echo "Test MaxScale R/W Split" >> $(TESTLOG)
|
||||||
|
@echo "-------------------------------" >> $(TESTLOG)
|
||||||
|
./rwsplit.sh $(TESTLOG) $(THOST) $(TPORT_RW) $(TMASTER_ID) $(TUSER) $(TPWD)
|
||||||
|
@echo "" >> $(TESTLOG)
|
||||||
|
|
||||||
|
|
||||||
|
pesce:
|
||||||
|
@echo "fine"
|
||||||
|
|
||||||
|
|
||||||
|
|
115
server/modules/routing/readwritesplit/test/rwsplit.sh
Executable file
115
server/modules/routing/readwritesplit/test/rwsplit.sh
Executable file
@ -0,0 +1,115 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
NARGS=6
|
||||||
|
TLOG=$1
|
||||||
|
THOST=$2
|
||||||
|
TPORT=$3
|
||||||
|
TMASTER_ID=$4
|
||||||
|
TUSER=$5
|
||||||
|
TPWD=$6
|
||||||
|
|
||||||
|
if [ $# != $NARGS ] ;
|
||||||
|
then
|
||||||
|
echo""
|
||||||
|
echo "Wrong number of arguments, gave "$#" but "$NARGS" is required"
|
||||||
|
echo ""
|
||||||
|
echo "Usage :"
|
||||||
|
echo " rwsplit.sh <log filename> <host> <port> <master id> <user> <password>"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
RUNCMD=mysql\ --host=$THOST\ -P$TPORT\ -u$TUSER\ -p$TPWD\ --unbuffered=true\ --disable-reconnect\ --silent
|
||||||
|
|
||||||
|
TINPUT=test_transaction_routing2.sql
|
||||||
|
TRETVAL=0
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" != "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_transaction_routing3.sql
|
||||||
|
TRETVAL=2
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" != "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# set a var via SELECT INTO @, get data from master, returning server-id: put master server-id value in TRETVAL
|
||||||
|
TINPUT=select_for_var_set.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" != "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit1.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit2.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit3.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit4.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" != "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit5.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit6.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
TINPUT=test_implicit_commit7.sql
|
||||||
|
TRETVAL=$TMASTER_ID
|
||||||
|
a=`$RUNCMD < ./$TINPUT`
|
||||||
|
if [ "$a" == "$TRETVAL" ]; then
|
||||||
|
echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG;
|
||||||
|
else
|
||||||
|
echo "$TINPUT PASSED">>$TLOG ;
|
||||||
|
fi
|
@ -0,0 +1,5 @@
|
|||||||
|
-- simple read with variable from master
|
||||||
|
BEGIN;
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a;
|
||||||
|
COMMIT;
|
@ -0,0 +1,8 @@
|
|||||||
|
DROP DATABASE If EXISTS FOO;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE DATABASE FOO; -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP DATABASE If EXISTS FOO;
|
||||||
|
COMMIT;
|
@ -0,0 +1,15 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
DROP EVENT IF EXISTS myevent;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TABLE T1 (id integer);
|
||||||
|
CREATE EVENT myevent
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
||||||
|
DO
|
||||||
|
UPDATE t1 SET id = id + 1;
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
DROP EVENT IF EXISTS myevent;
|
||||||
|
COMMIT;
|
@ -0,0 +1,9 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TABLE T1 (id integer); -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
@ -0,0 +1,9 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TEMPORARY TABLE T1 (id integer); -- NO implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from master
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
@ -0,0 +1,14 @@
|
|||||||
|
USE test;
|
||||||
|
DROP PROCEDURE IF EXISTS simpleproc;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
DELIMITER //
|
||||||
|
CREATE PROCEDURE simpleproc (OUT param1 INT)
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO param1 FROM t;
|
||||||
|
END //
|
||||||
|
DELIMITER ;
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP PROCEDURE IF EXISTS simpleproc;
|
||||||
|
COMMIT;
|
@ -0,0 +1,11 @@
|
|||||||
|
USE test;
|
||||||
|
DROP FUNCTION IF EXISTS hello;
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE FUNCTION hello (s CHAR(20))
|
||||||
|
RETURNS CHAR(50) DETERMINISTIC
|
||||||
|
RETURN CONCAT('Hello, ',s,'!'); -- implicit COMMIT
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP FUNCTION IF EXISTS hello;
|
||||||
|
COMMIT;
|
@ -0,0 +1,10 @@
|
|||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
CREATE TABLE T1 (id integer); -- implicit commit
|
||||||
|
SET autocommit=0;
|
||||||
|
BEGIN;
|
||||||
|
CREATE INDEX foo_t1 on T1 (id); -- implicit commit
|
||||||
|
SELECT (@@server_id) INTO @a;
|
||||||
|
SELECT @a; --should read from slave
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT;
|
@ -0,0 +1,19 @@
|
|||||||
|
USE test;
|
||||||
|
SET autocommit = 0;
|
||||||
|
SET @a= -1;
|
||||||
|
SET @b= -2;
|
||||||
|
START TRANSACTION;
|
||||||
|
CREATE TABLE IF NOT EXISTS myCity (a int, b char(20));
|
||||||
|
INSERT INTO myCity VALUES (1, 'Milan');
|
||||||
|
INSERT INTO myCity VALUES (2, 'London');
|
||||||
|
COMMIT;
|
||||||
|
START TRANSACTION;
|
||||||
|
DELETE FROM myCity;
|
||||||
|
SET @a = (SELECT COUNT(*) FROM myCity);
|
||||||
|
ROLLBACK;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET @b = (SELECT COUNT(*) FROM myCity);
|
||||||
|
START TRANSACTION;
|
||||||
|
DROP TABLE myCity;
|
||||||
|
SELECT (@a+@b) AS res;
|
||||||
|
COMMIT;
|
@ -0,0 +1,11 @@
|
|||||||
|
USE test;
|
||||||
|
SET autocommit = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
CREATE TABLE IF NOT EXISTS myCity (a int, b char(20));
|
||||||
|
INSERT INTO myCity VALUES (1, 'Milan');
|
||||||
|
INSERT INTO myCity VALUES (2, 'London');
|
||||||
|
COMMIT;
|
||||||
|
START TRANSACTION;
|
||||||
|
DELETE FROM myCity;
|
||||||
|
SELECT COUNT(*) FROM myCity; -- read transaction's modifications from master
|
||||||
|
COMMIT;
|
@ -0,0 +1,10 @@
|
|||||||
|
USE test;
|
||||||
|
SET autocommit = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
CREATE TABLE IF NOT EXISTS myCity (a int, b char(20));
|
||||||
|
INSERT INTO myCity VALUES (1, 'Milan');
|
||||||
|
INSERT INTO myCity VALUES (2, 'London');
|
||||||
|
COMMIT;
|
||||||
|
DELETE FROM myCity;
|
||||||
|
SELECT COUNT(*) FROM myCity; -- read transaction's modifications from slave
|
||||||
|
COMMIT;
|
35
test.inc
Normal file
35
test.inc
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#
|
||||||
|
# This file includes parameters needed for running tests and may be included
|
||||||
|
# in makefiles in test directories if seen useful.
|
||||||
|
#
|
||||||
|
# hostname or IP address of MaxScale's host, for example:
|
||||||
|
#
|
||||||
|
# THOST := 127.0.0.1
|
||||||
|
#
|
||||||
|
THOST :=
|
||||||
|
|
||||||
|
#
|
||||||
|
# port of read connection router module, for example:
|
||||||
|
# TPORT_RCONN := 4008
|
||||||
|
#
|
||||||
|
TPORT_RCONN :=
|
||||||
|
#
|
||||||
|
# port of read/write split router module, for example:
|
||||||
|
# TPORT_RW := 4006
|
||||||
|
#
|
||||||
|
TPORT_RW :=
|
||||||
|
#
|
||||||
|
# username of MaxScale user, for example:
|
||||||
|
# TUSER := maxuser
|
||||||
|
#
|
||||||
|
TUSER :=
|
||||||
|
#
|
||||||
|
# password of MaxScale user, for example:
|
||||||
|
# TPWD := maxpwd
|
||||||
|
#
|
||||||
|
TPWD :=
|
||||||
|
#
|
||||||
|
# master's server_id, for example:
|
||||||
|
# TMASTER_ID := 2
|
||||||
|
#
|
||||||
|
TMASTER_ID :=
|
Reference in New Issue
Block a user