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.
This commit is contained in:
Sergei Golubchik 2018-05-16 11:15:08 +02:00
commit bb045e7931
3 changed files with 34 additions and 1 deletions

View file

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

View file

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

View file

@ -0,0 +1,3 @@
[Service]
# it might be necessary to uncomment the following line if jemalloc >= 5.0.0
@systemd_env@