- Antietcd is now officially safe to use: the release includes a fixed version of antietcd which passes Jepsen transaction serializability tests. - Fix a huge checksum bug in the old store: incorrect checksums for small initial writes. The bug affected writes of exactly csum_block_size (4k by default) into new (unallocated) objects and generated invalid checksums in the store for the written 4k block. Moreover, generation of these invalid checksums was very slow because it was calculating CRC32 for 4 GB of zeroes. If the block wasn't then overwritten as a part of a larger write request it became unreadable even though the stored data was correct. The bug affected all versions since 1.0.0, or since 2.3.0 because vitastor-disk didn't allow to enable checksums prior to 2.3.0 because of another bug. O:-) - Prevent OSD disconnections due to long blocking of event-loop caused by PG resharding (moving objects between old and new PGs in memory) when changing pool PG count or just on restart of an OSD with a large database (for example, with a filled 8 TB SSD). The issue should now be fixed because OSD now performs resharding in chunks with pauses between chunks. - Prevent pools stuck in paused state on an aborted PG count change. - Fix a possible OSD crash with "division by zero" when trying to handle an operation before pool PG count is applied to the in-memory store.
129 lines
5.4 KiB
CMake
129 lines
5.4 KiB
CMake
cmake_minimum_required(VERSION 2.8.12)
|
|
|
|
project(vitastor)
|
|
|
|
include(GNUInstallDirs)
|
|
include(CTest)
|
|
include(CheckIncludeFile)
|
|
|
|
find_package(PkgConfig)
|
|
|
|
set(WITH_QEMU false CACHE BOOL "Build QEMU driver inside Vitastor source tree")
|
|
set(WITH_FIO true CACHE BOOL "Build FIO driver")
|
|
set(QEMU_PLUGINDIR qemu CACHE STRING "QEMU plugin directory suffix (qemu-kvm on RHEL)")
|
|
set(WITH_ASAN false CACHE BOOL "Build with AddressSanitizer")
|
|
set(WITH_SYSTEM_LIBURING false CACHE BOOL "Use system liburing")
|
|
if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$")
|
|
if(EXISTS "/etc/debian_version")
|
|
set(CMAKE_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
|
|
endif()
|
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
|
endif()
|
|
set(ENABLE_COVERAGE false CACHE BOOL "Enable code coverage")
|
|
|
|
add_definitions(-DVITASTOR_VERSION="3.0.2")
|
|
add_definitions(-D_GNU_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fdiagnostics-color=always -fno-omit-frame-pointer -fvisibility=hidden -I ${CMAKE_SOURCE_DIR}/src)
|
|
add_link_options(-fno-omit-frame-pointer)
|
|
if (${WITH_ASAN})
|
|
add_definitions(-fsanitize=address)
|
|
add_link_options(-fsanitize=address -fno-omit-frame-pointer)
|
|
endif (${WITH_ASAN})
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvisibility-inlines-hidden")
|
|
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -fvisibility-inlines-hidden")
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fvisibility-inlines-hidden")
|
|
|
|
if (${ENABLE_COVERAGE})
|
|
add_definitions(-coverage)
|
|
add_link_options(-coverage)
|
|
endif()
|
|
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}")
|
|
string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}")
|
|
string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
|
|
|
macro(install_symlink filepath sympath)
|
|
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${filepath} \$ENV{DESTDIR}${sympath})")
|
|
install(CODE "message(\"-- Created symlink: ${sympath} -> ${filepath}\")")
|
|
endmacro(install_symlink)
|
|
|
|
check_include_file("linux/nbd-netlink.h" HAVE_NBD_NETLINK_H)
|
|
|
|
find_package(PkgConfig)
|
|
if (${WITH_QEMU})
|
|
pkg_check_modules(GLIB REQUIRED glib-2.0)
|
|
endif (${WITH_QEMU})
|
|
pkg_check_modules(IBVERBS libibverbs)
|
|
if (IBVERBS_LIBRARIES)
|
|
add_definitions(-DWITH_RDMA)
|
|
endif (IBVERBS_LIBRARIES)
|
|
pkg_check_modules(ISAL libisal)
|
|
if (ISAL_LIBRARIES)
|
|
add_definitions(-DWITH_ISAL)
|
|
endif (ISAL_LIBRARIES)
|
|
pkg_check_modules(RDMACM librdmacm)
|
|
if (RDMACM_LIBRARIES)
|
|
add_definitions(-DWITH_RDMACM)
|
|
endif (RDMACM_LIBRARIES)
|
|
|
|
if (${WITH_SYSTEM_LIBURING})
|
|
pkg_check_modules(LIBURING REQUIRED liburing>=2.10)
|
|
include_directories(${LIBURING_INCLUDE_DIRS})
|
|
else()
|
|
include_directories(${CMAKE_SOURCE_DIR}/src/liburing/include)
|
|
add_subdirectory(liburing)
|
|
set(LIBURING_LIBRARIES uring)
|
|
endif (${WITH_SYSTEM_LIBURING})
|
|
|
|
include_directories(
|
|
../
|
|
${CMAKE_SOURCE_DIR}/src/blockstore
|
|
${CMAKE_SOURCE_DIR}/src/cmd
|
|
${CMAKE_SOURCE_DIR}/src/client
|
|
${CMAKE_SOURCE_DIR}/src/disk_tool
|
|
${CMAKE_SOURCE_DIR}/src/kv
|
|
${CMAKE_SOURCE_DIR}/src/nfs
|
|
${CMAKE_SOURCE_DIR}/src/osd
|
|
${CMAKE_SOURCE_DIR}/src/test
|
|
${CMAKE_SOURCE_DIR}/src/util
|
|
/usr/include/jerasure
|
|
${IBVERBS_INCLUDE_DIRS}
|
|
)
|
|
|
|
add_subdirectory(blockstore)
|
|
add_subdirectory(cmd)
|
|
add_subdirectory(client)
|
|
add_subdirectory(disk_tool)
|
|
add_subdirectory(kv)
|
|
add_subdirectory(nfs)
|
|
add_subdirectory(osd)
|
|
add_subdirectory(test)
|
|
|
|
### Install
|
|
|
|
install(TARGETS vitastor-osd vitastor-disk vitastor-nbd vitastor-ublk vitastor-nfs vitastor-cli vitastor-kv vitastor-kv-stress RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
install_symlink(vitastor-disk ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vitastor-dump-journal)
|
|
install_symlink(vitastor-cli ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vitastor-rm)
|
|
install_symlink(vitastor-cli ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vita)
|
|
install(
|
|
TARGETS vitastor_client vitastor_kv
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/client/vitastor.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
if (${WITH_FIO})
|
|
install(TARGETS fio_vitastor fio_vitastor_blk fio_vitastor_sec LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif (${WITH_FIO})
|
|
if (${WITH_QEMU})
|
|
install(TARGETS qemu_vitastor LIBRARY DESTINATION /usr/${CMAKE_INSTALL_LIBDIR}/${QEMU_PLUGINDIR})
|
|
endif (${WITH_QEMU})
|