cleanup: galera merge, simple changes
This commit is contained in:
parent
b04f848176
commit
3620910eea
7
.gitignore
vendored
7
.gitignore
vendored
@ -106,6 +106,11 @@ scripts/mysqld_safe
|
||||
scripts/mysqldumpslow
|
||||
scripts/mysqlhotcopy
|
||||
scripts/mytop
|
||||
scripts/wsrep_sst_common
|
||||
scripts/wsrep_sst_mysqldump
|
||||
scripts/wsrep_sst_rsync
|
||||
scripts/wsrep_sst_xtrabackup
|
||||
scripts/wsrep_sst_xtrabackup-v2
|
||||
sql-bench/bench-count-distinct
|
||||
sql-bench/bench-init.pl
|
||||
sql-bench/compare-results
|
||||
@ -200,6 +205,8 @@ support-files/mysql.server
|
||||
support-files/mysql.spec
|
||||
support-files/mysqld_multi.server
|
||||
support-files/ndb-config-2-node.ini
|
||||
support-files/wsrep.cnf
|
||||
support-files/wsrep_notify
|
||||
tags
|
||||
tests/async_queries
|
||||
tests/bug25714
|
||||
|
@ -376,9 +376,6 @@ ADD_SUBDIRECTORY(vio)
|
||||
ADD_SUBDIRECTORY(mysys)
|
||||
ADD_SUBDIRECTORY(mysys_ssl)
|
||||
ADD_SUBDIRECTORY(libmysql)
|
||||
IF(WITH_WSREP)
|
||||
ADD_SUBDIRECTORY(wsrep)
|
||||
ENDIF()
|
||||
ADD_SUBDIRECTORY(client)
|
||||
ADD_SUBDIRECTORY(extra)
|
||||
ADD_SUBDIRECTORY(libservices)
|
||||
@ -395,6 +392,10 @@ IF(NOT WITHOUT_SERVER)
|
||||
ADD_SUBDIRECTORY(libmysqld/examples)
|
||||
ENDIF(WITH_EMBEDDED_SERVER)
|
||||
|
||||
IF(WITH_WSREP)
|
||||
ADD_SUBDIRECTORY(wsrep)
|
||||
ENDIF()
|
||||
|
||||
ADD_SUBDIRECTORY(mysql-test)
|
||||
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
||||
ADD_SUBDIRECTORY(sql-bench)
|
||||
|
@ -92,7 +92,6 @@ enum options_client
|
||||
OPT_REPORT_PROGRESS,
|
||||
OPT_SKIP_ANNOTATE_ROWS_EVENTS,
|
||||
OPT_SSL_CRL, OPT_SSL_CRLPATH,
|
||||
OPT_GALERA_SST_MODE,
|
||||
OPT_MAX_CLIENT_OPTION /* should be always the last */
|
||||
};
|
||||
|
||||
|
@ -347,7 +347,7 @@ static struct my_option my_long_options[] =
|
||||
{"force", 'f', "Continue even if we get an SQL error.",
|
||||
&ignore_errors, &ignore_errors, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"galera-sst-mode", OPT_GALERA_SST_MODE,
|
||||
{"galera-sst-mode", 0,
|
||||
"This mode should normally be used in mysqldump snapshot state transfer "
|
||||
"(SST) in a Galera cluster. If enabled, mysqldump additionally dumps "
|
||||
"commands to turn off binary logging and SET global gtid_binlog_state "
|
||||
|
@ -149,8 +149,13 @@ SETA(CPACK_RPM_test_PACKAGE_PROVIDES
|
||||
|
||||
SETA(CPACK_RPM_server_PACKAGE_REQUIRES
|
||||
"${CPACK_RPM_PACKAGE_REQUIRES}"
|
||||
"MariaDB-client" "galera" "rsync" "lsof" "socat" "grep" "gawk" "iproute"
|
||||
"MariaDB-client")
|
||||
|
||||
IF(WITH_WSREP)
|
||||
SETA(CPACK_RPM_server_PACKAGE_REQUIRES
|
||||
"galera" "rsync" "lsof" "socat" "grep" "gawk" "iproute"
|
||||
"coreutils" "findutils")
|
||||
ENDIF()
|
||||
|
||||
SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh)
|
||||
SET(CPACK_RPM_server_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-preun.sh)
|
||||
|
@ -155,14 +155,6 @@ MACRO(MYSQL_ADD_PLUGIN)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (WITH_WSREP)
|
||||
# Set compile definitions for non-embedded plugins
|
||||
LIST(APPEND wsrep_definitions "WITH_WSREP")
|
||||
LIST(APPEND wsrep_definitions "WSREP_PROC_INFO")
|
||||
SET_TARGET_PROPERTIES(${target} PROPERTIES
|
||||
COMPILE_DEFINITIONS "${wsrep_definitions}")
|
||||
ENDIF()
|
||||
|
||||
IF(ARG_STATIC_OUTPUT_NAME)
|
||||
SET_TARGET_PROPERTIES(${target} PROPERTIES
|
||||
OUTPUT_NAME ${ARG_STATIC_OUTPUT_NAME})
|
||||
@ -195,15 +187,8 @@ MACRO(MYSQL_ADD_PLUGIN)
|
||||
ADD_LIBRARY(${target} MODULE ${SOURCES})
|
||||
DTRACE_INSTRUMENT(${target})
|
||||
|
||||
LIST(APPEND dyn_compile_definitions "MYSQL_DYNAMIC_PLUGIN")
|
||||
|
||||
IF (WITH_WSREP)
|
||||
LIST(APPEND dyn_compile_definitions "WITH_WSREP")
|
||||
LIST(APPEND dyn_compile_definitions "WSREP_PROC_INFO")
|
||||
ENDIF()
|
||||
|
||||
SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX ""
|
||||
COMPILE_DEFINITIONS "${dyn_compile_definitions}")
|
||||
COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN")
|
||||
|
||||
TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES})
|
||||
|
||||
|
@ -14,6 +14,17 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#
|
||||
# Galera library does not compile with windows
|
||||
#
|
||||
IF(UNIX)
|
||||
SET(with_wsrep_default ON)
|
||||
ELSE()
|
||||
SET(with_wsrep_default OFF)
|
||||
ENDIF()
|
||||
|
||||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
|
||||
|
||||
# Set the patch version
|
||||
SET(WSREP_PATCH_VERSION "10")
|
||||
|
||||
@ -32,42 +43,14 @@ IF (DEFINED ENV{WSREP_REV})
|
||||
SET(WSREP_PATCH_REVNO $ENV{WSREP_REV})
|
||||
ENDIF()
|
||||
|
||||
# Obtain wsrep API version
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND sh -c "grep WSREP_INTERFACE_VERSION ${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h | cut -d '\"' -f 2"
|
||||
OUTPUT_VARIABLE WSREP_API_VERSION
|
||||
RESULT_VARIABLE RESULT
|
||||
)
|
||||
#FILE(WRITE "wsrep_config" "Debug: WSREP_API_VERSION result: ${RESULT}\n")
|
||||
STRING(REGEX REPLACE "(\r?\n)+$" "" WSREP_API_VERSION "${WSREP_API_VERSION}")
|
||||
SET(WSREP_INTERFACE_VERSION 25)
|
||||
|
||||
IF(NOT WSREP_PATCH_REVNO)
|
||||
MESSAGE(WARNING "Could not determine bzr revision number, WSREP_VERSION will "
|
||||
"not contain the revision number.")
|
||||
SET(WSREP_VERSION
|
||||
"${WSREP_API_VERSION}.${WSREP_PATCH_VERSION}"
|
||||
)
|
||||
ELSE()
|
||||
SET(WSREP_VERSION
|
||||
"${WSREP_API_VERSION}.${WSREP_PATCH_VERSION}.r${WSREP_PATCH_REVNO}"
|
||||
)
|
||||
ENDIF()
|
||||
SET(WSREP_VERSION
|
||||
"${WSREP_INTERFACE_VERSION}.${WSREP_PATCH_VERSION}.r${WSREP_PATCH_REVNO}")
|
||||
|
||||
#
|
||||
# Galera library does not compile with windows and solaris
|
||||
#
|
||||
IF(UNIX)
|
||||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ON)
|
||||
ELSE()
|
||||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" OFF)
|
||||
ENDIF()
|
||||
SET(WSREP_PROC_INFO ${WITH_WSREP})
|
||||
|
||||
MACRO (BUILD_WITH_WSREP)
|
||||
SET(WSREP_C_FLAGS "-DWITH_WSREP -DWSREP_PROC_INFO -DMYSQL_MAX_VARIABLE_VALUE_LEN=2048")
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WSREP_C_FLAGS}")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSREP_C_FLAGS}")
|
||||
IF(WITH_WSREP)
|
||||
SET(COMPILATION_COMMENT "${COMPILATION_COMMENT}, wsrep_${WSREP_VERSION}")
|
||||
#SET(WITH_EMBEDDED_SERVER OFF CACHE INTERNAL "" FORCE)
|
||||
ENDMACRO()
|
||||
ENDIF()
|
||||
|
||||
#
|
||||
|
@ -642,6 +642,12 @@
|
||||
#cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@
|
||||
#cmakedefine TIME_T_UNSIGNED @TIME_T_UNSIGNED@
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
#cmakedefine WSREP_INTERFACE_VERSION "@WSREP_INTERFACE_VERSION@"
|
||||
#cmakedefine WITH_WSREP 1
|
||||
#cmakedefine WSREP_PROC_INFO 1
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
/*
|
||||
AIX includes inttypes.h from sys/types.h
|
||||
|
6
debian/dist/Debian/control
vendored
6
debian/dist/Debian/control
vendored
@ -192,7 +192,11 @@ Architecture: any
|
||||
Suggests: tinyca, mailx, mariadb-test
|
||||
Recommends: libhtml-template-perl
|
||||
Pre-Depends: mariadb-common, adduser (>= 3.40), debconf
|
||||
Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl, perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd, lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}), galera (>=25.2), rsync, lsof, socat, grep, gawk, iproute, coreutils, findutils
|
||||
Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl,
|
||||
perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd,
|
||||
lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}),
|
||||
galera (>=25.2), rsync, lsof, socat | netcat, grep, gawk, iproute,
|
||||
coreutils, findutils
|
||||
Provides: mariadb-server, mysql-server, virtual-mysql-server
|
||||
Conflicts: mariadb-server (<< ${source:Version}), mysql-server (<< ${source:Version}),
|
||||
mysql-server-4.1, mysql-server-5.0, mysql-server-5.1, mysql-server-5.5,
|
||||
|
6
debian/dist/Ubuntu/control
vendored
6
debian/dist/Ubuntu/control
vendored
@ -186,7 +186,11 @@ Architecture: any
|
||||
Suggests: tinyca, mailx, mariadb-test
|
||||
Recommends: libhtml-template-perl
|
||||
Pre-Depends: mariadb-common, adduser (>= 3.40), debconf
|
||||
Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl, perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd, lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}), galera (>=25.2), rsync, lsof, socat, grep, gawk, iproute, coreutils, findutils
|
||||
Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl,
|
||||
perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd,
|
||||
lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}),
|
||||
galera (>=25.2), rsync, lsof, socat | netcat, grep, gawk, iproute,
|
||||
coreutils, findutils
|
||||
Provides: mariadb-server, mysql-server, virtual-mysql-server
|
||||
Conflicts: mariadb-server (<< ${source:Version}), mysql-server (<< ${source:Version}),
|
||||
mysql-server-4.1, mysql-server-5.0, mysql-server-5.1, mysql-server-5.5,
|
||||
|
@ -13,8 +13,10 @@
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#include <my_config.h>
|
||||
|
||||
#ifndef WSREP_INCLUDED
|
||||
#define WSERP_INCLUDED
|
||||
#define WSREP_INCLUDED
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
#define IF_WSREP(A,B) A
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
--source include/have_wsrep.inc
|
||||
|
||||
--require r/have_wsrep.require
|
||||
disable_query_log;
|
||||
SHOW VARIABLES LIKE 'wsrep_on';
|
||||
enable_query_log;
|
||||
if (`SELECT COUNT(*)=0 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'wsrep_on' AND VARIABLE_VALUE='ON'`)
|
||||
{
|
||||
--skip Test requires wsrep_on=ON
|
||||
}
|
||||
|
@ -33,8 +33,7 @@
|
||||
--let _WRTF_SERVER_NUMBER= $server_number
|
||||
if (!$server_number)
|
||||
{
|
||||
# Note: 2 extra ports are reserved per server for galera use.
|
||||
--let _WRTF_SERVER_NUMBER= `SELECT 1 + FLOOR((@@PORT - $MASTER_MYPORT) / 3)`
|
||||
--let _WRTF_SERVER_NUMBER= `SELECT 1 + @@PORT - $MASTER_MYPORT`
|
||||
}
|
||||
|
||||
--let $_write_result_msg= [server=$_WRTF_SERVER_NUMBER]
|
||||
|
@ -238,9 +238,6 @@ my @mysqld_rules=
|
||||
{ 'pid-file' => \&fix_pidfile },
|
||||
{ '#host' => \&fix_host },
|
||||
{ 'port' => \&fix_port },
|
||||
# galera base_port and port used during SST
|
||||
{ '#galera_port' => \&fix_port },
|
||||
{ '#sst_port' => \&fix_port },
|
||||
{ 'socket' => \&fix_socket },
|
||||
{ '#log-error' => \&fix_log_error },
|
||||
{ 'general-log' => 1 },
|
||||
|
@ -1,2 +0,0 @@
|
||||
Variable_name Value
|
||||
wsrep_on ON
|
@ -3,6 +3,8 @@
|
||||
|
||||
[mysqld.1]
|
||||
binlog-format=row
|
||||
#galera_port=OPT.port
|
||||
#sst_port=OPT.port
|
||||
wsrep_provider=@ENV.WSREP_PROVIDER
|
||||
wsrep_cluster_address='gcomm://'
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port'
|
||||
@ -12,6 +14,8 @@ wsrep_causal_reads=ON
|
||||
|
||||
[mysqld.2]
|
||||
binlog-format=row
|
||||
#galera_port=OPT.port
|
||||
#sst_port=OPT.port
|
||||
wsrep_provider=@ENV.WSREP_PROVIDER
|
||||
wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
|
||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port'
|
||||
|
@ -21,17 +21,17 @@ Grants for user_a@localhost
|
||||
GRANT role_a TO 'user_a'@'localhost'
|
||||
GRANT USAGE ON *.* TO 'user_a'@'localhost'
|
||||
GRANT SELECT ON *.* TO 'role_a'
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
user host default_role
|
||||
user_a localhost role_a
|
||||
user_b localhost role_b
|
||||
set default role NONE for current_user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
user host default_role
|
||||
user_a localhost
|
||||
user_b localhost role_b
|
||||
set default role current_role for current_user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
user host default_role
|
||||
user_a localhost role_a
|
||||
user_b localhost role_b
|
||||
@ -42,7 +42,7 @@ Grants for user_b@localhost
|
||||
GRANT role_b TO 'user_b'@'localhost'
|
||||
GRANT USAGE ON *.* TO 'user_b'@'localhost'
|
||||
GRANT INSERT, UPDATE ON *.* TO 'role_b'
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
ERROR 42000: SELECT command denied to user 'user_b'@'localhost' for table 'user'
|
||||
insert into mysql.user (user, host) values ('someuser', 'somehost');
|
||||
Warnings:
|
||||
@ -56,10 +56,10 @@ Grants for user_a@localhost
|
||||
GRANT role_a TO 'user_a'@'localhost'
|
||||
GRANT USAGE ON *.* TO 'user_a'@'localhost'
|
||||
GRANT INSERT, UPDATE ON *.* TO 'role_b'
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
ERROR 42000: SELECT command denied to user 'user_a'@'localhost' for table 'user'
|
||||
drop role role_a;
|
||||
drop role role_b;
|
||||
delete from mysql.user where user = 'someuser' && host = 'somehost' order by user;
|
||||
delete from mysql.user where user = 'someuser' && host = 'somehost';
|
||||
drop user user_a@localhost;
|
||||
drop user user_b@localhost;
|
||||
|
@ -44,13 +44,13 @@ set default role role_b for user_b@localhost;
|
||||
change_user 'user_a';
|
||||
|
||||
show grants;
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
|
||||
set default role NONE for current_user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
|
||||
set default role current_role for current_user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
|
||||
# Make sure we can't set a default role not granted to us, using current_user
|
||||
--error ER_INVALID_ROLE
|
||||
@ -60,7 +60,7 @@ change_user 'user_b';
|
||||
|
||||
show grants;
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
|
||||
# Make sure the default role setting worked from root.
|
||||
insert into mysql.user (user, host) values ('someuser', 'somehost');
|
||||
@ -73,12 +73,12 @@ change_user 'user_a';
|
||||
# There is no default role set any more.
|
||||
show grants;
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
select user, host, default_role from mysql.user where user like 'user_%' order by user;
|
||||
select user, host, default_role from mysql.user where user like 'user_%';
|
||||
|
||||
change_user 'root';
|
||||
|
||||
drop role role_a;
|
||||
drop role role_b;
|
||||
delete from mysql.user where user = 'someuser' && host = 'somehost' order by user;
|
||||
delete from mysql.user where user = 'someuser' && host = 'somehost';
|
||||
drop user user_a@localhost;
|
||||
drop user user_b@localhost;
|
||||
|
@ -7,11 +7,6 @@
|
||||
# the updated result. (lp:1161432)
|
||||
--source include/not_wsrep.inc
|
||||
|
||||
# Note: The output of mysql_tzinfo_to_sql is different if server is compiled
|
||||
# with wsrep. Hence a copy of this test has been placed under wsrep suite with
|
||||
# the updated result. (lp:1161432)
|
||||
--source include/not_wsrep.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
||||
--echo #
|
||||
|
@ -15,10 +15,6 @@
|
||||
|
||||
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys)
|
||||
|
||||
IF(WITH_WSREP)
|
||||
BUILD_WITH_WSREP()
|
||||
ENDIF()
|
||||
|
||||
SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c my_default.c
|
||||
errors.c hash.c list.c
|
||||
mf_cache.c mf_dirname.c mf_fn_ext.c
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
|
||||
IF(WITH_WSREP AND NOT EMBEDDED_LIBRARY)
|
||||
BUILD_WITH_WSREP()
|
||||
SET(WSREP_INCLUDES ${CMAKE_SOURCE_DIR}/wsrep)
|
||||
SET(WSREP_SOURCES
|
||||
wsrep_check_opts.cc
|
||||
|
@ -1472,19 +1472,11 @@ end:
|
||||
bool save_tx_read_only= thd->tx_read_only;
|
||||
thd->tx_read_only= false;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
// sql_print_information("sizeof(LEX) = %d", sizeof(struct LEX));
|
||||
// sizeof(LEX) = 4512, so it's relatively safe to allocate it on stack.
|
||||
LEX lex;
|
||||
LEX* saved = thd->lex;
|
||||
lex.sql_command = SQLCOM_DROP_EVENT;
|
||||
thd->lex = &lex;
|
||||
thd->lex->sql_command = SQLCOM_DROP_EVENT;
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
|
||||
thd->lex = saved;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret= Events::drop_event(thd, dbname, name, FALSE);
|
||||
|
||||
|
@ -388,15 +388,6 @@ const char *ha_partition::table_type() const
|
||||
}
|
||||
|
||||
|
||||
#if defined(WITH_WSREP) && !defined(EMBEDDED_LIBRARY)
|
||||
int ha_partition::wsrep_db_type() const
|
||||
{
|
||||
// we can do this since we only support a single engine type
|
||||
return partition_ht()->db_type;
|
||||
}
|
||||
#endif /* WITH_WSREP && !EMBEDDED_LIBRARY */
|
||||
|
||||
|
||||
/*
|
||||
Destructor method
|
||||
|
||||
|
@ -1282,9 +1282,6 @@ public:
|
||||
DBUG_ASSERT(h == m_file[i]->ht);
|
||||
return h;
|
||||
}
|
||||
#if defined(WITH_WSREP) && !defined(EMBEDDED_LIBRARY)
|
||||
virtual int wsrep_db_type() const;
|
||||
#endif /* WITH_WSREP && !EMBEDDED_LIBRARY */
|
||||
|
||||
friend int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
||||
};
|
||||
|
@ -1384,7 +1384,7 @@ int ha_commit_trans(THD *thd, bool all)
|
||||
mdl_request.init(MDL_key::COMMIT, "", "", MDL_INTENTION_EXCLUSIVE,
|
||||
MDL_EXPLICIT);
|
||||
|
||||
if (IF_WSREP(!WSREP(thd),1) &&
|
||||
if (!WSREP(thd) &&
|
||||
thd->mdl_context.acquire_lock(&mdl_request,
|
||||
thd->variables.lock_wait_timeout))
|
||||
{
|
||||
@ -1462,13 +1462,11 @@ int ha_commit_trans(THD *thd, bool all)
|
||||
DEBUG_SYNC(thd, "ha_commit_trans_after_prepare");
|
||||
DBUG_EXECUTE_IF("crash_commit_after_prepare", DBUG_SUICIDE(););
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (!error && WSREP_ON && wsrep_is_wsrep_xid(&thd->transaction.xid_state.xid))
|
||||
{
|
||||
// xid was rewritten by wsrep
|
||||
xid= wsrep_xid_seqno(&thd->transaction.xid_state.xid);
|
||||
}
|
||||
#endif // WITH_WSREP
|
||||
|
||||
if (!is_real_trans)
|
||||
{
|
||||
@ -1846,10 +1844,9 @@ static my_bool xarecover_handlerton(THD *unused, plugin_ref plugin,
|
||||
got, hton_name(hton)->str);
|
||||
for (int i=0; i < got; i ++)
|
||||
{
|
||||
my_xid x= IF_WSREP(WSREP_ON && wsrep_is_wsrep_xid(&info->list[i]) ?
|
||||
my_xid x= WSREP_ON && wsrep_is_wsrep_xid(&info->list[i]) ?
|
||||
wsrep_xid_seqno(&info->list[i]) :
|
||||
info->list[i].get_my_xid(),
|
||||
info->list[i].get_my_xid());
|
||||
info->list[i].get_my_xid();
|
||||
if (!x) // not "mine" - that is generated by external TM
|
||||
{
|
||||
#ifndef DBUG_OFF
|
||||
@ -3134,7 +3131,7 @@ int handler::update_auto_increment()
|
||||
variables->auto_increment_increment);
|
||||
auto_inc_intervals_count++;
|
||||
/* Row-based replication does not need to store intervals in binlog */
|
||||
if (IF_WSREP(((WSREP(thd) && wsrep_emulate_bin_log ) || mysql_bin_log.is_open()), mysql_bin_log.is_open())
|
||||
if (((WSREP(thd) && wsrep_emulate_bin_log ) || mysql_bin_log.is_open())
|
||||
&& !thd->is_current_stmt_binlog_format_row())
|
||||
thd->auto_inc_intervals_in_cur_stmt_for_binlog.
|
||||
append(auto_inc_interval_for_cur_row.minimum(),
|
||||
@ -5754,13 +5751,13 @@ static bool check_table_binlog_row_based(THD *thd, TABLE *table)
|
||||
DBUG_ASSERT(table->s->cached_row_logging_check == 0 ||
|
||||
table->s->cached_row_logging_check == 1);
|
||||
|
||||
return (thd->is_current_stmt_binlog_format_row() &&
|
||||
return thd->is_current_stmt_binlog_format_row() &&
|
||||
table->s->cached_row_logging_check &&
|
||||
(thd->variables.option_bits & OPTION_BIN_LOG) &&
|
||||
/* applier and replayer should not binlog */
|
||||
(IF_WSREP((WSREP_EMULATE_BINLOG(thd) &&
|
||||
(thd->wsrep_exec_mode != REPL_RECV)) ||
|
||||
mysql_bin_log.is_open(), mysql_bin_log.is_open())));
|
||||
((IF_WSREP(WSREP_EMULATE_BINLOG(thd) &&
|
||||
thd->wsrep_exec_mode != REPL_RECV, 0)) ||
|
||||
mysql_bin_log.is_open());
|
||||
}
|
||||
|
||||
|
||||
@ -5860,12 +5857,11 @@ static int binlog_log_row(TABLE* table,
|
||||
bool error= 0;
|
||||
THD *const thd= table->in_use;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
/* only InnoDB tables will be replicated through binlog emulation */
|
||||
if (WSREP_EMULATE_BINLOG(thd) &&
|
||||
table->file->partition_ht()->db_type != DB_TYPE_INNODB)
|
||||
return 0;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (check_table_binlog_row_based(thd, table))
|
||||
{
|
||||
MY_BITMAP cols;
|
||||
@ -6226,11 +6222,9 @@ int ha_abort_transaction(THD *bf_thd, THD *victim_thd, my_bool signal)
|
||||
{
|
||||
handlerton *hton= ha_info->ht();
|
||||
if (!hton->abort_transaction)
|
||||
{
|
||||
WSREP_WARN("cannot abort transaction");
|
||||
}
|
||||
WSREP_WARN("cannot abort transaction");
|
||||
else
|
||||
hton->abort_transaction(hton, bf_thd, victim_thd, signal);
|
||||
hton->abort_transaction(hton, bf_thd, victim_thd, signal);
|
||||
ha_info_next= ha_info->next();
|
||||
ha_info->reset(); /* keep it conveniently zero-filled */
|
||||
}
|
||||
|
@ -3967,9 +3967,6 @@ bool key_uses_partial_cols(TABLE_SHARE *table, uint keyno);
|
||||
extern const char *ha_row_type[];
|
||||
extern MYSQL_PLUGIN_IMPORT const char *tx_isolation_names[];
|
||||
extern MYSQL_PLUGIN_IMPORT const char *binlog_format_names[];
|
||||
#ifdef WITH_WSREP
|
||||
extern MYSQL_PLUGIN_IMPORT const char *wsrep_binlog_format_names[];
|
||||
#endif /* WITH_WSREP */
|
||||
extern TYPELIB tx_isolation_typelib;
|
||||
extern const char *myisam_stats_method_names[];
|
||||
extern ulong total_ha, total_ha_2pc;
|
||||
@ -4091,7 +4088,9 @@ int ha_release_savepoint(THD *thd, SAVEPOINT *sv);
|
||||
#ifdef WITH_WSREP
|
||||
int ha_abort_transaction(THD *bf_thd, THD *victim_thd, my_bool signal);
|
||||
void ha_fake_trx_id(THD *thd);
|
||||
#endif /* WITH_WSREP */
|
||||
#else
|
||||
inline void ha_fake_trx_id(THD *thd) { }
|
||||
#endif
|
||||
|
||||
/* these are called by storage engines */
|
||||
void trans_register_ha(THD *thd, bool all, handlerton *ht);
|
||||
@ -4122,9 +4121,6 @@ int ha_binlog_end(THD *thd);
|
||||
#define ha_binlog_wait(a) do {} while (0)
|
||||
#define ha_binlog_end(a) do {} while (0)
|
||||
#endif
|
||||
#ifdef WITH_WSREP
|
||||
void wsrep_brute_force_aborts();
|
||||
#endif
|
||||
|
||||
const char *get_canonical_filename(handler *file, const char *path,
|
||||
char *tmp_path);
|
||||
|
@ -2771,12 +2771,13 @@ void Item_func_rand::seed_random(Item *arg)
|
||||
*/
|
||||
uint32 tmp;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(current_thd))
|
||||
THD *thd= current_thd;
|
||||
if (WSREP(thd))
|
||||
{
|
||||
if (current_thd->wsrep_exec_mode==REPL_RECV)
|
||||
tmp= current_thd->wsrep_rand;
|
||||
if (thd->wsrep_exec_mode==REPL_RECV)
|
||||
tmp= thd->wsrep_rand;
|
||||
else
|
||||
tmp= current_thd->wsrep_rand= (uint32) arg->val_int();
|
||||
tmp= thd->wsrep_rand= (uint32) arg->val_int();
|
||||
}
|
||||
else
|
||||
#endif /* WITH_WSREP */
|
||||
|
35
sql/log.cc
35
sql/log.cc
@ -52,7 +52,6 @@
|
||||
|
||||
#include "sql_plugin.h"
|
||||
#include "rpl_handler.h"
|
||||
#include "wsrep_mysqld.h"
|
||||
#include "debug_sync.h"
|
||||
#include "sql_show.h"
|
||||
#include "my_pthread.h"
|
||||
@ -1577,8 +1576,7 @@ binlog_trans_log_savepos(THD *thd, my_off_t *pos)
|
||||
DBUG_ENTER("binlog_trans_log_savepos");
|
||||
DBUG_ASSERT(pos != NULL);
|
||||
binlog_cache_mngr *const cache_mngr= thd->binlog_setup_trx_data();
|
||||
DBUG_ASSERT_IF_WSREP(((WSREP(thd) && wsrep_emulate_bin_log)) || mysql_bin_log.is_open());
|
||||
DBUG_ASSERT(IF_WSREP(1, mysql_bin_log.is_open()));
|
||||
DBUG_ASSERT((WSREP(thd) && wsrep_emulate_bin_log) || mysql_bin_log.is_open());
|
||||
*pos= cache_mngr->trx_cache.get_byte_position();
|
||||
DBUG_PRINT("return", ("*pos: %lu", (ulong) *pos));
|
||||
DBUG_VOID_RETURN;
|
||||
@ -1626,8 +1624,8 @@ binlog_trans_log_truncate(THD *thd, my_off_t pos)
|
||||
int binlog_init(void *p)
|
||||
{
|
||||
binlog_hton= (handlerton *)p;
|
||||
binlog_hton->state=IF_WSREP(WSREP_ON || opt_bin_log, opt_bin_log) ?
|
||||
SHOW_OPTION_YES : SHOW_OPTION_NO;
|
||||
binlog_hton->state= (WSREP_ON || opt_bin_log) ? SHOW_OPTION_YES
|
||||
: SHOW_OPTION_NO;
|
||||
binlog_hton->db_type=DB_TYPE_BINLOG;
|
||||
binlog_hton->savepoint_offset= sizeof(my_off_t);
|
||||
binlog_hton->close_connection= binlog_close_connection;
|
||||
@ -1939,13 +1937,12 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
|
||||
DBUG_ENTER("binlog_commit");
|
||||
binlog_cache_mngr *const cache_mngr=
|
||||
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
if (!cache_mngr)
|
||||
{
|
||||
DBUG_ASSERT(WSREP(thd));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
DBUG_PRINT("debug",
|
||||
("all: %d, in_transaction: %s, all.modified_non_trans_table: %s, stmt.modified_non_trans_table: %s",
|
||||
@ -2002,15 +1999,13 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
|
||||
int error= 0;
|
||||
binlog_cache_mngr *const cache_mngr=
|
||||
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
if (!cache_mngr)
|
||||
{
|
||||
DBUG_ASSERT(WSREP(thd));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
DBUG_PRINT("debug", ("all: %s, all.modified_non_trans_table: %s, stmt.modified_non_trans_table: %s",
|
||||
YESNO(all),
|
||||
YESNO(thd->transaction.all.modified_non_trans_table),
|
||||
@ -2038,8 +2033,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
|
||||
cache_mngr->reset(false, true);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
if (IF_WSREP(!wsrep_emulate_bin_log,1) &&
|
||||
mysql_bin_log.check_write_error(thd))
|
||||
if (!wsrep_emulate_bin_log && mysql_bin_log.check_write_error(thd))
|
||||
{
|
||||
/*
|
||||
"all == true" means that a "rollback statement" triggered the error and
|
||||
@ -2180,10 +2174,8 @@ static int binlog_savepoint_set(handlerton *hton, THD *thd, void *sv)
|
||||
int error= 1;
|
||||
DBUG_ENTER("binlog_savepoint_set");
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep_emulate_bin_log)
|
||||
DBUG_RETURN(0);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
char buf[1024];
|
||||
String log_query(buf, sizeof(buf), &my_charset_bin);
|
||||
@ -2222,7 +2214,7 @@ static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv)
|
||||
non-transactional table. Otherwise, truncate the binlog cache starting
|
||||
from the SAVEPOINT command.
|
||||
*/
|
||||
if (IF_WSREP(!wsrep_emulate_bin_log, 1) &&
|
||||
if (!wsrep_emulate_bin_log &&
|
||||
unlikely(trans_has_updated_non_trans_table(thd) ||
|
||||
(thd->variables.option_bits & OPTION_KEEP_LOG)))
|
||||
{
|
||||
@ -2238,7 +2230,7 @@ static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv)
|
||||
DBUG_RETURN(mysql_bin_log.write(&qinfo));
|
||||
}
|
||||
|
||||
if (IF_WSREP(!wsrep_emulate_bin_log, 1))
|
||||
if (!wsrep_emulate_bin_log)
|
||||
binlog_trans_log_truncate(thd, *(my_off_t*)sv);
|
||||
|
||||
DBUG_RETURN(0);
|
||||
@ -5369,7 +5361,7 @@ int THD::binlog_write_table_map(TABLE *table, bool is_transactional,
|
||||
|
||||
/* Pre-conditions */
|
||||
DBUG_ASSERT(is_current_stmt_binlog_format_row());
|
||||
DBUG_ASSERT(IF_WSREP(WSREP_EMULATE_BINLOG(this), 0) || mysql_bin_log.is_open());
|
||||
DBUG_ASSERT(WSREP_EMULATE_BINLOG(this) || mysql_bin_log.is_open());
|
||||
DBUG_ASSERT(table->s->table_map_id != ULONG_MAX);
|
||||
|
||||
Table_map_log_event
|
||||
@ -5502,7 +5494,7 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
|
||||
bool is_transactional)
|
||||
{
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::flush_and_set_pending_rows_event(event)");
|
||||
DBUG_ASSERT(IF_WSREP(WSREP_EMULATE_BINLOG(thd),0) || mysql_bin_log.is_open());
|
||||
DBUG_ASSERT(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open());
|
||||
DBUG_PRINT("enter", ("event: 0x%lx", (long) event));
|
||||
|
||||
int error= 0;
|
||||
@ -5829,7 +5821,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
||||
could have changed since.
|
||||
*/
|
||||
/* applier and replayer can skip writing binlog events */
|
||||
if (IF_WSREP((WSREP_EMULATE_BINLOG(thd) && (thd->wsrep_exec_mode != REPL_RECV)) || is_open(), likely(is_open())))
|
||||
if ((WSREP_EMULATE_BINLOG(thd) &&
|
||||
IF_WSREP(thd->wsrep_exec_mode != REPL_RECV, 0)) || is_open())
|
||||
{
|
||||
my_off_t UNINIT_VAR(my_org_b_tell);
|
||||
#ifdef HAVE_REPLICATION
|
||||
@ -6168,7 +6161,6 @@ int MYSQL_BIN_LOG::rotate(bool force_rotate, bool* check_purge)
|
||||
int error= 0;
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::rotate");
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep_to_isolation)
|
||||
{
|
||||
DBUG_ASSERT(WSREP_ON);
|
||||
@ -6177,7 +6169,6 @@ int MYSQL_BIN_LOG::rotate(bool force_rotate, bool* check_purge)
|
||||
wsrep_to_isolation);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
//todo: fix the macro def and restore safe_mutex_assert_owner(&LOCK_log);
|
||||
*check_purge= false;
|
||||
@ -6724,10 +6715,8 @@ MYSQL_BIN_LOG::write_transaction_to_binlog(THD *thd,
|
||||
Ha_trx_info *ha_info;
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::write_transaction_to_binlog");
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep_emulate_bin_log)
|
||||
DBUG_RETURN(0);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
entry.thd= thd;
|
||||
entry.cache_mngr= cache_mngr;
|
||||
|
@ -10812,7 +10812,7 @@ check_table_map(rpl_group_info *rgi, RPL_TABLE_LIST *table_list)
|
||||
DBUG_ENTER("check_table_map");
|
||||
enum_tbl_map_status res= OK_TO_PROCESS;
|
||||
Relay_log_info *rli= rgi->rli;
|
||||
if ((rgi->thd->slave_thread /* filtering is for slave only */ ||
|
||||
if ((rgi->thd->slave_thread /* filtering is for slave only */ ||
|
||||
IF_WSREP((WSREP(rgi->thd) && rgi->thd->wsrep_applier), 0)) &&
|
||||
(!rli->mi->rpl_filter->db_ok(table_list->db) ||
|
||||
(rli->mi->rpl_filter->is_on() && !rli->mi->rpl_filter->tables_ok("", table_list))))
|
||||
|
@ -1939,11 +1939,10 @@ MDL_lock::can_grant_lock(enum_mdl_type type_arg,
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
}
|
||||
if ((ticket == NULL) && IF_WSREP(wsrep_can_grant, 1))
|
||||
if ((ticket == NULL) && wsrep_can_grant)
|
||||
can_grant= TRUE; /* Incompatible locks are our own. */
|
||||
}
|
||||
}
|
||||
#ifdef WITH_WSREP
|
||||
else
|
||||
{
|
||||
if (wsrep_thd_is_BF((void *)(requestor_ctx->get_thd()), false) &&
|
||||
@ -1955,7 +1954,6 @@ MDL_lock::can_grant_lock(enum_mdl_type type_arg,
|
||||
can_grant = true;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
return can_grant;
|
||||
}
|
||||
|
||||
@ -3310,7 +3308,6 @@ void MDL_context::set_transaction_duration_for_all_locks()
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
void MDL_context::release_explicit_locks()
|
||||
{
|
||||
@ -3318,6 +3315,7 @@ void MDL_context::release_explicit_locks()
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
void MDL_ticket::wsrep_report(bool debug)
|
||||
{
|
||||
if (debug)
|
||||
|
@ -793,9 +793,7 @@ public:
|
||||
|
||||
void release_statement_locks();
|
||||
void release_transactional_locks();
|
||||
#ifdef WITH_WSREP
|
||||
void release_explicit_locks();
|
||||
#endif
|
||||
void rollback_to_savepoint(const MDL_savepoint &mdl_savepoint);
|
||||
|
||||
MDL_context_owner *get_owner() { return m_owner; }
|
||||
|
196
sql/mysqld.cc
196
sql/mysqld.cc
@ -738,27 +738,6 @@ mysql_cond_t COND_server_started;
|
||||
int mysqld_server_started=0, mysqld_server_initialized= 0;
|
||||
File_parser_dummy_hook file_parser_dummy_hook;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
mysql_mutex_t LOCK_wsrep_ready;
|
||||
mysql_cond_t COND_wsrep_ready;
|
||||
mysql_mutex_t LOCK_wsrep_sst;
|
||||
mysql_cond_t COND_wsrep_sst;
|
||||
mysql_mutex_t LOCK_wsrep_sst_init;
|
||||
mysql_cond_t COND_wsrep_sst_init;
|
||||
mysql_mutex_t LOCK_wsrep_rollback;
|
||||
mysql_cond_t COND_wsrep_rollback;
|
||||
wsrep_aborting_thd_t wsrep_aborting_thd= NULL;
|
||||
mysql_mutex_t LOCK_wsrep_replaying;
|
||||
mysql_cond_t COND_wsrep_replaying;
|
||||
mysql_mutex_t LOCK_wsrep_slave_threads;
|
||||
mysql_mutex_t LOCK_wsrep_desync;
|
||||
int wsrep_replaying= 0;
|
||||
ulong wsrep_running_threads = 0; // # of currently running wsrep threads
|
||||
ulong my_bind_addr;
|
||||
const char *wsrep_binlog_format_names[]=
|
||||
{"MIXED", "STATEMENT", "ROW", "NONE", NullS};
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/* replication parameters, if master_host is not NULL, we are a slave */
|
||||
uint report_port= 0;
|
||||
ulong master_retry_count=0;
|
||||
@ -896,12 +875,6 @@ PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_xid_list,
|
||||
key_LOCK_error_messages, key_LOG_INFO_lock,
|
||||
key_LOCK_thread_count, key_LOCK_thread_cache,
|
||||
key_PARTITION_LOCK_auto_inc;
|
||||
#ifdef WITH_WSREP
|
||||
PSI_mutex_key key_LOCK_wsrep_rollback, key_LOCK_wsrep_thd,
|
||||
key_LOCK_wsrep_replaying, key_LOCK_wsrep_ready, key_LOCK_wsrep_sst,
|
||||
key_LOCK_wsrep_sst_thread, key_LOCK_wsrep_sst_init,
|
||||
key_LOCK_wsrep_slave_threads, key_LOCK_wsrep_desync;
|
||||
#endif
|
||||
PSI_mutex_key key_RELAYLOG_LOCK_index;
|
||||
PSI_mutex_key key_LOCK_slave_state, key_LOCK_binlog_state,
|
||||
key_LOCK_rpl_thread, key_LOCK_rpl_thread_pool, key_LOCK_parallel_entry;
|
||||
@ -976,18 +949,6 @@ static PSI_mutex_info all_server_mutexes[]=
|
||||
{ &key_LOCK_prepare_ordered, "LOCK_prepare_ordered", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_commit_ordered, "LOCK_commit_ordered", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOG_INFO_lock, "LOG_INFO::lock", 0},
|
||||
#ifdef WITH_WSREP
|
||||
{ &key_LOCK_wsrep_ready, "LOCK_wsrep_ready", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst, "LOCK_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst_thread, "wsrep_sst_thread", 0},
|
||||
{ &key_LOCK_wsrep_sst_init, "LOCK_wsrep_sst_init", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst, "LOCK_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_rollback, "LOCK_wsrep_rollback", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_thd, "THD::LOCK_wsrep_thd", 0},
|
||||
{ &key_LOCK_wsrep_replaying, "LOCK_wsrep_replaying", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_slave_threads, "LOCK_wsrep_slave_threads", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_desync, "LOCK_wsrep_desync", PSI_FLAG_GLOBAL},
|
||||
#endif
|
||||
{ &key_LOCK_thread_count, "LOCK_thread_count", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_thread_cache, "LOCK_thread_cache", PSI_FLAG_GLOBAL},
|
||||
{ &key_PARTITION_LOCK_auto_inc, "HA_DATA_PARTITION::LOCK_auto_inc", 0},
|
||||
@ -1034,11 +995,6 @@ PSI_cond_key key_BINLOG_COND_xid_list, key_BINLOG_update_cond,
|
||||
key_TABLE_SHARE_cond, key_user_level_lock_cond,
|
||||
key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache,
|
||||
key_BINLOG_COND_queue_busy;
|
||||
#ifdef WITH_WSREP
|
||||
PSI_cond_key key_COND_wsrep_rollback, key_COND_wsrep_thd,
|
||||
key_COND_wsrep_replaying, key_COND_wsrep_ready, key_COND_wsrep_sst,
|
||||
key_COND_wsrep_sst_init, key_COND_wsrep_sst_thread;
|
||||
#endif /* WITH_WSREP */
|
||||
PSI_cond_key key_RELAYLOG_update_cond, key_COND_wakeup_ready,
|
||||
key_COND_wait_commit;
|
||||
PSI_cond_key key_RELAYLOG_COND_queue_busy;
|
||||
@ -1088,15 +1044,6 @@ static PSI_cond_info all_server_conds[]=
|
||||
{ &key_user_level_lock_cond, "User_level_lock::cond", 0},
|
||||
{ &key_COND_thread_count, "COND_thread_count", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_thread_cache, "COND_thread_cache", PSI_FLAG_GLOBAL},
|
||||
#ifdef WITH_WSREP
|
||||
{ &key_COND_wsrep_ready, "COND_wsrep_ready", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst, "COND_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst_init, "COND_wsrep_sst_init", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst_thread, "wsrep_sst_thread", 0},
|
||||
{ &key_COND_wsrep_rollback, "COND_wsrep_rollback", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_thd, "THD::COND_wsrep_thd", 0},
|
||||
{ &key_COND_wsrep_replaying, "COND_wsrep_replaying", PSI_FLAG_GLOBAL},
|
||||
#endif
|
||||
{ &key_COND_flush_thread_cache, "COND_flush_thread_cache", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_rpl_thread, "COND_rpl_thread", 0},
|
||||
{ &key_COND_rpl_thread_queue, "COND_rpl_thread_queue", 0},
|
||||
@ -1945,17 +1892,13 @@ static void __cdecl kill_server(int sig_ptr)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_stop_replication(NULL);
|
||||
#endif
|
||||
|
||||
close_connections();
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (wsrep_inited == 1)
|
||||
wsrep_deinit(true);
|
||||
#endif
|
||||
|
||||
if (sig != MYSQL_KILL_SIGNAL &&
|
||||
sig != 0)
|
||||
@ -2062,10 +2005,9 @@ extern "C" void unireg_abort(int exit_code)
|
||||
*/
|
||||
wsrep_close_client_connections(FALSE);
|
||||
shutdown_in_progress= 1;
|
||||
THD *thd(0);
|
||||
wsrep->disconnect(wsrep);
|
||||
WSREP_INFO("Service disconnected.");
|
||||
wsrep_close_threads(thd); /* this won't close all threads */
|
||||
wsrep_close_threads(NULL); /* this won't close all threads */
|
||||
sleep(1); /* so give some time to exit for those which can */
|
||||
WSREP_INFO("Some threads may fail to exit.");
|
||||
|
||||
@ -2294,20 +2236,6 @@ static void clean_up_mutexes()
|
||||
mysql_cond_destroy(&COND_thread_count);
|
||||
mysql_cond_destroy(&COND_thread_cache);
|
||||
mysql_cond_destroy(&COND_flush_thread_cache);
|
||||
#ifdef WITH_WSREP
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_ready);
|
||||
(void) mysql_cond_destroy(&COND_wsrep_ready);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_sst);
|
||||
(void) mysql_cond_destroy(&COND_wsrep_sst);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_sst_init);
|
||||
(void) mysql_cond_destroy(&COND_wsrep_sst_init);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_rollback);
|
||||
(void) mysql_cond_destroy(&COND_wsrep_rollback);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_replaying);
|
||||
(void) mysql_cond_destroy(&COND_wsrep_replaying);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_slave_threads);
|
||||
(void) mysql_mutex_destroy(&LOCK_wsrep_desync);
|
||||
#endif
|
||||
mysql_mutex_destroy(&LOCK_server_started);
|
||||
mysql_cond_destroy(&COND_server_started);
|
||||
mysql_mutex_destroy(&LOCK_prepare_ordered);
|
||||
@ -2321,7 +2249,12 @@ static void clean_up_mutexes()
|
||||
** Init IP and UNIX socket
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
static void set_ports()
|
||||
{
|
||||
}
|
||||
|
||||
#else
|
||||
static void set_ports()
|
||||
{
|
||||
char *env;
|
||||
@ -2623,10 +2556,10 @@ static MYSQL_SOCKET activate_tcp_port(uint port)
|
||||
socket_errno);
|
||||
unireg_abort(1);
|
||||
}
|
||||
#if defined(WITH_WSREP) && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
|
||||
if (WSREP_ON)
|
||||
(void) fcntl(mysql_socket_getfd(ip_sock), F_SETFD, FD_CLOEXEC);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
#ifdef FD_CLOEXEC
|
||||
(void) fcntl(mysql_socket_getfd(ip_sock), F_SETFD, FD_CLOEXEC);
|
||||
#endif
|
||||
|
||||
DBUG_RETURN(ip_sock);
|
||||
}
|
||||
@ -2754,10 +2687,9 @@ static void network_init(void)
|
||||
if (mysql_socket_listen(unix_sock,(int) back_log) < 0)
|
||||
sql_print_warning("listen() on Unix socket failed with error %d",
|
||||
socket_errno);
|
||||
#if defined(WITH_WSREP) && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
|
||||
if (WSREP_ON)
|
||||
(void) fcntl(mysql_socket_getfd(unix_sock), F_SETFD, FD_CLOEXEC);
|
||||
#endif /* WITH_WSREP */
|
||||
#ifdef FD_CLOEXEC
|
||||
(void) fcntl(mysql_socket_getfd(unix_sock), F_SETFD, FD_CLOEXEC);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
DBUG_PRINT("info",("server started"));
|
||||
@ -3012,15 +2944,13 @@ static bool cache_thread()
|
||||
bool one_thread_per_connection_end(THD *thd, bool put_in_cache)
|
||||
{
|
||||
DBUG_ENTER("one_thread_per_connection_end");
|
||||
#ifdef WITH_WSREP
|
||||
const bool wsrep_applier(thd->wsrep_applier);
|
||||
#endif
|
||||
const bool wsrep_applier= IF_WSREP(thd->wsrep_applier, false);
|
||||
|
||||
unlink_thd(thd);
|
||||
/* Mark that current_thd is not valid anymore */
|
||||
set_current_thd(0);
|
||||
|
||||
if (put_in_cache && cache_thread() && IF_WSREP(!wsrep_applier, 1))
|
||||
if (put_in_cache && cache_thread() && !wsrep_applier)
|
||||
DBUG_RETURN(0); // Thread is reused
|
||||
|
||||
/*
|
||||
@ -4145,7 +4075,7 @@ static int init_common_variables()
|
||||
opt_log_basename= glob_hostname;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (0 == wsrep_node_name || 0 == wsrep_node_name[0])
|
||||
if (wsrep_node_name == 0 || wsrep_node_name[0] == 0)
|
||||
{
|
||||
my_free((void *)wsrep_node_name);
|
||||
wsrep_node_name= my_strdup(glob_hostname, MYF(MY_WME));
|
||||
@ -4616,28 +4546,6 @@ static int init_thread_environment()
|
||||
rpl_init_gtid_waiting();
|
||||
#endif
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
mysql_mutex_init(key_LOCK_wsrep_ready,
|
||||
&LOCK_wsrep_ready, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_ready, &COND_wsrep_ready, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_sst,
|
||||
&LOCK_wsrep_sst, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_sst, &COND_wsrep_sst, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_sst_init,
|
||||
&LOCK_wsrep_sst_init, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_sst_init, &COND_wsrep_sst_init, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_rollback,
|
||||
&LOCK_wsrep_rollback, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_rollback, &COND_wsrep_rollback, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_replaying,
|
||||
&LOCK_wsrep_replaying, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_replaying, &COND_wsrep_replaying, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_slave_threads,
|
||||
&LOCK_wsrep_slave_threads, MY_MUTEX_INIT_FAST);
|
||||
mysql_mutex_init(key_LOCK_wsrep_desync,
|
||||
&LOCK_wsrep_desync, MY_MUTEX_INIT_FAST);
|
||||
#endif
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
@ -4935,10 +4843,10 @@ static int init_server_components()
|
||||
/* need to configure logging before initializing storage engines */
|
||||
if (!opt_bin_log_used)
|
||||
{
|
||||
if (IF_WSREP(!WSREP_ON,1) && opt_log_slave_updates)
|
||||
if (!WSREP_ON && opt_log_slave_updates)
|
||||
sql_print_warning("You need to use --log-bin to make "
|
||||
"--log-slave-updates work.");
|
||||
if (IF_WSREP(!WSREP_ON, 1) && binlog_format_used)
|
||||
if (!WSREP_ON && binlog_format_used)
|
||||
sql_print_warning("You need to use --log-bin to make "
|
||||
"--binlog-format work.");
|
||||
}
|
||||
@ -5010,10 +4918,9 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
opt_log_basename, ln);
|
||||
}
|
||||
if (ln == buf)
|
||||
{
|
||||
opt_bin_logname= my_once_strdup(buf, MYF(MY_WME));
|
||||
}
|
||||
#ifdef WITH_WSREP /* WSREP BEFORE SE */
|
||||
}
|
||||
|
||||
/*
|
||||
Wsrep initialization must happen at this point, because:
|
||||
- opt_bin_logname must be known when starting replication
|
||||
@ -5021,19 +4928,19 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
- SST may modify binlog index file, so it must be opened
|
||||
after SST has happened
|
||||
*/
|
||||
}
|
||||
if (WSREP_ON && !wsrep_recovery)
|
||||
if (WSREP_ON && !wsrep_recovery) /* WSREP BEFORE SE */
|
||||
{
|
||||
if (opt_bootstrap) // bootsrap option given - disable wsrep functionality
|
||||
{
|
||||
wsrep_provider_init(WSREP_NONE);
|
||||
if (wsrep_init()) unireg_abort(1);
|
||||
if (wsrep_init())
|
||||
unireg_abort(1);
|
||||
}
|
||||
else // full wsrep initialization
|
||||
{
|
||||
// add basedir/bin to PATH to resolve wsrep script names
|
||||
char* const tmp_path((char*)alloca(strlen(mysql_home) +
|
||||
strlen("/bin") + 1));
|
||||
char* const tmp_path= (char*)my_alloca(strlen(mysql_home) +
|
||||
strlen("/bin") + 1);
|
||||
if (tmp_path)
|
||||
{
|
||||
strcpy(tmp_path, mysql_home);
|
||||
@ -5044,6 +4951,7 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
{
|
||||
WSREP_ERROR("Could not append %s/bin to PATH", mysql_home);
|
||||
}
|
||||
my_afree(tmp_path);
|
||||
|
||||
if (wsrep_before_SE())
|
||||
{
|
||||
@ -5053,27 +4961,14 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (opt_bin_log)
|
||||
{
|
||||
/*
|
||||
Variable ln is not defined at this scope. We use opt_bin_logname instead.
|
||||
It should be the same as ln since
|
||||
- mysql_bin_log.generate_name() returns first argument if new log name
|
||||
is not generated
|
||||
- if new log name is generated, return value is assigned to ln and copied
|
||||
to opt_bin_logname above
|
||||
*/
|
||||
if (mysql_bin_log.open_index_file(opt_binlog_index_name, opt_bin_logname,
|
||||
TRUE))
|
||||
{
|
||||
unireg_abort(1);
|
||||
}
|
||||
#else
|
||||
if (mysql_bin_log.open_index_file(opt_binlog_index_name, ln, TRUE))
|
||||
{
|
||||
unireg_abort(1);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
/* call ha_init_key_cache() on all key caches to init them */
|
||||
@ -5206,7 +5101,6 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
|
||||
tc_log= get_tc_log_implementation();
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON && tc_log == &tc_log_mmap)
|
||||
tc_log= &tc_log_dummy;
|
||||
|
||||
@ -5215,7 +5109,6 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
||||
(tc_log == &tc_log_mmap) ? "mmap" :
|
||||
(tc_log == &tc_log_dummy) ? "dummy" : "unknown"
|
||||
);
|
||||
#endif
|
||||
|
||||
if (tc_log->open(opt_bin_log ? opt_bin_logname : opt_tc_log_file))
|
||||
{
|
||||
@ -5474,10 +5367,9 @@ int mysqld_main(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
if (WSREP_ON)
|
||||
wsrep_filter_new_cluster (&argc, argv);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
orig_argc= argc;
|
||||
orig_argv= argv;
|
||||
@ -5694,14 +5586,12 @@ int mysqld_main(int argc, char **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WITH_WSREP /* WSREP AFTER SE */
|
||||
if (WSREP_ON && wsrep_recovery)
|
||||
{
|
||||
select_thread_in_use= 0;
|
||||
wsrep_recover();
|
||||
unireg_abort(0);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/*
|
||||
init signals & alarm
|
||||
@ -5751,7 +5641,6 @@ int mysqld_main(int argc, char **argv)
|
||||
if (Events::init(opt_noacl || opt_bootstrap))
|
||||
unireg_abort(1);
|
||||
|
||||
#ifdef WITH_WSREP /* WSREP AFTER SE */
|
||||
if (WSREP_ON)
|
||||
{
|
||||
if (opt_bootstrap)
|
||||
@ -5778,7 +5667,7 @@ int mysqld_main(int argc, char **argv)
|
||||
wsrep_create_appliers(wsrep_slave_threads - 1);
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (opt_bootstrap)
|
||||
{
|
||||
select_thread_in_use= 0; // Allow 'kill' to work
|
||||
@ -6517,9 +6406,9 @@ void handle_connections_sockets()
|
||||
sleep(1); // Give other threads some time
|
||||
continue;
|
||||
}
|
||||
#if defined(WITH_WSREP) && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
|
||||
#ifdef FD_CLOEXEC
|
||||
(void) fcntl(mysql_socket_getfd(new_sock), F_SETFD, FD_CLOEXEC);
|
||||
#endif /* WITH_WSREP */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBWRAP
|
||||
{
|
||||
@ -8292,21 +8181,6 @@ SHOW_VAR status_vars[]= {
|
||||
{"Uptime", (char*) &show_starttime, SHOW_SIMPLE_FUNC},
|
||||
#ifdef ENABLED_PROFILING
|
||||
{"Uptime_since_flush_status",(char*) &show_flushstatustime, SHOW_SIMPLE_FUNC},
|
||||
#endif
|
||||
#ifdef WITH_WSREP
|
||||
{"wsrep_connected", (char*) &wsrep_connected, SHOW_BOOL},
|
||||
{"wsrep_ready", (char*) &wsrep_ready, SHOW_BOOL},
|
||||
{"wsrep_cluster_state_uuid", (char*) &wsrep_cluster_state_uuid,SHOW_CHAR_PTR},
|
||||
{"wsrep_cluster_conf_id", (char*) &wsrep_cluster_conf_id, SHOW_LONGLONG},
|
||||
{"wsrep_cluster_status", (char*) &wsrep_cluster_status, SHOW_CHAR_PTR},
|
||||
{"wsrep_cluster_size", (char*) &wsrep_cluster_size, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep_local_index", (char*) &wsrep_local_index, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep_local_bf_aborts", (char*) &wsrep_show_bf_aborts, SHOW_SIMPLE_FUNC},
|
||||
{"wsrep_provider_name", (char*) &wsrep_provider_name, SHOW_CHAR_PTR},
|
||||
{"wsrep_provider_version", (char*) &wsrep_provider_version, SHOW_CHAR_PTR},
|
||||
{"wsrep_provider_vendor", (char*) &wsrep_provider_vendor, SHOW_CHAR_PTR},
|
||||
{"wsrep_thread_count", (char*) &wsrep_running_threads, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep", (char*) &wsrep_show_status, SHOW_FUNC},
|
||||
#endif
|
||||
{NullS, NullS, SHOW_LONG}
|
||||
};
|
||||
@ -8651,10 +8525,10 @@ static int mysql_init_variables(void)
|
||||
tmpenv = DEFAULT_MYSQL_HOME;
|
||||
strmake_buf(mysql_home, tmpenv);
|
||||
#endif
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
if (WSREP_ON && wsrep_init_vars())
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -8902,14 +8776,12 @@ mysqld_get_one_option(int optid,
|
||||
case OPT_LOWER_CASE_TABLE_NAMES:
|
||||
lower_case_table_names_used= 1;
|
||||
break;
|
||||
#ifdef WITH_WSREP
|
||||
case OPT_WSREP_START_POSITION:
|
||||
wsrep_start_position_init (argument);
|
||||
break;
|
||||
case OPT_WSREP_SST_AUTH:
|
||||
wsrep_sst_auth_init (argument);
|
||||
break;
|
||||
#endif
|
||||
#if defined(ENABLED_DEBUG_SYNC)
|
||||
case OPT_DEBUG_SYNC_TIMEOUT:
|
||||
/*
|
||||
|
12
sql/mysqld.h
12
sql/mysqld.h
@ -242,11 +242,6 @@ extern PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active,
|
||||
key_LOCK_pool, key_LOCK_pending_checkpoint;
|
||||
#endif /* HAVE_MMAP */
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
extern PSI_mutex_key key_LOCK_wsrep_thd;
|
||||
extern PSI_cond_key key_COND_wsrep_thd;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
extern PSI_mutex_key key_LOCK_des_key_file;
|
||||
#endif
|
||||
@ -604,15 +599,8 @@ enum options_mysqld
|
||||
OPT_WANT_CORE,
|
||||
OPT_MYSQL_COMPATIBILITY,
|
||||
OPT_MYSQL_TO_BE_IMPLEMENTED,
|
||||
#ifdef WITH_WSREP
|
||||
OPT_WSREP_PROVIDER,
|
||||
OPT_WSREP_PROVIDER_OPTIONS,
|
||||
OPT_WSREP_CLUSTER_ADDRESS,
|
||||
OPT_WSREP_START_POSITION,
|
||||
OPT_WSREP_SST_AUTH,
|
||||
OPT_WSREP_RECOVER,
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
OPT_which_is_always_the_last
|
||||
};
|
||||
#endif
|
||||
|
@ -489,7 +489,7 @@ static uchar *net_store_length_fast(uchar *packet, uint length)
|
||||
void Protocol::end_statement()
|
||||
{
|
||||
/* sanity check*/
|
||||
DBUG_ASSERT_IF_WSREP(!(WSREP_ON && WSREP(thd) && thd->wsrep_conflict_state == REPLAYING));
|
||||
DBUG_ASSERT_IF_WSREP(!(WSREP(thd) && thd->wsrep_conflict_state == REPLAYING));
|
||||
DBUG_ENTER("Protocol::end_statement");
|
||||
DBUG_ASSERT(! thd->get_stmt_da()->is_sent());
|
||||
bool error= FALSE;
|
||||
|
@ -315,7 +315,6 @@ unpack_row(rpl_group_info *rgi,
|
||||
(int) (pack_ptr - old_pack_ptr)));
|
||||
if (!pack_ptr)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
{
|
||||
/*
|
||||
@ -331,7 +330,6 @@ unpack_row(rpl_group_info *rgi,
|
||||
(table_found) ? "found" : "not found", (ulong)row_end
|
||||
);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
rgi->rli->report(ERROR_LEVEL, ER_SLAVE_CORRUPT_EVENT,
|
||||
"Could not read field '%s' of table '%s.%s'",
|
||||
|
@ -556,11 +556,7 @@ int mysql_del_sys_var_chain(sys_var *first)
|
||||
|
||||
static int show_cmp(SHOW_VAR *a, SHOW_VAR *b)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
return my_strcasecmp(system_charset_info, a->name, b->name);
|
||||
#else
|
||||
return strcmp(a->name, b->name);
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
|
||||
|
@ -249,9 +249,6 @@ public:
|
||||
int check(THD *thd);
|
||||
int update(THD *thd);
|
||||
int light_check(THD *thd);
|
||||
#ifdef WITH_WSREP
|
||||
int wsrep_store_variable(THD *thd);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@ -358,9 +355,6 @@ extern sys_var *Sys_autocommit_ptr;
|
||||
|
||||
CHARSET_INFO *get_old_charset_by_name(const char *old_name);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
int sql_set_wsrep_variables(THD *thd, List<set_var_base> *var_list);
|
||||
#endif
|
||||
int sys_var_init();
|
||||
int sys_var_add_options(DYNAMIC_ARRAY *long_options, int parse_flags);
|
||||
void sys_var_end(void);
|
||||
|
@ -4621,12 +4621,10 @@ log '%s' at position %s, relay log '%s' position: %s%s", RPL_LOG_NAME,
|
||||
if (!sql_slave_killed(serial_rgi))
|
||||
{
|
||||
slave_output_error_info(rli, thd);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON && rli->last_error().number == ER_UNKNOWN_COM_ERROR)
|
||||
{
|
||||
wsrep_node_dropped= TRUE;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
|
21
sql/sp.cc
21
sql/sp.cc
@ -32,19 +32,6 @@
|
||||
|
||||
#include <my_user.h>
|
||||
|
||||
bool
|
||||
create_string(THD *thd, String *buf,
|
||||
stored_procedure_type sp_type,
|
||||
const char *db, ulong dblen,
|
||||
const char *name, ulong namelen,
|
||||
const char *params, ulong paramslen,
|
||||
const char *returns, ulong returnslen,
|
||||
const char *body, ulong bodylen,
|
||||
st_sp_chistics *chistics,
|
||||
const LEX_STRING *definer_user,
|
||||
const LEX_STRING *definer_host,
|
||||
ulonglong sql_mode);
|
||||
|
||||
static int
|
||||
db_load_routine(THD *thd, stored_procedure_type type, sp_name *name,
|
||||
sp_head **sphp,
|
||||
@ -844,7 +831,7 @@ db_load_routine(THD *thd, stored_procedure_type type,
|
||||
definition for SHOW CREATE PROCEDURE later.
|
||||
*/
|
||||
|
||||
if (!create_string(thd, &defstr,
|
||||
if (!show_create_sp(thd, &defstr,
|
||||
type,
|
||||
NULL, 0,
|
||||
name->m_name.str, name->m_name.length,
|
||||
@ -1186,7 +1173,7 @@ sp_create_routine(THD *thd, stored_procedure_type type, sp_head *sp)
|
||||
String log_query;
|
||||
log_query.set_charset(system_charset_info);
|
||||
|
||||
if (!create_string(thd, &log_query,
|
||||
if (!show_create_sp(thd, &log_query,
|
||||
sp->m_type,
|
||||
(sp->m_explicit_name ? sp->m_db.str : NULL),
|
||||
(sp->m_explicit_name ? sp->m_db.length : 0),
|
||||
@ -2127,7 +2114,7 @@ int sp_cache_routine(THD *thd, enum stored_procedure_type type, sp_name *name,
|
||||
Returns TRUE on success, FALSE on (alloc) failure.
|
||||
*/
|
||||
bool
|
||||
create_string(THD *thd, String *buf,
|
||||
show_create_sp(THD *thd, String *buf,
|
||||
stored_procedure_type type,
|
||||
const char *db, ulong dblen,
|
||||
const char *name, ulong namelen,
|
||||
@ -2253,7 +2240,7 @@ sp_load_for_information_schema(THD *thd, TABLE *proc_table, String *db,
|
||||
sp_body= (type == TYPE_ENUM_FUNCTION ? "RETURN NULL" : "BEGIN END");
|
||||
bzero((char*) &sp_chistics, sizeof(sp_chistics));
|
||||
defstr.set_charset(creation_ctx->get_client_cs());
|
||||
if (!create_string(thd, &defstr, type,
|
||||
if (!show_create_sp(thd, &defstr, type,
|
||||
sp_db_str.str, sp_db_str.length,
|
||||
sp_name_obj.m_name.str, sp_name_obj.m_name.length,
|
||||
params, strlen(params),
|
||||
|
2
sql/sp.h
2
sql/sp.h
@ -218,7 +218,7 @@ void sp_returns_type(THD *thd,
|
||||
String &result,
|
||||
sp_head *sp);
|
||||
|
||||
bool create_string(THD *thd, String *buf,
|
||||
bool show_create_sp(THD *thd, String *buf,
|
||||
stored_procedure_type type,
|
||||
const char *db, ulong dblen,
|
||||
const char *name, ulong namelen,
|
||||
|
@ -2657,9 +2657,7 @@ bool change_password(THD *thd, const char *host, const char *user,
|
||||
if (WSREP(thd) && !thd->wsrep_applier)
|
||||
{
|
||||
query_length= sprintf(buff, "SET PASSWORD FOR '%-.120s'@'%-.120s'='%-.120s'",
|
||||
user ? user : "",
|
||||
host ? host : "",
|
||||
new_password);
|
||||
safe_str(user), safe_str(host), new_password);
|
||||
thd->set_query_inner(buff, query_length, system_charset_info);
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, (char*)"user", NULL);
|
||||
|
@ -9019,14 +9019,12 @@ bool mysql_notify_thread_having_shared_lock(THD *thd, THD *in_use,
|
||||
if (!thd_table->needs_reopen())
|
||||
{
|
||||
signalled|= mysql_lock_abort_for_thread(thd, thd_table);
|
||||
#ifdef WITH_WSREP
|
||||
if (thd && WSREP(thd) && wsrep_thd_is_BF((void *)thd, true))
|
||||
{
|
||||
WSREP_DEBUG("remove_table_from_cache: %llu",
|
||||
(unsigned long long) thd->real_id);
|
||||
wsrep_abort_thd((void *)thd, (void *)in_use, FALSE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
mysql_mutex_unlock(&in_use->LOCK_thd_data);
|
||||
|
@ -27,7 +27,7 @@ builtin_maria_plugin
|
||||
@mysql_mandatory_plugins@ @mysql_optional_plugins@
|
||||
builtin_maria_binlog_plugin,
|
||||
#ifdef WITH_WSREP
|
||||
builtin_wsrep_plugin@mysql_plugin_defs@,
|
||||
builtin_wsrep_plugin,
|
||||
#endif /* WITH_WSREP */
|
||||
builtin_maria_mysql_password_plugin;
|
||||
|
||||
@ -40,7 +40,7 @@ struct st_maria_plugin *mysql_mandatory_plugins[]=
|
||||
{
|
||||
builtin_maria_binlog_plugin, builtin_maria_mysql_password_plugin,
|
||||
#ifdef WITH_WSREP
|
||||
builtin_wsrep_plugin@mysql_plugin_defs@,
|
||||
builtin_wsrep_plugin,
|
||||
#endif /* WITH_WSREP */
|
||||
@mysql_mandatory_plugins@ 0
|
||||
};
|
||||
|
@ -861,7 +861,7 @@ bool Drop_table_error_handler::handle_condition(THD *thd,
|
||||
}
|
||||
|
||||
|
||||
THD::THD(bool is_applier)
|
||||
THD::THD(bool is_wsrep_applier)
|
||||
:Statement(&main_lex, &main_mem_root, STMT_CONVENTIONAL_EXECUTION,
|
||||
/* statement id */ 0),
|
||||
rli_fake(0), rgi_fake(0), rgi_slave(NULL),
|
||||
@ -892,13 +892,12 @@ THD::THD(bool is_applier)
|
||||
derived_tables_processing(FALSE),
|
||||
spcont(NULL),
|
||||
#ifdef WITH_WSREP
|
||||
wsrep_applier(is_applier),
|
||||
wsrep_applier(is_wsrep_applier),
|
||||
wsrep_applier_closing(false),
|
||||
wsrep_client_thread(false),
|
||||
wsrep_apply_toi(false),
|
||||
wsrep_po_handle(WSREP_PO_INITIALIZER),
|
||||
wsrep_po_cnt(0),
|
||||
// wsrep_po_in_trans(false),
|
||||
wsrep_apply_format(0),
|
||||
#endif
|
||||
m_parser_state(NULL),
|
||||
@ -1435,15 +1434,8 @@ void THD::init(void)
|
||||
|
||||
wsrep_TOI_pre_query = NULL;
|
||||
wsrep_TOI_pre_query_len = 0;
|
||||
|
||||
/*
|
||||
@@wsrep_causal_reads is now being handled via wsrep_sync_wait, update it
|
||||
appropriately.
|
||||
*/
|
||||
if (variables.wsrep_causal_reads)
|
||||
variables.wsrep_sync_wait|= WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
|
||||
#endif
|
||||
|
||||
if (variables.sql_log_bin)
|
||||
variables.option_bits|= OPTION_BIN_LOG;
|
||||
else
|
||||
@ -1958,14 +1950,12 @@ bool THD::notify_shared_lock(MDL_context_owner *ctx_in_use,
|
||||
if (!thd_table->needs_reopen())
|
||||
{
|
||||
signalled|= mysql_lock_abort_for_thread(this, thd_table);
|
||||
#if WITH_WSREP
|
||||
if (this && WSREP(this) && wsrep_thd_is_BF((void *)this, FALSE))
|
||||
{
|
||||
WSREP_DEBUG("remove_table_from_cache: %llu",
|
||||
(unsigned long long) this->real_id);
|
||||
wsrep_abort_thd((void *)this, (void *)in_use, FALSE);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
}
|
||||
mysql_mutex_unlock(&in_use->LOCK_thd_data);
|
||||
@ -4328,8 +4318,7 @@ extern "C" int thd_non_transactional_update(const MYSQL_THD thd)
|
||||
|
||||
extern "C" int thd_binlog_format(const MYSQL_THD thd)
|
||||
{
|
||||
if (IF_WSREP(((WSREP(thd) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()) &&
|
||||
if (((WSREP(thd) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()) &&
|
||||
thd->variables.option_bits & OPTION_BIN_LOG)
|
||||
return (int) WSREP_FORMAT(thd->variables.binlog_format);
|
||||
else
|
||||
@ -5671,8 +5660,7 @@ int THD::binlog_write_row(TABLE* table, bool is_trans,
|
||||
{
|
||||
|
||||
DBUG_ASSERT(is_current_stmt_binlog_format_row() &&
|
||||
IF_WSREP(((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()));
|
||||
((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()));
|
||||
/*
|
||||
Pack records into format for transfer. We are allocating more
|
||||
memory than needed, but that doesn't matter.
|
||||
@ -5706,8 +5694,7 @@ int THD::binlog_update_row(TABLE* table, bool is_trans,
|
||||
const uchar *after_record)
|
||||
{
|
||||
DBUG_ASSERT(is_current_stmt_binlog_format_row() &&
|
||||
IF_WSREP(((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()));
|
||||
((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()));
|
||||
|
||||
size_t const before_maxlen = max_row_length(table, before_record);
|
||||
size_t const after_maxlen = max_row_length(table, after_record);
|
||||
@ -5757,8 +5744,7 @@ int THD::binlog_delete_row(TABLE* table, bool is_trans,
|
||||
uchar const *record)
|
||||
{
|
||||
DBUG_ASSERT(is_current_stmt_binlog_format_row() &&
|
||||
IF_WSREP(((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()));
|
||||
((WSREP(this) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()));
|
||||
|
||||
/*
|
||||
Pack records into format for transfer. We are allocating more
|
||||
@ -5793,8 +5779,7 @@ int THD::binlog_remove_pending_rows_event(bool clear_maps,
|
||||
{
|
||||
DBUG_ENTER("THD::binlog_remove_pending_rows_event");
|
||||
|
||||
if(IF_WSREP(!(WSREP_EMULATE_BINLOG(this) || mysql_bin_log.is_open()),
|
||||
!mysql_bin_log.is_open()))
|
||||
if(!WSREP_EMULATE_BINLOG(this) && !mysql_bin_log.is_open())
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/* Ensure that all events in a GTID group are in the same cache */
|
||||
@ -5817,8 +5802,7 @@ int THD::binlog_flush_pending_rows_event(bool stmt_end, bool is_transactional)
|
||||
mode: it might be the case that we left row-based mode before
|
||||
flushing anything (e.g., if we have explicitly locked tables).
|
||||
*/
|
||||
if(IF_WSREP(!(WSREP_EMULATE_BINLOG(this) || mysql_bin_log.is_open()),
|
||||
!mysql_bin_log.is_open()))
|
||||
if(!WSREP_EMULATE_BINLOG(this) && !mysql_bin_log.is_open())
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/* Ensure that all events in a GTID group are in the same cache */
|
||||
@ -6072,8 +6056,7 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype, char const *query_arg,
|
||||
show_query_type(qtype), (int) query_len, query_arg));
|
||||
|
||||
DBUG_ASSERT(query_arg &&
|
||||
IF_WSREP((WSREP_EMULATE_BINLOG(this) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()));
|
||||
(WSREP_EMULATE_BINLOG(this) || mysql_bin_log.is_open()));
|
||||
|
||||
/* If this is withing a BEGIN ... COMMIT group, don't log it */
|
||||
if (variables.option_bits & OPTION_GTID_BEGIN)
|
||||
|
@ -2084,7 +2084,7 @@ public:
|
||||
int is_current_stmt_binlog_format_row() const {
|
||||
DBUG_ASSERT(current_stmt_binlog_format == BINLOG_FORMAT_STMT ||
|
||||
current_stmt_binlog_format == BINLOG_FORMAT_ROW);
|
||||
return (WSREP_FORMAT((ulong)current_stmt_binlog_format) == BINLOG_FORMAT_ROW);
|
||||
return WSREP_FORMAT(current_stmt_binlog_format) == BINLOG_FORMAT_ROW;
|
||||
}
|
||||
|
||||
enum binlog_filter_state
|
||||
@ -2807,7 +2807,7 @@ public:
|
||||
/* Debug Sync facility. See debug_sync.cc. */
|
||||
struct st_debug_sync_control *debug_sync_control;
|
||||
#endif /* defined(ENABLED_DEBUG_SYNC) */
|
||||
THD(bool is_applier= false);
|
||||
THD(bool is_wsrep_applier= false);
|
||||
|
||||
~THD();
|
||||
|
||||
|
@ -646,8 +646,7 @@ cleanup:
|
||||
/* See similar binlogging code in sql_update.cc, for comments */
|
||||
if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||
{
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
if (error < 0)
|
||||
@ -1114,8 +1113,7 @@ void multi_delete::abort_result_set()
|
||||
/*
|
||||
there is only side effects; to binlog with the error
|
||||
*/
|
||||
if (IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= query_error_code(thd, thd->killed == NOT_KILLED);
|
||||
/* possible error of writing binary log is ignored deliberately */
|
||||
@ -1291,8 +1289,7 @@ bool multi_delete::send_eof()
|
||||
}
|
||||
if ((local_error == 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||
{
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
if (local_error == 0)
|
||||
|
@ -1014,8 +1014,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
||||
thd->transaction.stmt.modified_non_trans_table ||
|
||||
was_insert_delayed)
|
||||
{
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
if (error <= 0)
|
||||
@ -3197,12 +3196,10 @@ bool Delayed_insert::handle_inserts(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP((&thd)))
|
||||
thd_proc_info(&thd, "insert done");
|
||||
else
|
||||
#endif /* WITH_WSREP */
|
||||
thd_proc_info(&thd, 0);
|
||||
thd_proc_info(&thd, 0);
|
||||
mysql_mutex_unlock(&mutex);
|
||||
|
||||
/*
|
||||
@ -3687,9 +3684,8 @@ bool select_insert::send_eof()
|
||||
events are in the transaction cache and will be written when
|
||||
ha_autocommit_or_rollback() is issued below.
|
||||
*/
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()) &&
|
||||
(!error || thd->transaction.stmt.modified_non_trans_table))
|
||||
if ((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()) &&
|
||||
(!error || thd->transaction.stmt.modified_non_trans_table))
|
||||
{
|
||||
int errcode= 0;
|
||||
if (!error)
|
||||
@ -3773,8 +3769,7 @@ void select_insert::abort_result_set() {
|
||||
if (!can_rollback_data())
|
||||
thd->transaction.all.modified_non_trans_table= TRUE;
|
||||
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= query_error_code(thd, thd->killed == NOT_KILLED);
|
||||
/* error of writing binary log is ignored */
|
||||
@ -4182,8 +4177,7 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
|
||||
create_info->table_was_deleted);
|
||||
DBUG_ASSERT(result == 0); /* store_create_info() always return 0 */
|
||||
|
||||
if(IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= query_error_code(thd, thd->killed == NOT_KILLED);
|
||||
result= thd->binlog_query(THD::STMT_QUERY_TYPE,
|
||||
@ -4194,7 +4188,7 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
|
||||
errcode);
|
||||
}
|
||||
|
||||
IF_WSREP(ha_fake_trx_id(thd), );
|
||||
ha_fake_trx_id(thd);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
194
sql/sql_parse.cc
194
sql/sql_parse.cc
@ -106,10 +106,8 @@
|
||||
#include "wsrep_mysqld.h"
|
||||
#include "wsrep_thd.h"
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
||||
Parser_state *parser_state);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/**
|
||||
@defgroup Runtime_Environment Runtime Environment
|
||||
@ -875,6 +873,22 @@ void cleanup_items(Item *item)
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
static bool wsrep_node_is_ready(THD *thd)
|
||||
{
|
||||
if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready)
|
||||
{
|
||||
my_message(ER_UNKNOWN_COM_ERROR,
|
||||
"WSREP has not yet prepared node for application use",
|
||||
MYF(0));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
|
||||
/**
|
||||
@ -1055,15 +1069,13 @@ bool do_command(THD *thd)
|
||||
vio_description(net->vio), command,
|
||||
command_name[command].str));
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
/*
|
||||
* bail out if DB snapshot has not been installed. We however,
|
||||
* allow queries "SET" and "SHOW", they are trapped later in execute_command
|
||||
*/
|
||||
if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready &&
|
||||
command != COM_QUERY &&
|
||||
if (command != COM_QUERY &&
|
||||
command != COM_PING &&
|
||||
command != COM_QUIT &&
|
||||
command != COM_PROCESS_INFO &&
|
||||
@ -1073,17 +1085,14 @@ bool do_command(THD *thd)
|
||||
command != COM_SLEEP &&
|
||||
command != COM_STATISTICS &&
|
||||
command != COM_TIME &&
|
||||
command != COM_END
|
||||
) {
|
||||
my_message(ER_UNKNOWN_COM_ERROR,
|
||||
"WSREP has not yet prepared node for application use",
|
||||
MYF(0));
|
||||
command != COM_END &&
|
||||
!wsrep_node_is_ready(thd))
|
||||
{
|
||||
thd->protocol->end_statement();
|
||||
return_value= FALSE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
/* Restore read timeout value */
|
||||
my_net_set_read_timeout(net, thd->variables.net_read_timeout);
|
||||
|
||||
@ -1143,7 +1152,7 @@ out:
|
||||
@retval FALSE The statement isn't updating any relevant tables.
|
||||
*/
|
||||
|
||||
my_bool deny_updates_if_read_only_option(THD *thd,
|
||||
static my_bool deny_updates_if_read_only_option(THD *thd,
|
||||
TABLE_LIST *all_tables)
|
||||
{
|
||||
DBUG_ENTER("deny_updates_if_read_only_option");
|
||||
@ -1224,9 +1233,12 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
{
|
||||
NET *net= &thd->net;
|
||||
bool error= 0;
|
||||
bool do_end_of_statement= true;
|
||||
DBUG_ENTER("dispatch_command");
|
||||
DBUG_PRINT("info", ("command: %d", command));
|
||||
|
||||
inc_thread_running();
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
@ -1254,11 +1266,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
thd->mysys_var->abort = 0;
|
||||
thd->wsrep_conflict_state = NO_CONFLICT;
|
||||
thd->wsrep_retry_counter = 0;
|
||||
/*
|
||||
Increment threads running to compensate dec_thread_running() called
|
||||
after dispatch_end label.
|
||||
*/
|
||||
inc_thread_running();
|
||||
goto dispatch_end;
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
@ -1302,7 +1309,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
*/
|
||||
thd->set_query_id(get_query_id());
|
||||
}
|
||||
inc_thread_running();
|
||||
|
||||
if (!(server_command_flags[command] & CF_SKIP_QUESTIONS))
|
||||
statistic_increment(thd->status_var.questions, &LOCK_status);
|
||||
@ -1460,11 +1466,9 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
if (parser_state.init(thd, thd->query(), thd->query_length()))
|
||||
break;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_mysql_parse(thd, thd->query(), thd->query_length(), &parser_state);
|
||||
else
|
||||
#endif /* WITH_WSREP */
|
||||
mysql_parse(thd, thd->query(), thd->query_length(), &parser_state);
|
||||
|
||||
while (!thd->killed && (parser_state.m_lip.found_semicolon != NULL) &&
|
||||
@ -1540,17 +1544,15 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
*/
|
||||
statistic_increment(thd->status_var.questions, &LOCK_status);
|
||||
|
||||
if(IF_WSREP(!WSREP(thd), 1))
|
||||
if(!WSREP(thd))
|
||||
thd->set_time(); /* Reset the query start time. */
|
||||
|
||||
parser_state.reset(beginning_of_next_stmt, length);
|
||||
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_mysql_parse(thd, beginning_of_next_stmt, length, &parser_state);
|
||||
else
|
||||
#endif /* WITH_WSREP */
|
||||
mysql_parse(thd, beginning_of_next_stmt, length, &parser_state);
|
||||
|
||||
}
|
||||
@ -1889,6 +1891,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0));
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
dispatch_end:
|
||||
|
||||
@ -1896,21 +1899,16 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
{
|
||||
/* wsrep BF abort in query exec phase */
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
if ((thd->wsrep_conflict_state != REPLAYING) &&
|
||||
(thd->wsrep_conflict_state != RETRY_AUTOCOMMIT))
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
thd->update_server_status();
|
||||
thd->protocol->end_statement();
|
||||
query_cache_end_of_result(thd);
|
||||
}
|
||||
else
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
}
|
||||
do_end_of_statement= thd->wsrep_conflict_state != REPLAYING &&
|
||||
thd->wsrep_conflict_state != RETRY_AUTOCOMMIT;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
}
|
||||
else
|
||||
do_end_of_statement= true;
|
||||
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (do_end_of_statement)
|
||||
{
|
||||
DBUG_ASSERT(thd->derived_tables == NULL &&
|
||||
(thd->open_tables == NULL ||
|
||||
@ -2601,15 +2599,10 @@ mysql_execute_command(THD *thd)
|
||||
* bail out if DB snapshot has not been installed. We however,
|
||||
* allow SET and SHOW queries
|
||||
*/
|
||||
if (thd->variables.wsrep_on && !thd->wsrep_applier && !wsrep_ready &&
|
||||
lex->sql_command != SQLCOM_SET_OPTION &&
|
||||
!wsrep_is_show_query(lex->sql_command))
|
||||
{
|
||||
my_message(ER_UNKNOWN_COM_ERROR,
|
||||
"WSREP has not yet prepared node for application use",
|
||||
MYF(0));
|
||||
if (lex->sql_command != SQLCOM_SET_OPTION &&
|
||||
!wsrep_is_show_query(lex->sql_command) &&
|
||||
!wsrep_node_is_ready(thd))
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
status_var_increment(thd->status_var.com_stat[lex->sql_command]);
|
||||
@ -2652,14 +2645,14 @@ mysql_execute_command(THD *thd)
|
||||
if (!(thd->variables.option_bits & OPTION_GTID_BEGIN))
|
||||
{
|
||||
/* Commit the normal transaction if one is active. */
|
||||
if (trans_commit_implicit(thd))
|
||||
bool commit_failed= trans_commit_implicit(thd);
|
||||
/* Release metadata locks acquired in this transaction. */
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
if (commit_failed)
|
||||
{
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
WSREP_DEBUG("implicit commit failed, MDL released: %lu", thd->thread_id);
|
||||
goto error;
|
||||
}
|
||||
/* Release metadata locks acquired in this transaction. */
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
}
|
||||
}
|
||||
|
||||
@ -2715,10 +2708,8 @@ mysql_execute_command(THD *thd)
|
||||
#endif
|
||||
case SQLCOM_SHOW_STATUS:
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
execute_show_status(thd, all_tables);
|
||||
break;
|
||||
}
|
||||
@ -2751,11 +2742,6 @@ mysql_execute_command(THD *thd)
|
||||
}
|
||||
case SQLCOM_SHOW_STATUS_PROC:
|
||||
case SQLCOM_SHOW_STATUS_FUNC:
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
case SQLCOM_SHOW_DATABASES:
|
||||
case SQLCOM_SHOW_TABLES:
|
||||
case SQLCOM_SHOW_TRIGGERS:
|
||||
@ -2764,27 +2750,19 @@ mysql_execute_command(THD *thd)
|
||||
case SQLCOM_SHOW_PLUGINS:
|
||||
case SQLCOM_SHOW_FIELDS:
|
||||
case SQLCOM_SHOW_KEYS:
|
||||
#ifndef WITH_WSREP
|
||||
case SQLCOM_SHOW_VARIABLES:
|
||||
case SQLCOM_SHOW_CHARSETS:
|
||||
case SQLCOM_SHOW_COLLATIONS:
|
||||
case SQLCOM_SHOW_STORAGE_ENGINES:
|
||||
case SQLCOM_SHOW_PROFILE:
|
||||
#endif /* WITH_WSREP */
|
||||
case SQLCOM_SHOW_CLIENT_STATS:
|
||||
case SQLCOM_SHOW_USER_STATS:
|
||||
case SQLCOM_SHOW_TABLE_STATS:
|
||||
case SQLCOM_SHOW_INDEX_STATS:
|
||||
case SQLCOM_SELECT:
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
|
||||
case SQLCOM_SHOW_VARIABLES:
|
||||
case SQLCOM_SHOW_CHARSETS:
|
||||
case SQLCOM_SHOW_COLLATIONS:
|
||||
case SQLCOM_SHOW_STORAGE_ENGINES:
|
||||
case SQLCOM_SHOW_PROFILE:
|
||||
#endif /* WITH_WSREP */
|
||||
{
|
||||
thd->status_var.last_query_cost= 0.0;
|
||||
|
||||
@ -3271,7 +3249,6 @@ mysql_execute_command(THD *thd)
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
/* in STATEMENT format, we probably have to replicate also temporary
|
||||
tables, like mysql replication does
|
||||
*/
|
||||
@ -3280,7 +3257,6 @@ mysql_execute_command(THD *thd)
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN(create_table->db, create_table->table_name, NULL)
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
/* Regular CREATE TABLE */
|
||||
res= mysql_create_table(thd, create_table,
|
||||
&create_info, &alter_info);
|
||||
@ -3466,10 +3442,8 @@ end_with_restore_list:
|
||||
goto error;
|
||||
#else
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/*
|
||||
Access check:
|
||||
@ -3533,10 +3507,8 @@ end_with_restore_list:
|
||||
case SQLCOM_CHECKSUM:
|
||||
{
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (check_table_access(thd, SELECT_ACL, all_tables,
|
||||
FALSE, UINT_MAX, FALSE))
|
||||
@ -3549,11 +3521,9 @@ end_with_restore_list:
|
||||
{
|
||||
ha_rows found= 0, updated= 0;
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (update_precheck(thd, all_tables))
|
||||
break;
|
||||
@ -3591,11 +3561,9 @@ end_with_restore_list:
|
||||
/* if we switched from normal update, rights are checked */
|
||||
if (up_result != 2)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
if ((res= multi_update_precheck(thd, all_tables)))
|
||||
break;
|
||||
}
|
||||
@ -3666,11 +3634,9 @@ end_with_restore_list:
|
||||
}
|
||||
case SQLCOM_REPLACE:
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
#ifndef DBUG_OFF
|
||||
if (mysql_bin_log.is_open())
|
||||
{
|
||||
@ -3710,11 +3676,9 @@ end_with_restore_list:
|
||||
{
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/*
|
||||
Since INSERT DELAYED doesn't support temporary tables, we could
|
||||
@ -3770,11 +3734,9 @@ end_with_restore_list:
|
||||
select_result *sel_result;
|
||||
bool explain= MY_TEST(lex->describe);
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if ((res= insert_precheck(thd, all_tables)))
|
||||
break;
|
||||
@ -3876,11 +3838,9 @@ end_with_restore_list:
|
||||
{
|
||||
select_result *sel_result=lex->result;
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if ((res= delete_precheck(thd, all_tables)))
|
||||
break;
|
||||
@ -3938,11 +3898,9 @@ end_with_restore_list:
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
TABLE_LIST *aux_tables= thd->lex->auxiliary_table_list.first;
|
||||
multi_delete *result;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE))
|
||||
goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if ((res= multi_delete_precheck(thd, all_tables)))
|
||||
break;
|
||||
@ -4013,7 +3971,6 @@ end_with_restore_list:
|
||||
/* So that DROP TEMPORARY TABLE gets to binlog at commit/rollback */
|
||||
thd->variables.option_bits|= OPTION_KEEP_LOG;
|
||||
}
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
for (TABLE_LIST *table= all_tables; table; table= table->next_global)
|
||||
@ -4027,7 +3984,6 @@ end_with_restore_list:
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
/*
|
||||
If we are a slave, we should add IF EXISTS if the query executed
|
||||
on the master without an error. This will help a slave to
|
||||
@ -4783,13 +4739,13 @@ end_with_restore_list:
|
||||
bool tx_release= (lex->tx_release == TVL_YES ||
|
||||
(thd->variables.completion_type == 2 &&
|
||||
lex->tx_release != TVL_NO));
|
||||
if (trans_commit(thd))
|
||||
bool commit_failed= trans_commit(thd);
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
if (commit_failed)
|
||||
{
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
WSREP_DEBUG("COMMIT failed, MDL released: %lu", thd->thread_id);
|
||||
goto error;
|
||||
}
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
/* Begin transaction with the same isolation level. */
|
||||
if (tx_chain)
|
||||
{
|
||||
@ -4831,14 +4787,14 @@ end_with_restore_list:
|
||||
bool tx_release= (lex->tx_release == TVL_YES ||
|
||||
(thd->variables.completion_type == 2 &&
|
||||
lex->tx_release != TVL_NO));
|
||||
bool rollback_failed= trans_rollback(thd);
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
|
||||
if (trans_rollback(thd))
|
||||
if (rollback_failed)
|
||||
{
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
WSREP_DEBUG("rollback failed, MDL released: %lu", thd->thread_id);
|
||||
goto error;
|
||||
}
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
/* Begin transaction with the same isolation level. */
|
||||
if (tx_chain)
|
||||
{
|
||||
@ -5376,13 +5332,14 @@ create_sp_error:
|
||||
my_ok(thd);
|
||||
break;
|
||||
case SQLCOM_XA_COMMIT:
|
||||
if (trans_xa_commit(thd))
|
||||
{
|
||||
bool commit_failed= trans_xa_commit(thd);
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
if (commit_failed)
|
||||
{
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
WSREP_DEBUG("XA commit failed, MDL released: %lu", thd->thread_id);
|
||||
goto error;
|
||||
}
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
/*
|
||||
We've just done a commit, reset transaction
|
||||
isolation level and access mode to the session default.
|
||||
@ -5391,14 +5348,16 @@ create_sp_error:
|
||||
thd->tx_read_only= thd->variables.tx_read_only;
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_XA_ROLLBACK:
|
||||
if (trans_xa_rollback(thd))
|
||||
{
|
||||
bool rollback_failed= trans_xa_rollback(thd);
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
if (rollback_failed)
|
||||
{
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
WSREP_DEBUG("XA rollback failed, MDL released: %lu", thd->thread_id);
|
||||
goto error;
|
||||
}
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
/*
|
||||
We've just done a rollback, reset transaction
|
||||
isolation level and access mode to the session default.
|
||||
@ -5407,6 +5366,7 @@ create_sp_error:
|
||||
thd->tx_read_only= thd->variables.tx_read_only;
|
||||
my_ok(thd);
|
||||
break;
|
||||
}
|
||||
case SQLCOM_XA_RECOVER:
|
||||
res= mysql_xa_recover(thd);
|
||||
break;
|
||||
@ -5744,10 +5704,15 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
|
||||
status_var_increment(thd->status_var.empty_queries);
|
||||
else
|
||||
status_var_add(thd->status_var.rows_sent, thd->get_sent_row_count());
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON && lex->sql_command == SQLCOM_SHOW_STATUS)
|
||||
wsrep_free_status(thd);
|
||||
#endif /* WITH_WSREP */
|
||||
if (thd->wsrep_status_vars)
|
||||
{
|
||||
wsrep->stats_free (wsrep, thd->wsrep_status_vars);
|
||||
thd->wsrep_status_vars = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -6592,19 +6557,13 @@ void THD::reset_for_next_command()
|
||||
transactions. Appliers and replayers are either processing ROW
|
||||
events or get autoinc variable values from Query_log_event.
|
||||
*/
|
||||
if (WSREP(thd) && thd->wsrep_exec_mode == LOCAL_STATE)
|
||||
if (WSREP(thd) && thd->wsrep_exec_mode == LOCAL_STATE &&
|
||||
wsrep_auto_increment_control)
|
||||
{
|
||||
if (wsrep_auto_increment_control)
|
||||
{
|
||||
if (thd->variables.auto_increment_offset !=
|
||||
global_system_variables.auto_increment_offset)
|
||||
thd->variables.auto_increment_offset=
|
||||
global_system_variables.auto_increment_offset;
|
||||
if (thd->variables.auto_increment_increment !=
|
||||
global_system_variables.auto_increment_increment)
|
||||
thd->variables.auto_increment_increment=
|
||||
global_system_variables.auto_increment_increment;
|
||||
}
|
||||
thd->variables.auto_increment_offset=
|
||||
global_system_variables.auto_increment_offset;
|
||||
thd->variables.auto_increment_increment=
|
||||
global_system_variables.auto_increment_increment;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
thd->query_start_used= 0;
|
||||
@ -6810,15 +6769,14 @@ void mysql_init_multi_delete(LEX *lex)
|
||||
lex->query_tables_last= &lex->query_tables;
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
||||
Parser_state *parser_state)
|
||||
Parser_state *parser_state)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
bool is_autocommit=
|
||||
!thd->in_multi_stmt_transaction_mode() &&
|
||||
thd->wsrep_conflict_state == NO_CONFLICT &&
|
||||
!thd->wsrep_applier &&
|
||||
wsrep_read_only_option(thd, thd->lex->query_tables);
|
||||
!thd->wsrep_applier;
|
||||
|
||||
do
|
||||
{
|
||||
@ -6911,8 +6869,8 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
||||
thd->wsrep_retry_query_len = 0;
|
||||
thd->wsrep_retry_command = COM_CONNECT;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
/*
|
||||
When you modify mysql_parse(), you may need to mofify
|
||||
@ -7944,7 +7902,7 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
|
||||
|
||||
if (((thd->security_ctx->master_access & SUPER_ACL) ||
|
||||
thd->security_ctx->user_matches(tmp->security_ctx)) &&
|
||||
IF_WSREP(!wsrep_thd_is_BF((void *)tmp, true), 1))
|
||||
!wsrep_thd_is_BF(tmp, true))
|
||||
{
|
||||
tmp->awake(kill_signal);
|
||||
error=0;
|
||||
|
@ -3659,6 +3659,8 @@ reexecute:
|
||||
|
||||
case MUST_REPLAY:
|
||||
(void)wsrep_replay_transaction(thd);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -253,7 +253,6 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options,
|
||||
}
|
||||
if (options & REFRESH_CHECKPOINT)
|
||||
disable_checkpoints(thd);
|
||||
#ifdef WITH_WSREP
|
||||
/*
|
||||
We need to do it second time after wsrep appliers were blocked in
|
||||
make_global_read_lock_block_commit(thd) above since they could have
|
||||
@ -263,7 +262,6 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options,
|
||||
close_cached_tables(thd, tables, (options & REFRESH_FAST) ?
|
||||
FALSE : TRUE, TRUE))
|
||||
result= 1;
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5267,7 +5267,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON && !thd->wsrep_applier &&
|
||||
wsrep_create_like_table(thd, table, src_table, create_info))
|
||||
goto end;
|
||||
DBUG_RETURN(res);
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -5532,7 +5532,6 @@ err:
|
||||
res= 1;
|
||||
}
|
||||
|
||||
end:
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
||||
|
@ -434,8 +434,8 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
|
||||
binlogged, so they share the same danger, so trust_function_creators
|
||||
applies to them too.
|
||||
*/
|
||||
if (!trust_function_creators &&
|
||||
IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()), mysql_bin_log.is_open()) &&
|
||||
if (!trust_function_creators &&
|
||||
(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()) &&
|
||||
!(thd->security_ctx->master_access & SUPER_ACL))
|
||||
{
|
||||
my_error(ER_BINLOG_CREATE_ROUTINE_NEED_SUPER, MYF(0));
|
||||
|
@ -412,12 +412,9 @@ bool Sql_cmd_truncate_table::truncate_table(THD *thd, TABLE_LIST *table_ref)
|
||||
{
|
||||
bool hton_can_recreate;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd) && wsrep_to_isolation_begin(thd,
|
||||
table_ref->db,
|
||||
table_ref->table_name, NULL))
|
||||
if (WSREP(thd) &&
|
||||
wsrep_to_isolation_begin(thd, table_ref->db, table_ref->table_name, 0))
|
||||
DBUG_RETURN(TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
if (lock_table(thd, table_ref, &hton_can_recreate))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
|
@ -976,8 +976,7 @@ int mysql_update(THD *thd,
|
||||
*/
|
||||
if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||
{
|
||||
if (IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
if (error < 0)
|
||||
@ -2220,8 +2219,7 @@ void multi_update::abort_result_set()
|
||||
The query has to binlog because there's a modified non-transactional table
|
||||
either from the query's list or via a stored routine: bug#13270,23333
|
||||
*/
|
||||
if (IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
/*
|
||||
THD::killed status might not have been set ON at time of an error
|
||||
@ -2490,8 +2488,7 @@ bool multi_update::send_eof()
|
||||
|
||||
if (local_error == 0 || thd->transaction.stmt.modified_non_trans_table)
|
||||
{
|
||||
if (IF_WSREP((WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()),
|
||||
mysql_bin_log.is_open()))
|
||||
if (WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open())
|
||||
{
|
||||
int errcode= 0;
|
||||
if (local_error == 0)
|
||||
|
@ -7171,9 +7171,7 @@ alter:
|
||||
Lex->event_parse_data->identifier= $5;
|
||||
|
||||
Lex->sql_command= SQLCOM_ALTER_EVENT;
|
||||
#ifdef WITH_WSREP
|
||||
Lex->stmt_definition_begin= $3;
|
||||
#endif
|
||||
}
|
||||
ev_alter_on_schedule_completion
|
||||
opt_ev_rename_to
|
||||
@ -7191,9 +7189,7 @@ alter:
|
||||
can overwrite it
|
||||
*/
|
||||
Lex->sql_command= SQLCOM_ALTER_EVENT;
|
||||
#ifdef WITH_WSREP
|
||||
Lex->stmt_definition_end= (char*)YYLIP->get_cpp_ptr();
|
||||
#endif
|
||||
}
|
||||
| ALTER TABLESPACE alter_tablespace_info
|
||||
{
|
||||
|
@ -3714,7 +3714,7 @@ static char *glob_hostname_ptr;
|
||||
static Sys_var_charptr Sys_hostname(
|
||||
"hostname", "Server host name",
|
||||
READ_ONLY GLOBAL_VAR(glob_hostname_ptr), NO_CMD_LINE,
|
||||
IN_FS_CHARSET, DEFAULT(glob_hostname));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(glob_hostname));
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
static Sys_var_charptr Sys_repl_report_host(
|
||||
@ -3727,21 +3727,21 @@ static Sys_var_charptr Sys_repl_report_host(
|
||||
"NAT and other routing issues, that IP may not be valid for connecting "
|
||||
"to the slave from the master or other hosts",
|
||||
READ_ONLY GLOBAL_VAR(report_host), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(0));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(0));
|
||||
|
||||
static Sys_var_charptr Sys_repl_report_user(
|
||||
"report_user",
|
||||
"The account user name of the slave to be reported to the master "
|
||||
"during slave registration",
|
||||
READ_ONLY GLOBAL_VAR(report_user), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(0));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(0));
|
||||
|
||||
static Sys_var_charptr Sys_repl_report_password(
|
||||
"report_password",
|
||||
"The account password of the slave to be reported to the master "
|
||||
"during slave registration",
|
||||
READ_ONLY GLOBAL_VAR(report_password), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(0));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(0));
|
||||
|
||||
static Sys_var_uint Sys_repl_report_port(
|
||||
"report_port",
|
||||
@ -4439,7 +4439,7 @@ static Sys_var_tz Sys_time_zone(
|
||||
|
||||
static Sys_var_charptr Sys_wsrep_provider(
|
||||
"wsrep_provider", "Path to replication provider library",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG, OPT_WSREP_PROVIDER),
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_NONE),
|
||||
NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_provider_check), ON_UPDATE(wsrep_provider_update));
|
||||
@ -4447,8 +4447,8 @@ static Sys_var_charptr Sys_wsrep_provider(
|
||||
static Sys_var_charptr Sys_wsrep_provider_options(
|
||||
"wsrep_provider_options", "provider specific options",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_provider_options),
|
||||
CMD_LINE(REQUIRED_ARG, OPT_WSREP_PROVIDER_OPTIONS),
|
||||
IN_FS_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
CMD_LINE(REQUIRED_ARG),
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_provider_options_check),
|
||||
ON_UPDATE(wsrep_provider_options_update));
|
||||
|
||||
@ -4460,7 +4460,7 @@ static Sys_var_charptr Sys_wsrep_data_home_dir(
|
||||
static Sys_var_charptr Sys_wsrep_cluster_name(
|
||||
"wsrep_cluster_name", "Name for the cluster",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_cluster_name), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_CLUSTER_NAME),
|
||||
IN_SYSTEM_CHARSET, DEFAULT(WSREP_CLUSTER_NAME),
|
||||
NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_cluster_name_check),
|
||||
ON_UPDATE(wsrep_cluster_name_update));
|
||||
@ -4469,8 +4469,8 @@ static PolyLock_mutex PLock_wsrep_slave_threads(&LOCK_wsrep_slave_threads);
|
||||
static Sys_var_charptr Sys_wsrep_cluster_address (
|
||||
"wsrep_cluster_address", "Address to initially connect to cluster",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_cluster_address),
|
||||
CMD_LINE(REQUIRED_ARG, OPT_WSREP_CLUSTER_ADDRESS),
|
||||
IN_FS_CHARSET, DEFAULT(""),
|
||||
CMD_LINE(REQUIRED_ARG),
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""),
|
||||
&PLock_wsrep_slave_threads, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_cluster_address_check),
|
||||
ON_UPDATE(wsrep_cluster_address_update));
|
||||
@ -4478,13 +4478,13 @@ static Sys_var_charptr Sys_wsrep_cluster_address (
|
||||
static Sys_var_charptr Sys_wsrep_node_name (
|
||||
"wsrep_node_name", "Node name",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_node_name), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
wsrep_node_name_check, wsrep_node_name_update);
|
||||
|
||||
static Sys_var_charptr Sys_wsrep_node_address (
|
||||
"wsrep_node_address", "Node address",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_node_address), CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(""),
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""),
|
||||
NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_node_address_check),
|
||||
ON_UPDATE(wsrep_node_address_update));
|
||||
@ -4492,7 +4492,7 @@ static Sys_var_charptr Sys_wsrep_node_address (
|
||||
static Sys_var_charptr Sys_wsrep_node_incoming_address(
|
||||
"wsrep_node_incoming_address", "Client connection address",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_node_incoming_address),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_NODE_INCOMING_AUTO));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(WSREP_NODE_INCOMING_AUTO));
|
||||
|
||||
static Sys_var_ulong Sys_wsrep_slave_threads(
|
||||
"wsrep_slave_threads", "Number of slave appliers to launch",
|
||||
@ -4505,7 +4505,7 @@ static Sys_var_ulong Sys_wsrep_slave_threads(
|
||||
static Sys_var_charptr Sys_wsrep_dbug_option(
|
||||
"wsrep_dbug_option", "DBUG options to provider library",
|
||||
GLOBAL_VAR(wsrep_dbug_option),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(""));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""));
|
||||
|
||||
static Sys_var_mybool Sys_wsrep_debug(
|
||||
"wsrep_debug", "To enable debug level logging",
|
||||
@ -4538,7 +4538,7 @@ static Sys_var_mybool Sys_wsrep_drupal_282555_workaround(
|
||||
static Sys_var_charptr sys_wsrep_sst_method(
|
||||
"wsrep_sst_method", "State snapshot transfer method",
|
||||
GLOBAL_VAR(wsrep_sst_method),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_SST_DEFAULT), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
IN_SYSTEM_CHARSET, DEFAULT(WSREP_SST_DEFAULT), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_sst_method_check),
|
||||
ON_UPDATE(wsrep_sst_method_update));
|
||||
|
||||
@ -4546,7 +4546,7 @@ static Sys_var_charptr Sys_wsrep_sst_receive_address(
|
||||
"wsrep_sst_receive_address", "Address where node is waiting for "
|
||||
"SST contact",
|
||||
GLOBAL_VAR(wsrep_sst_receive_address),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_SST_ADDRESS_AUTO), NO_MUTEX_GUARD,
|
||||
IN_SYSTEM_CHARSET, DEFAULT(WSREP_SST_ADDRESS_AUTO), NO_MUTEX_GUARD,
|
||||
NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_sst_receive_address_check),
|
||||
ON_UPDATE(wsrep_sst_receive_address_update));
|
||||
@ -4554,7 +4554,7 @@ static Sys_var_charptr Sys_wsrep_sst_receive_address(
|
||||
static Sys_var_charptr Sys_wsrep_sst_auth(
|
||||
"wsrep_sst_auth", "Authentication for SST connection",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_sst_auth), CMD_LINE(REQUIRED_ARG, OPT_WSREP_SST_AUTH),
|
||||
IN_FS_CHARSET, DEFAULT(NULL), NO_MUTEX_GUARD,
|
||||
IN_SYSTEM_CHARSET, DEFAULT(NULL), NO_MUTEX_GUARD,
|
||||
NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_sst_auth_check),
|
||||
ON_UPDATE(wsrep_sst_auth_update));
|
||||
@ -4562,7 +4562,7 @@ static Sys_var_charptr Sys_wsrep_sst_auth(
|
||||
static Sys_var_charptr Sys_wsrep_sst_donor(
|
||||
"wsrep_sst_donor", "preferred donor node for the SST",
|
||||
GLOBAL_VAR(wsrep_sst_donor),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_sst_donor_check),
|
||||
ON_UPDATE(wsrep_sst_donor_update));
|
||||
|
||||
@ -4583,7 +4583,7 @@ static Sys_var_charptr Sys_wsrep_start_position (
|
||||
"wsrep_start_position", "global transaction position to start from ",
|
||||
PREALLOCATED GLOBAL_VAR(wsrep_start_position),
|
||||
CMD_LINE(REQUIRED_ARG, OPT_WSREP_START_POSITION),
|
||||
IN_FS_CHARSET, DEFAULT(WSREP_START_POSITION_ZERO),
|
||||
IN_SYSTEM_CHARSET, DEFAULT(WSREP_START_POSITION_ZERO),
|
||||
NO_MUTEX_GUARD, NOT_IN_BINLOG,
|
||||
ON_CHECK(wsrep_start_position_check),
|
||||
ON_UPDATE(wsrep_start_position_update));
|
||||
@ -4602,19 +4602,27 @@ static Sys_var_ulong Sys_wsrep_max_ws_rows (
|
||||
static Sys_var_charptr Sys_wsrep_notify_cmd(
|
||||
"wsrep_notify_cmd", "",
|
||||
GLOBAL_VAR(wsrep_notify_cmd),CMD_LINE(REQUIRED_ARG),
|
||||
IN_FS_CHARSET, DEFAULT(""));
|
||||
IN_SYSTEM_CHARSET, DEFAULT(""));
|
||||
|
||||
static Sys_var_mybool Sys_wsrep_certify_nonPK(
|
||||
"wsrep_certify_nonPK", "Certify tables with no primary key",
|
||||
GLOBAL_VAR(wsrep_certify_nonPK),
|
||||
CMD_LINE(OPT_ARG), DEFAULT(TRUE));
|
||||
|
||||
static bool fix_wsrep_causal_reads(sys_var *self, THD* thd, enum_var_type var_type)
|
||||
{
|
||||
if (var_type == OPT_GLOBAL)
|
||||
wsrep_causal_reads_update(&global_system_variables);
|
||||
else
|
||||
wsrep_causal_reads_update(&thd->variables);
|
||||
return false;
|
||||
}
|
||||
static Sys_var_mybool Sys_wsrep_causal_reads(
|
||||
"wsrep_causal_reads", "(DEPRECATED) Setting this variable is equivalent "
|
||||
"to setting wsrep_sync_wait READ flag",
|
||||
SESSION_VAR(wsrep_causal_reads), CMD_LINE(OPT_ARG), DEFAULT(FALSE),
|
||||
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
|
||||
ON_UPDATE(wsrep_causal_reads_update));
|
||||
ON_UPDATE(fix_wsrep_causal_reads));
|
||||
|
||||
static Sys_var_uint Sys_wsrep_sync_wait(
|
||||
"wsrep_sync_wait", "Ensure \"synchronous\" read view before executing "
|
||||
@ -4642,16 +4650,17 @@ static Sys_var_mybool Sys_wsrep_desync (
|
||||
ON_CHECK(wsrep_desync_check),
|
||||
ON_UPDATE(wsrep_desync_update));
|
||||
|
||||
static const char *wsrep_binlog_format_names[]=
|
||||
{"MIXED", "STATEMENT", "ROW", "NONE", NullS};
|
||||
static Sys_var_enum Sys_wsrep_forced_binlog_format(
|
||||
"wsrep_forced_binlog_format", "binlog format to take effect over user's choice",
|
||||
GLOBAL_VAR(wsrep_forced_binlog_format),
|
||||
CMD_LINE(REQUIRED_ARG, OPT_BINLOG_FORMAT),
|
||||
GLOBAL_VAR(wsrep_forced_binlog_format), CMD_LINE(REQUIRED_ARG),
|
||||
wsrep_binlog_format_names, DEFAULT(BINLOG_FORMAT_UNSPEC));
|
||||
|
||||
static Sys_var_mybool Sys_wsrep_recover_datadir(
|
||||
"wsrep_recover", "Recover database state after crash and exit",
|
||||
READ_ONLY GLOBAL_VAR(wsrep_recovery),
|
||||
CMD_LINE(OPT_ARG, OPT_WSREP_RECOVER), DEFAULT(FALSE));
|
||||
CMD_LINE(OPT_ARG), DEFAULT(FALSE));
|
||||
|
||||
static Sys_var_mybool Sys_wsrep_replicate_myisam(
|
||||
"wsrep_replicate_myisam", "To enable myisam replication",
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "sql_statistics.h"
|
||||
#include "discover.h"
|
||||
#include "mdl.h" // MDL_wait_for_graph_visitor
|
||||
#include "ha_partition.h"
|
||||
|
||||
/* INFORMATION_SCHEMA name */
|
||||
LEX_STRING INFORMATION_SCHEMA_NAME= {C_STRING_WITH_LEN("information_schema")};
|
||||
|
@ -97,10 +97,8 @@ static bool xa_trans_force_rollback(THD *thd)
|
||||
by ha_rollback()/THD::transaction::cleanup().
|
||||
*/
|
||||
thd->transaction.xid_state.rm_error= 0;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
if (ha_rollback_trans(thd, true))
|
||||
{
|
||||
my_error(ER_XAER_RMERR, MYF(0));
|
||||
@ -139,18 +137,14 @@ bool trans_begin(THD *thd, uint flags)
|
||||
(thd->variables.option_bits & OPTION_TABLE_LOCK))
|
||||
{
|
||||
thd->variables.option_bits&= ~OPTION_TABLE_LOCK;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
thd->server_status&=
|
||||
~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY);
|
||||
DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS"));
|
||||
res= MY_TEST(ha_commit_trans(thd, TRUE));
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_post_commit(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
|
||||
@ -230,18 +224,14 @@ bool trans_commit(THD *thd)
|
||||
if (trans_check(thd))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
thd->server_status&=
|
||||
~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY);
|
||||
DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS"));
|
||||
res= ha_commit_trans(thd, TRUE);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_post_commit(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
/*
|
||||
if res is non-zero, then ha_commit_trans has rolled back the
|
||||
transaction, so the hooks for rollback will be called.
|
||||
@ -287,18 +277,14 @@ bool trans_commit_implicit(THD *thd)
|
||||
/* Safety if one did "drop table" on locked tables */
|
||||
if (!thd->locked_tables_mode)
|
||||
thd->variables.option_bits&= ~OPTION_TABLE_LOCK;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
thd->server_status&=
|
||||
~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY);
|
||||
DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS"));
|
||||
res= MY_TEST(ha_commit_trans(thd, TRUE));
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_post_commit(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
|
||||
@ -337,10 +323,8 @@ bool trans_rollback(THD *thd)
|
||||
if (trans_check(thd))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
thd->server_status&=
|
||||
~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY);
|
||||
DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS"));
|
||||
@ -431,19 +415,15 @@ bool trans_commit_stmt(THD *thd)
|
||||
|
||||
if (thd->transaction.stmt.ha_list)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, FALSE);
|
||||
#endif /* WITH_WSREP */
|
||||
res= ha_commit_trans(thd, FALSE);
|
||||
if (! thd->in_active_multi_stmt_transaction())
|
||||
{
|
||||
thd->tx_isolation= (enum_tx_isolation) thd->variables.tx_isolation;
|
||||
thd->tx_read_only= thd->variables.tx_read_only;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_post_commit(thd, FALSE);
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
}
|
||||
|
||||
@ -484,10 +464,8 @@ bool trans_rollback_stmt(THD *thd)
|
||||
|
||||
if (thd->transaction.stmt.ha_list)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, FALSE);
|
||||
#endif /* WITH_WSREP */
|
||||
ha_rollback_trans(thd, FALSE);
|
||||
if (! thd->in_active_multi_stmt_transaction())
|
||||
{
|
||||
@ -865,17 +843,13 @@ bool trans_xa_commit(THD *thd)
|
||||
}
|
||||
else if (xa_state == XA_IDLE && thd->lex->xa_opt == XA_ONE_PHASE)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
int r= ha_commit_trans(thd, TRUE);
|
||||
if ((res= MY_TEST(r)))
|
||||
my_error(r == 1 ? ER_XA_RBROLLBACK : ER_XAER_RMERR, MYF(0));
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_post_commit(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
else if (xa_state == XA_PREPARED && thd->lex->xa_opt == XA_NONE)
|
||||
{
|
||||
@ -894,10 +868,8 @@ bool trans_xa_commit(THD *thd)
|
||||
if (thd->mdl_context.acquire_lock(&mdl_request,
|
||||
thd->variables.lock_wait_timeout))
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
wsrep_register_hton(thd, TRUE);
|
||||
#endif /* WITH_WSREP */
|
||||
ha_rollback_trans(thd, TRUE);
|
||||
my_error(ER_XAER_RMERR, MYF(0));
|
||||
}
|
||||
|
@ -47,9 +47,6 @@ my_bool wsrep_preordered_opt= FALSE;
|
||||
* Begin configuration options and their default values
|
||||
*/
|
||||
|
||||
extern int wsrep_replaying;
|
||||
extern ulong wsrep_running_threads;
|
||||
extern ulong my_bind_addr;
|
||||
extern my_bool plugins_are_initialized;
|
||||
extern uint kill_cached_threads;
|
||||
extern mysql_cond_t COND_thread_cache;
|
||||
@ -91,6 +88,63 @@ my_bool wsrep_slave_FK_checks = 0; // slave thread does FK checks
|
||||
/*
|
||||
* Other wsrep global variables.
|
||||
*/
|
||||
|
||||
mysql_mutex_t LOCK_wsrep_ready;
|
||||
mysql_cond_t COND_wsrep_ready;
|
||||
mysql_mutex_t LOCK_wsrep_sst;
|
||||
mysql_cond_t COND_wsrep_sst;
|
||||
mysql_mutex_t LOCK_wsrep_sst_init;
|
||||
mysql_cond_t COND_wsrep_sst_init;
|
||||
mysql_mutex_t LOCK_wsrep_rollback;
|
||||
mysql_cond_t COND_wsrep_rollback;
|
||||
wsrep_aborting_thd_t wsrep_aborting_thd= NULL;
|
||||
mysql_mutex_t LOCK_wsrep_replaying;
|
||||
mysql_cond_t COND_wsrep_replaying;
|
||||
mysql_mutex_t LOCK_wsrep_slave_threads;
|
||||
mysql_mutex_t LOCK_wsrep_desync;
|
||||
int wsrep_replaying= 0;
|
||||
ulong wsrep_running_threads = 0; // # of currently running wsrep threads
|
||||
ulong my_bind_addr;
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
PSI_mutex_key key_LOCK_wsrep_rollback, key_LOCK_wsrep_thd,
|
||||
key_LOCK_wsrep_replaying, key_LOCK_wsrep_ready, key_LOCK_wsrep_sst,
|
||||
key_LOCK_wsrep_sst_thread, key_LOCK_wsrep_sst_init,
|
||||
key_LOCK_wsrep_slave_threads, key_LOCK_wsrep_desync;
|
||||
|
||||
PSI_cond_key key_COND_wsrep_rollback, key_COND_wsrep_thd,
|
||||
key_COND_wsrep_replaying, key_COND_wsrep_ready, key_COND_wsrep_sst,
|
||||
key_COND_wsrep_sst_init, key_COND_wsrep_sst_thread;
|
||||
|
||||
static PSI_mutex_info wsrep_mutexes[]=
|
||||
{
|
||||
{ &key_LOCK_wsrep_ready, "LOCK_wsrep_ready", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst, "LOCK_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst_thread, "wsrep_sst_thread", 0},
|
||||
{ &key_LOCK_wsrep_sst_init, "LOCK_wsrep_sst_init", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst, "LOCK_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_rollback, "LOCK_wsrep_rollback", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_thd, "THD::LOCK_wsrep_thd", 0},
|
||||
{ &key_LOCK_wsrep_replaying, "LOCK_wsrep_replaying", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_slave_threads, "LOCK_wsrep_slave_threads", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_desync, "LOCK_wsrep_desync", PSI_FLAG_GLOBAL}
|
||||
};
|
||||
|
||||
static PSI_cond_info wsrep_conds[]=
|
||||
{
|
||||
{ &key_COND_wsrep_ready, "COND_wsrep_ready", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst, "COND_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst_init, "COND_wsrep_sst_init", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_sst_thread, "wsrep_sst_thread", 0},
|
||||
{ &key_COND_wsrep_rollback, "COND_wsrep_rollback", PSI_FLAG_GLOBAL},
|
||||
{ &key_COND_wsrep_thd, "THD::COND_wsrep_thd", 0},
|
||||
{ &key_COND_wsrep_replaying, "COND_wsrep_replaying", PSI_FLAG_GLOBAL}
|
||||
};
|
||||
#else
|
||||
#define mysql_mutex_register(X,Y,Z)
|
||||
#define mysql_cond_register(X,Y,Z)
|
||||
#endif
|
||||
|
||||
my_bool wsrep_inited = 0; // initialized ?
|
||||
|
||||
static const wsrep_uuid_t cluster_uuid = WSREP_UUID_UNDEFINED;
|
||||
@ -517,6 +571,24 @@ int wsrep_init()
|
||||
int rcode= -1;
|
||||
DBUG_ASSERT(wsrep_inited == 0);
|
||||
|
||||
wsrep_causal_reads_update(&global_system_variables);
|
||||
|
||||
mysql_mutex_register("sql", wsrep_mutexes, array_elements(wsrep_mutexes));
|
||||
mysql_cond_register("sql", wsrep_conds, array_elements(wsrep_conds));
|
||||
|
||||
mysql_mutex_init(key_LOCK_wsrep_ready, &LOCK_wsrep_ready, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_ready, &COND_wsrep_ready, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_sst, &LOCK_wsrep_sst, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_sst, &COND_wsrep_sst, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_sst_init, &LOCK_wsrep_sst_init, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_sst_init, &COND_wsrep_sst_init, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_rollback, &LOCK_wsrep_rollback, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_rollback, &COND_wsrep_rollback, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_replaying, &LOCK_wsrep_replaying, MY_MUTEX_INIT_FAST);
|
||||
mysql_cond_init(key_COND_wsrep_replaying, &COND_wsrep_replaying, NULL);
|
||||
mysql_mutex_init(key_LOCK_wsrep_slave_threads, &LOCK_wsrep_slave_threads, MY_MUTEX_INIT_FAST);
|
||||
mysql_mutex_init(key_LOCK_wsrep_desync, &LOCK_wsrep_desync, MY_MUTEX_INIT_FAST);
|
||||
|
||||
wsrep_ready_set(FALSE);
|
||||
assert(wsrep_provider);
|
||||
|
||||
@ -747,6 +819,19 @@ void wsrep_deinit(bool free_options)
|
||||
{
|
||||
wsrep_sst_auth_free();
|
||||
}
|
||||
|
||||
mysql_mutex_destroy(&LOCK_wsrep_ready);
|
||||
mysql_cond_destroy(&COND_wsrep_ready);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_sst);
|
||||
mysql_cond_destroy(&COND_wsrep_sst);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_sst_init);
|
||||
mysql_cond_destroy(&COND_wsrep_sst_init);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_rollback);
|
||||
mysql_cond_destroy(&COND_wsrep_rollback);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_replaying);
|
||||
mysql_cond_destroy(&COND_wsrep_replaying);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_slave_threads);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_desync);
|
||||
}
|
||||
|
||||
void wsrep_recover()
|
||||
@ -2007,7 +2092,7 @@ int wsrep_create_sp(THD *thd, uchar** buf, size_t* buf_len)
|
||||
sp_returns_type(thd, retstr, sp);
|
||||
}
|
||||
|
||||
if (!create_string(thd, &log_query,
|
||||
if (!show_create_sp(thd, &log_query,
|
||||
sp->m_type,
|
||||
(sp->m_explicit_name ? sp->m_db.str : NULL),
|
||||
(sp->m_explicit_name ? sp->m_db.length : 0),
|
||||
@ -2238,23 +2323,6 @@ wsrep_trx_is_aborting(void *thd_ptr)
|
||||
}
|
||||
|
||||
|
||||
my_bool wsrep_read_only_option(THD *thd, TABLE_LIST *all_tables)
|
||||
{
|
||||
int opt_readonly_saved = opt_readonly;
|
||||
ulong flag_saved = (ulong)(thd->security_ctx->master_access & SUPER_ACL);
|
||||
|
||||
opt_readonly = 0;
|
||||
thd->security_ctx->master_access &= ~SUPER_ACL;
|
||||
|
||||
my_bool ret = !deny_updates_if_read_only_option(thd, all_tables);
|
||||
|
||||
opt_readonly = opt_readonly_saved;
|
||||
thd->security_ctx->master_access |= flag_saved;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void wsrep_copy_query(THD *thd)
|
||||
{
|
||||
thd->wsrep_retry_command = thd->get_command();
|
||||
|
@ -15,9 +15,11 @@
|
||||
|
||||
#include <wsrep.h>
|
||||
|
||||
#if !defined(WSREP_MYSQLD_H) && defined(WITH_WSREP)
|
||||
#ifndef WSREP_MYSQLD_H
|
||||
#define WSREP_MYSQLD_H
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
typedef struct st_mysql_show_var SHOW_VAR;
|
||||
#include <sql_priv.h>
|
||||
//#include "rpl_gtid.h"
|
||||
@ -138,7 +140,6 @@ extern const char* wsrep_provider_version;
|
||||
extern const char* wsrep_provider_vendor;
|
||||
|
||||
int wsrep_show_status(THD *thd, SHOW_VAR *var, char *buff);
|
||||
void wsrep_free_status(THD *thd);
|
||||
|
||||
/* Filters out --wsrep-new-cluster oprtion from argv[]
|
||||
* should be called in the very beginning of main() */
|
||||
@ -219,11 +220,11 @@ extern wsrep_seqno_t wsrep_locked_seqno;
|
||||
// MySQL logging functions don't seem to understand long long length modifer.
|
||||
// This is a workaround. It also prefixes all messages with "WSREP"
|
||||
#define WSREP_LOG(fun, ...) \
|
||||
{ \
|
||||
do { \
|
||||
char msg[1024] = {'\0'}; \
|
||||
snprintf(msg, sizeof(msg) - 1, ## __VA_ARGS__); \
|
||||
fun("WSREP: %s", msg); \
|
||||
}
|
||||
} while(0)
|
||||
|
||||
#define WSREP_LOG_CONFLICT_THD(thd, role) \
|
||||
WSREP_LOG(sql_print_information, \
|
||||
@ -298,6 +299,8 @@ extern my_bool wsrep_preordered_opt;
|
||||
extern handlerton *wsrep_hton;
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
extern PSI_mutex_key key_LOCK_wsrep_thd;
|
||||
extern PSI_cond_key key_COND_wsrep_thd;
|
||||
extern PSI_mutex_key key_LOCK_wsrep_ready;
|
||||
extern PSI_mutex_key key_COND_wsrep_ready;
|
||||
extern PSI_mutex_key key_LOCK_wsrep_sst;
|
||||
@ -356,7 +359,6 @@ void wsrep_wait_appliers_close(THD *thd);
|
||||
void wsrep_kill_mysql(THD *thd);
|
||||
void wsrep_close_threads(THD *thd);
|
||||
int wsrep_create_sp(THD *thd, uchar** buf, size_t* buf_len);
|
||||
my_bool wsrep_read_only_option(THD *thd, TABLE_LIST *all_tables);
|
||||
void wsrep_copy_query(THD *thd);
|
||||
bool wsrep_is_show_query(enum enum_sql_command command);
|
||||
void wsrep_replay_transaction(THD *thd);
|
||||
@ -365,6 +367,32 @@ bool wsrep_create_like_table(THD* thd, TABLE_LIST* table,
|
||||
HA_CREATE_INFO *create_info);
|
||||
int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len);
|
||||
|
||||
extern my_bool deny_updates_if_read_only_option(THD *thd,
|
||||
TABLE_LIST *all_tables);
|
||||
#else /* WITH_WSREP */
|
||||
|
||||
#define WSREP(T) (0)
|
||||
#define WSREP_ON (0)
|
||||
#define WSREP_EMULATE_BINLOG(thd) (0)
|
||||
#define WSREP_CLIENT(thd) (0)
|
||||
#define wsrep_emulate_bin_log (0)
|
||||
#define wsrep_xid_seqno(X) (0)
|
||||
#define wsrep_is_wsrep_xid(X) (0)
|
||||
#define wsrep_to_isolation (0)
|
||||
#define wsrep_recovery (0)
|
||||
#define wsrep_init() (1)
|
||||
#define wsrep_prepend_PATH(X)
|
||||
#define wsrep_before_SE() (0)
|
||||
#define wsrep_init_startup(X)
|
||||
#define wsrep_sync_wait(...) (0)
|
||||
#define wsrep_to_isolation_begin(...) (0)
|
||||
#define wsrep_register_hton(...) do { } while(0)
|
||||
#define wsrep_post_commit(...) do { } while(0)
|
||||
#define wsrep_check_opts() (0)
|
||||
#define wsrep_stop_replication(X) do { } while(0)
|
||||
#define wsrep_inited (0)
|
||||
#define wsrep_deinit(X) do { } while(0)
|
||||
#define wsrep_filter_new_cluster(X,Y) do { } while(0)
|
||||
#define wsrep_recover() do { } while(0)
|
||||
#define wsrep_slave_threads (1)
|
||||
|
||||
#endif /* WITH_WSREP */
|
||||
#endif /* WSREP_MYSQLD_H */
|
||||
|
@ -13,9 +13,13 @@
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
||||
|
||||
#if !defined(WSREP_SST_H) && defined(WITH_WSREP)
|
||||
#include <my_config.h>
|
||||
|
||||
#ifndef WSREP_SST_H
|
||||
#define WSREP_SST_H
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
#include <mysql.h> // my_bool
|
||||
|
||||
#define WSREP_SST_OPT_ROLE "--role"
|
||||
@ -65,4 +69,11 @@ extern void wsrep_SE_init_wait(); /*! wait for SE init to complete */
|
||||
extern void wsrep_SE_init_done(); /*! signal that SE init is complte */
|
||||
extern void wsrep_SE_initialized(); /*! mark SE initialization complete */
|
||||
|
||||
#else
|
||||
#define wsrep_SE_initialized() do { } while(0)
|
||||
#define wsrep_SE_init_grab() do { } while(0)
|
||||
#define wsrep_SE_init_done() do { } while(0)
|
||||
#define wsrep_sst_continue() do { } while(0)
|
||||
|
||||
#endif /* WITH_WSREP */
|
||||
#endif /* WSREP_SST_H */
|
||||
|
@ -13,9 +13,13 @@
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
||||
|
||||
#if !defined(WSREP_THD_H) && defined(WITH_WSREP)
|
||||
#include <my_config.h>
|
||||
|
||||
#ifndef WSREP_THD_H
|
||||
#define WSREP_THD_H
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
#include "sql_class.h"
|
||||
|
||||
int wsrep_show_bf_aborts (THD *thd, SHOW_VAR *var, char *buff);
|
||||
@ -37,4 +41,11 @@ extern "C" my_bool wsrep_thd_is_BF_or_commit(void *thd_ptr, my_bool sync);
|
||||
extern "C" my_bool wsrep_thd_is_local(void *thd_ptr, my_bool sync);
|
||||
extern "C" int wsrep_thd_in_locking_session(void *thd_ptr);
|
||||
|
||||
#else /* WITH_WSREP */
|
||||
|
||||
#define wsrep_thd_is_BF(T, S) (0)
|
||||
#define wsrep_abort_thd(X,Y,Z) do { } while(0)
|
||||
#define wsrep_create_appliers(T) (0)
|
||||
|
||||
#endif
|
||||
#endif /* WSREP_THD_H */
|
||||
|
@ -60,28 +60,24 @@ bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wsrep_causal_reads_update (sys_var *self, THD* thd, enum_var_type var_type)
|
||||
bool wsrep_causal_reads_update (SV *sv)
|
||||
{
|
||||
// global setting should not affect session setting.
|
||||
// if (var_type == OPT_GLOBAL) {
|
||||
// thd->variables.wsrep_causal_reads = global_system_variables.wsrep_causal_reads;
|
||||
// }
|
||||
if (thd->variables.wsrep_causal_reads) {
|
||||
thd->variables.wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
if (sv->wsrep_causal_reads) {
|
||||
sv->wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
} else {
|
||||
thd->variables.wsrep_sync_wait &= ~WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
sv->wsrep_sync_wait &= ~WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wsrep_sync_wait_update (sys_var* self, THD* thd, enum_var_type var_type)
|
||||
{
|
||||
// global setting should not affect session setting.
|
||||
// if (var_type == OPT_GLOBAL) {
|
||||
// thd->variables.wsrep_sync_wait = global_system_variables.wsrep_sync_wait;
|
||||
// }
|
||||
thd->variables.wsrep_causal_reads = thd->variables.wsrep_sync_wait &
|
||||
WSREP_SYNC_WAIT_BEFORE_READ;
|
||||
if (var_type == OPT_GLOBAL)
|
||||
global_system_variables.wsrep_causal_reads =
|
||||
MY_TEST(global_system_variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ);
|
||||
else
|
||||
thd->variables.wsrep_causal_reads =
|
||||
MY_TEST(thd->variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -589,14 +585,21 @@ int wsrep_show_status (THD *thd, SHOW_VAR *var, char *buff)
|
||||
export_wsrep_status_to_mysql(thd);
|
||||
var->type= SHOW_ARRAY;
|
||||
var->value= (char *) &mysql_status_vars;
|
||||
#if 0
|
||||
{"wsrep_connected", (char*) &wsrep_connected, SHOW_BOOL},
|
||||
{"wsrep_ready", (char*) &wsrep_ready, SHOW_BOOL},
|
||||
{"wsrep_cluster_state_uuid", (char*) &wsrep_cluster_state_uuid,SHOW_CHAR_PTR},
|
||||
{"wsrep_cluster_conf_id", (char*) &wsrep_cluster_conf_id, SHOW_LONGLONG},
|
||||
{"wsrep_cluster_status", (char*) &wsrep_cluster_status, SHOW_CHAR_PTR},
|
||||
{"wsrep_cluster_size", (char*) &wsrep_cluster_size, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep_local_index", (char*) &wsrep_local_index, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep_local_bf_aborts", (char*) &wsrep_show_bf_aborts, SHOW_SIMPLE_FUNC},
|
||||
{"wsrep_provider_name", (char*) &wsrep_provider_name, SHOW_CHAR_PTR},
|
||||
{"wsrep_provider_version", (char*) &wsrep_provider_version, SHOW_CHAR_PTR},
|
||||
{"wsrep_provider_vendor", (char*) &wsrep_provider_vendor, SHOW_CHAR_PTR},
|
||||
{"wsrep_thread_count", (char*) &wsrep_running_threads, SHOW_LONG_NOFLUSH},
|
||||
{"wsrep", (char*) &wsrep_show_status, SHOW_FUNC},
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wsrep_free_status (THD* thd)
|
||||
{
|
||||
if (thd->wsrep_status_vars)
|
||||
{
|
||||
wsrep->stats_free (wsrep, thd->wsrep_status_vars);
|
||||
thd->wsrep_status_vars = 0;
|
||||
}
|
||||
}
|
||||
|
@ -13,9 +13,13 @@
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
||||
|
||||
#if !defined (WSREP_VAR_H) && defined(WITH_WSREP)
|
||||
#include <my_config.h>
|
||||
|
||||
#ifndef WSREP_VAR_H
|
||||
#define WSREP_VAR_H
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
#define WSREP_CLUSTER_NAME "my_wsrep_cluster"
|
||||
#define WSREP_NODE_INCOMING_AUTO "AUTO"
|
||||
#define WSREP_START_POSITION_ZERO "00000000-0000-0000-0000-000000000000:-1"
|
||||
@ -34,8 +38,10 @@ int wsrep_init_vars();
|
||||
#define DEFAULT_ARGS (THD* thd, enum_var_type var_type)
|
||||
#define INIT_ARGS (const char* opt)
|
||||
|
||||
struct system_variables;
|
||||
bool wsrep_causal_reads_update(struct system_variables *sv);
|
||||
|
||||
extern bool wsrep_on_update UPDATE_ARGS;
|
||||
extern bool wsrep_causal_reads_update UPDATE_ARGS;
|
||||
extern bool wsrep_sync_wait_update UPDATE_ARGS;
|
||||
extern bool wsrep_start_position_check CHECK_ARGS;
|
||||
extern bool wsrep_start_position_update UPDATE_ARGS;
|
||||
@ -83,4 +89,13 @@ extern bool wsrep_slave_threads_update UPDATE_ARGS;
|
||||
extern bool wsrep_desync_check CHECK_ARGS;
|
||||
extern bool wsrep_desync_update UPDATE_ARGS;
|
||||
|
||||
#else /* WITH_WSREP */
|
||||
|
||||
#define WSREP_NONE
|
||||
#define wsrep_provider_init(X)
|
||||
#define wsrep_init_vars() (1)
|
||||
#define wsrep_start_position_init(X)
|
||||
#define wsrep_sst_auth_init(X)
|
||||
|
||||
#endif /* WITH_WSREP */
|
||||
#endif /* WSREP_VAR_H */
|
||||
|
@ -15,15 +15,16 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
#include "my_config.h"
|
||||
|
||||
#if defined(HAVE_YASSL)
|
||||
#include "my_config.h"
|
||||
#include "md5.hpp"
|
||||
#elif defined(HAVE_OPENSSL)
|
||||
#include <openssl/md5.h>
|
||||
#endif /* HAVE_YASSL */
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
/* Initialize md5 object. */
|
||||
void *wsrep_md5_init()
|
||||
{
|
||||
|
@ -13,10 +13,6 @@
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
IF (WITH_WSREP)
|
||||
BUILD_WITH_WSREP()
|
||||
ENDIF()
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/sql
|
||||
|
@ -15,15 +15,16 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
#include "my_config.h"
|
||||
|
||||
#if defined(HAVE_YASSL)
|
||||
#include "my_config.h"
|
||||
#include "md5.hpp"
|
||||
#elif defined(HAVE_OPENSSL)
|
||||
#include <openssl/md5.h>
|
||||
#endif /* HAVE_YASSL */
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
|
||||
/* Initialize md5 object. */
|
||||
void *wsrep_md5_init()
|
||||
{
|
||||
|
@ -52,7 +52,6 @@ datadir=
|
||||
# 0 means don't wait at all
|
||||
# Negative numbers mean to wait indefinitely
|
||||
service_startup_timeout=900
|
||||
startup_sleep=1
|
||||
|
||||
# Lock directory for RedHat / SuSE.
|
||||
lockdir='/var/lock/subsys'
|
||||
@ -254,8 +253,6 @@ wait_for_gone () {
|
||||
|
||||
wait_for_ready () {
|
||||
|
||||
sst_progress_file=$datadir/sst_in_progress
|
||||
|
||||
i=0
|
||||
while test $i -ne $service_startup_timeout ; do
|
||||
|
||||
@ -264,14 +261,9 @@ wait_for_ready () {
|
||||
return 0
|
||||
fi
|
||||
|
||||
if test -e $sst_progress_file && [ $startup_sleep -ne 10 ];then
|
||||
echo $echo_n "SST in progress, setting sleep intervals to 10 seconds"
|
||||
startup_sleep=10
|
||||
fi
|
||||
|
||||
echo $echo_n ".$echo_c"
|
||||
i=`expr $i + 1`
|
||||
sleep $startup_sleep
|
||||
sleep 1
|
||||
|
||||
done
|
||||
|
||||
|
@ -13,9 +13,6 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
INCLUDE_DIRECTORIES( "." )
|
||||
BUILD_WITH_WSREP()
|
||||
|
||||
SET(WSREP_SOURCES wsrep_gtid.c wsrep_uuid.c wsrep_loader.c wsrep_dummy.c)
|
||||
|
||||
ADD_CONVENIENCE_LIBRARY(wsrep ${WSREP_SOURCES})
|
||||
|
Loading…
x
Reference in New Issue
Block a user