未验证 提交 02e57a08 编写于 作者: R RingsC 提交者: GitHub

feat(stonedb): To support gcc 7.5 or higher and fix up error(#11)(#12) (#325)

1: To support GCC 7.5 or higher.
2: To fix up some compilation errors.
3: To support `-DWITH_ROCKSDB` and `-DWITH_MARISA` to specify the directories
   in which rocksdb and marisa installed.
上级 e486a514
......@@ -28,7 +28,7 @@ env:
jobs:
stonedb-build:
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
......@@ -46,21 +46,6 @@ jobs:
sudo mkdir -p /stonedb56/install/log
sudo mkdir ./soft
- name: install gcc 7.3
run: |
sudo wget -c http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz -O ./soft/gcc-7.3.0.tar.gz
sudo tar zxvf ./soft/gcc-7.3.0.tar.gz -C ./soft
pushd ./soft/gcc-7.3.0
sudo ./contrib/download_prerequisites
sudo ./configure --prefix=/usr/local/gcc7.3 --enable-bootstrap -enable-threads=posix --enable-checking=release --enable-languages=c,c++ --disable-multilib --disable-libsanitizer
sudo make -j`nproc`
sudo make install -j`nproc`
popd
sudo rm /usr/bin/gcc
sudo ln -s /usr/local/gcc7.3/bin/gcc /usr/bin/gcc
sudo rm /usr/bin/g++
sudo ln -s /usr/local/gcc7.3/bin/g++ /usr/bin/g++
- name: install marisa
run: |
sudo mkdir -p ./soft/marisa-trie
......@@ -82,6 +67,7 @@ jobs:
sudo cmake ./ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \
-DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \
-DWITH_JEMALLOC=ON \
-DWITH_SNAPPY=ON \
-DWITH_LZ4=ON \
......@@ -102,14 +88,21 @@ jobs:
sudo wget -c https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.tar.bz2 -O ./soft/boost_1_66_0.tar.bz2
sudo tar -jxvf ./soft/boost_1_66_0.tar.bz2 -C ./soft
sudo mkdir -p /usr/local/stonedb-boost
#for boost warning: Unnecessary parenthesis warning in gcc-8.0.0 or higher.
sudo sed -i '1 i #define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER' ./soft/boost_1_66_0/boost/mpl/assert.hpp
pushd ./soft/boost_1_66_0
sudo ./bootstrap.sh --prefix=/usr/local/stonedb-boost
sudo ./b2 install
#in lib python, builtin_converters.cpp:51:35: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
#therefore, the simplest way to supress this error is 'DO NOT BUILD'-python libs.
sudo ./b2 install --variant=release --without-python
popd
- name: compile stonedb
run: |
sudo cmake ./ \
-DWITH_BOOST=/usr/local/stonedb-boost \
-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \
-DWITH_MARISA=/usr/local/stonedb-marisa \
-DCMAKE_BUILD_TYPE=release \
-DCMAKE_INSTALL_PREFIX=/stonedb56/install \
-DMYSQL_DATADIR=/stonedb56/install/data \
......@@ -124,8 +117,7 @@ jobs:
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=/usr/local/stonedb-boost/include
-DDEFAULT_COLLATION=utf8_general_ci
sudo make VERBOSE=1 -j`nproc`
sudo make install -j`nproc`
......
......@@ -47,7 +47,6 @@ SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
# respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG{_FULL}
# is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo.
IF(DEFINED CMAKE_BUILD_TYPE)
SET(HAVE_CMAKE_BUILD_TYPE TRUE)
ENDIF()
......@@ -133,7 +132,6 @@ ENDIF()
#cmake on 64bit windows/mac/solaris doesn't set CMAKE_SYSTEM_PROCESSOR correctly
SET(MYSQL_MACHINE_TYPE ${CMAKE_SYSTEM_PROCESSOR})
# Include the platform-specific file. To allow exceptions, this code
# looks for files in order of how specific they are. If there is, for
# example, a generic Linux.cmake and a version-specific
......@@ -151,7 +149,6 @@ FOREACH(_base
ENDIF()
ENDFOREACH()
IF(UNIX)
OPTION(WITH_INNODB_MEMCACHED "" OFF)
OPTION(ENABLE_MEMCACHED_SASL "Enable SASL on InnoDB Memcached" OFF)
......@@ -208,6 +205,29 @@ IF(NOT WITHOUT_SERVER)
ENDIF()
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
# Ported from mysql 5.7, add by stonedb authors
INCLUDE(cmake/boost.cmake)
#Link directories under boost, etc.
IF (WITH_BOOST)
INCLUDE_DIRECTORIES("${WITH_BOOST}/include")
LINK_DIRECTORIES("${WITH_BOOST}/lib/")
ENDIF ()
#for rocksdb, to check rocksdb
INCLUDE(cmake/rocksdb.cmake)
#Link directories under rocksdb, etc.
IF (WITH_ROCKSDB)
INCLUDE_DIRECTORIES("${WITH_ROCKSDB}" "${WITH_ROCKSDB}/include")
LINK_DIRECTORIES("${WITH_ROCKSDB}")
ENDIF ()
#for marisa, to check marisa
INCLUDE(cmake/marisa.cmake)
#Link directories under marisa, etc.
IF (WITH_MARISA)
INCLUDE_DIRECTORIES("${WITH_MARISA}" "${WITH_MARISA}/include")
LINK_DIRECTORIES("${WITH_MARISA}" "${WITH_MARISA}/lib")
ENDIF ()
include(CheckCSourceCompiles)
include(CheckCXXSourceCompiles)
......@@ -283,7 +303,6 @@ IF (WITH_ASAN)
ENDIF()
ENDIF()
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON)
IF(ENABLE_DEBUG_SYNC)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
......@@ -344,6 +363,11 @@ IF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
"${CMAKE_EXE_LINKER_FLAGS_DEBUG} -static-libstdc++ -static-libgcc")
ENDIF()
IF(WITH_BOOST AND WITH_ROCKSDB AND WITH_MARISA)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${WITH_BOOST}/lib;${WITH_ROCKSDB};${WITH_MARISA}/lib")
MESSAGE(STATUS "TO SET INSTALL RPATH FOR STONEDB: ${CMAKE_INSTALL_RPATH}")
ENDIF()
OPTION(ENABLED_LOCAL_INFILE
"If we should should enable LOAD DATA LOCAL by default" ${IF_WIN})
MARK_AS_ADVANCED(ENABLED_LOCAL_INFILE)
......@@ -393,7 +417,6 @@ IF(WITH_DEBUG AND NOT WIN32 AND NOT WITH_INNODB_MEMCACHED)
ENDFOREACH()
ENDIF()
# Set commonly used variables
IF(WIN32)
SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" )
......@@ -432,6 +455,7 @@ INCLUDE(configure.cmake)
# Common defines and includes
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
ADD_DEFINITIONS(-DSTONEDB)
ADD_DEFINITIONS(-D_GLIBCXX_USE_CXX11_ABI=1)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
# Add bundled or system zlib.
......@@ -568,7 +592,6 @@ IF (UNIX)
SET(STONEDB_BUILD_TIME "Date: ${ER_BUILD_TIME}")
ENDIF()
CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/my_config.h)
CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/config.h)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
......@@ -646,9 +669,6 @@ ENDIF()
INCLUDE(CPack)
# Ported from mysql 5.7, add by stonedb authors
INCLUDE(cmake/boost.cmake)
# C compiler flags consist of:
# CPPFLAGS Taken from environment, see above.
# ADD_DEFINITIONS In each individual CMakeLists.txt
......
......@@ -149,7 +149,7 @@ IF (WITH_BOOST)
)
## Did we get a path name to an unzippped version?
FIND_PATH(LOCAL_BOOST_DIR
NAMES "boost/version.hpp"
NAMES "include/boost/version.hpp"
PATHS ${WITH_BOOST}
NO_DEFAULT_PATH
)
......@@ -228,7 +228,7 @@ ENDIF()
# Search for the version file, first in LOCAL_BOOST_DIR or WITH_BOOST
FIND_PATH(BOOST_INCLUDE_DIR
NAMES boost/version.hpp
NAMES include/boost/version.hpp
NO_DEFAULT_PATH
PATHS ${LOCAL_BOOST_DIR}
${LOCAL_BOOST_DIR}/${BOOST_PACKAGE_NAME}
......@@ -236,15 +236,15 @@ FIND_PATH(BOOST_INCLUDE_DIR
)
# Then search in standard places (if not found above).
FIND_PATH(BOOST_INCLUDE_DIR
NAMES boost/version.hpp
NAMES include/boost/version.hpp
)
IF(NOT BOOST_INCLUDE_DIR)
MESSAGE(STATUS
"Looked for boost/version.hpp in ${LOCAL_BOOST_DIR} and ${WITH_BOOST}")
"Looked for include/boost/version.hpp in ${LOCAL_BOOST_DIR} and ${WITH_BOOST}")
COULD_NOT_FIND_BOOST()
ELSE()
MESSAGE(STATUS "Found ${BOOST_INCLUDE_DIR}/boost/version.hpp ")
MESSAGE(STATUS "Found ${BOOST_INCLUDE_DIR}/include/boost/version.hpp ")
ENDIF()
# Verify version number. Version information looks like:
......@@ -252,7 +252,7 @@ ENDIF()
# // BOOST_VERSION / 100 % 1000 is the minor version
# // BOOST_VERSION / 100000 is the major version
# #define BOOST_VERSION 105900
FILE(STRINGS "${BOOST_INCLUDE_DIR}/boost/version.hpp"
FILE(STRINGS "${BOOST_INCLUDE_DIR}/include/boost/version.hpp"
BOOST_VERSION_NUMBER
REGEX "^#define[\t ]+BOOST_VERSION[\t ][0-9]+.*"
)
......
# Copyright (c) 2014, 2021, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# We want marisa in order to build our stonedb code.
# The marisa tarball is fairly big, and takes several minutes
# to download. So we recommend downloading/unpacking it
# only once, in a place visible from any bzr sandbox.
# We use only header files, so there should be no binary dependencies.
# Invoke with -DWITH_MARISA=<directory> or set WITH_MARISA in environment.
# If WITH_MARISA is *not* set, or is set to the special value "system",
# we assume that the correct version (see below)
# is installed on the compile host in the standard location.
SET(MARISA_PACKAGE_NAME "marisa-trie")
SET(MARISA_DOWNLOAD_URL
"https://github.com/s-yata/marisa-trie.gi"
)
SET(MARISA_TARBALL "${MARISA_PACKAGE_NAME}")
SET(OLD_PACKAGE_NAMES "")
MACRO(RESET_MARISA_VARIABLES)
UNSET(MARISA_INCLUDE_DIR)
UNSET(MARISA_INCLUDE_DIR CACHE)
UNSET(LOCAL_MARISA_DIR)
UNSET(LOCAL_MARISA_DIR CACHE)
ENDMACRO()
MACRO(ECHO_MARISA_VARIABLES)
MESSAGE(STATUS "MARISA_INCLUDE_DIR ${MARISA_INCLUDE_DIR}")
MESSAGE(STATUS "LOCAL_MARISA_DIR ${LOCAL_MARISA_DIR}")
ENDMACRO()
MACRO(COULD_NOT_FIND_MARISA)
ECHO_MARISA_VARIABLES()
RESET_MARISA_VARIABLES()
MESSAGE(STATUS "Could not find (the correct version of) marisa.")
MESSAGE(STATUS "MySQL currently requires ${MARISA_PACKAGE_NAME}\n")
MESSAGE(FATAL_ERROR
"You can download it, install it, then specify the marisa path "
"with -DWITH_MARISA=<director>\n"
"This CMake script will look for marisa in <directory>. "
)
ENDMACRO()
# Pick value from environment if not set on command line.
IF(DEFINED ENV{WITH_MARISA} AND NOT DEFINED WITH_MARISA)
SET(WITH_MARISA "$ENV{WITH_MARISA}")
ENDIF()
# Pick value from environment if not set on command line.
IF(DEFINED ENV{MARISA_ROOT} AND NOT DEFINED WITH_MARISA)
SET(WITH_MARISA "$ENV{MARISA_ROOT}")
ENDIF()
IF(WITH_MARISA AND WITH_MARISA STREQUAL "system")
UNSET(WITH_MARISA)
UNSET(WITH_MARISA CACHE)
ENDIF()
# Update the cache, to make it visible in cmake-gui.
SET(WITH_MARISA ${WITH_MARISA} CACHE PATH
"Path to marisa sources: a directory, or a tarball to be unzipped.")
# If the value of WITH_MARISA changes, we must unset all dependent variables:
IF(OLD_WITH_MARISA)
IF(NOT "${OLD_WITH_MARISA}" STREQUAL "${WITH_MARISA}")
RESET_MARISA_VARIABLES()
ENDIF()
ENDIF()
SET(OLD_WITH_MARISA ${WITH_MARISA} CACHE INTERNAL
"Previous version of WITH_MARISA" FORCE)
IF (WITH_MARISA)
## Did we get a path name to an unzippped version?
FIND_PATH(LOCAL_MARISA_DIR
NAMES "include/marisa.h"
PATHS ${WITH_MARISA}
NO_DEFAULT_PATH
)
IF(LOCAL_MARISA_DIR)
MESSAGE(STATUS "Local marisa dir ${LOCAL_MARISA_DIR}")
ENDIF()
ENDIF()
# Search for the header file, first in LOCAL_MARISA_DIR or WITH_MARISA
FIND_PATH(MARISA_INCLUDE_DIR
NAMES "include/marisa.h"
NO_DEFAULT_PATH
PATHS ${LOCAL_MARISA_DIR}
${LOCAL_MARISA_DIR}/${MARISA_PACKAGE_NAME}
${WITH_MARISA}
)
MESSAGE("found MARISA_INCLUDE_DIR:${MARISA_INCLUDE_DIR}")
# Then search in standard places (if not found above).
FIND_PATH(MARISA_INCLUDE_DIR
NAMES include/marisa.h
)
IF(NOT MARISA_INCLUDE_DIR)
MESSAGE(STATUS
"Looked for include/marisa.h in ${LOCAL_MARISA_DIR} and ${WITH_MARISA}")
COULD_NOT_FIND_MARISA()
ELSE()
MESSAGE(STATUS "Found ${MARISA_INCLUDE_DIR}/include/marisa.h ")
ENDIF()
MESSAGE(STATUS "MARISA_INCLUDE_DIR ${MARISA_INCLUDE_DIR}")
# Bug in sqrt(NaN) on 32bit platforms
IF(SIZEOF_VOIDP EQUAL 4)
ADD_DEFINITIONS(-DMARISA_GEOMETRY_SQRT_CHECK_FINITENESS)
ENDIF()
IF(LOCAL_MARISA_DIR OR LOCAL_MARISA_ZIP)
SET(USING_LOCAL_MARISA 1)
ELSE()
SET(USING_SYSTEM_MARISA 1)
ENDIF()
# Copyright (c) 2014, 2021, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# We want rocksdb 6.12.6 in order to build our stonedb code.
# The rocksdb tarball is fairly big, and takes several minutes
# to download. So we recommend downloading/unpacking it
# only once, in a place visible from any bzr sandbox.
# We use only header files, so there should be no binary dependencies.
# Invoke with -DWITH_ROCKSDB=<directory> or set WITH_ROCKSDB in environment.
# If WITH_ROCKSDB is *not* set, or is set to the special value "system",
# we assume that the correct version (see below)
# is installed on the compile host in the standard location.
SET(ROCKSDB_PACKAGE_NAME "vrocksdb-6.12.6")
SET(ROCKSDB_TARBALL "${ROCKSDB_PACKAGE_NAME}.tar.gz")
SET(ROCKSDB_DOWNLOAD_URL
"https://github.com/facebook/rocksdb/archive/refs/tags/${ROCKSDB_TARBALL}"
)
SET(OLD_PACKAGE_NAMES "vrocksdb-6.10.6")
MACRO(RESET_ROCKSDB_VARIABLES)
UNSET(ROCKSDB_INCLUDE_DIR)
UNSET(ROCKSDB_INCLUDE_DIR CACHE)
UNSET(LOCAL_ROCKSDB_DIR)
UNSET(LOCAL_ROCKSDB_DIR CACHE)
UNSET(LOCAL_ROCKSDB_ZIP)
UNSET(LOCAL_ROCKSDB_ZIP CACHE)
ENDMACRO()
MACRO(ECHO_ROCKSDB_VARIABLES)
MESSAGE(STATUS "ROCKSDB_INCLUDE_DIR ${ROCKSDB_INCLUDE_DIR}")
MESSAGE(STATUS "LOCAL_ROCKSDB_DIR ${LOCAL_ROCKSDB_DIR}")
MESSAGE(STATUS "LOCAL_ROCKSDB_ZIP ${LOCAL_ROCKSDB_ZIP}")
ENDMACRO()
MACRO(LOOKUP_OLD_PACKAGE_NAMES)
FOREACH(pkg ${OLD_PACKAGE_NAMES})
FIND_FILE(OLD_ROCKSDB_DIR
NAMES "${pkg}"
PATHS ${WITH_ROCKSDB}
NO_DEFAULT_PATH
)
IF(OLD_ROCKSDB_DIR)
MESSAGE(STATUS "")
MESSAGE(STATUS "Found old rocksdb installation at ${OLD_ROCKSDB_DIR}")
MESSAGE(STATUS "You must upgrade to ${ROCKSDB_PACKAGE_NAME}")
MESSAGE(STATUS "")
ENDIF()
UNSET(OLD_ROCKSDB_DIR)
UNSET(OLD_ROCKSDB_DIR CACHE)
ENDFOREACH()
ENDMACRO()
MACRO(COULD_NOT_FIND_ROCKSDB)
LOOKUP_OLD_PACKAGE_NAMES()
ECHO_ROCKSDB_VARIABLES()
RESET_ROCKSDB_VARIABLES()
MESSAGE(STATUS "Could not find (the correct version of) rocksdb.")
MESSAGE(STATUS "MySQL currently requires ${ROCKSDB_PACKAGE_NAME}\n")
MESSAGE(FATAL_ERROR
"You can download it with -DDOWNLOAD_ROCKSDB=1 -DWITH_ROCKSDB=<directory>\n"
"This CMake script will look for rocksdb in <directory>. "
"If it is not there, it will download and unpack it "
"(in that directory) for you.\n"
"If you are inside a firewall, you may need to use an http proxy:\n"
"export http_proxy=http://example.com:80\n"
)
ENDMACRO()
# Pick value from environment if not set on command line.
IF(DEFINED ENV{WITH_ROCKSDB} AND NOT DEFINED WITH_ROCKSDB)
SET(WITH_ROCKSDB "$ENV{WITH_ROCKSDB}")
ENDIF()
# Pick value from environment if not set on command line.
IF(DEFINED ENV{ROCKSDB_ROOT} AND NOT DEFINED WITH_ROCKSDB)
SET(WITH_ROCKSDB "$ENV{ROCKSDB_ROOT}")
ENDIF()
IF(WITH_ROCKSDB AND WITH_ROCKSDB STREQUAL "system")
UNSET(WITH_ROCKSDB)
UNSET(WITH_ROCKSDB CACHE)
ENDIF()
# Update the cache, to make it visible in cmake-gui.
SET(WITH_ROCKSDB ${WITH_ROCKSDB} CACHE PATH
"Path to rocksdb sources: a directory, or a tarball to be unzipped.")
# If the value of WITH_ROCKSDB changes, we must unset all dependent variables:
IF(OLD_WITH_ROCKSDB)
IF(NOT "${OLD_WITH_ROCKSDB}" STREQUAL "${WITH_ROCKSDB}")
RESET_ROCKSDB_VARIABLES()
ENDIF()
ENDIF()
SET(OLD_WITH_ROCKSDB ${WITH_ROCKSDB} CACHE INTERNAL
"Previous version of WITH_ROCKSDB" FORCE)
IF (WITH_ROCKSDB)
## Did we get a full path name, including file name?
IF (${WITH_ROCKSDB} MATCHES ".*\\.tar.gz" OR ${WITH_ROCKSDB} MATCHES ".*\\.zip")
GET_FILENAME_COMPONENT(ROCKSDB_DIR ${WITH_ROCKSDB} PATH)
GET_FILENAME_COMPONENT(ROCKSDB_ZIP ${WITH_ROCKSDB} NAME)
FIND_FILE(LOCAL_ROCKSDB_ZIP
NAMES ${ROCKSDB_ZIP}
PATHS ${ROCKSDB_DIR}
NO_DEFAULT_PATH
)
ENDIF()
## Did we get a path name to the directory of the .tar.gz or .zip file?
FIND_FILE(LOCAL_ROCKSDB_ZIP
NAMES "${ROCKSDB_PACKAGE_NAME}.tar.gz" "${ROCKSDB_PACKAGE_NAME}.zip"
PATHS ${WITH_ROCKSDB}
NO_DEFAULT_PATH
)
## Did we get a path name to the directory of an unzipped version?
FIND_FILE(LOCAL_ROCKSDB_DIR
NAMES "${ROCKSDB_PACKAGE_NAME}"
PATHS ${WITH_ROCKSDB}
NO_DEFAULT_PATH
)
## Did we get a path name to an unzippped version?
FIND_PATH(LOCAL_ROCKSDB_DIR
NAMES "include/rocksdb/version.h"
PATHS ${WITH_ROCKSDB}
NO_DEFAULT_PATH
)
IF(LOCAL_ROCKSDB_DIR)
MESSAGE(STATUS "Local rocksdb dir ${LOCAL_ROCKSDB_DIR}")
ENDIF()
IF(LOCAL_ROCKSDB_ZIP)
MESSAGE(STATUS "Local rocksdb zip ${LOCAL_ROCKSDB_ZIP}")
ENDIF()
ENDIF()
# There is a similar option in unittest/gunit.
# But the rocksdb tarball is much bigger, so we have a separate option.
OPTION(DOWNLOAD_ROCKSDB "Download rocksdb from sourceforge." OFF)
SET(DOWNLOAD_ROCKSDB_TIMEOUT 6000 CACHE STRING
"Timeout in seconds when downloading rocksdb.")
# If we could not find it, then maybe download it.
IF(WITH_ROCKSDB AND NOT LOCAL_ROCKSDB_ZIP AND NOT LOCAL_ROCKSDB_DIR)
IF(NOT DOWNLOAD_ROCKSDB)
MESSAGE(STATUS "WITH_ROCKSDB=${WITH_ROCKSDB}")
COULD_NOT_FIND_ROCKSDB()
ENDIF()
# Download the tarball
MESSAGE(STATUS "Downloading ${ROCKSDB_TARBALL} to ${WITH_ROCKSDB}")
FILE(DOWNLOAD ${ROCKSDB_DOWNLOAD_URL}
${WITH_ROCKSDB}/${ROCKSDB_TARBALL}
TIMEOUT ${DOWNLOAD_ROCKSDB_TIMEOUT}
STATUS ERR
SHOW_PROGRESS
)
IF(ERR EQUAL 0)
SET(LOCAL_ROCKSDB_ZIP "${WITH_ROCKSDB}/${ROCKSDB_TARBALL}")
SET(LOCAL_ROCKSDB_ZIP "${WITH_ROCKSDB}/${ROCKSDB_TARBALL}" CACHE INTERNAL "")
ELSE()
MESSAGE(STATUS "Download failed, error: ${ERR}")
# A failed DOWNLOAD leaves an empty file, remove it
FILE(REMOVE ${WITH_ROCKSDB}/${ROCKSDB_TARBALL})
# STATUS returns a list of length 2
LIST(GET ERR 0 NUMERIC_RETURN)
IF(NUMERIC_RETURN EQUAL 28)
MESSAGE(FATAL_ERROR
"You can try downloading ${ROCKSDB_DOWNLOAD_URL} manually"
" using curl/wget or a similar tool,"
" or increase the value of DOWNLOAD_ROCKSDB_TIMEOUT"
" (which is now ${DOWNLOAD_ROCKSDB_TIMEOUT} seconds)"
)
ENDIF()
MESSAGE(FATAL_ERROR
"You can try downloading ${ROCKSDB_DOWNLOAD_URL} manually"
" using curl/wget or a similar tool"
)
ENDIF()
ENDIF()
IF(LOCAL_ROCKSDB_ZIP AND NOT LOCAL_ROCKSDB_DIR)
GET_FILENAME_COMPONENT(LOCAL_ROCKSDB_DIR ${LOCAL_ROCKSDB_ZIP} PATH)
IF(NOT EXISTS "${LOCAL_ROCKSDB_DIR}/${ROCKSDB_PACKAGE_NAME}")
MESSAGE(STATUS "cd ${LOCAL_ROCKSDB_DIR}; tar xfz ${LOCAL_ROCKSDB_ZIP}")
EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} -E tar xfz "${LOCAL_ROCKSDB_ZIP}"
WORKING_DIRECTORY "${LOCAL_ROCKSDB_DIR}"
RESULT_VARIABLE tar_result
)
IF (tar_result MATCHES 0)
SET(ROCKSDB_FOUND 1 CACHE INTERNAL "")
ELSE()
MESSAGE(STATUS "WITH_ROCKSDB ${WITH_ROCKSDB}.")
MESSAGE(STATUS "Failed to extract files.\n"
" Please try downloading and extracting yourself.\n"
" The url is: ${ROCKSDB_DOWNLOAD_URL}")
MESSAGE(FATAL_ERROR "Giving up.")
ENDIF()
ENDIF()
ENDIF()
# Search for the version file, first in LOCAL_ROCKSDB_DIR or WITH_ROCKSDB
FIND_PATH(ROCKSDB_INCLUDE_DIR
NAMES "include/rocksdb/version.h"
NO_DEFAULT_PATH
PATHS ${LOCAL_ROCKSDB_DIR}
${LOCAL_ROCKSDB_DIR}/${ROCKSDB_PACKAGE_NAME}
${WITH_ROCKSDB}
)
MESSAGE("found ROCKSDB_INCLUDE_DIR:${ROCKSDB_INCLUDE_DIR}")
# Then search in standard places (if not found above).
FIND_PATH(ROCKSDB_INCLUDE_DIR
NAMES include/rocksdb/version.h
)
IF(NOT ROCKSDB_INCLUDE_DIR)
MESSAGE(STATUS
"Looked for include/rocksdb/version.h in ${LOCAL_ROCKSDB_DIR} and ${WITH_ROCKSDB}")
COULD_NOT_FIND_ROCKSDB()
ELSE()
MESSAGE(STATUS "Found ${ROCKSDB_INCLUDE_DIR}/include/rocksdb/version.h ")
ENDIF()
# Verify version number. Version information looks like:
# // ROCKSDB_PATCH 6 is the patch level
# // ROCKSDB_MINOR 12 or 14 is the minor version
# // ROCKSDB_MAJOR 6 is the major version
FILE(STRINGS "${ROCKSDB_INCLUDE_DIR}/include/rocksdb/version.h"
ROCKSDB_MAJOR_VERSION_STR
REGEX "^#define[\t ]+ROCKSDB_MAJOR[\t ][0-9]+.*"
)
FILE(STRINGS "${ROCKSDB_INCLUDE_DIR}/include/rocksdb/version.h"
ROCKSDB_MINOR_VERSION_STR
REGEX "^#define[\t ]+ROCKSDB_MINOR[\t ][0-9]+.*"
)
MESSAGE(STATUS "current ROCKSDB_VERSION_NUMBER is ${ROCKSDB_MAJOR_VERSION_STR}.${ROCKSDB_MINOR_VERSION_STR}")
STRING(REGEX REPLACE
"^#define[\t ]+ROCKSDB_MAJOR[\t ]" ""
ROCKSDB_MAJOR_VERSION "${ROCKSDB_MAJOR_VERSION_STR}")
STRING(REGEX REPLACE
"^#define[\t ]+ROCKSDB_MINOR[\t ]" ""
ROCKSDB_MINOR_VERSION "${ROCKSDB_MINOR_VERSION_STR}")
MESSAGE(STATUS "current ROCKSDB_MAJOR_VERSION is: ${ROCKSDB_MAJOR_VERSION}, ROCKSDB_MAJOR_VERSION:${ROCKSDB_MINOR_VERSION}")
IF(NOT ROCKSDB_MAJOR_VERSION EQUAL 6)
COULD_NOT_FIND_ROCKSDB()
ENDIF()
IF(ROCKSDB_MINOR_VERSION LESS 12)
MESSAGE(WARNING "rocksdb minor version found is ${ROCKSDB_MINOR_VERSION} "
"we need minimum 12 "
)
COULD_NOT_FIND_ROCKSDB()
ENDIF()
MESSAGE(STATUS "ROCKSDB_INCLUDE_DIR ${ROCKSDB_INCLUDE_DIR}")
# Bug in sqrt(NaN) on 32bit platforms
IF(SIZEOF_VOIDP EQUAL 4)
ADD_DEFINITIONS(-DROCKSDB_GEOMETRY_SQRT_CHECK_FINITENESS)
ENDIF()
IF(LOCAL_ROCKSDB_DIR OR LOCAL_ROCKSDB_ZIP)
SET(USING_LOCAL_ROCKSDB 1)
ELSE()
SET(USING_SYSTEM_ROCKSDB 1)
ENDIF()
......@@ -13,87 +13,517 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#
# This is the CMakeLists for StoneDB
INCLUDE(CheckFunctionExists)
INCLUDE(CheckCSourceCompiles)
INCLUDE(CheckCSourceRuns)
# OS tests
IF(UNIX)
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1")
IF(HAVE_LIBAIO_H AND HAVE_LIBAIO)
ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1)
LINK_LIBRARIES(aio)
ENDIF()
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP*")
ADD_DEFINITIONS("-DUNIV_HPUX")
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "AIX")
ADD_DEFINITIONS("-DUNIV_AIX")
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
ADD_DEFINITIONS("-DUNIV_SOLARIS")
ENDIF()
ENDIF()
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# After: WL#5825 Using C++ Standard Library with MySQL code
# we no longer use -fno-exceptions
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
ENDIF()
# Enable InnoDB's UNIV_DEBUG and UNIV_SYNC_DEBUG in debug builds
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DUNIV_DEBUG -DUNIV_SYNC_DEBUG")
# Add -Wconversion if compiling with GCC
## As of Mar 15 2011 this flag causes 3573+ warnings. If you are reading this
## please fix them and enable the following code:
#IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wconversion")
#ENDIF()
CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU)
IF(NOT MSVC)
# either define HAVE_IB_GCC_ATOMIC_BUILTINS or not
IF(NOT CMAKE_CROSSCOMPILING)
CHECK_C_SOURCE_RUNS(
"
int main()
{
long x;
long y;
long res;
x = 10;
y = 123;
res = __sync_bool_compare_and_swap(&x, x, y);
if (!res || x != y) {
return(1);
}
x = 10;
y = 123;
res = __sync_bool_compare_and_swap(&x, x + 1, y);
if (res || x != 10) {
return(1);
}
x = 10;
y = 123;
res = __sync_add_and_fetch(&x, y);
if (res != 123 + 10 || x != 123 + 10) {
return(1);
}
return(0);
}"
HAVE_IB_GCC_ATOMIC_BUILTINS
)
CHECK_C_SOURCE_RUNS(
"
int main()
{
long res;
char c;
c = 10;
res = __sync_lock_test_and_set(&c, 123);
if (res != 10 || c != 123) {
return(1);
}
return(0);
}"
HAVE_IB_GCC_ATOMIC_BUILTINS_BYTE
)
CHECK_C_SOURCE_RUNS(
"#include<stdint.h>
int main()
{
int64_t x,y,res;
x = 10;
y = 123;
res = __sync_sub_and_fetch(&y, x);
if (res != y || y != 113) {
return(1);
}
res = __sync_add_and_fetch(&y, x);
if (res != y || y != 123) {
return(1);
}
return(0);
}"
HAVE_IB_GCC_ATOMIC_BUILTINS_64
)
CHECK_C_SOURCE_RUNS(
"#include<stdint.h>
int main()
{
__sync_synchronize();
return(0);
}"
HAVE_IB_GCC_SYNC_SYNCHRONISE
)
CHECK_C_SOURCE_RUNS(
"#include<stdint.h>
int main()
{
__atomic_thread_fence(__ATOMIC_ACQUIRE);
__atomic_thread_fence(__ATOMIC_RELEASE);
return(0);
}"
HAVE_IB_GCC_ATOMIC_THREAD_FENCE
)
ENDIF()
IF(HAVE_IB_GCC_ATOMIC_BUILTINS)
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS=1)
ENDIF()
IF(HAVE_IB_GCC_ATOMIC_BUILTINS_BYTE)
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS_BYTE=1)
ENDIF()
IF(HAVE_IB_GCC_ATOMIC_BUILTINS_64)
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS_64=1)
ENDIF()
IF(HAVE_IB_GCC_SYNC_SYNCHRONISE)
ADD_DEFINITIONS(-DHAVE_IB_GCC_SYNC_SYNCHRONISE=1)
ENDIF()
IF(HAVE_IB_GCC_ATOMIC_THREAD_FENCE)
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_THREAD_FENCE=1)
ENDIF()
# either define HAVE_IB_ATOMIC_PTHREAD_T_GCC or not
IF(NOT CMAKE_CROSSCOMPILING)
CHECK_C_SOURCE_RUNS(
"
#include <pthread.h>
#include <string.h>
int main() {
pthread_t x1;
pthread_t x2;
pthread_t x3;
memset(&x1, 0x0, sizeof(x1));
memset(&x2, 0x0, sizeof(x2));
memset(&x3, 0x0, sizeof(x3));
__sync_bool_compare_and_swap(&x1, x2, x3);
return(0);
}"
HAVE_IB_ATOMIC_PTHREAD_T_GCC)
ENDIF()
IF(HAVE_IB_ATOMIC_PTHREAD_T_GCC)
ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1)
ENDIF()
ENDIF(NOT MSVC)
CHECK_FUNCTION_EXISTS(asprintf HAVE_ASPRINTF)
CHECK_FUNCTION_EXISTS(vasprintf HAVE_VASPRINTF)
# Solaris atomics
IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
CHECK_FUNCTION_EXISTS(atomic_cas_ulong HAVE_ATOMIC_CAS_ULONG)
CHECK_FUNCTION_EXISTS(atomic_cas_32 HAVE_ATOMIC_CAS_32)
CHECK_FUNCTION_EXISTS(atomic_cas_64 HAVE_ATOMIC_CAS_64)
CHECK_FUNCTION_EXISTS(atomic_add_long_nv HAVE_ATOMIC_ADD_LONG_NV)
CHECK_FUNCTION_EXISTS(atomic_swap_uchar HAVE_ATOMIC_SWAP_UCHAR)
IF(HAVE_ATOMIC_CAS_ULONG AND
HAVE_ATOMIC_CAS_32 AND
HAVE_ATOMIC_CAS_64 AND
HAVE_ATOMIC_ADD_LONG_NV AND
HAVE_ATOMIC_SWAP_UCHAR)
SET(HAVE_IB_SOLARIS_ATOMICS 1)
ENDIF()
IF(HAVE_IB_SOLARIS_ATOMICS)
ADD_DEFINITIONS(-DHAVE_IB_SOLARIS_ATOMICS=1)
ENDIF()
IF(NOT CMAKE_CROSSCOMPILING)
# either define HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS or not
CHECK_C_SOURCE_COMPILES(
" #include <pthread.h>
#include <string.h>
int main(int argc, char** argv) {
pthread_t x1;
pthread_t x2;
pthread_t x3;
memset(&x1, 0x0, sizeof(x1));
memset(&x2, 0x0, sizeof(x2));
memset(&x3, 0x0, sizeof(x3));
if (sizeof(pthread_t) == 4) {
atomic_cas_32(&x1, x2, x3);
} else if (sizeof(pthread_t) == 8) {
atomic_cas_64(&x1, x2, x3);
} else {
return(1);
}
return(0);
}
" HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
CHECK_C_SOURCE_COMPILES(
"#include <mbarrier.h>
int main() {
__machine_r_barrier();
__machine_w_barrier();
return(0);
}"
HAVE_IB_MACHINE_BARRIER_SOLARIS)
ENDIF()
IF(HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=1)
ENDIF()
IF(HAVE_IB_MACHINE_BARRIER_SOLARIS)
ADD_DEFINITIONS(-DHAVE_IB_MACHINE_BARRIER_SOLARIS=1)
ENDIF()
ENDIF()
IF(UNIX)
# this is needed to know which one of atomic_cas_32() or atomic_cas_64()
# to use in the source
SET(CMAKE_EXTRA_INCLUDE_FILES pthread.h)
CHECK_TYPE_SIZE(pthread_t SIZEOF_PTHREAD_T)
SET(CMAKE_EXTRA_INCLUDE_FILES)
ENDIF()
IF(SIZEOF_PTHREAD_T)
ADD_DEFINITIONS(-DSIZEOF_PTHREAD_T=${SIZEOF_PTHREAD_T})
ENDIF()
IF(MSVC)
ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS)
ADD_DEFINITIONS(-DHAVE_WINDOWS_MM_FENCE)
ENDIF()
# Include directories under stonedb
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/stonedb
)
# Sun Studio bug with -xO2
IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro"
AND CMAKE_CXX_FLAGS_RELEASE MATCHES "O2"
AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
# Sun Studio 12 crashes with -xO2 flag, but not with higher optimization
# -xO3
SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/rem/rem0rec.cc
PROPERTIES COMPILE_FLAGS -xO3)
ENDIF()
# Removing compiler optimizations for innodb/mem/* files on 64-bit Windows
# due to 64-bit compiler error, See MySQL Bug #19424, #36366, #34297
IF (MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.cc mem/mem0pool.cc
PROPERTIES COMPILE_FLAGS -Od)
ENDIF()
SET(STONEDB_STATIC_LIBS ${STONEDB_STATIC_LIBS}
"-lboost_system"
"-lboost_thread"
"-lstdc++"
"-lstdc++fs"
"-lrt"
"-lmarisa"
#"-lzstd"
"-lrocksdb"
)
SET(STONEDB_SOURCES
base/core/app_template.cpp
base/core/exception_hacks.cpp
base/core/fsqual.cpp
base/core/fstream.cpp
base/core/metrics.cpp
base/core/posix.cpp
base/core/reactor.cpp
base/core/resource.cpp
base/core/scollectd.cpp
base/core/systemwide_memory_barrier.cpp
base/core/thread.cpp
base/fmt/format.cpp
base/fmt/ostream.cpp
base/fmt/posix.cpp
base/fmt/printf.cpp
base/net/posix_stack.cpp
base/net/stack.cpp
base/util/conversions.cpp
base/util/log.cpp
base/util/program_options.cpp
common/common_definitions.cpp
common/data_format.cpp
common/exception.cpp
common/mysql_gate.cpp
common/txt_data_format.cpp
compress/arith_coder.cpp
compress/basic_data_filt.cpp
compress/bit_stream_compressor.cpp
compress/data_stream.cpp
compress/dictionary.cpp
compress/inc_alloc.cpp
compress/inc_wgraph.cpp
compress/lz4.cpp
compress/part_dict.cpp
compress/ppm.cpp
compress/suffix_tree.cpp
compress/text_compressor.cpp
compress/top_bit_dict.cpp
compress/word_graph.cpp
core/aggregation_algorithm.cpp
core/aggregator_advanced.cpp
core/aggregator_basic.cpp
core/bin_tools.cpp
core/blocked_mem_table.cpp
core/bloom_block.cpp
core/bloom_coding.cpp
core/cached_buffer.cpp
core/column_bin_encoder.cpp
core/column_share.cpp
core/column_type.cpp
core/compilation_tools.cpp
core/compiled_query.cpp
core/condition.cpp
core/condition_encoder.cpp
core/cq_term.cpp
core/data_cache.cpp
core/data_type.cpp
core/descriptor.cpp
core/dimension_group.cpp
core/dimension_group_multiple.cpp
core/dimension_group_virtual.cpp
core/engine_convert.cpp
core/engine.cpp
core/engine_execute.cpp
core/engine_results.cpp
core/filter_block.cpp
core/filter.cpp
core/filter_iterators.cpp
core/ftree.cpp
core/groupby_wrapper.cpp
core/group_distinct_cache.cpp
core/group_distinct_table.cpp
core/group_table.cpp
core/hash_table.cpp
core/index_table.cpp
core/item_sdbfield.cpp
core/joiner.cpp
core/joiner_general.cpp
core/joiner_hash.cpp
core/joiner_hash_table.cpp
core/joiner_mapped.cpp
core/joiner_sort.cpp
core/join_thread_table.cpp
core/just_a_table.cpp
core/mi_iterator.cpp
core/mi_new_contents.cpp
core/mi_rough_sorter.cpp
core/mi_step_iterator.cpp
core/mi_updating_iterator.cpp
core/multi_index_builder.cpp
core/multi_index.cpp
core/mysql_expression.cpp
core/pack.cpp
core/pack_guardian.cpp
core/pack_int.cpp
core/pack_orderer.cpp
core/pack_str.cpp
core/parallel_hash_join.cpp
core/parameterized_filter.cpp
core/proxy_hash_joiner.cpp
core/query_compile.cpp
core/query.cpp
core/quick_math.cpp
core/rc_attr.cpp
core/rcattr_exeq_rs.cpp
core/rcattr_exqp.cpp
core/rc_attr_typeinfo.cpp
core/rc_mem_table.cpp
core/rc_table.cpp
core/rough_multi_index.cpp
core/rough_value.cpp
core/rsi_bloom.cpp
core/rsi_cmap.cpp
core/rsi_histogram.cpp
core/sorter3.cpp
core/sorter_wrapper.cpp
core/table_share.cpp
core/task_executor.cpp
core/temp_table_com.cpp
core/temp_table.cpp
core/temp_table_low.cpp
core/temp_table_roughquery.cpp
core/transaction.cpp
core/value_matching_hashtable.cpp
core/value_matching_table.cpp
core/value_or_null.cpp
core/value_set.cpp
exporter/data_exporter.cpp
exporter/data_exporter_txt.cpp
exporter/export2file.cpp
handler/ha_rcengine.cpp
handler/stonedb_handler_com.cpp
handler/stonedb_handler.cpp
index/kv_store.cpp
index/kv_transaction.cpp
index/rc_table_index.cpp
index/rdb_meta_manager.cpp
loader/load_parser.cpp
loader/parsing_strategy.cpp
loader/read_buffer.cpp
loader/rejecter.cpp
loader/value_cache.cpp
mm/huge_heap_policy.cpp
mm/initializer.cpp
mm/memory_handling_policy.cpp
mm/mysql_heap_policy.cpp
mm/numa_heap_policy.cpp
mm/release2q.cpp
mm/release_all.cpp
mm/release_fifo.cpp
mm/release_lru.cpp
mm/release_tracker.cpp
mm/sys_heap_policy.cpp
mm/tcm/page_heap.cpp
mm/tcm/span.cpp
mm/tcm/tccommon.cpp
mm/tcm_heap_policy.cpp
mm/traceable_object.cpp
system/cacheable_item.cpp
system/channel.cpp
system/configuration.cpp
system/fet.cpp
system/file.cpp
system/file_system.cpp
system/large_buffer.cpp
system/net_stream.cpp
system/rc_system.cpp
system/res_manager_base.cpp
system/res_manager.cpp
system/stream.cpp
system/txt_utils.cpp
types/bstring.cpp
types/rc_data_types.cpp
types/rc_datetime.cpp
types/rc_item_types.cpp
types/rc_num.cpp
types/rc_value_object.cpp
types/text_stat.cpp
types/value_parser4txt.cpp
util/log_ctl.cpp
util/stack_trace.cpp
util/thread_pool.cpp
util/timer.cpp
vc/const_column.cpp
vc/const_expr_column.cpp
vc/expr_column.cpp
vc/in_set_column.cpp
vc/single_column.cpp
vc/subselect_column.cpp
vc/type_cast_column.cpp
vc/virtual_column_base.cpp
)
IF(WITH_STONEDB)
# Legacy option
SET(WITH_STONEDB_ENGINE TRUE)
ENDIF()
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
SET(STONEDB_PLUGIN_STATIC "stonedb")
SET(STONEDB_PLUGIN_MANDATORY TRUE)
MESSAGE(STATUS "Using cmake version ${CMAKE_VERSION}")
MESSAGE(STATUS "Building StoneDB")
#lihao Here, the dependency libs will be moved to 'third_party' directory.
SET(BOOST_ROOT /usr/local/stonedb-boost)
SET(MARISA_ROOT /usr/local/stonedb-marisa)
SET(ROCKSDB_ROOT /usr/local/stonedb-gcc-rocksdb)
SET(LINK_LIBS ${BOOST_ROOT}/lib/libboost_system.a
stdc++fs
snappy
bz2
lz4
zstd
# /opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/libstdc++fs.a
${MARISA_ROOT}/lib/libmarisa.a
${ROCKSDB_ROOT}/lib/librocksdb.a
${BOOST_ROOT}/lib/libboost_thread.a)
AUX_SOURCE_DIRECTORY(common SOURCE_common)
AUX_SOURCE_DIRECTORY(compress SOURCE_compress)
AUX_SOURCE_DIRECTORY(core SOURCE_core)
AUX_SOURCE_DIRECTORY(exporter SOURCE_exporter)
AUX_SOURCE_DIRECTORY(handler SOURCE_handler)
AUX_SOURCE_DIRECTORY(loader SOURCE_loader)
AUX_SOURCE_DIRECTORY(mm SOURCE_mm)
AUX_SOURCE_DIRECTORY(mm/tcm SOURCE_mm_tcm)
AUX_SOURCE_DIRECTORY(system SOURCE_system)
AUX_SOURCE_DIRECTORY(types SOURCE_types)
AUX_SOURCE_DIRECTORY(util SOURCE_util)
AUX_SOURCE_DIRECTORY(vc SOURCE_vc)
AUX_SOURCE_DIRECTORY(index SOURCE_index)
AUX_SOURCE_DIRECTORY(base/core SOURCE_base_core)
AUX_SOURCE_DIRECTORY(base/fmt SOURCE_base_fmt)
AUX_SOURCE_DIRECTORY(base/net SOURCE_base_net)
AUX_SOURCE_DIRECTORY(base/util SOURCE_base_util)
SET(STONEDB_SOURCES ${SOURCE_common}
${SOURCE_compress}
${SOURCE_core}
${SOURCE_exporter}
${SOURCE_handler}
${SOURCE_loader}
${SOURCE_mm}
${SOURCE_mm_tcm}
${SOURCE_system}
${SOURCE_types}
${SOURCE_util}
${SOURCE_vc}
${SOURCE_index}
${SOURCE_base_core}
${SOURCE_base_fmt}
${SOURCE_base_net}
${SOURCE_base_util})
MYSQL_ADD_PLUGIN(stonedb ${STONEDB_SOURCES}
STORAGE_ENGINE
#MYSQL_ADD_PLUGIN(stonedb ${STONEDB_SOURCES} STORAGE_ENGINE
# MANDATORY
# MODULE_OUTPUT_NAME ha_stonedb
# LINK_LIBRARIES ${STONEDB_STATIC_LIBS})
MYSQL_ADD_PLUGIN(stonedb ${STONEDB_SOURCES} STORAGE_ENGINE
MANDATORY
STATIC_ONLY
LINK_LIBRARIES ${LINK_LIBS})
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/include)
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/sql)
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/regex)
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${SSL_INCLUDE_DIRS})
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${ZLIB_INCLUDE_DIR})
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${ROCKSDB_ROOT}/include)
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${BOOST_ROOT}/include)
TARGET_INCLUDE_DIRECTORIES(stonedb SYSTEM PRIVATE ${MARISA_ROOT}/include)
TARGET_INCLUDE_DIRECTORIES(stonedb PRIVATE ${CMAKE_SOURCE_DIR}/storage/stonedb)
TARGET_INCLUDE_DIRECTORIES(stonedb PRIVATE ${CMAKE_SOURCE_DIR}/storage/stonedb/base)
#Wno-error for release build
TARGET_COMPILE_OPTIONS(stonedb PRIVATE -Wno-error -Wextra -Wall)
TARGET_COMPILE_OPTIONS(stonedb PRIVATE -Wunused-parameter)
TARGET_COMPILE_OPTIONS(stonedb PRIVATE -Wsuggest-override)
LINK_LIBRARIES ${STONEDB_STATIC_LIBS})
add_subdirectory(async_tests)
SET(BOOST_ROOT /usr/local/stonedb-boost)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_DEFINITIONS(-DDISABLE_USED_FOR_STONEDB)
......@@ -25,8 +24,7 @@ SET(ASYNC_SOURCES ${SOURCE_async_core}
${SOURCE_async_util}
${DIR_SRCS})
SET(DEPENDED_LIBS rt pthread dl ${BOOST_ROOT}/lib/libboost_system.a
${BOOST_ROOT}/lib/libboost_thread.a)
SET(DEPENDED_LIBS rt pthread dl boost_system boost_thread)
LINK_LIBRARIES(${DEPENDED_LIBS})
......
......@@ -26,9 +26,9 @@
#include <chrono>
#include <functional>
#include <core/future.h>
#include <core/reactor.h>
#include <core/sstring.h>
#include <base/core/future.h>
#include <base/core/reactor.h>
#include <base/core/sstring.h>
#include <boost/optional.hpp>
namespace stonedb {
......
......@@ -67,8 +67,8 @@
#include "base/core/circular_buffer.h"
#include "base/core/condition_variable.h"
#include "base/core/enum.h"
#include "core/metrics_registration.h"
#include "core/scattered_message.h"
#include "base/core/metrics_registration.h"
#include "base/core/scattered_message.h"
#include "base/core/deleter.h"
#include "base/core/fair_queue.h"
......
......@@ -24,9 +24,9 @@
#define STONEDB_BASE_SCOLLECTD_IMPL_H_
#pragma once
#include "core/metrics_api.h"
#include "core/reactor.h"
#include "core/scollectd.h"
#include "base/core/metrics_api.h"
#include "base/core/reactor.h"
#include "base/core/scollectd.h"
namespace stonedb {
namespace base {
......
......@@ -16,6 +16,7 @@
*/
#include "core/rc_mem_table.h"
#include "common/common_definitions.h"
#include "core/rc_table.h"
#include "core/table_share.h"
......@@ -26,6 +27,7 @@
namespace stonedb {
namespace core {
RCMemTable::RCMemTable(const std::string name, const uint32_t mem_id, const uint32_t cf_id)
: fullname_(name), mem_id_(mem_id), cf_handle_(kvstore->GetCfHandleByID(cf_id)) {
ASSERT(cf_handle_, "column family handle not exist " + name);
......@@ -170,5 +172,6 @@ void RCMemTable::Truncate(Transaction *tx) {
return;
}
} // namespace core
} // namespace stonedb
......@@ -27,6 +27,7 @@
namespace stonedb {
namespace core {
class TableShare;
class Transaction;
......@@ -62,6 +63,7 @@ class RCMemTable {
uint32_t mem_id_ = 0;
rocksdb::ColumnFamilyHandle *cf_handle_ = nullptr;
};
} // namespace core
} // namespace stonedb
......
......@@ -17,8 +17,8 @@
#include <boost/lockfree/queue.hpp>
#include "core/app_template.h"
#include "core/future.h"
#include "base/core/app_template.h"
#include "base/core/future.h"
#include "core/task_executor.h"
#ifndef DISABLE_USED_FOR_STONEDB
......
......@@ -278,37 +278,37 @@ class TempTable : public JustATable {
int GetDimension(TabID alias);
std::vector<AttributeTypeInfo> GetATIs(bool orig = false) override;
int GetAttrScale(int a) {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a]->Type().GetScale();
}
int GetAttrSize(int a) {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a]->Type().GetDisplaySize();
}
uint GetFieldSize(int a) {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a]->Type().GetInternalSize();
}
int GetNoDigits(int a) {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a]->Type().GetPrecision();
}
const ColumnType &GetColumnType(int a) override {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a]->Type();
}
PhysicalColumn *GetColumn(int a) override {
DEBUG_ASSERT(a >= 0 && (uint)a < NoAttrs());
DEBUG_ASSERT(a >= 0 && (uint)a < NumOfAttrs());
return attrs[a];
}
Attr *GetAttrP(uint a) {
DEBUG_ASSERT(a < (uint)NoAttrs());
DEBUG_ASSERT(a < (uint)NumOfAttrs());
return attrs[a];
}
......
......@@ -722,7 +722,7 @@ void TempTable::RoughUnion(TempTable *t, ResultSender *sender) {
if (sender && !this->IsSent()) sender->Send(this);
return;
}
DEBUG_ASSERT(NoDisplaybleAttrs() == t->NoDisplaybleAttrs());
DEBUG_ASSERT(NumOfDisplaybleAttrs() == t->NumOfDisplaybleAttrs());
if (NumOfDisplaybleAttrs() != t->NumOfDisplaybleAttrs())
throw common::NotImplementedException("UNION of tables with different number of columns.");
if (this->IsParametrized() || t->IsParametrized())
......
......@@ -29,12 +29,14 @@ void KVStore::Init() {
std::vector<rocksdb::ColumnFamilyHandle *> cf_handles;
rocksdb::Options options;
options.create_if_missing = true;
if (stonedb_sysvar_index_cache_size != 0) {
bbto_.no_block_cache = false;
bbto_.cache_index_and_filter_blocks = true;
bbto_.block_cache = rocksdb::NewLRUCache(stonedb_sysvar_index_cache_size << 20);
options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(bbto_));
}
rocksdb::DBOptions db_option(options);
auto rocksdb_datadir = kv_data_dir / ".index";
int max_compact_threads = std::thread::hardware_concurrency() / 4;
......@@ -43,6 +45,7 @@ void KVStore::Init() {
db_option.max_subcompactions = max_compact_threads;
db_option.env->SetBackgroundThreads(max_compact_threads, rocksdb::Env::Priority::LOW);
db_option.statistics = rocksdb::CreateDBStatistics();
// get column family names from manifest file
rocksdb::Status status = rocksdb::DB::ListColumnFamilies(db_option, rocksdb_datadir, &cf_names);
if (!status.ok() &&
......@@ -63,6 +66,7 @@ void KVStore::Init() {
else
cf_descr.emplace_back(cfn, index_cf_option);
}
// open db, get column family handles
status = rocksdb::TransactionDB::Open(options, txn_db_options, rocksdb_datadir, cf_descr, &cf_handles, &rdb);
if (!status.ok()) {
......
......@@ -22,14 +22,15 @@
#include <string>
#include <thread>
#include "common/common_definitions.h"
#include "index/rdb_meta_manager.h"
#include "index/rdb_utils.h"
#include "rocksdb/compaction_filter.h"
#include "rocksdb/convenience.h"
#include "rocksdb/db.h"
#include "rocksdb/utilities/transaction_db.h"
#include "rocksdb/utilities/write_batch_with_index.h"
#include "common/common_definitions.h"
#include "index/rdb_meta_manager.h"
#include "index/rdb_utils.h"
#include "util/fs.h"
namespace stonedb {
......
......@@ -24,7 +24,6 @@
#include "common/assert.h"
#include "common/mysql_gate.h"
#include "rocksdb/db.h"
#include "util/fs.h"
namespace stonedb {
......
......@@ -60,7 +60,7 @@ class ConstExpressionColumn : public ExpressionColumn {
}
ConstExpressionColumn(ConstExpressionColumn const &cc) : ExpressionColumn(NULL, NULL, common::NULL_VALUE_32, NULL) {
DEBUG_ASSERT(params.size() == 0 && "cannot copy expressions");
DEBUG_ASSERT(params_.size() == 0 && "cannot copy expressions");
last_val_ = cc.last_val_;
ct = cc.ct;
is_first_eval_ = cc.is_first_eval_;
......
......@@ -597,8 +597,8 @@ bool SubSelectColumn::MakeParallelReady() {
if (!tmptable_for_subquery_->IsMaterialized()) tmptable_for_subquery_->Materialize();
if (tmptable_for_subquery_->NumOfObj() > tmptable_for_subquery_->GetPageSize()) return false; // multipage Attrs - not thread safe
// below assert doesn't take into account lazy field
// NoMaterialized() tells how many rows in lazy mode are materialized
DEBUG_ASSERT(tmptable_for_subquery_->NumOfObj() == tmptable_for_subquery_->NoMaterialized());
// NumOfMaterialized() tells how many rows in lazy mode are materialized
DEBUG_ASSERT(tmptable_for_subquery_->NumOfObj() == tmptable_for_subquery_->NumOfMaterialized());
PrepareAndFillCache();
return true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册