From 0f165496a9fe14b6c01c5af8d7ef0823af2f3721 Mon Sep 17 00:00:00 2001 From: Nobuhiro Ban Date: Tue, 6 Jun 2023 19:54:18 +0900 Subject: [PATCH] enable to use rocksdb for pwal sorting --- CMakeLists.txt | 2 ++ README.md | 2 ++ cmake/FindRocksDB.cmake | 24 ++++++++++++++++++++++++ src/CMakeLists.txt | 11 +++++++++-- src/limestone/leveldb_wrapper.h | 6 ++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 cmake/FindRocksDB.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f15739d..ba2ab11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,8 @@ if (ENABLE_GOOGLE_PERFTOOLS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_GOOGLE_PERFTOOLS") endif() +set(SORT_METHOD LEVELDB CACHE STRING "sort method at recovery process") + # set(ENGINE "engine") find_package(Doxygen) diff --git a/README.md b/README.md index e289baf..71d40e3 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ git submodule update --init --recursive FROM ubuntu:20.04 RUN apt update -y && apt install -y git build-essential cmake ninja-build libboost-filesystem-dev libboost-system-dev libboost-container-dev libboost-thread-dev libboost-stacktrace-dev libgoogle-glog-dev libgflags-dev doxygen libleveldb-dev pkg-config +# and install librocksdb-dev as necessary ``` optional packages: @@ -43,6 +44,7 @@ available options: * `-DBUILD_DOCUMENTS=OFF` - don't build documents by doxygen * `-DINSTALL_EXAMPLES=ON` - install example applications * `-DFORCE_INSTALL_RPATH=ON` - automatically configure `INSTALL_RPATH` for non-default library paths +* `-DSORT_METHOD=` - select pwal sort method at recovery. (LEVELDB or ROCKSDB) * for debugging only * `-DENABLE_SANITIZER=OFF` - disable sanitizers (requires `-DCMAKE_BUILD_TYPE=Debug`) * `-DENABLE_UB_SANITIZER=ON` - enable undefined behavior sanitizer (requires `-DENABLE_SANITIZER=ON`) diff --git a/cmake/FindRocksDB.cmake b/cmake/FindRocksDB.cmake new file mode 100644 index 0000000..7641875 --- /dev/null +++ b/cmake/FindRocksDB.cmake @@ -0,0 +1,24 @@ +if(TARGET rocksdb::rocksdb) + return() +endif() + +find_library(rocksdb_LIBRARY_FILE NAMES rocksdb) +find_path(rocksdb_INCLUDE_DIR NAMES rocksdb/db.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(rocksdb DEFAULT_MSG + rocksdb_LIBRARY_FILE + rocksdb_INCLUDE_DIR) + +if(rocksdb_LIBRARY_FILE AND rocksdb_INCLUDE_DIR) + set(rocksdb_FOUND ON) + add_library(RocksDB::rocksdb SHARED IMPORTED) + set_target_properties(RocksDB::rocksdb PROPERTIES + IMPORTED_LOCATION "${rocksdb_LIBRARY_FILE}" + INTERFACE_INCLUDE_DIRECTORIES "${rocksdb_INCLUDE_DIR}") +else() + set(rocksdb_FOUND OFF) +endif() + +unset(rocksdb_LIBRARY_FILE CACHE) +unset(rocksdb_INCLUDE_DIR CACHE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4c4628d..27bc531 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,13 @@ set_target_properties(${package_name} PROPERTIES OUTPUT_NAME ${export_name} ) +if($CACHE{SORT_METHOD} STREQUAL "ROCKSDB") + set(sort_lib rocksdb) + target_compile_options(${package_name} PRIVATE -DSORT_METHOD_USE_ROCKSDB) +else() + set(sort_lib leveldb) +endif() + target_link_libraries(${package_name} PUBLIC limestone-api PRIVATE Boost::boost @@ -17,7 +24,7 @@ target_link_libraries(${package_name} PRIVATE Boost::thread PRIVATE Boost::container PRIVATE glog::glog - PRIVATE leveldb + PRIVATE ${sort_lib} ) set_compile_options(${package_name}) @@ -38,5 +45,5 @@ target_link_libraries(limestone-impl INTERFACE Boost::thread INTERFACE Boost::container INTERFACE glog::glog - INTERFACE leveldb + INTERFACE ${sort_lib} ) diff --git a/src/limestone/leveldb_wrapper.h b/src/limestone/leveldb_wrapper.h index bccff48..be95a10 100644 --- a/src/limestone/leveldb_wrapper.h +++ b/src/limestone/leveldb_wrapper.h @@ -15,7 +15,13 @@ */ // #include // #include + +#ifdef SORT_METHOD_USE_ROCKSDB +#include +namespace leveldb = rocksdb; +#else #include +#endif #include #include