summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-05-16 11:15:08 +0200
committerSergei Golubchik <serg@mariadb.org>2018-05-16 23:24:14 +0200
commitbb045e7931c451b228ffc5bcdb1791a31eb0c852 (patch)
tree26690cc2c2ba0bf0af4881c0218f338de606c4b0
parentcb21e117baba0e2007b9863d0916df6dd2863d38 (diff)
downloadmariadb-git-bb045e7931c451b228ffc5bcdb1791a31eb0c852.tar.gz
MDEV-16183 TokuDB tests fail on Fedora 28mariadb-10.2.15
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.
-rw-r--r--storage/tokudb/CMakeLists.txt29
-rw-r--r--storage/tokudb/tokudb.cnf.in (renamed from storage/tokudb/tokudb.cnf)3
-rw-r--r--storage/tokudb/tokudb.conf.in3
3 files changed, 34 insertions, 1 deletions
diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt
index a0abee09727..16f7ab4ce75 100644
--- a/storage/tokudb/CMakeLists.txt
+++ b/storage/tokudb/CMakeLists.txt
@@ -35,7 +35,7 @@ SET(TOKUDB_SOURCES
tokudb_thread.cc
tokudb_dir_cmd.cc)
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)
RETURN()
@@ -46,6 +46,33 @@ CHECK_JEMALLOC()
IF(NOT LIBJEMALLOC)
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()
MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-vla" DEBUG)
diff --git a/storage/tokudb/tokudb.cnf b/storage/tokudb/tokudb.cnf.in
index 4def635ddf0..de9b5b711ee 100644
--- a/storage/tokudb/tokudb.cnf
+++ b/storage/tokudb/tokudb.cnf.in
@@ -4,3 +4,6 @@
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@
diff --git a/storage/tokudb/tokudb.conf.in b/storage/tokudb/tokudb.conf.in
new file mode 100644
index 00000000000..d22f6686d91
--- /dev/null
+++ b/storage/tokudb/tokudb.conf.in
@@ -0,0 +1,3 @@
+[Service]
+# it might be necessary to uncomment the following line if jemalloc >= 5.0.0
+@systemd_env@