Commit bb045e79 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-16183 TokuDB tests fail on Fedora 28

jemalloc > 5.0.0 doesn't like to be linked with
a dlopen-ed module.

Don't link tokudb with jemalloc on Fedora 28,
LD_PRELOAD it instead with mysqld_safe
and with systemd.
parent cb21e117
...@@ -35,7 +35,7 @@ SET(TOKUDB_SOURCES ...@@ -35,7 +35,7 @@ SET(TOKUDB_SOURCES
tokudb_thread.cc tokudb_thread.cc
tokudb_dir_cmd.cc) tokudb_dir_cmd.cc)
MYSQL_ADD_PLUGIN(tokudb ${TOKUDB_SOURCES} STORAGE_ENGINE MODULE_ONLY MYSQL_ADD_PLUGIN(tokudb ${TOKUDB_SOURCES} STORAGE_ENGINE MODULE_ONLY
COMPONENT tokudb-engine CONFIG tokudb.cnf) COMPONENT tokudb-engine CONFIG ${CMAKE_CURRENT_BINARY_DIR}/tokudb.cnf)
IF(NOT TARGET tokudb) IF(NOT TARGET tokudb)
RETURN() RETURN()
...@@ -46,6 +46,33 @@ CHECK_JEMALLOC() ...@@ -46,6 +46,33 @@ CHECK_JEMALLOC()
IF(NOT LIBJEMALLOC) IF(NOT LIBJEMALLOC)
MESSAGE(WARNING "TokuDB is enabled, but jemalloc is not. This configuration is not supported") MESSAGE(WARNING "TokuDB is enabled, but jemalloc is not. This configuration is not supported")
ELSEIF(LIBJEMALLOC STREQUAL jemalloc)
FIND_LIBRARY(LIBJEMALLOC_SO jemalloc)
IF(NOT LIBJEMALLOC_SO)
MESSAGE(FATAL_ERROR "jemalloc is present, but cannot be found?")
ENDIF()
GET_FILENAME_COMPONENT(LIBJEMALLOC_PATH ${LIBJEMALLOC_SO} REALPATH CACHE)
ENDIF()
IF(LIBJEMALLOC_PATH AND RPM MATCHES fedora28) # TODO check for jemalloc version
UNSET(LIBJEMALLOC)
GET_DIRECTORY_PROPERTY(V DIRECTORY ${CMAKE_SOURCE_DIR} DEFINITION CPACK_RPM_tokudb-engine_PACKAGE_REQUIRES)
SET(CPACK_RPM_tokudb-engine_PACKAGE_REQUIRES "${V} jemalloc" PARENT_SCOPE)
SET(systemd_env "Environment=\"LD_PRELOAD=${LIBJEMALLOC_PATH}\"") #"
SET(cnf_malloc_lib "malloc-lib=${LIBJEMALLOC_PATH}")
ELSEIF(LIBJEMALLOC_PATH)
SET(systemd_env "#Environment=\"LD_PRELOAD=${LIBJEMALLOC_PATH}\"") #"
SET(cnf_malloc_lib "#malloc-lib=${LIBJEMALLOC_PATH}")
ELSE()
SET(systemd_env "#Environment=\"LD_PRELOAD=/path/to/libjemalloc.so\"") #"
SET(cnf_malloc_lib "#malloc-lib=/path/to/libjemalloc.so")
ENDIF()
CONFIGURE_FILE(tokudb.cnf.in tokudb.cnf @ONLY)
CONFIGURE_FILE(tokudb.conf.in tokudb.conf @ONLY)
IF(INSTALL_SYSCONFDIR)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tokudb.conf
DESTINATION ${INSTALL_SYSCONFDIR}/systemd/system/mariadb.service.d/
COMPONENT tokudb-engine)
ENDIF() ENDIF()
MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-vla" DEBUG) MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-vla" DEBUG)
......
...@@ -4,3 +4,6 @@ ...@@ -4,3 +4,6 @@
plugin-load-add=ha_tokudb.so plugin-load-add=ha_tokudb.so
[mysqld_safe]
# it might be necessary to uncomment the following line if jemalloc >= 5.0.0
@cnf_malloc_lib@
[Service]
# it might be necessary to uncomment the following line if jemalloc >= 5.0.0
@systemd_env@
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment