Merge branch 'MXS-517' into develop
This commit is contained in:
@ -33,7 +33,7 @@ check_deps()
|
|||||||
check_dirs()
|
check_dirs()
|
||||||
find_package(OpenSSL)
|
find_package(OpenSSL)
|
||||||
find_package(Valgrind)
|
find_package(Valgrind)
|
||||||
find_package(MySQLClient)
|
find_package(MariaDBConnector)
|
||||||
find_package(MySQL)
|
find_package(MySQL)
|
||||||
find_package(Pandoc)
|
find_package(Pandoc)
|
||||||
find_package(TCMalloc)
|
find_package(TCMalloc)
|
||||||
@ -46,6 +46,12 @@ find_package(RabbitMQ)
|
|||||||
# Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target
|
# Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target
|
||||||
include(cmake/BuildPCRE2.cmake)
|
include(cmake/BuildPCRE2.cmake)
|
||||||
|
|
||||||
|
# If the connector was not found, download and build it from source
|
||||||
|
if(NOT MARIADB_CONNECTOR_FOUND)
|
||||||
|
message(STATUS "Building MariaDB Connector-C from source.")
|
||||||
|
include(cmake/BuildMariaDBConnector.cmake)
|
||||||
|
endif()
|
||||||
|
|
||||||
# You can find the variables set by this in the FindCURL.cmake file
|
# You can find the variables set by this in the FindCURL.cmake file
|
||||||
# which is a default module in CMake.
|
# which is a default module in CMake.
|
||||||
|
|
||||||
@ -157,12 +163,6 @@ set(CMAKE_CXX_FLAGS_DEBUG "${DEBUG_FLAGS} -DSS_DEBUG -DLOG_ASSERT")
|
|||||||
set(CMAKE_CXX_FLAGS_RELEASE "")
|
set(CMAKE_CXX_FLAGS_RELEASE "")
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb")
|
||||||
|
|
||||||
subdirs(MYSQL_DIR_ALL ${MYSQL_DIR})
|
|
||||||
foreach(DIR ${MYSQL_DIR_ALL})
|
|
||||||
include_directories(${DIR})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
include_directories(${MYSQL_DIR}/..)
|
|
||||||
include_directories(utils)
|
include_directories(utils)
|
||||||
include_directories(log_manager)
|
include_directories(log_manager)
|
||||||
include_directories(query_classifier)
|
include_directories(query_classifier)
|
||||||
|
26
cmake/BuildMariaDBConnector.cmake
Normal file
26
cmake/BuildMariaDBConnector.cmake
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Build the MariaDB Connector-C
|
||||||
|
#
|
||||||
|
# If the MariaDB connector is not found, the last option is to download it
|
||||||
|
# and build it from source. This file downloads and builds the connector and
|
||||||
|
# sets the variables set by FindMariaDBConnector.cmake so that it appears that
|
||||||
|
# the system has the connector.
|
||||||
|
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(connector-c
|
||||||
|
GIT_REPOSITORY https://github.com/MariaDB/mariadb-connector-c.git
|
||||||
|
GIT_TAG v2.2.1
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/connector-c/install
|
||||||
|
BINARY_DIR ${CMAKE_BINARY_DIR}/connector-c
|
||||||
|
INSTALL_DIR ${CMAKE_BINARY_DIR}/connector-c/install)
|
||||||
|
|
||||||
|
set(MARIADB_CONNECTOR_FOUND TRUE CACHE INTERNAL "" FORCE)
|
||||||
|
set(MARIADB_CONNECTOR_STATIC_FOUND TRUE CACHE INTERNAL "" FORCE)
|
||||||
|
set(MARIADB_CONNECTOR_INCLUDE_DIR
|
||||||
|
${CMAKE_BINARY_DIR}/connector-c/install/include/mariadb CACHE INTERNAL "" FORCE)
|
||||||
|
set(MARIADB_CONNECTOR_STATIC_LIBRARIES
|
||||||
|
${CMAKE_BINARY_DIR}/connector-c/install/lib/mariadb/libmariadbclient.a
|
||||||
|
CACHE INTERNAL "" FORCE)
|
||||||
|
set(MARIADB_CONNECTOR_LIBRARIES
|
||||||
|
${CMAKE_BINARY_DIR}/connector-c/install/lib/mariadb/libmariadbclient.a
|
||||||
|
CACHE INTERNAL "" FORCE)
|
42
cmake/FindMariaDBConnector.cmake
Normal file
42
cmake/FindMariaDBConnector.cmake
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# This CMake file tries to find the the MariaDB Connector-C
|
||||||
|
# The following variables are set:
|
||||||
|
# MARIADB_CONNECTOR_FOUND - System has the connector
|
||||||
|
# MARIADB_CONNECTOR_STATIC_FOUND - System has static version of the connector library
|
||||||
|
# MARIADB_CONNECTOR_LIBRARIES - The dynamic connector libraries
|
||||||
|
# MARIADB_CONNECTOR_STATIC_LIBRARIES - The static connector libraries
|
||||||
|
# MARIADB_CONNECTOR_INCLUDE_DIR - The connector headers
|
||||||
|
|
||||||
|
find_library(MARIADB_CONNECTOR_LIBRARIES NAMES mysqlclient PATH_SUFFIXES mysql mariadb)
|
||||||
|
if(${MARIADB_CONNECTOR_LIBRARIES} MATCHES "NOTFOUND")
|
||||||
|
set(MARIADB_CONNECTOR_FOUND FALSE CACHE INTERNAL "")
|
||||||
|
message(STATUS "Dynamic MySQL client library not found.")
|
||||||
|
unset(MARIADB_CONNECTOR_LIBRARIES)
|
||||||
|
else()
|
||||||
|
set(MARIADB_CONNECTOR_FOUND TRUE CACHE INTERNAL "")
|
||||||
|
message(STATUS "Found dynamic MySQL client library: ${MARIADB_CONNECTOR_LIBRARIES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
|
find_library(MARIADB_CONNECTOR_STATIC_LIBRARIES NAMES mysqlclient PATH_SUFFIXES mysql mariadb)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
||||||
|
|
||||||
|
if(${MARIADB_CONNECTOR_STATIC_LIBRARIES} MATCHES "NOTFOUND")
|
||||||
|
set(MARIADB_CONNECTOR_STATIC_FOUND FALSE CACHE INTERNAL "")
|
||||||
|
message(STATUS "Static MySQL client library not found.")
|
||||||
|
unset(MARIADB_CONNECTOR_STATIC_LIBRARIES)
|
||||||
|
else()
|
||||||
|
set(MARIADB_CONNECTOR_STATIC_FOUND TRUE CACHE INTERNAL "")
|
||||||
|
message(STATUS "Found statc MySQL client library: ${MARIADB_CONNECTOR_STATIC_LIBRARIES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(MARIADB_CONNECTOR_INCLUDE_DIR mysql.h PATH_SUFFIXES mysql mariadb)
|
||||||
|
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
check_symbol_exists(LIBMARIADB ${MARIADB_CONNECTOR_INCLUDE_DIR}/mysql.h HAVE_MARIADB_CONNECTOR)
|
||||||
|
|
||||||
|
if(HAVE_MARIADB_CONNECTOR)
|
||||||
|
message(STATUS "Found MariaDB Connector-C")
|
||||||
|
else()
|
||||||
|
set(MARIADB_CONNECTOR_FOUND FALSE CACHE INTERNAL "" FORCE)
|
||||||
|
endif()
|
@ -1,42 +1,43 @@
|
|||||||
# This CMake file tries to find the the mysql_version.h header
|
# This CMake file tries to find the the mysql_version.h header
|
||||||
# and to parse it for version and provider strings
|
# and to parse it for version and provider strings
|
||||||
# The following variables are set:
|
# The following variables are set:
|
||||||
# MYSQL_VERSION - The MySQL version number
|
# MYSQL_EMBEDDED_VERSION - The MySQL version number
|
||||||
# MYSQL_PROVIDER - The MySQL provider e.g. MariaDB
|
# MYSQL_EMBEDDED_PROVIDER - The MySQL provider e.g. MariaDB
|
||||||
# MYSQL_EMBEDDED_LIB - The MySQL embedded library
|
# MYSQL_EMBEDDED_LIBRARIES - The MySQL embedded library
|
||||||
|
# MYSQL_EMBEDDED_INCLUDE_DIR - Path to MySQL headers
|
||||||
|
|
||||||
find_file(MYSQL_VERSION_H mysql_version.h PATH_SUFFIXES mysql)
|
find_file(MYSQL_EMBEDDED_VERSION_H mysql_version.h PATH_SUFFIXES mysql)
|
||||||
if(MYSQL_VERSION_H MATCHES "MYSQL_VERSION_H-NOTFOUND")
|
if(MYSQL_EMBEDDED_VERSION_H MATCHES "MYSQL_EMBEDDED_VERSION_H-NOTFOUND")
|
||||||
message(FATAL_ERROR "Cannot find the mysql_version.h header")
|
message(FATAL_ERROR "Cannot find the mysql_version.h header")
|
||||||
else()
|
else()
|
||||||
message(STATUS "Found mysql_version.h: ${MYSQL_VERSION_H}")
|
message(STATUS "Found mysql_version.h: ${MYSQL_EMBEDDED_VERSION_H}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
file(READ ${MYSQL_VERSION_H} MYSQL_VERSION_CONTENTS)
|
file(READ ${MYSQL_EMBEDDED_VERSION_H} MYSQL_EMBEDDED_VERSION_CONTENTS)
|
||||||
string(REGEX REPLACE ".*MYSQL_SERVER_VERSION[^0-9.]+([0-9.]+).*" "\\1" MYSQL_VERSION ${MYSQL_VERSION_CONTENTS})
|
string(REGEX REPLACE ".*MYSQL_SERVER_VERSION[^0-9.]+([0-9.]+).*" "\\1" MYSQL_EMBEDDED_VERSION ${MYSQL_EMBEDDED_VERSION_CONTENTS})
|
||||||
string(REGEX REPLACE ".*MYSQL_COMPILATION_COMMENT[[:space:]]+\"(.+)\".*" "\\1" MYSQL_PROVIDER ${MYSQL_VERSION_CONTENTS})
|
string(REGEX REPLACE ".*MYSQL_COMPILATION_COMMENT[[:space:]]+\"(.+)\".*" "\\1" MYSQL_EMBEDDED_PROVIDER ${MYSQL_EMBEDDED_VERSION_CONTENTS})
|
||||||
string(TOLOWER ${MYSQL_PROVIDER} MYSQL_PROVIDER)
|
string(TOLOWER ${MYSQL_EMBEDDED_PROVIDER} MYSQL_EMBEDDED_PROVIDER)
|
||||||
if(MYSQL_PROVIDER MATCHES "[mM]aria[dD][bB]")
|
if(MYSQL_EMBEDDED_PROVIDER MATCHES "[mM]aria[dD][bB]")
|
||||||
set(MYSQL_PROVIDER "MariaDB" CACHE INTERNAL "The MySQL provider")
|
set(MYSQL_EMBEDDED_PROVIDER "MariaDB" CACHE INTERNAL "The MySQL provider")
|
||||||
elseif(MYSQL_PROVIDER MATCHES "mysql")
|
elseif(MYSQL_EMBEDDED_PROVIDER MATCHES "mysql")
|
||||||
set(MYSQL_PROVIDER "MySQL" CACHE INTERNAL "The MySQL provider")
|
set(MYSQL_EMBEDDED_PROVIDER "MySQL" CACHE INTERNAL "The MySQL provider")
|
||||||
elseif(MYSQL_PROVIDER MATCHES "percona")
|
elseif(MYSQL_EMBEDDED_PROVIDER MATCHES "percona")
|
||||||
set(MYSQL_PROVIDER "Percona" CACHE INTERNAL "The MySQL provider")
|
set(MYSQL_EMBEDDED_PROVIDER "Percona" CACHE INTERNAL "The MySQL provider")
|
||||||
else()
|
else()
|
||||||
set(MYSQL_PROVIDER "Unknown" CACHE INTERNAL "The MySQL provider")
|
set(MYSQL_EMBEDDED_PROVIDER "Unknown" CACHE INTERNAL "The MySQL provider")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "MySQL version: ${MYSQL_VERSION}")
|
message(STATUS "MySQL version: ${MYSQL_EMBEDDED_VERSION}")
|
||||||
message(STATUS "MySQL provider: ${MYSQL_PROVIDER}")
|
message(STATUS "MySQL provider: ${MYSQL_EMBEDDED_PROVIDER}")
|
||||||
|
|
||||||
if(NOT MYSQL_PROVIDER STREQUAL "MariaDB")
|
if(NOT MYSQL_EMBEDDED_PROVIDER STREQUAL "MariaDB")
|
||||||
message(WARNING "Not using a release version of MariaDB server. If this is intentional, please ignore this warning. Otherwise make sure the right libraries are installed and CMake finds the right libraries.")
|
message(WARNING "Not using a release version of MariaDB server. If this is intentional, please ignore this warning. Otherwise make sure the right libraries are installed and CMake finds the right libraries.")
|
||||||
endif()
|
endif()
|
||||||
if(MYSQL_VERSION VERSION_LESS 5.5.41)
|
if(MYSQL_EMBEDDED_VERSION VERSION_LESS 5.5.41)
|
||||||
message(WARNING "MySQL version is ${MYSQL_VERSION}. Minimum supported version is 5.5.41.")
|
message(WARNING "MySQL version is ${MYSQL_EMBEDDED_VERSION}. Minimum supported version is 5.5.41.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT (MYSQL_VERSION VERSION_LESS 10.1))
|
if(NOT (MYSQL_EMBEDDED_VERSION VERSION_LESS 10.1))
|
||||||
|
|
||||||
# 10.1 needs lzma
|
# 10.1 needs lzma
|
||||||
find_library(HAVE_LIBLZMA NAMES lzma)
|
find_library(HAVE_LIBLZMA NAMES lzma)
|
||||||
@ -47,18 +48,18 @@ if(NOT (MYSQL_VERSION VERSION_LESS 10.1))
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if (DEFINED MYSQL_EMBEDDED_LIB)
|
if (DEFINED MYSQL_EMBEDDED_LIBRARIES)
|
||||||
if( NOT (IS_DIRECTORY ${MYSQL_EMBEDDED_LIB}) )
|
if( NOT (IS_DIRECTORY ${MYSQL_EMBEDDED_LIBRARIES}) )
|
||||||
debugmsg("MYSQL_EMBEDDED_LIB is not a directory: ${MYSQL_EMBEDDED_LIB}")
|
debugmsg("MYSQL_EMBEDDED_LIBRARIES is not a directory: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
|
if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
|
||||||
set(COMP_VAR PATH)
|
set(COMP_VAR PATH)
|
||||||
else()
|
else()
|
||||||
set(COMP_VAR DIRECTORY)
|
set(COMP_VAR DIRECTORY)
|
||||||
endif()
|
endif()
|
||||||
get_filename_component(MYSQL_EMBEDDED_LIB ${MYSQL_EMBEDDED_LIB} ${COMP_VAR})
|
get_filename_component(MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES} ${COMP_VAR})
|
||||||
debugmsg("MYSQL_EMBEDDED_LIB directory component: ${MYSQL_EMBEDDED_LIB}")
|
debugmsg("MYSQL_EMBEDDED_LIBRARIES directory component: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
endif()
|
endif()
|
||||||
debugmsg("Searching for the embedded library at: ${MYSQL_EMBEDDED_LIB}")
|
debugmsg("Searching for the embedded library at: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(STATIC_EMBEDDED)
|
if(STATIC_EMBEDDED)
|
||||||
@ -66,38 +67,38 @@ if(STATIC_EMBEDDED)
|
|||||||
debugmsg("Using the static embedded library...")
|
debugmsg("Using the static embedded library...")
|
||||||
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
if (DEFINED MYSQL_EMBEDDED_LIB)
|
if (DEFINED MYSQL_EMBEDDED_LIBRARIES)
|
||||||
debugmsg("Searching for libmysqld.a at: ${MYSQL_EMBEDDED_LIB}")
|
debugmsg("Searching for libmysqld.a at: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
find_library(MYSQL_EMBEDDED_LIB_STATIC libmysqld.a PATHS ${MYSQL_EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
find_library(MYSQL_EMBEDDED_LIBRARIES_STATIC libmysqld.a PATHS ${MYSQL_EMBEDDED_LIBRARIES} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
||||||
else()
|
else()
|
||||||
find_library(MYSQL_EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb)
|
find_library(MYSQL_EMBEDDED_LIBRARIES_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb)
|
||||||
endif()
|
endif()
|
||||||
debugmsg("Search returned: ${MYSQL_EMBEDDED_LIB_STATIC}")
|
debugmsg("Search returned: ${MYSQL_EMBEDDED_LIBRARIES_STATIC}")
|
||||||
|
|
||||||
set(MYSQL_EMBEDDED_LIB ${MYSQL_EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
|
set(MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
||||||
|
|
||||||
else()
|
else()
|
||||||
debugmsg("Using the dynamic embedded library...")
|
debugmsg("Using the dynamic embedded library...")
|
||||||
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
|
||||||
if (DEFINED MYSQL_EMBEDDED_LIB)
|
if (DEFINED MYSQL_EMBEDDED_LIBRARIES)
|
||||||
debugmsg("Searching for libmysqld.so at: ${MYSQL_EMBEDDED_LIB}")
|
debugmsg("Searching for libmysqld.so at: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
find_library(MYSQL_EMBEDDED_LIB_DYNAMIC mysqld PATHS ${MYSQL_EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
find_library(MYSQL_EMBEDDED_LIBRARIES_DYNAMIC mysqld PATHS ${MYSQL_EMBEDDED_LIBRARIES} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
||||||
else()
|
else()
|
||||||
find_library(MYSQL_EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb)
|
find_library(MYSQL_EMBEDDED_LIBRARIES_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb)
|
||||||
endif()
|
endif()
|
||||||
debugmsg("Search returned: ${MYSQL_EMBEDDED_LIB_DYNAMIC}")
|
debugmsg("Search returned: ${MYSQL_EMBEDDED_LIBRARIES_DYNAMIC}")
|
||||||
set(MYSQL_EMBEDDED_LIB ${MYSQL_EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE)
|
set(MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
unset(MYSQL_EMBEDDED_LIB_DYNAMIC)
|
unset(MYSQL_EMBEDDED_LIBRARIES_DYNAMIC)
|
||||||
unset(MYSQL_EMBEDDED_LIB_STATIC)
|
unset(MYSQL_EMBEDDED_LIBRARIES_STATIC)
|
||||||
unset(OLD_SUFFIXES)
|
unset(OLD_SUFFIXES)
|
||||||
|
|
||||||
check_library_exists(${MYSQL_EMBEDDED_LIB} pcre_stack_guard ${MYSQL_EMBEDDED_LIB} HAVE_EMBEDDED_PCRE)
|
check_library_exists(${MYSQL_EMBEDDED_LIBRARIES} pcre_stack_guard ${MYSQL_EMBEDDED_LIBRARIES} HAVE_EMBEDDED_PCRE)
|
||||||
|
|
||||||
if(HAVE_EMBEDDED_PCRE)
|
if(HAVE_EMBEDDED_PCRE)
|
||||||
set(PCRE_LINK_FLAGS "" CACHE INTERNAL "pcre linker flags")
|
set(PCRE_LINK_FLAGS "" CACHE INTERNAL "pcre linker flags")
|
||||||
@ -110,8 +111,49 @@ else()
|
|||||||
message(FATAL_ERROR "Could not find PCRE libraries.")
|
message(FATAL_ERROR "Could not find PCRE libraries.")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if( (${MYSQL_EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${MYSQL_EMBEDDED_LIB} MATCHES "NOTFOUND"))
|
if( (${MYSQL_EMBEDDED_LIBRARIES} MATCHES "NOTFOUND") OR (${MYSQL_EMBEDDED_LIBRARIES} MATCHES "NOTFOUND"))
|
||||||
message(FATAL_ERROR "Library not found: libmysqld. If your install of MySQL is in a non-default location, please provide the location with -DMYSQL_EMBEDDED_LIB=<path to library>")
|
message(FATAL_ERROR "Library not found: libmysqld. If your install of MySQL is in a non-default location, please provide the location with -DMYSQL_EMBEDDED_LIBRARIES=<path to library>")
|
||||||
else()
|
else()
|
||||||
message(STATUS "Using embedded library: ${MYSQL_EMBEDDED_LIB}")
|
message(STATUS "Using embedded library: ${MYSQL_EMBEDDED_LIBRARIES}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Find the MySQL headers if they were not defined
|
||||||
|
if(DEFINED MYSQL_EMBEDDED_INCLUDE_DIR)
|
||||||
|
list(APPEND CMAKE_INCLUDE_PATH ${MYSQL_EMBEDDED_INCLUDE_DIR})
|
||||||
|
find_path(MYSQL_EMBEDDED_INCLUDE_DIR_LOC mysql.h PATHS ${MYSQL_EMBEDDED_INCLUDE_DIR} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
||||||
|
else()
|
||||||
|
find_path(MYSQL_EMBEDDED_INCLUDE_DIR_LOC mysql.h PATH_SUFFIXES mysql mariadb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${MYSQL_EMBEDDED_INCLUDE_DIR_LOC} MATCHES "NOTFOUND")
|
||||||
|
message(FATAL_ERROR "Fatal Error: MySQL headers were not found.")
|
||||||
|
else()
|
||||||
|
set(MYSQL_EMBEDDED_INCLUDE_DIR ${MYSQL_EMBEDDED_INCLUDE_DIR_LOC} CACHE PATH "Path to MySQL headers" FORCE)
|
||||||
|
message(STATUS "Using MySQL headers found at: ${MYSQL_EMBEDDED_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(MYSQL_EMBEDDED_INCLUDE_DIR_LOC)
|
||||||
|
|
||||||
|
# Find the errmsg.sys file if it was not defied
|
||||||
|
if( DEFINED ERRMSG )
|
||||||
|
debugmsg("Looking for errmsg.sys at: ${ERRMSG}")
|
||||||
|
if(NOT(IS_DIRECTORY ${ERRMSG}))
|
||||||
|
get_filename_component(ERRMSG ${ERRMSG} PATH)
|
||||||
|
debugmsg("Path to file is: ${ERRMSG}")
|
||||||
|
endif()
|
||||||
|
find_file(ERRMSG_FILE errmsg.sys PATHS ${ERRMSG} NO_DEFAULT_PATH)
|
||||||
|
if(${ERRMSG_FILE} MATCHES "NOTFOUND")
|
||||||
|
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found at ${ERRMSG}")
|
||||||
|
else()
|
||||||
|
message(STATUS "Using custom errmsg.sys found at: ${ERRMSG_FILE}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_file(ERRMSG_FILE errmsg.sys PATHS /usr/share /usr/share/mysql /usr/local/share/mysql PATH_SUFFIXES english mysql/english)
|
||||||
|
if(${ERRMSG_FILE} MATCHES "NOTFOUND")
|
||||||
|
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found, please define the path to it by using -DERRMSG=<path>")
|
||||||
|
else()
|
||||||
|
message(STATUS "Using errmsg.sys found at: ${ERRMSG_FILE}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(ERRMSG ${ERRMSG_FILE} CACHE FILEPATH "Path to the errmsg.sys file." FORCE)
|
||||||
|
unset(ERRMSG_FILE)
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
# This CMake file tries to find the the MySQL client library
|
|
||||||
# The following variables are set:
|
|
||||||
# MYSQLCLIENT_FOUND - System has MySQL client
|
|
||||||
# MYSQLCLIENT_STATIC_FOUND - System has statically linked MySQL client
|
|
||||||
# MYSQLCLIENT_LIBRARIES - The MySQL client library
|
|
||||||
# MYSQLCLIENT_STATIC_LIBRARIES - The static MySQL client library
|
|
||||||
# MYSQLCLIENT_HEADERS - The MySQL client headers
|
|
||||||
|
|
||||||
find_library(MYSQLCLIENT_LIBRARIES NAMES mysqlclient PATH_SUFFIXES mysql mariadb)
|
|
||||||
if(${MYSQLCLIENT_LIBRARIES} MATCHES "NOTFOUND")
|
|
||||||
set(MYSQLCLIENT_FOUND FALSE CACHE INTERNAL "")
|
|
||||||
message(STATUS "Dynamic MySQL client library not found.")
|
|
||||||
unset(MYSQLCLIENT_LIBRARIES)
|
|
||||||
else()
|
|
||||||
set(MYSQLCLIENT_FOUND TRUE CACHE INTERNAL "")
|
|
||||||
message(STATUS "Found dynamic MySQL client library: ${MYSQLCLIENT_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
|
||||||
find_library(MYSQLCLIENT_STATIC_LIBRARIES NAMES mysqlclient PATH_SUFFIXES mysql mariadb)
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
|
|
||||||
|
|
||||||
if(${MYSQLCLIENT_STATIC_LIBRARIES} MATCHES "NOTFOUND")
|
|
||||||
set(MYSQLCLIENT_STATIC_FOUND FALSE CACHE INTERNAL "")
|
|
||||||
message(STATUS "Static MySQL client library not found.")
|
|
||||||
unset(MYSQLCLIENT_STATIC_LIBRARIES)
|
|
||||||
else()
|
|
||||||
set(MYSQLCLIENT_STATIC_FOUND TRUE CACHE INTERNAL "")
|
|
||||||
message(STATUS "Found statc MySQL client library: ${MYSQLCLIENT_STATIC_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_path(MYSQLCLIENT_HEADERS mysql.h PATH_SUFFIXES mysql mariadb)
|
|
@ -144,60 +144,15 @@ macro(check_deps)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
macro(check_dirs)
|
macro(check_dirs)
|
||||||
# Find the MySQL headers if they were not defined
|
|
||||||
|
|
||||||
if(DEFINED MYSQL_DIR)
|
|
||||||
debugmsg("Searching for MySQL headers at: ${MYSQL_DIR}")
|
|
||||||
list(APPEND CMAKE_INCLUDE_PATH ${MYSQL_DIR})
|
|
||||||
find_path(MYSQL_DIR_LOC mysql.h PATHS ${MYSQL_DIR} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
|
|
||||||
else()
|
|
||||||
find_path(MYSQL_DIR_LOC mysql.h PATH_SUFFIXES mysql mariadb)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
debugmsg("Search returned: ${MYSQL_DIR_LOC}")
|
|
||||||
|
|
||||||
if(${MYSQL_DIR_LOC} MATCHES "NOTFOUND")
|
|
||||||
message(FATAL_ERROR "Fatal Error: MySQL headers were not found.")
|
|
||||||
else()
|
|
||||||
set(MYSQL_DIR ${MYSQL_DIR_LOC} CACHE PATH "Path to MySQL headers" FORCE)
|
|
||||||
message(STATUS "Using MySQL headers found at: ${MYSQL_DIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
unset(MYSQL_DIR_LOC)
|
|
||||||
|
|
||||||
# Find the errmsg.sys file if it was not defied
|
|
||||||
if( DEFINED ERRMSG )
|
|
||||||
debugmsg("Looking for errmsg.sys at: ${ERRMSG}")
|
|
||||||
if(NOT(IS_DIRECTORY ${ERRMSG}))
|
|
||||||
get_filename_component(ERRMSG ${ERRMSG} PATH)
|
|
||||||
debugmsg("Path to file is: ${ERRMSG}")
|
|
||||||
endif()
|
|
||||||
find_file(ERRMSG_FILE errmsg.sys PATHS ${ERRMSG} NO_DEFAULT_PATH)
|
|
||||||
if(${ERRMSG_FILE} MATCHES "NOTFOUND")
|
|
||||||
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found at ${ERRMSG}")
|
|
||||||
else()
|
|
||||||
message(STATUS "Using custom errmsg.sys found at: ${ERRMSG_FILE}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
find_file(ERRMSG_FILE errmsg.sys PATHS /usr/share /usr/share/mysql /usr/local/share/mysql PATH_SUFFIXES english mysql/english)
|
|
||||||
if(${ERRMSG_FILE} MATCHES "NOTFOUND")
|
|
||||||
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found, please define the path to it by using -DERRMSG=<path>")
|
|
||||||
else()
|
|
||||||
message(STATUS "Using errmsg.sys found at: ${ERRMSG_FILE}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
set(ERRMSG ${ERRMSG_FILE} CACHE FILEPATH "Path to the errmsg.sys file." FORCE)
|
|
||||||
unset(ERRMSG_FILE)
|
|
||||||
|
|
||||||
# Check which init.d script to install
|
# Check which init.d script to install
|
||||||
if(WITH_SCRIPTS)
|
if(WITH_SCRIPTS)
|
||||||
find_file(RPM_FNC functions PATHS /etc/rc.d/init.d)
|
find_file(RPM_FNC functions PATHS /etc/rc.d/init.d)
|
||||||
if(${RPM_FNC} MATCHES "RPM_FNC-NOTFOUND")
|
if(${RPM_FNC} MATCHES "RPM_FNC-NOTFOUND")
|
||||||
find_file(DEB_FNC init-functions PATHS /lib/lsb)
|
find_file(DEB_FNC init-functions PATHS /lib/lsb)
|
||||||
if(${DEB_FNC} MATCHES "DEB_FNC-NOTFOUND")
|
if(${DEB_FNC} MATCHES "DEB_FNC-NOTFOUND")
|
||||||
message(FATAL_ERROR "Cannot find required init-functions in /lib/lsb/ or /etc/rc.d/init.d/, please confirm that your system files are OK.")
|
message(FATAL_ERROR "Cannot find required init-functions in /lib/lsb/ or /etc/rc.d/init.d/, please confirm that your system files are OK.")
|
||||||
else()
|
else()
|
||||||
set(DEB_BASED TRUE CACHE BOOL "If init.d script uses /lib/lsb/init-functions instead of /etc/rc.d/init.d/functions.")
|
set(DEB_BASED TRUE CACHE BOOL "If init.d script uses /lib/lsb/init-functions instead of /etc/rc.d/init.d/functions.")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
set(DEB_BASED FALSE CACHE BOOL "If init.d script uses /lib/lsb/init-functions instead of /etc/rc.d/init.d/functions.")
|
set(DEB_BASED FALSE CACHE BOOL "If init.d script uses /lib/lsb/init-functions instead of /etc/rc.d/init.d/functions.")
|
||||||
@ -215,16 +170,17 @@ endmacro()
|
|||||||
|
|
||||||
function(subdirs VAR DIRPATH)
|
function(subdirs VAR DIRPATH)
|
||||||
|
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
|
if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
|
||||||
set(COMP_VAR PATH)
|
set(COMP_VAR PATH)
|
||||||
else()
|
else()
|
||||||
set(COMP_VAR DIRECTORY)
|
set(COMP_VAR DIRECTORY)
|
||||||
endif()
|
endif()
|
||||||
file(GLOB_RECURSE SDIR ${DIRPATH}/*)
|
file(GLOB_RECURSE SDIR ${DIRPATH}/*)
|
||||||
foreach(LOOP ${SDIR})
|
foreach(LOOP ${SDIR})
|
||||||
get_filename_component(LOOP ${LOOP} ${COMP_VAR})
|
get_filename_component(LOOP ${LOOP} ${COMP_VAR})
|
||||||
list(APPEND ALLDIRS ${LOOP})
|
list(APPEND ALLDIRS ${LOOP})
|
||||||
endforeach()
|
endforeach()
|
||||||
list(REMOVE_DUPLICATES ALLDIRS)
|
list(REMOVE_DUPLICATES ALLDIRS)
|
||||||
set(${VAR} "${ALLDIRS}" CACHE PATH " " FORCE)
|
set(${VAR} "${ALLDIRS}" CACHE PATH " " FORCE)
|
||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
add_library(query_classifier SHARED query_classifier.cc)
|
add_library(query_classifier SHARED query_classifier.cc)
|
||||||
|
|
||||||
target_link_libraries(query_classifier ${MYSQL_EMBEDDED_LIB} aio crypt crypto dl m ${PCRE_LINK_FLAGS} ssl stdc++ z)
|
target_link_libraries(query_classifier maxscale-common)
|
||||||
set_target_properties(query_classifier PROPERTIES VERSION "1.0.0")
|
set_target_properties(query_classifier PROPERTIES VERSION "1.0.0")
|
||||||
set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/query_classifier.map)
|
set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/query_classifier.map)
|
||||||
#set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,-z,defs)
|
set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,-z,defs)
|
||||||
install(TARGETS query_classifier COMPONENT lib DESTINATION ${MAXSCALE_LIBDIR})
|
install(TARGETS query_classifier COMPONENT lib DESTINATION ${MAXSCALE_LIBDIR})
|
||||||
|
|
||||||
add_subdirectory(qc_mysqlembedded)
|
add_subdirectory(qc_mysqlembedded)
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
|
# Include the embedded library headers
|
||||||
|
subdirs(MYSQL_INCLUDE_DIR_ALL ${MYSQL_EMBEDDED_INCLUDE_DIR})
|
||||||
|
foreach(DIR ${MYSQL_INCLUDE_DIR_ALL})
|
||||||
|
include_directories(${DIR})
|
||||||
|
endforeach()
|
||||||
|
include_directories(${MYSQL_EMMBEDDED_INCLUDE_DIR}/..)
|
||||||
|
|
||||||
add_library(qc_mysqlembedded SHARED qc_mysqlembedded.cc)
|
add_library(qc_mysqlembedded SHARED qc_mysqlembedded.cc)
|
||||||
|
|
||||||
target_link_libraries(qc_mysqlembedded ${MYSQL_EMBEDDED_LIB} aio crypt crypto dl m ${PCRE_LINK_FLAGS} ssl stdc++ z)
|
include_directories(${MYSQL_INCLUDE_DIR})
|
||||||
|
target_link_libraries(qc_mysqlembedded ${MYSQL_EMBEDDED_LIBRARIES} aio crypt crypto dl m ${PCRE_LINK_FLAGS} ssl stdc++ z)
|
||||||
set_target_properties(qc_mysqlembedded PROPERTIES VERSION "1.0.0")
|
set_target_properties(qc_mysqlembedded PROPERTIES VERSION "1.0.0")
|
||||||
set_target_properties(qc_mysqlembedded PROPERTIES LINK_FLAGS -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/qc_mysqlembedded.map)
|
set_target_properties(qc_mysqlembedded PROPERTIES LINK_FLAGS -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/qc_mysqlembedded.map)
|
||||||
#set_target_properties(qc_mysqlembedded PROPERTIES LINK_FLAGS -Wl,-z,defs)
|
#set_target_properties(qc_mysqlembedded PROPERTIES LINK_FLAGS -Wl,-z,defs)
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
#include <log_manager.h>
|
#include <log_manager.h>
|
||||||
#include <query_classifier.h>
|
#include <query_classifier.h>
|
||||||
#include <mysql_client_server_protocol.h>
|
#include <mysql_client_server_protocol.h>
|
||||||
|
#include <gwdirs.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -1775,29 +1776,126 @@ qc_query_op_t qc_get_operation(GWBUF* querybuf)
|
|||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
bool qc_init(int argc, char** argv, char** groups)
|
|
||||||
{
|
{
|
||||||
int rc = mysql_library_init(argc, argv, groups);
|
|
||||||
|
|
||||||
if (rc != 0)
|
// Do not change the order without making corresponding changes to IDX_... below.
|
||||||
|
const char* server_options[] =
|
||||||
|
{
|
||||||
|
"MariaDB Corporation MaxScale",
|
||||||
|
"--no-defaults",
|
||||||
|
"--datadir=",
|
||||||
|
"--language=",
|
||||||
|
"--skip-innodb",
|
||||||
|
"--default-storage-engine=myisam",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const int IDX_DATADIR = 2;
|
||||||
|
const int IDX_LANGUAGE = 3;
|
||||||
|
const int N_OPTIONS = (sizeof(server_options) / sizeof(server_options[0])) - 1;
|
||||||
|
|
||||||
|
const char* server_groups[] = {
|
||||||
|
"embedded",
|
||||||
|
"server",
|
||||||
|
"server",
|
||||||
|
"embedded",
|
||||||
|
"server",
|
||||||
|
"server",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const int OPTIONS_DATADIR_SIZE = 10 + PATH_MAX; // strlen("--datadir=");
|
||||||
|
const int OPTIONS_LANGUAGE_SIZE = 11 + PATH_MAX; // strlen("--language=");
|
||||||
|
|
||||||
|
char datadir_arg[OPTIONS_DATADIR_SIZE];
|
||||||
|
char language_arg[OPTIONS_LANGUAGE_SIZE];
|
||||||
|
|
||||||
|
|
||||||
|
bool create_datadir(const char* base, char* datadir)
|
||||||
|
{
|
||||||
|
bool created = false;
|
||||||
|
|
||||||
|
if (snprintf(datadir, PATH_MAX, "%s/data%d", base, getpid()) < PATH_MAX)
|
||||||
{
|
{
|
||||||
MXS_ERROR("mysql_library_init() failed. Error code: %d", rc);
|
int rc = mkdir(datadir, 0777);
|
||||||
|
|
||||||
|
if ((rc == 0) || (errno == EEXIST))
|
||||||
|
{
|
||||||
|
created = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char errbuf[STRERROR_BUFLEN];
|
||||||
|
fprintf(stderr, "MaxScale: error: Cannot create data directory '%s': %d %s\n",
|
||||||
|
datadir, errno, strerror_r(errno, errbuf, sizeof(errbuf)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MXS_NOTICE("Query classifier initialized.");
|
fprintf(stderr, "MaxScale: error: Too long data directory: %s/data%d.", base, getpid());
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc == 0;
|
return created;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qc_end()
|
void configure_options(const char* datadir, const char* langdir)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
rv = snprintf(datadir_arg, OPTIONS_DATADIR_SIZE, "--datadir=%s", datadir);
|
||||||
|
ss_dassert(rv < OPTIONS_DATADIR_SIZE); // Ensured by create_datadir().
|
||||||
|
server_options[IDX_DATADIR] = datadir_arg;
|
||||||
|
|
||||||
|
rv = sprintf(language_arg, "--language=%s", langdir);
|
||||||
|
ss_dassert(rv < OPTIONS_LANGUAGE_SIZE); // Ensured by qc_init().
|
||||||
|
server_options[IDX_LANGUAGE] = language_arg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qc_init(void)
|
||||||
|
{
|
||||||
|
bool inited = false;
|
||||||
|
char datadir[PATH_MAX];
|
||||||
|
|
||||||
|
if (strlen(get_langdir()) >= PATH_MAX)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "MaxScale: error: Language path is too long: %s.", get_langdir());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (create_datadir(get_datadir(), datadir))
|
||||||
|
{
|
||||||
|
configure_options(datadir, get_langdir());
|
||||||
|
|
||||||
|
int argc = N_OPTIONS;
|
||||||
|
char** argv = const_cast<char**>(server_options);
|
||||||
|
char** groups = const_cast<char**>(server_groups);
|
||||||
|
|
||||||
|
int rc = mysql_library_init(argc, argv, groups);
|
||||||
|
|
||||||
|
if (rc != 0)
|
||||||
|
{
|
||||||
|
MXS_ERROR("mysql_library_init() failed. Error code: %d", rc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MXS_NOTICE("Query classifier initialized.");
|
||||||
|
inited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inited;
|
||||||
|
}
|
||||||
|
|
||||||
|
void qc_end(void)
|
||||||
{
|
{
|
||||||
mysql_library_end();
|
mysql_library_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool qc_thread_init()
|
bool qc_thread_init(void)
|
||||||
{
|
{
|
||||||
bool inited = (mysql_thread_init() == 0);
|
bool inited = (mysql_thread_init() == 0);
|
||||||
|
|
||||||
@ -1809,7 +1907,7 @@ bool qc_thread_init()
|
|||||||
return inited;
|
return inited;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qc_thread_end()
|
void qc_thread_end(void)
|
||||||
{
|
{
|
||||||
mysql_thread_end();
|
mysql_thread_end();
|
||||||
}
|
}
|
||||||
@ -1818,6 +1916,9 @@ void qc_thread_end()
|
|||||||
* EXPORTS
|
* EXPORTS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
|
||||||
static char version_string[] = "V1.0.0";
|
static char version_string[] = "V1.0.0";
|
||||||
|
|
||||||
static QUERY_CLASSIFIER qc =
|
static QUERY_CLASSIFIER qc =
|
||||||
@ -1862,4 +1963,4 @@ QUERY_CLASSIFIER* GetModuleObject()
|
|||||||
return &qc;
|
return &qc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
global:
|
global:
|
||||||
info;
|
info;
|
||||||
version;
|
version;
|
||||||
GetModuleInfo;
|
GetModuleObject;
|
||||||
ModuleInit;
|
ModuleInit;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -74,11 +74,11 @@ typedef enum
|
|||||||
|
|
||||||
#define QUERY_IS_TYPE(mask,type) ((mask & type) == type)
|
#define QUERY_IS_TYPE(mask,type) ((mask & type) == type)
|
||||||
|
|
||||||
bool qc_init(int argc, char** argv, char** groups);
|
bool qc_init(const char* plugin_name);
|
||||||
void qc_end();
|
void qc_end(void);
|
||||||
|
|
||||||
bool qc_thread_init();
|
bool qc_thread_init(void);
|
||||||
void qc_thread_end();
|
void qc_thread_end(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create THD and use it for creating parse tree. Examine parse tree and
|
* Create THD and use it for creating parse tree. Examine parse tree and
|
||||||
@ -99,11 +99,11 @@ char** qc_get_database_names(GWBUF* querybuf, int* size);
|
|||||||
|
|
||||||
typedef struct query_classifier
|
typedef struct query_classifier
|
||||||
{
|
{
|
||||||
bool (*qc_init)(int argc, char** argv, char** groups);
|
bool (*qc_init)(void);
|
||||||
void (*qc_end)();
|
void (*qc_end)(void);
|
||||||
|
|
||||||
bool (*qc_thread_init)();
|
bool (*qc_thread_init)(void);
|
||||||
void (*qc_thread_end)();
|
void (*qc_thread_end)(void);
|
||||||
|
|
||||||
qc_query_type_t (*qc_get_type)(GWBUF* querybuf);
|
qc_query_type_t (*qc_get_type)(GWBUF* querybuf);
|
||||||
qc_query_op_t (*qc_get_operation)(GWBUF* querybuf);
|
qc_query_op_t (*qc_get_operation)(GWBUF* querybuf);
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
# Include the embedded library headers
|
||||||
|
subdirs(MYSQL_INCLUDE_DIR_ALL ${MYSQL_EMBEDDED_INCLUDE_DIR})
|
||||||
|
foreach(DIR ${MYSQL_INCLUDE_DIR_ALL})
|
||||||
|
include_directories(${DIR})
|
||||||
|
endforeach()
|
||||||
|
include_directories(${MYSQL_EMMBEDDED_INCLUDE_DIR}/..)
|
||||||
|
|
||||||
if(${ERRMSG} MATCHES "ERRMSG-NOTFOUND")
|
if(${ERRMSG} MATCHES "ERRMSG-NOTFOUND")
|
||||||
message(FATAL_ERROR "The errmsg.sys file was not found, please define the path with -DERRMSG=<path>")
|
message(FATAL_ERROR "The errmsg.sys file was not found, please define the path with -DERRMSG=<path>")
|
||||||
else()
|
else()
|
||||||
|
@ -29,9 +29,9 @@ add_subdirectory(inih)
|
|||||||
add_executable (consumer ${CMAKE_BINARY_DIR}/consumer.c)
|
add_executable (consumer ${CMAKE_BINARY_DIR}/consumer.c)
|
||||||
|
|
||||||
if(MYSQLCLIENT_STATIC_FOUND)
|
if(MYSQLCLIENT_STATIC_FOUND)
|
||||||
target_link_libraries(consumer ${MYSQLCLIENT_STATIC_LIBRARIES} rabbitmq inih ssl crypt crypto dl z m pthread)
|
target_link_libraries(consumer ${MARIADB_CONNECTOR_STATIC_LIB} rabbitmq inih ssl crypt crypto dl z m pthread)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(consumer ${MYSQLCLIENT_LIBRARIES} rabbitmq inih ssl crypt crypto dl z m pthread)
|
target_link_libraries(consumer ${MARIADB_CONNECTOR_LIB} rabbitmq inih ssl crypt crypto dl z m pthread)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS consumer DESTINATION ${MAXSCALE_BINDIR})
|
install(TARGETS consumer DESTINATION ${MAXSCALE_BINDIR})
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
# Use the client libraries in MaxScale core
|
||||||
|
include_directories(${MARIADB_CONNECTOR_INCLUDE_DIR})
|
||||||
|
|
||||||
add_subdirectory(core)
|
add_subdirectory(core)
|
||||||
add_subdirectory(modules)
|
add_subdirectory(modules)
|
||||||
add_subdirectory(inih)
|
add_subdirectory(inih)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
add_library(maxscale-common SHARED adminusers.c atomic.c buffer.c config.c dbusers.c dcb.c filter.c externcmd.c gwbitmask.c gwdirs.c gw_utils.c hashtable.c hint.c housekeeper.c load_utils.c maxscale_pcre2.c memlog.c modutil.c monitor.c poll.c random_jkiss.c resultset.c secrets.c server.c service.c session.c spinlock.c thread.c users.c utils.c ${CMAKE_SOURCE_DIR}/log_manager/log_manager.cc ${CMAKE_SOURCE_DIR}/utils/skygw_utils.cc statistics.c)
|
add_library(maxscale-common SHARED adminusers.c atomic.c buffer.c config.c dbusers.c dcb.c filter.c externcmd.c gwbitmask.c gwdirs.c gw_utils.c hashtable.c hint.c housekeeper.c load_utils.c maxscale_pcre2.c memlog.c modutil.c monitor.c poll.c random_jkiss.c resultset.c secrets.c server.c service.c session.c spinlock.c thread.c users.c utils.c ${CMAKE_SOURCE_DIR}/log_manager/log_manager.cc ${CMAKE_SOURCE_DIR}/utils/skygw_utils.cc statistics.c)
|
||||||
|
|
||||||
target_link_libraries(maxscale-common ${MYSQLCLIENT_LIBRARIES} ${LZMA_LINK_FLAGS} ${PCRE2_LIBRARIES} ${CURL_LIBRARIES} ssl aio pthread crypt dl crypto inih z rt m stdc++)
|
target_link_libraries(maxscale-common ${MARIADB_CONNECTOR_LIBRARIES} ${LZMA_LINK_FLAGS} ${PCRE2_LIBRARIES} ${CURL_LIBRARIES} ssl aio pthread crypt dl crypto inih z rt m stdc++)
|
||||||
|
|
||||||
if(WITH_JEMALLOC)
|
if(WITH_JEMALLOC)
|
||||||
target_link_libraries(maxscale-common ${JEMALLOC_LIBRARIES})
|
target_link_libraries(maxscale-common ${JEMALLOC_LIBRARIES})
|
||||||
@ -10,6 +10,7 @@ endif()
|
|||||||
|
|
||||||
add_dependencies(maxscale-common pcre2)
|
add_dependencies(maxscale-common pcre2)
|
||||||
install(TARGETS maxscale-common DESTINATION ${MAXSCALE_LIBDIR})
|
install(TARGETS maxscale-common DESTINATION ${MAXSCALE_LIBDIR})
|
||||||
|
set_target_properties(maxscale-common PROPERTIES VERSION "1.0.0")
|
||||||
|
|
||||||
add_executable(maxscale gateway.c)
|
add_executable(maxscale gateway.c)
|
||||||
add_dependencies(maxscale pcre2)
|
add_dependencies(maxscale pcre2)
|
||||||
|
@ -1002,6 +1002,22 @@ handle_global_item(const char *name, const char *value)
|
|||||||
MXS_ERROR("Invalid timeout value for 'auth_write_timeout': %s", value);
|
MXS_ERROR("Invalid timeout value for 'auth_write_timeout': %s", value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strcmp(name, "query_classifier") == 0)
|
||||||
|
{
|
||||||
|
int len = strlen(value);
|
||||||
|
int max_len = sizeof(gateway.qc_name) - 1;
|
||||||
|
|
||||||
|
if (len <= max_len)
|
||||||
|
{
|
||||||
|
strcpy(gateway.qc_name, value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MXS_ERROR("The length of '%s' is %d, while the maximum length is %d.",
|
||||||
|
value, len, max_len);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; lognames[i].name; i++)
|
for (i = 0; lognames[i].name; i++)
|
||||||
@ -1110,6 +1126,9 @@ global_defaults()
|
|||||||
{
|
{
|
||||||
strncpy(gateway.sysname, uname_data.sysname, _SYSNAME_STR_LENGTH);
|
strncpy(gateway.sysname, uname_data.sysname, _SYSNAME_STR_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* query_classifier */
|
||||||
|
memset(gateway.qc_name, 0, sizeof(gateway.qc_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2186,6 +2186,10 @@ MYSQL *gw_mysql_init()
|
|||||||
{
|
{
|
||||||
if (gw_mysql_set_timeouts(con) == 0)
|
if (gw_mysql_set_timeouts(con) == 0)
|
||||||
{
|
{
|
||||||
|
// MYSQL_OPT_USE_REMOTE_CONNECTION must be set if the embedded
|
||||||
|
// libary is used. With Connector-C (at least 2.2.1) the call
|
||||||
|
// fails.
|
||||||
|
#if !defined(LIBMARIADB)
|
||||||
if (mysql_options(con, MYSQL_OPT_USE_REMOTE_CONNECTION, NULL) != 0)
|
if (mysql_options(con, MYSQL_OPT_USE_REMOTE_CONNECTION, NULL) != 0)
|
||||||
{
|
{
|
||||||
MXS_ERROR("Failed to set external connection. "
|
MXS_ERROR("Failed to set external connection. "
|
||||||
@ -2193,6 +2197,7 @@ MYSQL *gw_mysql_init()
|
|||||||
mysql_close(con);
|
mysql_close(con);
|
||||||
con = NULL;
|
con = NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -104,33 +104,6 @@ time_t MaxScaleStarted;
|
|||||||
extern char *program_invocation_name;
|
extern char *program_invocation_name;
|
||||||
extern char *program_invocation_short_name;
|
extern char *program_invocation_short_name;
|
||||||
|
|
||||||
/*
|
|
||||||
* Server options are passed to the mysql_server_init. Each gateway must have a unique
|
|
||||||
* data directory that is passed to the mysql_server_init, therefore the data directory
|
|
||||||
* is not fixed here and will be updated elsewhere.
|
|
||||||
*/
|
|
||||||
static char* server_options[] = {
|
|
||||||
"MariaDB Corporation MaxScale",
|
|
||||||
"--no-defaults",
|
|
||||||
"--datadir=",
|
|
||||||
"--language=",
|
|
||||||
"--skip-innodb",
|
|
||||||
"--default-storage-engine=myisam",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
|
|
||||||
|
|
||||||
static char* server_groups[] = {
|
|
||||||
"embedded",
|
|
||||||
"server",
|
|
||||||
"server",
|
|
||||||
"embedded",
|
|
||||||
"server",
|
|
||||||
"server",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
/* The data directory we created for this gateway instance */
|
/* The data directory we created for this gateway instance */
|
||||||
static char datadir[PATH_MAX + 1] = "";
|
static char datadir[PATH_MAX + 1] = "";
|
||||||
static bool datadir_defined = false; /*< If the datadir was already set */
|
static bool datadir_defined = false; /*< If the datadir was already set */
|
||||||
@ -144,9 +117,9 @@ static int pidfd = PIDFD_CLOSED;
|
|||||||
static bool do_exit = FALSE;
|
static bool do_exit = FALSE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag to indicate whether libmysqld is successfully initialized.
|
* Flag to indicate whether MySQL is successfully initialized.
|
||||||
*/
|
*/
|
||||||
static bool libmysqld_started = FALSE;
|
static bool libmysql_initialized = FALSE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If MaxScale is started to run in daemon process the value is true.
|
* If MaxScale is started to run in daemon process the value is true.
|
||||||
@ -505,7 +478,7 @@ void datadir_cleanup()
|
|||||||
|
|
||||||
static void libmysqld_done(void)
|
static void libmysqld_done(void)
|
||||||
{
|
{
|
||||||
if (libmysqld_started)
|
if (libmysql_initialized)
|
||||||
{
|
{
|
||||||
mysql_library_end();
|
mysql_library_end();
|
||||||
}
|
}
|
||||||
@ -1062,8 +1035,6 @@ int main(int argc, char **argv)
|
|||||||
int child_status;
|
int child_status;
|
||||||
THREAD* threads = NULL; /*< thread list */
|
THREAD* threads = NULL; /*< thread list */
|
||||||
char mysql_home[PATH_MAX+1];
|
char mysql_home[PATH_MAX+1];
|
||||||
char datadir_arg[10+PATH_MAX+1]; /*< '--datadir=' + PATH_MAX */
|
|
||||||
char language_arg[11+PATH_MAX+1]; /*< '--language=' + PATH_MAX */
|
|
||||||
char* cnf_file_path = NULL; /*< conf file, to be freed */
|
char* cnf_file_path = NULL; /*< conf file, to be freed */
|
||||||
char* cnf_file_arg = NULL; /*< conf filename from cmd-line arg */
|
char* cnf_file_arg = NULL; /*< conf filename from cmd-line arg */
|
||||||
THREAD log_flush_thr;
|
THREAD log_flush_thr;
|
||||||
@ -1777,19 +1748,6 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(datadir, PATH_MAX, "%s/data%d", get_datadir(), getpid());
|
|
||||||
|
|
||||||
if (mkdir(datadir, 0777) != 0){
|
|
||||||
|
|
||||||
if (errno != EEXIST){
|
|
||||||
char errbuf[STRERROR_BUFLEN];
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error: Cannot create data directory '%s': %d %s\n",
|
|
||||||
datadir, errno, strerror_r(errno, errbuf, sizeof(errbuf)));
|
|
||||||
goto return_main;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!daemon_mode)
|
if (!daemon_mode)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@ -1811,25 +1769,23 @@ int main(int argc, char **argv)
|
|||||||
MXS_NOTICE("Module directory: %s", get_libdir());
|
MXS_NOTICE("Module directory: %s", get_libdir());
|
||||||
MXS_NOTICE("Service cache: %s", get_cachedir());
|
MXS_NOTICE("Service cache: %s", get_cachedir());
|
||||||
|
|
||||||
/*< Update the server options */
|
if (!config_load(cnf_file_path))
|
||||||
for (i = 0; server_options[i]; i++)
|
|
||||||
{
|
{
|
||||||
if (!strcmp(server_options[i], "--datadir="))
|
char* fprerr =
|
||||||
{
|
"Failed to open, read or process the MaxScale configuration "
|
||||||
snprintf(datadir_arg, 10+PATH_MAX+1, "--datadir=%s", datadir);
|
"file. Exiting. See the error log for details.";
|
||||||
server_options[i] = datadir_arg;
|
print_log_n_stderr(false, !daemon_mode, fprerr, fprerr, 0);
|
||||||
}
|
MXS_ERROR("Failed to open, read or process the MaxScale configuration file %s. "
|
||||||
else if (!strcmp(server_options[i], "--language="))
|
"Exiting.",
|
||||||
{
|
cnf_file_path);
|
||||||
snprintf(language_arg,
|
rc = MAXSCALE_BADCONFIG;
|
||||||
11+PATH_MAX+1,
|
goto return_main;
|
||||||
"--language=%s",
|
|
||||||
get_langdir());
|
|
||||||
server_options[i] = language_arg;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!qc_init(num_elements, server_options, server_groups))
|
GATEWAY_CONF* cnf = config_get_global_options();
|
||||||
|
ss_dassert(cnf);
|
||||||
|
|
||||||
|
if (!qc_init(cnf->qc_name))
|
||||||
{
|
{
|
||||||
char* logerr = "Failed to initialise query classifier library.";
|
char* logerr = "Failed to initialise query classifier library.";
|
||||||
print_log_n_stderr(true, true, logerr, logerr, eno);
|
print_log_n_stderr(true, true, logerr, logerr, eno);
|
||||||
@ -1837,7 +1793,7 @@ int main(int argc, char **argv)
|
|||||||
goto return_main;
|
goto return_main;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mysql_library_init(num_elements, server_options, server_groups))
|
if (mysql_library_init(0, NULL, NULL))
|
||||||
{
|
{
|
||||||
if (!daemon_mode)
|
if (!daemon_mode)
|
||||||
{
|
{
|
||||||
@ -1876,28 +1832,14 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
MXS_ERROR("mysql_library_init failed. It is a "
|
MXS_ERROR("mysql_library_init failed. It is a "
|
||||||
"mandatory component, required by router services and "
|
"mandatory component, required by router services and "
|
||||||
"the MaxScale core. Error %d, %s, %s : %d. Exiting.",
|
"the MaxScale core. Error %d, %s. Exiting.",
|
||||||
mysql_errno(NULL),
|
mysql_errno(NULL),
|
||||||
mysql_error(NULL),
|
mysql_error(NULL));
|
||||||
__FILE__,
|
|
||||||
__LINE__);
|
|
||||||
rc = MAXSCALE_NOLIBRARY;
|
rc = MAXSCALE_NOLIBRARY;
|
||||||
goto return_main;
|
goto return_main;
|
||||||
}
|
}
|
||||||
libmysqld_started = TRUE;
|
libmysql_initialized = TRUE;
|
||||||
|
|
||||||
if (!config_load(cnf_file_path))
|
|
||||||
{
|
|
||||||
char* fprerr =
|
|
||||||
"Failed to open, read or process the MaxScale configuration "
|
|
||||||
"file. Exiting. See the error log for details.";
|
|
||||||
print_log_n_stderr(false, !daemon_mode, fprerr, fprerr, 0);
|
|
||||||
MXS_ERROR("Failed to open, read or process the MaxScale configuration file %s. "
|
|
||||||
"Exiting.",
|
|
||||||
cnf_file_path);
|
|
||||||
rc = MAXSCALE_BADCONFIG;
|
|
||||||
goto return_main;
|
|
||||||
}
|
|
||||||
MXS_NOTICE("MariaDB Corporation MaxScale %s (C) MariaDB Corporation Ab 2013-2015", MAXSCALE_VERSION);
|
MXS_NOTICE("MariaDB Corporation MaxScale %s (C) MariaDB Corporation Ab 2013-2015", MAXSCALE_VERSION);
|
||||||
MXS_NOTICE("MaxScale is running in process %i", getpid());
|
MXS_NOTICE("MaxScale is running in process %i", getpid());
|
||||||
|
|
||||||
@ -2012,6 +1954,8 @@ int main(int argc, char **argv)
|
|||||||
/** Release mysql thread context*/
|
/** Release mysql thread context*/
|
||||||
mysql_thread_end();
|
mysql_thread_end();
|
||||||
|
|
||||||
|
qc_end();
|
||||||
|
|
||||||
utils_end();
|
utils_end();
|
||||||
datadir_cleanup();
|
datadir_cleanup();
|
||||||
MXS_NOTICE("MaxScale shutdown completed.");
|
MXS_NOTICE("MaxScale shutdown completed.");
|
||||||
|
@ -124,7 +124,8 @@ typedef struct
|
|||||||
int log_to_shm; /**< Write log-file to shared memory */
|
int log_to_shm; /**< Write log-file to shared memory */
|
||||||
unsigned int auth_conn_timeout; /**< Connection timeout for the user authentication */
|
unsigned int auth_conn_timeout; /**< Connection timeout for the user authentication */
|
||||||
unsigned int auth_read_timeout; /**< Read timeout for the user authentication */
|
unsigned int auth_read_timeout; /**< Read timeout for the user authentication */
|
||||||
unsigned int auth_write_timeout; /**< Write timeout for the user authentication */
|
unsigned int auth_write_timeout; /**< Write timeout for the user authentication */
|
||||||
|
char qc_name[PATH_MAX]; /**< The name of the query classifier to load */
|
||||||
} GATEWAY_CONF;
|
} GATEWAY_CONF;
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,7 +80,6 @@
|
|||||||
#include <query_classifier.h>
|
#include <query_classifier.h>
|
||||||
#include <spinlock.h>
|
#include <spinlock.h>
|
||||||
#include <session.h>
|
#include <session.h>
|
||||||
#include <plugin.h>
|
|
||||||
#include <housekeeper.h>
|
#include <housekeeper.h>
|
||||||
|
|
||||||
MODULE_INFO info =
|
MODULE_INFO info =
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
#include <dbusers.h>
|
#include <dbusers.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
#include <housekeeper.h>
|
#include <housekeeper.h>
|
||||||
|
#include <mysql.h>
|
||||||
|
|
||||||
#define GW_MYSQL_VERSION "MaxScale " MAXSCALE_VERSION
|
#define GW_MYSQL_VERSION "MaxScale " MAXSCALE_VERSION
|
||||||
#define GW_MYSQL_LOOP_TIMEOUT 300000000
|
#define GW_MYSQL_LOOP_TIMEOUT 300000000
|
||||||
@ -224,9 +225,15 @@ typedef enum
|
|||||||
),
|
),
|
||||||
} gw_mysql_capabilities_t;
|
} gw_mysql_capabilities_t;
|
||||||
|
|
||||||
|
// mysql.h from Connector-C exposes this enum, while mysql.h from
|
||||||
|
// MariaDB does not.
|
||||||
|
// TODO: This should probably be removed as Connector-C will be
|
||||||
|
// TODO: a pre-requisite for building MaxScale.
|
||||||
|
#if defined(LIBMARIADB)
|
||||||
|
typedef enum enum_server_command mysql_server_cmd_t;
|
||||||
|
#else
|
||||||
/** Copy from enum in mariadb-5.5 mysql_com.h */
|
/** Copy from enum in mariadb-5.5 mysql_com.h */
|
||||||
typedef enum mysql_server_cmd {
|
typedef enum mysql_server_cmd {
|
||||||
MYSQL_COM_UNDEFINED = -1,
|
|
||||||
MYSQL_COM_SLEEP = 0,
|
MYSQL_COM_SLEEP = 0,
|
||||||
MYSQL_COM_QUIT,
|
MYSQL_COM_QUIT,
|
||||||
MYSQL_COM_INIT_DB,
|
MYSQL_COM_INIT_DB,
|
||||||
@ -259,7 +266,9 @@ typedef enum mysql_server_cmd {
|
|||||||
MYSQL_COM_DAEMON,
|
MYSQL_COM_DAEMON,
|
||||||
MYSQL_COM_END /*< Must be the last */
|
MYSQL_COM_END /*< Must be the last */
|
||||||
} mysql_server_cmd_t;
|
} mysql_server_cmd_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const mysql_server_cmd_t MYSQL_COM_UNDEFINED = (mysql_server_cmd_t)-1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of server commands, and number of response packets are stored here.
|
* List of server commands, and number of response packets are stored here.
|
||||||
|
@ -4,7 +4,9 @@ target_link_libraries(binlogrouter maxscale-common)
|
|||||||
install(TARGETS binlogrouter DESTINATION ${MAXSCALE_LIBDIR})
|
install(TARGETS binlogrouter DESTINATION ${MAXSCALE_LIBDIR})
|
||||||
|
|
||||||
add_executable(maxbinlogcheck maxbinlogcheck.c blr_file.c blr_cache.c blr_master.c blr_slave.c blr.c)
|
add_executable(maxbinlogcheck maxbinlogcheck.c blr_file.c blr_cache.c blr_master.c blr_slave.c blr.c)
|
||||||
target_link_libraries(maxbinlogcheck maxscale-common query_classifier)
|
# maxbinlogcheck refers to my_uuid_init and my_uuin. They are non-public functions and
|
||||||
|
# should not be used. They are found only from the embedded lib.
|
||||||
|
target_link_libraries(maxbinlogcheck maxscale-common query_classifier ${MYSQL_EMBEDDED_LIBRARIES})
|
||||||
|
|
||||||
install(TARGETS maxbinlogcheck DESTINATION bin)
|
install(TARGETS maxbinlogcheck DESTINATION bin)
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
if(BUILD_TESTS)
|
if(BUILD_TESTS)
|
||||||
add_executable(testbinlogrouter testbinlog.c ../blr.c ../blr_slave.c ../blr_master.c ../blr_file.c ../blr_cache.c)
|
add_executable(testbinlogrouter testbinlog.c ../blr.c ../blr_slave.c ../blr_master.c ../blr_file.c ../blr_cache.c)
|
||||||
target_link_libraries(testbinlogrouter maxscale-common query_classifier)
|
# testbinlogrouter refers to my_uuid_init and my_uuin. They are non-public functions and
|
||||||
|
# should not be used. They are found only from the embedded lib.
|
||||||
|
target_link_libraries(testbinlogrouter maxscale-common query_classifier ${MYSQL_EMBEDDED_LIBRARIES})
|
||||||
add_test(TestBinlogRouter ${CMAKE_CURRENT_BINARY_DIR}/testbinlogrouter)
|
add_test(TestBinlogRouter ${CMAKE_CURRENT_BINARY_DIR}/testbinlogrouter)
|
||||||
endif()
|
endif()
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
if(MYSQLCLIENT_FOUND AND BUILD_TESTS)
|
if(MYSQLCLIENT_FOUND AND BUILD_TESTS)
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/test.cmake @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/test.cmake @ONLY)
|
||||||
add_executable(testschemarouter testschemarouter.c)
|
add_executable(testschemarouter testschemarouter.c)
|
||||||
target_link_libraries(testschemarouter ${MYSQLCLIENT_LIBRARIES} ssl crypto dl z m rt pthread)
|
target_link_libraries(testschemarouter ${MARIADB_CONNECTOR_LIB} ssl crypto dl z m rt pthread)
|
||||||
add_executable(testschemarouter2 testschemarouter2.c)
|
add_executable(testschemarouter2 testschemarouter2.c)
|
||||||
target_link_libraries(testschemarouter2 ${MYSQLCLIENT_LIBRARIES} ssl crypto dl z m rt pthread)
|
target_link_libraries(testschemarouter2 ${MARIADB_CONNECTOR_LIB} ssl crypto dl z m rt pthread)
|
||||||
add_test(NAME TestSchemaRouter COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/test.cmake)
|
add_test(NAME TestSchemaRouter COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/test.cmake)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
if(MYSQLCLIENT_FOUND)
|
if(MYSQLCLIENT_FOUND)
|
||||||
add_executable(testconnect testconnect.c)
|
add_executable(testconnect testconnect.c)
|
||||||
message(STATUS "Linking against: ${MYSQLCLIENT_LIBRARIES}")
|
message(STATUS "Linking against: ${MARIADB_CONNECTOR_LIB}")
|
||||||
target_link_libraries(testconnect ${MYSQLCLIENT_LIBRARIES} ssl crypto dl z m rt pthread)
|
target_link_libraries(testconnect ${MARIADB_CONNECTOR_LIB} ssl crypto dl z m rt pthread)
|
||||||
add_test(NAME ReadConnRouterAuthTest COMMAND $<TARGET_FILE:testconnect> 10000 ${TEST_HOST} ${MASTER_PORT} ${TEST_HOST} ${TEST_PORT} 1.10)
|
add_test(NAME ReadConnRouterAuthTest COMMAND $<TARGET_FILE:testconnect> 10000 ${TEST_HOST} ${MASTER_PORT} ${TEST_HOST} ${TEST_PORT} 1.10)
|
||||||
endif()
|
endif()
|
||||||
|
Reference in New Issue
Block a user