diff options
35 files changed, 756 insertions, 344 deletions
diff --git a/include/m_ctype.h b/include/m_ctype.h index 04a82953f0a..1639332f5f7 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -360,7 +360,7 @@ struct my_collation_handler_st }; extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; -extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; +extern MYSQL_PLUGIN_IMPORT MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; extern MY_COLLATION_HANDLER my_collation_8bit_nopad_bin_handler; extern MY_COLLATION_HANDLER my_collation_8bit_simple_nopad_ci_handler; extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; @@ -586,83 +586,83 @@ extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin1_nopad; extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_filename; extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_general_ci; -extern struct charset_info_st my_charset_big5_bin; -extern struct charset_info_st my_charset_big5_chinese_ci; -extern struct charset_info_st my_charset_big5_nopad_bin; -extern struct charset_info_st my_charset_big5_chinese_nopad_ci; -extern struct charset_info_st my_charset_cp1250_czech_ci; -extern struct charset_info_st my_charset_cp932_bin; -extern struct charset_info_st my_charset_cp932_japanese_ci; -extern struct charset_info_st my_charset_cp932_nopad_bin; -extern struct charset_info_st my_charset_cp932_japanese_nopad_ci; -extern struct charset_info_st my_charset_eucjpms_bin; -extern struct charset_info_st my_charset_eucjpms_japanese_ci; -extern struct charset_info_st my_charset_eucjpms_nopad_bin; -extern struct charset_info_st my_charset_eucjpms_japanese_nopad_ci; -extern struct charset_info_st my_charset_euckr_bin; -extern struct charset_info_st my_charset_euckr_korean_ci; -extern struct charset_info_st my_charset_euckr_nopad_bin; -extern struct charset_info_st my_charset_euckr_korean_nopad_ci; -extern struct charset_info_st my_charset_gb2312_bin; -extern struct charset_info_st my_charset_gb2312_chinese_ci; -extern struct charset_info_st my_charset_gb2312_nopad_bin; -extern struct charset_info_st my_charset_gb2312_chinese_nopad_ci; -extern struct charset_info_st my_charset_gbk_bin; -extern struct charset_info_st my_charset_gbk_chinese_ci; -extern struct charset_info_st my_charset_gbk_nopad_bin; -extern struct charset_info_st my_charset_gbk_chinese_nopad_ci; -extern struct charset_info_st my_charset_latin1_bin; -extern struct charset_info_st my_charset_latin1_nopad_bin; -extern struct charset_info_st my_charset_latin1_german2_ci; -extern struct charset_info_st my_charset_latin2_czech_ci; -extern struct charset_info_st my_charset_sjis_bin; -extern struct charset_info_st my_charset_sjis_japanese_ci; -extern struct charset_info_st my_charset_sjis_nopad_bin; -extern struct charset_info_st my_charset_sjis_japanese_nopad_ci; -extern struct charset_info_st my_charset_tis620_bin; -extern struct charset_info_st my_charset_tis620_thai_ci; -extern struct charset_info_st my_charset_tis620_nopad_bin; -extern struct charset_info_st my_charset_tis620_thai_nopad_ci; -extern struct charset_info_st my_charset_ucs2_bin; -extern struct charset_info_st my_charset_ucs2_general_ci; -extern struct charset_info_st my_charset_ucs2_nopad_bin; -extern struct charset_info_st my_charset_ucs2_general_nopad_ci; -extern struct charset_info_st my_charset_ucs2_general_mysql500_ci; -extern struct charset_info_st my_charset_ucs2_unicode_ci; -extern struct charset_info_st my_charset_ucs2_unicode_nopad_ci; -extern struct charset_info_st my_charset_ucs2_general_mysql500_ci; -extern struct charset_info_st my_charset_ujis_bin; -extern struct charset_info_st my_charset_ujis_japanese_ci; -extern struct charset_info_st my_charset_ujis_nopad_bin; -extern struct charset_info_st my_charset_ujis_japanese_nopad_ci; -extern struct charset_info_st my_charset_utf16_bin; -extern struct charset_info_st my_charset_utf16_general_ci; -extern struct charset_info_st my_charset_utf16_unicode_ci; -extern struct charset_info_st my_charset_utf16_unicode_nopad_ci; -extern struct charset_info_st my_charset_utf16le_bin; -extern struct charset_info_st my_charset_utf16le_general_ci; -extern struct charset_info_st my_charset_utf16_general_nopad_ci; -extern struct charset_info_st my_charset_utf16_nopad_bin; -extern struct charset_info_st my_charset_utf16le_nopad_bin; -extern struct charset_info_st my_charset_utf16le_general_nopad_ci; -extern struct charset_info_st my_charset_utf32_bin; -extern struct charset_info_st my_charset_utf32_general_ci; -extern struct charset_info_st my_charset_utf32_unicode_ci; -extern struct charset_info_st my_charset_utf32_unicode_nopad_ci; -extern struct charset_info_st my_charset_utf32_nopad_bin; -extern struct charset_info_st my_charset_utf32_general_nopad_ci; -extern struct charset_info_st my_charset_utf8_bin; -extern struct charset_info_st my_charset_utf8_nopad_bin; -extern struct charset_info_st my_charset_utf8_general_nopad_ci; -extern struct charset_info_st my_charset_utf8_general_mysql500_ci; -extern struct charset_info_st my_charset_utf8_unicode_ci; -extern struct charset_info_st my_charset_utf8_unicode_nopad_ci; -extern struct charset_info_st my_charset_utf8mb4_bin; -extern struct charset_info_st my_charset_utf8mb4_general_ci; -extern struct charset_info_st my_charset_utf8mb4_nopad_bin; -extern struct charset_info_st my_charset_utf8mb4_general_nopad_ci; -extern struct charset_info_st my_charset_utf8mb4_unicode_ci; -extern struct charset_info_st my_charset_utf8mb4_unicode_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_big5_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_big5_chinese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_big5_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_big5_chinese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_cp1250_czech_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_cp932_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_cp932_japanese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_cp932_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_cp932_japanese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_eucjpms_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_eucjpms_japanese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_eucjpms_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_eucjpms_japanese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_euckr_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_euckr_korean_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_euckr_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_euckr_korean_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gb2312_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gb2312_chinese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gb2312_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gb2312_chinese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gbk_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gbk_chinese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gbk_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_gbk_chinese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin1_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin1_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin1_german2_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin2_czech_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_sjis_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_sjis_japanese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_sjis_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_sjis_japanese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_tis620_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_tis620_thai_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_tis620_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_tis620_thai_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_general_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_general_mysql500_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_unicode_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_unicode_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ucs2_general_mysql500_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ujis_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ujis_japanese_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ujis_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_ujis_japanese_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_general_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_unicode_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_unicode_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16le_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16le_general_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16le_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf16le_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_general_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_unicode_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_unicode_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf32_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_general_mysql500_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_unicode_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_unicode_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_general_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_nopad_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_general_nopad_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_unicode_ci; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8mb4_unicode_nopad_ci; #define MY_UTF8MB3 "utf8" #define MY_UTF8MB4 "utf8mb4" diff --git a/include/my_bit.h b/include/my_bit.h index a50403c312d..218829ba747 100644 --- a/include/my_bit.h +++ b/include/my_bit.h @@ -25,7 +25,6 @@ C_MODE_START -extern const char _my_bits_nbits[256]; extern const uchar _my_bits_reverse_table[256]; /* @@ -40,37 +39,32 @@ static inline uint my_bit_log2(ulong value) return bit; } -static inline uint my_count_bits(ulonglong v) + +/* +Count bits in 32bit integer + + Algorithm by Sean Anderson, according to: + http://graphics.stanford.edu/~seander/bithacks.html + under "Counting bits set, in parallel" + + (Orignal code public domain). +*/ +static inline uint my_count_bits_uint32(uint32 v) { -#if SIZEOF_LONG_LONG > 4 - /* The following code is a bit faster on 16 bit machines than if we would - only shift v */ - ulong v2=(ulong) (v >> 32); - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)] + - _my_bits_nbits[(uchar) (v2)] + - _my_bits_nbits[(uchar) (v2 >> 8)] + - _my_bits_nbits[(uchar) (v2 >> 16)] + - _my_bits_nbits[(uchar) (v2 >> 24)]); -#else - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)]); -#endif + v = v - ((v >> 1) & 0x55555555); + v = (v & 0x33333333) + ((v >> 2) & 0x33333333); + return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; } -static inline uint my_count_bits_uint32(uint32 v) + +static inline uint my_count_bits(ulonglong x) { - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)]); + return my_count_bits_uint32((uint32)x) + my_count_bits_uint32((uint32)(x >> 32)); } + + /* Next highest power of two diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index b3c71c65488..12fdab4f2fe 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -393,6 +393,23 @@ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } +#define MYSQL_SYSVAR_UINT64_T(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, uint64_t) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#ifdef _WIN64 +#define MYSQL_SYSVAR_SIZE_T(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, size_t) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } +#else +#define MYSQL_SYSVAR_SIZE_T(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, size_t) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } +#endif + #define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ diff --git a/mysys/my_bit.c b/mysys/my_bit.c index d36f52bb3c0..9ceb083cd48 100644 --- a/mysys/my_bit.c +++ b/mysys/my_bit.c @@ -17,24 +17,6 @@ #include <my_bit.h> -const char _my_bits_nbits[256] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, -}; /* perl -e 'print map{", 0x".unpack H2,pack B8,unpack b8,chr$_}(0..255)' diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index e6948c60a51..e9e63dcfcd7 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -1,91 +1,157 @@ # TODO: Copyrights -IF (NOT EXISTS "${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/Makefile") + +IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/Makefile") MESSAGE(SEND_ERROR "Missing Makefile in rocksdb directory. Try \"git submodule update\".") ENDIF() -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +MACRO(SKIP_ROCKSDB_PLUGIN msg) + MESSAGE_ONCE(SKIP_ROCKSDB_PLUGIN "Can't build rocksdb engine - ${msg}") + RETURN() +ENDMACRO() + + +# This plugin needs recent C++ compilers (it is using C++11 features) +# Skip build for the old compilers +SET(CXX11_FLAGS) +SET(OLD_COMPILER_MSG "requires c++11 -capable compiler (minimal supported versions are g++ 4.8, clang 3.3, VS2015)") + +IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + IF (GCC_VERSION VERSION_LESS 4.8) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() + SET(CXX11_FLAGS "-std=c++11") +ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + IF ((CMAKE_CXX_COMPILER_VERSION AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3) OR + (CLANG_VERSION_STRING AND CLANG_VERSION_STRING VERSION_LESS 3.3)) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() + SET(CXX11_FLAGS "-stdlib=libc++ -std=c++11") +ELSEIF(MSVC) + IF (MSVC_VERSION LESS 1900) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() +ELSE() + SKIP_ROCKSDB_PLUGIN("Compiler not supported") +ENDIF() -CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU) -IF(HAVE_SCHED_GETCPU) - ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1) +IF(CXX11_FLAGS) + ADD_DEFINITIONS(${CXX11_FLAGS}) ENDIF() -# get a list of rocksdb library source files -# run with env -i to avoid passing variables -EXECUTE_PROCESS( - COMMAND env -i ${CMAKE_SOURCE_DIR}/storage/rocksdb/get_rocksdb_files.sh - OUTPUT_VARIABLE SCRIPT_OUTPUT - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +SET(ROCKSDB_SE_SOURCES + rdb_mariadb_server_port.cc + rdb_mariadb_server_port.h + ha_rocksdb.cc + ha_rocksdb.h + rdb_i_s.cc + rdb_i_s.h + rdb_mutex_wrapper.cc + rdb_mutex_wrapper.h + rdb_index_merge.cc + rdb_index_merge.h + properties_collector.cc + properties_collector.h + rdb_datadic.cc + rdb_datadic.h + rdb_cf_manager.cc + rdb_cf_manager.h + rdb_utils.cc rdb_utils.h + rdb_threads.cc + rdb_threads.h ) -# split the list into lines -STRING(REGEX MATCHALL "[^\n]+" ROCKSDB_LIB_SOURCES ${SCRIPT_OUTPUT}) -INCLUDE_DIRECTORIES( - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/include - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/third-party/gtest-1.7.0/fused-src -) +MYSQL_ADD_PLUGIN(rocksdb_se ${ROCKSDB_SE_SOURCES} STORAGE_ENGINE MODULE_OUTPUT_NAME ha_rocksdb) -ADD_DEFINITIONS(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX -DOS_LINUX - -DZLIB) - -# MARIAROCKS_NOT_YET: Add -frtti flag when compiling RocksDB files. -# TODO: is this the right way to do this? -# - SQL layer and storage/rocksdb/*.cc are compiled with -fnortti -# - RocksDB files are compiled with "-fnortti ... -frtti" -# - This causes RocksDB headers to be compiled with different settings: -# = with RTTI when compiling RocksDB -# = without RTTI when compiling storage/rocksdb/*.cc -# -# (facebook/mysql-5.6 just compiles everything without -f*rtti, which means -# everything is compiled with -frtti) -# -# (also had to add -frtti above, because something that event_listener.cc -# includes requires it. So, now everything in MariaRocks is compiled with -# -frtti) -set_source_files_properties(${ROCKSDB_LIB_SOURCES} PROPERTIES COMPILE_FLAGS -frtti) -set_source_files_properties(event_listener.cc PROPERTIES COMPILE_FLAGS -frtti) -set_source_files_properties(rdb_cf_options.cc PROPERTIES COMPILE_FLAGS -frtti) - -ADD_CONVENIENCE_LIBRARY( - ROCKSDB_AUX_LIB +IF(NOT TARGET rocksdb_se) + # Bail out if compilation with rocksdb engine is not requested + RETURN() +ENDIF() + +INCLUDE(build_rocksdb.cmake) + +ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib ha_rocksdb_proto.h logger.h rdb_comparator.h - rdb_datadic.cc rdb_datadic.h - rdb_cf_options.cc rdb_cf_options.h - rdb_cf_manager.cc rdb_cf_manager.h - properties_collector.cc properties_collector.h - event_listener.cc event_listener.h - rdb_i_s.cc rdb_i_s.h - rdb_index_merge.cc rdb_index_merge.h - rdb_perf_context.cc rdb_perf_context.h - rdb_mutex_wrapper.cc rdb_mutex_wrapper.h - rdb_sst_info.cc rdb_sst_info.h - rdb_utils.cc rdb_utils.h rdb_buff.h - rdb_threads.cc rdb_threads.h - rdb_mariadb_port.h - ${ROCKSDB_LIB_SOURCES} -) + rdb_cf_options.cc + rdb_cf_options.h + event_listener.cc + event_listener.h + rdb_perf_context.cc + rdb_perf_context.h + rdb_sst_info.cc + rdb_sst_info.h + rdb_buff.h + rdb_mariadb_port.h) + +ADD_DEPENDENCIES(rocksdb_aux_lib GenError) + +TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY}) +TARGET_LINK_LIBRARIES(rocksdb_se rocksdb_aux_lib) + +IF(CMAKE_COMPILER_IS_GNUCXX) + # MARIAROCKS_NOT_YET: Add -frtti flag when compiling RocksDB files. + # TODO: is this the right way to do this? + # - SQL layer and storage/rocksdb/*.cc are compiled with -fnortti + # - RocksDB files are compiled with "-fnortti ... -frtti" + # - This causes RocksDB headers to be compiled with different settings: + # = with RTTI when compiling RocksDB + # = without RTTI when compiling storage/rocksdb/*.cc + # + # (facebook/mysql-5.6 just compiles everything without -f*rtti, which means + # everything is compiled with -frtti) + # + # (also had to add -frtti above, because something that event_listener.cc + # includes requires it. So, now everything in MariaRocks is compiled with + # -frtti) + set_source_files_properties(event_listener.cc rdb_cf_options.cc + PROPERTIES COMPILE_FLAGS -frtti) +ENDIF() + +CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU) +IF(HAVE_SCHED_GETCPU) + ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1) +ENDIF() -# We include storage/innobase/include/ut0counter.h, which includes -# univ.i, which includes mysqld_error.h. -# Indicate that MyRocks is dependent on that file (just like innochecksum does) -ADD_DEPENDENCIES(ROCKSDB_AUX_LIB GenError) +IF(WITH_UNIT_TESTS AND WITH_EMBEDDED_SERVER) + ADD_SUBDIRECTORY(unittest) +ENDIF() -SET(ROCKSDB_SOURCES - rdb_mariadb_server_port.cc rdb_mariadb_server_port.h - ha_rocksdb.cc ha_rocksdb.h +ADD_LIBRARY(rocksdb_tools STATIC + rocksdb/tools/ldb_tool.cc + rocksdb/tools/ldb_cmd.cc + rocksdb/tools/sst_dump_tool.cc ) -IF(WITH_FB_TSAN) - SET(PIC_EXT "_pic") -ELSE() - SET(PIC_EXT "") +MYSQL_ADD_EXECUTABLE(sst_dump rocksdb/tools/sst_dump.cc) +TARGET_LINK_LIBRARIES(sst_dump rocksdblib) + +MYSQL_ADD_EXECUTABLE(ldb rocksdb/tools/ldb.cc) +TARGET_LINK_LIBRARIES(ldb rocksdb_tools rocksdblib) + +MYSQL_ADD_EXECUTABLE(mysql_ldb tools/mysql_ldb.cc) +TARGET_LINK_LIBRARIES(mysql_ldb rocksdb_tools rocksdb_aux_lib) + +IF(CMAKE_COMPILER_IS_GNUCXX) + SET_TARGET_PROPERTIES(rocksdb_tools sst_dump ldb mysql_ldb PROPERTIES COMPILE_FLAGS -frtti) +ENDIF() +IF(MSVC) + # RocksDB, the storage engine, overdoes "const" by adding + # additional const qualifiers to parameters of the overriden virtual functions + # This creates a lot of warnings, that we silence here. + ADD_DEFINITIONS(/wd4373) + + # Some checks in C++ runtime that make debug build much slower + ADD_DEFINITIONS(-D_ITERATOR_DEBUG_LEVEL=0) ENDIF() -SET(rocksdb_static_libs ) +# Optional compression libraries. +# +# TODO: search compression libraries properly. +# Use FIND_PACKAGE, CHECK_LIBRARY_EXISTS etc +IF(MARIAROCKS_NOT_YET) IF (NOT "$ENV{WITH_SNAPPY}" STREQUAL "") SET(rocksdb_static_libs ${rocksdb_static_libs} $ENV{WITH_SNAPPY}/libsnappy${PIC_EXT}.a) @@ -110,31 +176,4 @@ IF (NOT "$ENV{WITH_ZSTD}" STREQUAL "") $ENV{WITH_ZSTD}/libzstd${PIC_EXT}.a) ADD_DEFINITIONS(-DZSTD) ENDIF() - -SET(rocksdb_static_libs ROCKSDB_AUX_LIB ${rocksdb_static_libs} ${ZLIB_LIBRARY} "-lrt") - -MYSQL_ADD_PLUGIN(rocksdb_se ${ROCKSDB_SOURCES} STORAGE_ENGINE DEFAULT MODULE_ONLY - LINK_LIBRARIES ${rocksdb_static_libs} -) - -IF(WITH_EMBEDDED_SERVER) - ADD_SUBDIRECTORY(unittest) -ENDIF() - -IF (WITH_ROCKSDB_SE_STORAGE_ENGINE) - # TODO: read this file list from src.mk:TOOL_SOURCES - SET(ROCKSDB_TOOL_SOURCES - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/tools/ldb_tool.cc - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/tools/ldb_cmd.cc - ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/tools/sst_dump_tool.cc - ) - set_source_files_properties(${ROCKSDB_TOOL_SOURCES} PROPERTIES COMPILE_FLAGS -frtti) - MYSQL_ADD_EXECUTABLE(sst_dump ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/tools/sst_dump.cc ${ROCKSDB_TOOL_SOURCES}) - TARGET_LINK_LIBRARIES(sst_dump ${rocksdb_static_libs}) - - MYSQL_ADD_EXECUTABLE(ldb ${CMAKE_SOURCE_DIR}/storage/rocksdb/rocksdb/tools/ldb.cc ${ROCKSDB_TOOL_SOURCES}) - TARGET_LINK_LIBRARIES(ldb ${rocksdb_static_libs}) - - MYSQL_ADD_EXECUTABLE(mysql_ldb ${CMAKE_SOURCE_DIR}/storage/rocksdb/tools/mysql_ldb.cc ${ROCKSDB_TOOL_SOURCES}) - TARGET_LINK_LIBRARIES(mysql_ldb ${rocksdb_static_libs}) -ENDIF() +ENDIF(MARIAROCKS_NOT_YET) diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake new file mode 100644 index 00000000000..35e83af73dc --- /dev/null +++ b/storage/rocksdb/build_rocksdb.cmake @@ -0,0 +1,337 @@ + +if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) +endif() + +SET(ROCKSDB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb) + +INCLUDE_DIRECTORIES( + ${ROCKSDB_SOURCE_DIR} + ${ROCKSDB_SOURCE_DIR}/include + ${ROCKSDB_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src +) + + + +list(APPEND CMAKE_MODULE_PATH "${ROCKSDB_SOURCE_DIR}/cmake/modules/") + +if(WIN32) + # include(${ROCKSDB_SOURCE_DIR}/thirdparty.inc) +else() + option(WITH_ROCKSDB_JEMALLOC "build RocksDB with JeMalloc" OFF) + if(WITH_ROCKSDB_JEMALLOC) + find_package(JeMalloc REQUIRED) + add_definitions(-DROCKSDB_JEMALLOC) + include_directories(${JEMALLOC_INCLUDE_DIR}) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + # FreeBSD has jemaloc as default malloc + add_definitions(-DROCKSDB_JEMALLOC) + set(WITH_JEMALLOC ON) + endif() + option(WITH_ROCKSDB_SNAPPY "build RocksDB with SNAPPY" OFF) + if(WITH_ROCKSDB_SNAPPY) + find_package(snappy REQUIRED) + add_definitions(-DSNAPPY) + include_directories(${SNAPPY_INCLUDE_DIR}) + list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES}) + endif() +endif() + + + + + +if(CMAKE_SYSTEM_NAME MATCHES "Cygwin") + add_definitions(-fno-builtin-memcmp -DCYGWIN) +elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + add_definitions(-DOS_MACOSX) +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") + add_definitions(-DOS_LINUX) +elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") + add_definitions(-DOS_SOLARIS) +elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + add_definitions(-DOS_FREEBSD) +elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") + add_definitions(-DOS_NETBSD) +elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") + add_definitions(-DOS_OPENBSD) +elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly") + add_definitions(-DOS_DRAGONFLYBSD) +elseif(CMAKE_SYSTEM_NAME MATCHES "Android") + add_definitions(-DOS_ANDROID) +elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") + add_definitions(-DOS_WIN) +endif() + +IF(MSVC) + add_definitions(/wd4244) +ENDIF() +if(NOT WIN32) + add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX) +endif() + +option(WITH_FALLOCATE "build with fallocate" ON) + +if(WITH_FALLOCATE AND UNIX) + include(CheckCSourceCompiles) + CHECK_C_SOURCE_COMPILES(" +#include <fcntl.h> +#include <linux/falloc.h> +int main() { + int fd = open(\"/dev/null\", 0); + fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024); +} +" HAVE_FALLOCATE) + if(HAVE_FALLOCATE) + add_definitions(-DROCKSDB_FALLOCATE_PRESENT) + endif() +endif() + +include(CheckFunctionExists) +CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE) +if(HAVE_MALLOC_USABLE_SIZE) + add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE) +endif() + +include_directories(${ROCKSDB_SOURCE_DIR}) +include_directories(${ROCKSDB_SOURCE_DIR}/include) +include_directories(SYSTEM ${ROCKSDB_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src) + +find_package(Threads REQUIRED) +if(WIN32) + set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib) +else() + set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT}) +endif() + +set(ROCKSDB_LIBS rocksdblib}) +set(LIBS ${ROCKSDB_LIBS} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) + +#add_subdirectory(${ROCKSDB_SOURCE_DIR}/tools) + +# Main library source code + +set(ROCKSDB_SOURCES + db/auto_roll_logger.cc + db/builder.cc + db/c.cc + db/column_family.cc + db/compacted_db_impl.cc + db/compaction.cc + db/compaction_iterator.cc + db/compaction_job.cc + db/compaction_picker.cc + db/convenience.cc + db/dbformat.cc + db/db_filesnapshot.cc + db/db_impl.cc + db/db_impl_debug.cc + db/db_impl_experimental.cc + db/db_impl_readonly.cc + db/db_info_dumper.cc + db/db_iter.cc + db/event_helpers.cc + db/external_sst_file_ingestion_job.cc + db/experimental.cc + db/filename.cc + db/file_indexer.cc + db/flush_job.cc + db/flush_scheduler.cc + db/forward_iterator.cc + db/internal_stats.cc + db/log_reader.cc + db/log_writer.cc + db/managed_iterator.cc + db/memtable.cc + db/memtable_allocator.cc + db/memtable_list.cc + db/merge_helper.cc + db/merge_operator.cc + db/range_del_aggregator.cc + db/repair.cc + db/snapshot_impl.cc + db/table_cache.cc + db/table_properties_collector.cc + db/transaction_log_impl.cc + db/version_builder.cc + db/version_edit.cc + db/version_set.cc + db/wal_manager.cc + db/write_batch.cc + db/write_batch_base.cc + db/write_controller.cc + db/write_thread.cc + db/xfunc_test_points.cc + memtable/hash_cuckoo_rep.cc + memtable/hash_linklist_rep.cc + memtable/hash_skiplist_rep.cc + memtable/skiplistrep.cc + memtable/vectorrep.cc + port/stack_trace.cc + table/adaptive_table_factory.cc + table/block.cc + table/block_based_filter_block.cc + table/block_based_table_builder.cc + table/block_based_table_factory.cc + table/block_based_table_reader.cc + table/block_builder.cc + table/block_prefix_index.cc + table/bloom_block.cc + table/cuckoo_table_builder.cc + table/cuckoo_table_factory.cc + table/cuckoo_table_reader.cc + table/flush_block_policy.cc + table/format.cc + table/full_filter_block.cc + table/get_context.cc + table/iterator.cc + table/merger.cc + table/sst_file_writer.cc + table/meta_blocks.cc + table/plain_table_builder.cc + table/plain_table_factory.cc + table/plain_table_index.cc + table/plain_table_key_coding.cc + table/plain_table_reader.cc + table/persistent_cache_helper.cc + table/table_properties.cc + table/two_level_iterator.cc + tools/sst_dump_tool.cc + tools/db_bench_tool.cc + tools/dump/db_dump_tool.cc + util/arena.cc + util/bloom.cc + util/cf_options.cc + util/clock_cache.cc + util/coding.cc + util/compaction_job_stats_impl.cc + util/comparator.cc + util/concurrent_arena.cc + util/crc32c.cc + util/db_options.cc + util/delete_scheduler.cc + util/dynamic_bloom.cc + util/env.cc + util/env_chroot.cc + util/env_hdfs.cc + util/event_logger.cc + util/file_util.cc + util/file_reader_writer.cc + util/sst_file_manager_impl.cc + util/filter_policy.cc + util/hash.cc + util/histogram.cc + util/histogram_windowing.cc + util/instrumented_mutex.cc + util/iostats_context.cc + util/lru_cache.cc + tools/ldb_cmd.cc + tools/ldb_tool.cc + util/logging.cc + util/log_buffer.cc + util/memenv.cc + util/murmurhash.cc + util/options.cc + util/options_helper.cc + util/options_parser.cc + util/options_sanity_check.cc + util/perf_context.cc + util/perf_level.cc + util/random.cc + util/rate_limiter.cc + util/sharded_cache.cc + util/slice.cc + util/statistics.cc + util/status.cc + util/status_message.cc + util/string_util.cc + util/sync_point.cc + util/testutil.cc + util/thread_local.cc + util/threadpool_imp.cc + util/thread_status_impl.cc + util/thread_status_updater.cc + util/thread_status_util.cc + util/thread_status_util_debug.cc + util/transaction_test_util.cc + util/xfunc.cc + util/xxhash.cc + utilities/backupable/backupable_db.cc + utilities/blob_db/blob_db.cc + utilities/checkpoint/checkpoint.cc + utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc + utilities/date_tiered/date_tiered_db_impl.cc + utilities/document/document_db.cc + utilities/document/json_document.cc + utilities/document/json_document_builder.cc + utilities/env_mirror.cc + utilities/env_registry.cc + utilities/geodb/geodb_impl.cc + utilities/leveldb_options/leveldb_options.cc + utilities/lua/rocks_lua_compaction_filter.cc + utilities/memory/memory_util.cc + utilities/merge_operators/string_append/stringappend.cc + utilities/merge_operators/string_append/stringappend2.cc + utilities/merge_operators/put.cc + utilities/merge_operators/max.cc + utilities/merge_operators/uint64add.cc + utilities/option_change_migration/option_change_migration.cc + utilities/options/options_util.cc + utilities/persistent_cache/block_cache_tier.cc + utilities/persistent_cache/block_cache_tier_file.cc + utilities/persistent_cache/block_cache_tier_metadata.cc + utilities/persistent_cache/persistent_cache_tier.cc + utilities/persistent_cache/volatile_tier_impl.cc + utilities/redis/redis_lists.cc + utilities/simulator_cache/sim_cache.cc + utilities/spatialdb/spatial_db.cc + utilities/table_properties_collectors/compact_on_deletion_collector.cc + utilities/transactions/optimistic_transaction_impl.cc + utilities/transactions/optimistic_transaction_db_impl.cc + utilities/transactions/transaction_base.cc + utilities/transactions/transaction_impl.cc + utilities/transactions/transaction_db_impl.cc + utilities/transactions/transaction_db_mutex_impl.cc + utilities/transactions/transaction_lock_mgr.cc + utilities/transactions/transaction_util.cc + utilities/ttl/db_ttl_impl.cc + utilities/write_batch_with_index/write_batch_with_index.cc + utilities/write_batch_with_index/write_batch_with_index_internal.cc + utilities/col_buf_encoder.cc + utilities/col_buf_decoder.cc + utilities/column_aware_encoding_util.cc +) + +if(WIN32) + list(APPEND ROCKSDB_SOURCES + port/win/io_win.cc + port/win/env_win.cc + port/win/env_default.cc + port/win/port_win.cc + port/win/win_logger.cc + port/win/xpress_win.cc) +else() + list(APPEND ROCKSDB_SOURCES + port/port_posix.cc + util/env_posix.cc + util/io_posix.cc) +endif() +SET(SOURCES) +FOREACH(s ${ROCKSDB_SOURCES}) + list(APPEND SOURCES ${ROCKSDB_SOURCE_DIR}/${s}) +ENDFOREACH() + +IF(CMAKE_VERSION VERSION_GREATER "2.8.10") + STRING(TIMESTAMP GIT_DATE_TIME "%Y-%m-%d %H:%M:%S") +ENDIF() + +CONFIGURE_FILE(${ROCKSDB_SOURCE_DIR}/util/build_version.cc.in build_version.cc @ONLY) +INCLUDE_DIRECTORIES(${ROCKSDB_SOURCE_DIR}/util) +list(APPEND SOURCES ${CMAKE_CURRENT_BINARY_DIR}/build_version.cc) + +ADD_CONVENIENCE_LIBRARY(rocksdblib STATIC ${SOURCES}) +target_link_libraries(rocksdblib ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) +if(CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(rocksdblib PROPERTIES COMPILE_FLAGS "-fno-builtin-memcmp -frtti") +endif() diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c97d7976ba3..fa83b3f5a52 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -394,9 +394,9 @@ static long long rocksdb_block_cache_size; /* Use unsigned long long instead of uint64_t because of MySQL compatibility */ static unsigned long long // NOLINT(runtime/int) rocksdb_rate_limiter_bytes_per_sec; -static uint64_t rocksdb_info_log_level; +static ulong rocksdb_info_log_level; static char * rocksdb_wal_dir; -static uint64_t rocksdb_index_type; +static ulong rocksdb_index_type; static char rocksdb_background_sync; static uint32_t rocksdb_debug_optimizer_n_rows; static my_bool rocksdb_debug_optimizer_no_zero_cardinality; @@ -651,12 +651,12 @@ static MYSQL_SYSVAR_UINT(wal_recovery_mode, /* min */ (uint) rocksdb::WALRecoveryMode::kTolerateCorruptedTailRecords, /* max */ (uint) rocksdb::WALRecoveryMode::kSkipAnyCorruptedRecords, 0); -static MYSQL_SYSVAR_ULONG(compaction_readahead_size, +static MYSQL_SYSVAR_SIZE_T(compaction_readahead_size, rocksdb_db_options.compaction_readahead_size, PLUGIN_VAR_RQCMDARG, "DBOptions::compaction_readahead_size for RocksDB", nullptr, nullptr, rocksdb_db_options.compaction_readahead_size, - /* min */ 0L, /* max */ ULONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); static MYSQL_SYSVAR_BOOL(new_table_reader_for_compaction_inputs, *reinterpret_cast<my_bool*> @@ -695,12 +695,12 @@ static MYSQL_SYSVAR_INT(max_open_files, nullptr, nullptr, rocksdb_db_options.max_open_files, /* min */ -1, /* max */ INT_MAX, 0); -static MYSQL_SYSVAR_ULONG(max_total_wal_size, +static MYSQL_SYSVAR_UINT64_T(max_total_wal_size, rocksdb_db_options.max_total_wal_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::max_total_wal_size for RocksDB", nullptr, nullptr, rocksdb_db_options.max_total_wal_size, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0, /* max */ LONGLONG_MAX, 0); static MYSQL_SYSVAR_BOOL(disabledatasync, *reinterpret_cast<my_bool*>(&rocksdb_db_options.disableDataSync), @@ -719,12 +719,12 @@ static MYSQL_SYSVAR_STR(wal_dir, rocksdb_wal_dir, "DBOptions::wal_dir for RocksDB", nullptr, nullptr, rocksdb_db_options.wal_dir.c_str()); -static MYSQL_SYSVAR_ULONG(delete_obsolete_files_period_micros, +static MYSQL_SYSVAR_UINT64_T(delete_obsolete_files_period_micros, rocksdb_db_options.delete_obsolete_files_period_micros, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::delete_obsolete_files_period_micros for RocksDB", nullptr, nullptr, rocksdb_db_options.delete_obsolete_files_period_micros, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0, /* max */ LONGLONG_MAX, 0); static MYSQL_SYSVAR_INT(base_background_compactions, rocksdb_db_options.base_background_compactions, @@ -754,33 +754,33 @@ static MYSQL_SYSVAR_UINT(max_subcompactions, nullptr, nullptr, rocksdb_db_options.max_subcompactions, /* min */ 1, /* max */ MAX_SUBCOMPACTIONS, 0); -static MYSQL_SYSVAR_ULONG(max_log_file_size, +static MYSQL_SYSVAR_SIZE_T(max_log_file_size, rocksdb_db_options.max_log_file_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::max_log_file_size for RocksDB", nullptr, nullptr, rocksdb_db_options.max_log_file_size, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); -static MYSQL_SYSVAR_ULONG(log_file_time_to_roll, +static MYSQL_SYSVAR_SIZE_T(log_file_time_to_roll, rocksdb_db_options.log_file_time_to_roll, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::log_file_time_to_roll for RocksDB", nullptr, nullptr, rocksdb_db_options.log_file_time_to_roll, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); -static MYSQL_SYSVAR_ULONG(keep_log_file_num, +static MYSQL_SYSVAR_SIZE_T(keep_log_file_num, rocksdb_db_options.keep_log_file_num, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::keep_log_file_num for RocksDB", nullptr, nullptr, rocksdb_db_options.keep_log_file_num, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); -static MYSQL_SYSVAR_ULONG(max_manifest_file_size, +static MYSQL_SYSVAR_UINT64_T(max_manifest_file_size, rocksdb_db_options.max_manifest_file_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::max_manifest_file_size for RocksDB", nullptr, nullptr, rocksdb_db_options.max_manifest_file_size, - /* min */ 0L, /* max */ ULONG_MAX, 0); + /* min */ 0L, /* max */ ULONGLONG_MAX, 0); static MYSQL_SYSVAR_INT(table_cache_numshardbits, rocksdb_db_options.table_cache_numshardbits, @@ -789,26 +789,26 @@ static MYSQL_SYSVAR_INT(table_cache_numshardbits, nullptr, nullptr, rocksdb_db_options.table_cache_numshardbits, /* min */ 0, /* max */ INT_MAX, 0); -static MYSQL_SYSVAR_ULONG(wal_ttl_seconds, +static MYSQL_SYSVAR_UINT64_T(wal_ttl_seconds, rocksdb_db_options.WAL_ttl_seconds, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::WAL_ttl_seconds for RocksDB", nullptr, nullptr, rocksdb_db_options.WAL_ttl_seconds, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ LONGLONG_MAX, 0); -static MYSQL_SYSVAR_ULONG(wal_size_limit_mb, +static MYSQL_SYSVAR_UINT64_T(wal_size_limit_mb, rocksdb_db_options.WAL_size_limit_MB, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::WAL_size_limit_MB for RocksDB", nullptr, nullptr, rocksdb_db_options.WAL_size_limit_MB, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ LONGLONG_MAX, 0); -static MYSQL_SYSVAR_ULONG(manifest_preallocation_size, +static MYSQL_SYSVAR_SIZE_T(manifest_preallocation_size, rocksdb_db_options.manifest_preallocation_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::manifest_preallocation_size for RocksDB", nullptr, nullptr, rocksdb_db_options.manifest_preallocation_size, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); static MYSQL_SYSVAR_BOOL(use_direct_reads, *reinterpret_cast<my_bool*>(&rocksdb_db_options.use_direct_reads), @@ -853,12 +853,12 @@ static MYSQL_SYSVAR_BOOL(advise_random_on_open, "DBOptions::advise_random_on_open for RocksDB", nullptr, nullptr, rocksdb_db_options.advise_random_on_open); -static MYSQL_SYSVAR_ULONG(db_write_buffer_size, +static MYSQL_SYSVAR_SIZE_T(db_write_buffer_size, rocksdb_db_options.db_write_buffer_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::db_write_buffer_size for RocksDB", nullptr, nullptr, rocksdb_db_options.db_write_buffer_size, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ SIZE_T_MAX, 0); static MYSQL_SYSVAR_BOOL(use_adaptive_mutex, *reinterpret_cast<my_bool*>(&rocksdb_db_options.use_adaptive_mutex), @@ -866,19 +866,19 @@ static MYSQL_SYSVAR_BOOL(use_adaptive_mutex, "DBOptions::use_adaptive_mutex for RocksDB", nullptr, nullptr, rocksdb_db_options.use_adaptive_mutex); -static MYSQL_SYSVAR_ULONG(bytes_per_sync, +static MYSQL_SYSVAR_UINT64_T(bytes_per_sync, rocksdb_db_options.bytes_per_sync, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::bytes_per_sync for RocksDB", nullptr, nullptr, rocksdb_db_options.bytes_per_sync, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ ULONGLONG_MAX, 0); -static MYSQL_SYSVAR_ULONG(wal_bytes_per_sync, +static MYSQL_SYSVAR_UINT64_T(wal_bytes_per_sync, rocksdb_db_options.wal_bytes_per_sync, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::wal_bytes_per_sync for RocksDB", nullptr, nullptr, rocksdb_db_options.wal_bytes_per_sync, - /* min */ 0L, /* max */ LONG_MAX, 0); + /* min */ 0L, /* max */ ULONGLONG_MAX, 0); static MYSQL_SYSVAR_BOOL(enable_thread_tracking, *reinterpret_cast<my_bool*>(&rocksdb_db_options.enable_thread_tracking), @@ -921,7 +921,7 @@ static MYSQL_SYSVAR_ENUM(index_type, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "BlockBasedTableOptions::index_type for RocksDB", nullptr, nullptr, - (uint64_t)rocksdb_tbl_options.index_type, &index_type_typelib); + (ulong)rocksdb_tbl_options.index_type, &index_type_typelib); static MYSQL_SYSVAR_BOOL(hash_index_allow_collision, *reinterpret_cast<my_bool*>(&rocksdb_tbl_options.hash_index_allow_collision), @@ -935,12 +935,12 @@ static MYSQL_SYSVAR_BOOL(no_block_cache, "BlockBasedTableOptions::no_block_cache for RocksDB", nullptr, nullptr, rocksdb_tbl_options.no_block_cache); -static MYSQL_SYSVAR_ULONG(block_size, +static MYSQL_SYSVAR_SIZE_T(block_size, rocksdb_tbl_options.block_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "BlockBasedTableOptions::block_size for RocksDB", nullptr, nullptr, rocksdb_tbl_options.block_size, - /* min */ 1L, /* max */ LONG_MAX, 0); + /* min */ 1L, /* max */ SIZE_T_MAX, 0); static MYSQL_SYSVAR_INT(block_size_deviation, rocksdb_tbl_options.block_size_deviation, @@ -3097,7 +3097,7 @@ class Rdb_snapshot_status : public Rdb_tx_list_walker m_data += format_string("---SNAPSHOT, ACTIVE %lld sec\n" "%s\n" "lock count %llu, write count %llu\n", - curr_time - snapshot_timestamp, + (longlong)(curr_time - snapshot_timestamp), buffer, tx->get_lock_count(), tx->get_write_count()); } @@ -3307,20 +3307,20 @@ static bool rocksdb_show_status(handlerton* const hton, str.clear(); rocksdb::MemoryUtil::GetApproximateMemoryUsageByType( dbs, cache_set, &temp_usage_by_type); - snprintf(buf, sizeof(buf), "\nMemTable Total: %lu", - temp_usage_by_type[rocksdb::MemoryUtil::kMemTableTotal]); + snprintf(buf, sizeof(buf), "\nMemTable Total: %llu", + (ulonglong)temp_usage_by_type[rocksdb::MemoryUtil::kMemTableTotal]); str.append(buf); - snprintf(buf, sizeof(buf), "\nMemTable Unflushed: %lu", - temp_usage_by_type[rocksdb::MemoryUtil::kMemTableUnFlushed]); + snprintf(buf, sizeof(buf), "\nMemTable Unflushed: %llu", + (ulonglong)temp_usage_by_type[rocksdb::MemoryUtil::kMemTableUnFlushed]); str.append(buf); - snprintf(buf, sizeof(buf), "\nTable Readers Total: %lu", - temp_usage_by_type[rocksdb::MemoryUtil::kTableReadersTotal]); + snprintf(buf, sizeof(buf), "\nTable Readers Total: %llu", + (ulonglong)temp_usage_by_type[rocksdb::MemoryUtil::kTableReadersTotal]); str.append(buf); - snprintf(buf, sizeof(buf), "\nCache Total: %lu", - temp_usage_by_type[rocksdb::MemoryUtil::kCacheTotal]); + snprintf(buf, sizeof(buf), "\nCache Total: %llu", + (ulonglong)temp_usage_by_type[rocksdb::MemoryUtil::kCacheTotal]); str.append(buf); - snprintf(buf, sizeof(buf), "\nDefault Cache Capacity: %lu", - internal_cache_count * kDefaultInternalCacheSize); + snprintf(buf, sizeof(buf), "\nDefault Cache Capacity: %llu", + (ulonglong)internal_cache_count * kDefaultInternalCacheSize); str.append(buf); res |= print_stats(thd, "Memory_Stats", "rocksdb", str, stat_print); } @@ -3711,7 +3711,11 @@ static int rocksdb_init_func(void* const p) and RocksDB doesn't provide any way to check what kind of error it was. Checking system errno happens to work right now. */ - if (status.IsIOError() && errno == ENOENT) + if (status.IsIOError() +#ifndef _WIN32 + && errno == ENOENT +#endif + ) { sql_print_information("RocksDB: Got ENOENT when listing column families"); sql_print_information("RocksDB: assuming that we're creating a new database"); @@ -5662,13 +5666,13 @@ int rdb_normalize_tablename(const std::string& tablename, { DBUG_ASSERT(strbuf != nullptr); - if (tablename.size() < 2 || tablename[0] != '.' || tablename[1] != '/') + if (tablename.size() < 2 || tablename[0] != '.' || tablename[1] != FN_LIBCHAR) { DBUG_ASSERT(0); // We were not passed table name? return HA_ERR_INTERNAL_ERROR; } - size_t pos = tablename.find_first_of('/', 2); + size_t pos = tablename.find_first_of(FN_LIBCHAR, 2); if (pos == std::string::npos) { DBUG_ASSERT(0); // We were not passed table name? @@ -9271,10 +9275,10 @@ void Rdb_drop_index_thread::run() } timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - ts.tv_sec += dict_manager.is_drop_index_empty() - ? 24*60*60 // no filtering + int sec= dict_manager.is_drop_index_empty() + ? 24 * 60 * 60 // no filtering : 60; // filtering + set_timespec(ts,sec); const auto ret __attribute__((__unused__)) = mysql_cond_timedwait( &m_signal_cond, &m_signal_mutex, &ts); @@ -10805,8 +10809,7 @@ void Rdb_background_thread::run() const int WAKE_UP_INTERVAL = 1; timespec ts_next_sync; - clock_gettime(CLOCK_REALTIME, &ts_next_sync); - ts_next_sync.tv_sec += WAKE_UP_INTERVAL; + set_timespec(ts_next_sync, WAKE_UP_INTERVAL); for (;;) { @@ -10840,8 +10843,9 @@ void Rdb_background_thread::run() ddl_manager.persist_stats(); } - timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); + // Set the next timestamp for mysql_cond_timedwait() (which ends up calling + // pthread_cond_timedwait()) to wait on. + set_timespec(ts_next_sync, WAKE_UP_INTERVAL); // Flush the WAL. if (rdb && rocksdb_background_sync) @@ -10852,10 +10856,6 @@ void Rdb_background_thread::run() rdb_handle_io_error(s, RDB_IO_ERROR_BG_THREAD); } } - - // Set the next timestamp for mysql_cond_timedwait() (which ends up calling - // pthread_cond_timedwait()) to wait on. - ts_next_sync.tv_sec= ts.tv_sec + WAKE_UP_INTERVAL; } // save remaining stats which might've left unsaved diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 824b56b958f..b7fd7062460 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -30,6 +30,14 @@ #include "./my_global.h" /* ulonglong */ #include "./sql_string.h" +#ifdef _WIN32 +#undef pthread_key_create +#undef pthread_key_delete +#undef pthread_setspecific +#undef pthread_getspecific +#endif + + /* RocksDB header files */ #include "rocksdb/cache.h" #include "rocksdb/perf_context.h" diff --git a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result index 16df96bc74d..c75fe5893b0 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result @@ -1,39 +1,21 @@ SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; trx_id trx_state trx_started trx_requested_lock_id trx_wait_started trx_weight trx_mysql_thread_id trx_query trx_operation_state trx_tables_in_use trx_tables_locked trx_lock_structs trx_lock_memory_bytes trx_rows_locked trx_rows_modified trx_concurrency_tickets trx_isolation_level trx_unique_checks trx_foreign_key_checks trx_last_foreign_key_error trx_adaptive_hash_latched trx_adaptive_hash_timeout trx_is_read_only trx_autocommit_non_locking -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_TRX but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; lock_id lock_trx_id lock_mode lock_type lock_table lock_index lock_space lock_page lock_rec lock_data -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_LOCKS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; requesting_trx_id requested_lock_id blocking_trx_id blocking_lock_id -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_LOCK_WAITS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP; page_size compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_RESET; page_size compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP_RESET but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX; database_name table_name index_name compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX_RESET; database_name table_name index_name compress_ops compress_ops_ok compress_time uncompress_ops uncompress_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX_RESET but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM; page_size buffer_pool_instance pages_used pages_free relocation_ops relocation_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMPMEM but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM_RESET; page_size buffer_pool_instance pages_used pages_free relocation_ops relocation_time -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_CMPMEM_RESET but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS; NAME SUBSYSTEM COUNT MAX_COUNT MIN_COUNT AVG_COUNT COUNT_RESET MAX_COUNT_RESET MIN_COUNT_RESET AVG_COUNT_RESET TIME_ENABLED TIME_DISABLED TIME_ELAPSED TIME_RESET STATUS TYPE COMMENT metadata_table_handles_opened metadata 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL disabled counter Number of table handles opened @@ -346,49 +328,25 @@ SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG; KEY VALUE SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS; POOL_ID POOL_SIZE FREE_BUFFERS DATABASE_PAGES OLD_DATABASE_PAGES MODIFIED_DATABASE_PAGES PENDING_DECOMPRESS PENDING_READS PENDING_FLUSH_LRU PENDING_FLUSH_LIST PAGES_MADE_YOUNG PAGES_NOT_MADE_YOUNG PAGES_MADE_YOUNG_RATE PAGES_MADE_NOT_YOUNG_RATE NUMBER_PAGES_READ NUMBER_PAGES_CREATED NUMBER_PAGES_WRITTEN PAGES_READ_RATE PAGES_CREATE_RATE PAGES_WRITTEN_RATE NUMBER_PAGES_GET HIT_RATE YOUNG_MAKE_PER_THOUSAND_GETS NOT_YOUNG_MAKE_PER_THOUSAND_GETS NUMBER_PAGES_READ_AHEAD NUMBER_READ_AHEAD_EVICTED READ_AHEAD_RATE READ_AHEAD_EVICTED_RATE LRU_IO_TOTAL LRU_IO_CURRENT UNCOMPRESS_TOTAL UNCOMPRESS_CURRENT -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE; POOL_ID BLOCK_ID SPACE PAGE_NUMBER PAGE_TYPE FLUSH_TYPE FIX_COUNT IS_HASHED NEWEST_MODIFICATION OLDEST_MODIFICATION ACCESS_TIME TABLE_NAME INDEX_NAME NUMBER_RECORDS DATA_SIZE COMPRESSED_SIZE PAGE_STATE IO_FIX IS_OLD FREE_PAGE_CLOCK -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_PAGE but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU; POOL_ID LRU_POSITION SPACE PAGE_NUMBER PAGE_TYPE FLUSH_TYPE FIX_COUNT IS_HASHED NEWEST_MODIFICATION OLDEST_MODIFICATION ACCESS_TIME TABLE_NAME INDEX_NAME NUMBER_RECORDS DATA_SIZE COMPRESSED_SIZE COMPRESSED IO_FIX IS_OLD FREE_PAGE_CLOCK -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; TABLE_ID NAME FLAG N_COLS SPACE FILE_FORMAT ROW_FORMAT ZIP_PAGE_SIZE SPACE_TYPE -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_TABLES but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS; TABLE_ID NAME STATS_INITIALIZED NUM_ROWS CLUST_INDEX_SIZE OTHER_INDEX_SIZE MODIFIED_COUNTER AUTOINC REF_COUNT -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES; INDEX_ID NAME TABLE_ID TYPE N_FIELDS PAGE_NO SPACE MERGE_THRESHOLD -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_INDEXES but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS; TABLE_ID NAME POS MTYPE PRTYPE LEN -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_COLUMNS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS; INDEX_ID NAME POS -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_FIELDS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; ID FOR_NAME REF_NAME N_COLS TYPE -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_FOREIGN but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; ID FOR_COL_NAME REF_COL_NAME POS -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; SPACE NAME FLAG FILE_FORMAT ROW_FORMAT PAGE_SIZE ZIP_PAGE_SIZE SPACE_TYPE FS_BLOCK_SIZE FILE_SIZE ALLOCATED_SIZE -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES but the InnoDB storage engine is not installed SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_DATAFILES; SPACE PATH -Warnings: -Warning 1012 InnoDB: SELECTing from INFORMATION_SCHEMA.INNODB_SYS_DATAFILES but the InnoDB storage engine is not installed diff --git a/storage/rocksdb/mysql-test/rocksdb/r/partition.result b/storage/rocksdb/mysql-test/rocksdb/r/partition.result index 76085cc1d27..c016c88ab8c 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/partition.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/partition.result @@ -3,12 +3,12 @@ DROP TABLE IF EXISTS VAR_POP; DROP TABLE IF EXISTS TEMP0; DROP TABLE IF EXISTS VAR_SAMP; CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i)) ENGINE = ROCKSDB PARTITION BY KEY(i) PARTITIONS 4; -SHOW TABLES; -Tables_in_test -TEMP0 -VAR_POP -VAR_SAMP +show tables; +tables_in_test t1 +temp0 +var_pop +var_samp SELECT * FROM t1 ORDER BY i LIMIT 10; i j k 1 1 1 diff --git a/storage/rocksdb/mysql-test/rocksdb/suite.opt b/storage/rocksdb/mysql-test/rocksdb/suite.opt index 0d92a9bb29d..431fc331458 100644 --- a/storage/rocksdb/mysql-test/rocksdb/suite.opt +++ b/storage/rocksdb/mysql-test/rocksdb/suite.opt @@ -1,2 +1,2 @@ ---ignore-db-dirs=.rocksdb --plugin-load=ha_rocksdb_se +--ignore-db-dirs=.rocksdb --plugin-load=$HA_ROCKSDB_SO diff --git a/storage/rocksdb/mysql-test/rocksdb/t/checkpoint.test b/storage/rocksdb/mysql-test/rocksdb/t/checkpoint.test index e5de6246f60..70ab64f8194 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/checkpoint.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/checkpoint.test @@ -1,5 +1,8 @@ --source include/have_rocksdb.inc +# Unixisms ("exec ls" in set_checkpoint.inc etc) +--source include/not_windows.inc + --disable_warnings DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/collation.test b/storage/rocksdb/mysql-test/rocksdb/t/collation.test index 63756aec48a..65cd6b09cc0 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/collation.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/collation.test @@ -3,6 +3,10 @@ # following check is commented out: # --source include/have_fullregex.inc +# Unixisms (exec grep) +--source include/not_windows.inc + + SET @start_global_value = @@global.ROCKSDB_STRICT_COLLATION_EXCEPTIONS; --disable_warnings diff --git a/storage/rocksdb/mysql-test/rocksdb/t/compact_deletes.test b/storage/rocksdb/mysql-test/rocksdb/t/compact_deletes.test index 9cb32e8d615..121c0d610d6 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/compact_deletes.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/compact_deletes.test @@ -1,3 +1,4 @@ +--source include/not_windows.inc --source include/have_rocksdb.inc --disable_warnings diff --git a/storage/rocksdb/mysql-test/rocksdb/t/concurrent_alter.test b/storage/rocksdb/mysql-test/rocksdb/t/concurrent_alter.test index 2a2896691b7..9ee58aa5217 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/concurrent_alter.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/concurrent_alter.test @@ -1,5 +1,8 @@ --source include/have_rocksdb.inc +# Bash +--source include/not_windows.inc + # # Generate concurrent requests to alter a table using mysqlslap # diff --git a/storage/rocksdb/mysql-test/rocksdb/t/drop_table.test b/storage/rocksdb/mysql-test/rocksdb/t/drop_table.test index 32d8133fab1..f06b04ec561 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/drop_table.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/drop_table.test @@ -1,4 +1,6 @@ --source include/have_rocksdb.inc +#Unixisms (possibly Linuxisms, exec truncate) +--source include/not_windows.inc --disable_warnings DROP TABLE IF EXISTS t1; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/drop_table2.test b/storage/rocksdb/mysql-test/rocksdb/t/drop_table2.test index d259114dbda..69c3ca28f17 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/drop_table2.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/drop_table2.test @@ -1,5 +1,8 @@ --source include/have_rocksdb.inc +#Unixisms (--exec truncate, du, grep ,sed) +--source include/not_windows.inc + --disable_warnings DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/duplicate_table.test b/storage/rocksdb/mysql-test/rocksdb/t/duplicate_table.test index 781163f34fb..9ac89a128c9 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/duplicate_table.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/duplicate_table.test @@ -7,10 +7,10 @@ INSERT INTO t values (1), (2), (3); --error ER_TABLE_EXISTS_ERROR CREATE TABLE t(id int primary key) engine=rocksdb; FLUSH TABLES; ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm.tmp ---error ER_UNKNOWN_ERROR +move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm.tmp; +--error ER_UNKNOWN_ERROR CREATE TABLE t(id int primary key) engine=rocksdb; ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm +move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t.frm; FLUSH TABLES; SELECT * FROM t; DROP TABLE t; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/innodb_i_s_tables_disabled.test b/storage/rocksdb/mysql-test/rocksdb/t/innodb_i_s_tables_disabled.test index b50cf08b227..4ff48e13089 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/innodb_i_s_tables_disabled.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/innodb_i_s_tables_disabled.test @@ -3,8 +3,14 @@ # Make sure that the InnoDb information schema tables are disabled when InnoDB # is turned off and attempting to access them doesn't crash. +# Disable warnings, as the table names in warnings appear in lower or uppercase +# depending on platform + +--disable_warnings + SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; #Not in MariaDB: SELECT * FROM INFORMATION_SCHEMA.INNODB_FILE_STATUS; + SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP; @@ -33,3 +39,5 @@ SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_DATAFILES; #Not in MariaDB: SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_DOCSTORE_FIELDS; + +--enable_warnings diff --git a/storage/rocksdb/mysql-test/rocksdb/t/partition.test b/storage/rocksdb/mysql-test/rocksdb/t/partition.test index d5e13fea0a7..52e7d658f67 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/partition.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/partition.test @@ -1,3 +1,4 @@ + --source include/have_rocksdb.inc --source include/have_partition.inc @@ -30,7 +31,7 @@ CREATE TABLE TEMP0 (a int) ENGINE = ROCKSDB PARTITION BY HASH (a) PARTITIONS 3; CREATE TABLE VAR_SAMP (a int) ENGINE = ROCKSDB PARTITION BY HASH (a) PARTITIONS 10; --enable_query_log - +--lowercase_result SHOW TABLES; SELECT * FROM t1 ORDER BY i LIMIT 10; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums.test b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums.test index 72eef91196d..101b2085ac4 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums.test @@ -1,4 +1,6 @@ --source include/have_rocksdb.inc +# Does not run on Windows, because of unixisms (exec grep, cut, truncate file with exec echo) +--source include/not_windows.inc # # Tests for row checksums feature diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_datadir.test b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_datadir.test index 6dd4dd11748..ba10dcbe3b6 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_datadir.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_datadir.test @@ -1,5 +1,6 @@ --source include/have_rocksdb.inc - +# Unixisms (exec ls | wc -l) +--source include/not_windows.inc let $ddir = $MYSQL_TMP_DIR/.rocksdb_datadir.test.install.db; let $rdb_ddir = $MYSQL_TMP_DIR/.rocksdb_datadir.test; let $sql_file = $MYSQL_TMP_DIR/rocksdb_datadir.sql; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_parts.test b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_parts.test index 53ca05c7fdc..59472e565ab 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_parts.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_parts.test @@ -99,6 +99,7 @@ drop table t1, t2; --echo # CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(5)) PARTITION BY HASH(c1) PARTITIONS 4; INSERT INTO t1 VALUES(1,'a'); +--replace_result \\ / --error ER_ERROR_ON_RENAME RENAME TABLE t1 TO db3.t3; SELECT * FROM t1; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rqg.inc b/storage/rocksdb/mysql-test/rocksdb/t/rqg.inc index 9a6bf73d6a0..40154d9eaa7 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/rqg.inc +++ b/storage/rocksdb/mysql-test/rocksdb/t/rqg.inc @@ -20,10 +20,11 @@ let TESTDB = $TESTDB; --perl +$ENV{'RQG_HOME'}=$ENV{'RQG_BASE'}; foreach $grammar_file (split(/ /, $ENV{'GRAMMAR_FILES'})) { # Errors from the gentest.pl file will be captured in the results file - my $cmd = "RQG_HOME=$ENV{'RQG_BASE'} perl $ENV{'RQG_BASE'}/gentest.pl " . + my $cmd = "perl $ENV{'RQG_BASE'}/gentest.pl " . "--dsn=dbi:mysql:host=:port=:user=root:database=$ENV{'TESTDB'}" . ":mysql_socket=$ENV{'MYSQL_SOCKET'} " . "--gendata=$ENV{'RQG_BASE'}/conf/$ENV{'TESTDIR'}/$ENV{'DATA_FILE'} " . diff --git a/storage/rocksdb/mysql-test/rocksdb/t/slow_query_log.test b/storage/rocksdb/mysql-test/rocksdb/t/slow_query_log.test index 9f36a7fb958..9f1694ab8bd 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/slow_query_log.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/slow_query_log.test @@ -1,4 +1,7 @@ --source include/have_rocksdb.inc +#Unixism (exec awk) +-- source include/not_windows.inc + SET @cur_long_query_time = @@long_query_time; # Set the long query time to something big so that nothing unexpected gets into it SET @@long_query_time = 600; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/statistics.test b/storage/rocksdb/mysql-test/rocksdb/t/statistics.test index 3971fd18ecd..70fc2f72b7e 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/statistics.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/statistics.test @@ -60,7 +60,7 @@ SELECT table_name, data_length>0, index_length>0 FROM information_schema.tables --source include/restart_mysqld.inc # give the server a chance to load in statistics ---exec sleep 5 +--sleep 5 SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = DATABASE(); SELECT table_name, data_length>0, index_length>0 FROM information_schema.tables WHERE table_schema = DATABASE(); diff --git a/storage/rocksdb/mysql-test/rocksdb/t/unique_sec.test b/storage/rocksdb/mysql-test/rocksdb/t/unique_sec.test index 4483f48b4ca..afae67b48ba 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/unique_sec.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/unique_sec.test @@ -1,5 +1,7 @@ --source include/have_rocksdb.inc --source include/have_partition.inc +# Unixism, exec sed +--source include/not_windows.inc let ddl= $MYSQL_TMP_DIR/unique_sec.sql; --exec sed s/##CF##//g ../storage/rocksdb/mysql-test/rocksdb/t/unique_sec.inc > $ddl diff --git a/storage/rocksdb/properties_collector.cc b/storage/rocksdb/properties_collector.cc index 0ddff023f79..10d667181ef 100644 --- a/storage/rocksdb/properties_collector.cc +++ b/storage/rocksdb/properties_collector.cc @@ -15,7 +15,11 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <my_config.h> - +#ifdef _WIN32 +#define _CRT_RAND_S +#include <stdlib.h> +#define rand_r rand_s +#endif /* This C++ file's header file */ #include "./properties_collector.h" @@ -130,10 +134,9 @@ void Rdb_tbl_prop_coll::AdjustDeletedRows(rocksdb::EntryType type) Rdb_index_stats* Rdb_tbl_prop_coll::AccessStats( const rocksdb::Slice& key) { - GL_INDEX_ID gl_index_id = { - .cf_id = m_cf_id, - .index_id = rdb_netbuf_to_uint32(reinterpret_cast<const uchar*>(key.data())) - }; + GL_INDEX_ID gl_index_id; + gl_index_id.cf_id = m_cf_id; + gl_index_id.index_id = rdb_netbuf_to_uint32(reinterpret_cast<const uchar*>(key.data())); if (m_last_stats == nullptr || m_last_stats->m_gl_index_id != gl_index_id) { diff --git a/storage/rocksdb/rdb_buff.h b/storage/rocksdb/rdb_buff.h index deb718e88c9..17bbc1c6015 100644 --- a/storage/rocksdb/rdb_buff.h +++ b/storage/rocksdb/rdb_buff.h @@ -20,6 +20,16 @@ #include <string> #include <vector> +#ifdef _WIN32 +#include <stdlib.h> +#define htobe64 _byteswap_uint64 +#define be64toh _byteswap_uint64 +#define htobe32 _byteswap_ulong +#define be32toh _byteswap_ulong +#define htobe16 _byteswap_ushort +#define be16toh _byteswap_ushort +#endif + namespace myrocks { /* diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 9d917b8dd62..d5af9d83754 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -1523,7 +1523,7 @@ static void rdb_pack_with_varchar_encoding( // pad with zeros if necessary; for (size_t idx= 0; idx < padding_bytes; idx++) *(ptr++)= 0; - *(ptr++) = 255 - padding_bytes; + *(ptr++) = 255 - (uchar)padding_bytes; xfrm_len -= copy_len; encoded_size += RDB_ESCAPE_LENGTH; @@ -1814,7 +1814,7 @@ static int rdb_unpack_binary_or_utf8_varchar( /* Save the length */ if (field_var->length_bytes == 1) { - d0[0]= len; + d0[0]= (uchar)len; } else { @@ -1944,7 +1944,7 @@ static int rdb_unpack_binary_or_utf8_varchar_space_pad( /* Save the length */ if (field_var->length_bytes == 1) { - d0[0]= len; + d0[0]= (uchar)len; } else { @@ -2257,7 +2257,7 @@ rdb_unpack_simple_varchar_space_pad(Rdb_field_packing* const fpi, /* Save the length */ if (field_var->length_bytes == 1) { - d0[0]= len; + d0[0]= (uchar)len; } else { @@ -3796,7 +3796,7 @@ rocksdb::Slice Rdb_binlog_manager::pack_value(uchar* const buf, // store binlog file name length DBUG_ASSERT(strlen(binlog_name) <= FN_REFLEN); - const uint16_t binlog_name_len = strlen(binlog_name); + const uint16_t binlog_name_len = (uint16_t)strlen(binlog_name); rdb_netbuf_store_uint16(buf+pack_len, binlog_name_len); pack_len += sizeof(uint16); @@ -3810,7 +3810,7 @@ rocksdb::Slice Rdb_binlog_manager::pack_value(uchar* const buf, // store binlog gtid length. // If gtid was not set, store 0 instead - const uint16_t binlog_gtid_len = binlog_gtid? strlen(binlog_gtid) : 0; + const uint16_t binlog_gtid_len = binlog_gtid? (uint16_t)strlen(binlog_gtid) : 0; rdb_netbuf_store_uint16(buf+pack_len, binlog_gtid_len); pack_len += sizeof(uint16); diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 91cb9b8d563..35861bb2088 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -24,9 +24,12 @@ #include <unordered_set> #include <utility> #include <vector> +#include <array> /* C standard header files */ +#ifndef _WIN32 #include <arpa/inet.h> +#endif /* MyRocks header files */ #include "./ha_rocksdb.h" diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index e9a3577b7e8..ab917a62cf6 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -797,7 +797,7 @@ static int rdb_i_s_global_info_fill_table( char gtid_buf[GTID_BUF_LEN]= {0}; if (blm->read(file_buf, &pos, gtid_buf)) { - snprintf(pos_buf, INT_BUF_LEN, "%lu", (uint64_t) pos); + snprintf(pos_buf, INT_BUF_LEN, "%llu", (ulonglong) pos); ret |= rdb_global_info_fill_row(thd, tables, "BINLOG", "FILE", file_buf); ret |= rdb_global_info_fill_row(thd, tables, "BINLOG", "POS", pos_buf); ret |= rdb_global_info_fill_row(thd, tables, "BINLOG", "GTID", gtid_buf); @@ -1534,7 +1534,7 @@ struct st_maria_plugin rdb_i_s_index_file_map= 0, /* flags */ }; -struct st_mysql_plugin rdb_i_s_lock_info= +struct st_maria_plugin rdb_i_s_lock_info= { MYSQL_INFORMATION_SCHEMA_PLUGIN, &rdb_i_s_info, @@ -1551,7 +1551,7 @@ struct st_mysql_plugin rdb_i_s_lock_info= 0, /* flags */ }; -struct st_mysql_plugin rdb_i_s_trx_info= +struct st_maria_plugin rdb_i_s_trx_info= { MYSQL_INFORMATION_SCHEMA_PLUGIN, &rdb_i_s_info, diff --git a/storage/rocksdb/rdb_mariadb_server_port.cc b/storage/rocksdb/rdb_mariadb_server_port.cc index 59315c199cd..bd2c730d33d 100644 --- a/storage/rocksdb/rdb_mariadb_server_port.cc +++ b/storage/rocksdb/rdb_mariadb_server_port.cc @@ -64,7 +64,7 @@ bool Regex_list_handler::set_patterns(const std::string& pattern_str) delete m_pattern; m_pattern= pattern; } - catch (const std::regex_error& e) + catch (const std::regex_error&) { // This pattern is invalid. pattern_valid= false; diff --git a/storage/rocksdb/rdb_sst_info.h b/storage/rocksdb/rdb_sst_info.h index 933357c8f08..422cd420cfa 100644 --- a/storage/rocksdb/rdb_sst_info.h +++ b/storage/rocksdb/rdb_sst_info.h @@ -68,7 +68,7 @@ class Rdb_sst_info { const rocksdb::DBOptions& m_db_options; uint64_t m_curr_size; uint64_t m_max_size; - uint m_sst_count; + uint32_t m_sst_count; std::string m_error_msg; std::string m_prefix; static std::string m_suffix; diff --git a/storage/rocksdb/rdb_threads.h b/storage/rocksdb/rdb_threads.h index 01be32f8a6a..b7a1c7cb9b0 100644 --- a/storage/rocksdb/rdb_threads.h +++ b/storage/rocksdb/rdb_threads.h @@ -18,6 +18,17 @@ /* MySQL includes */ #include "./my_global.h" +#ifdef _WIN32 +#include <my_pthread.h> +/* + Rocksdb implements their own pthread_key functions + undefine some my_pthread.h macros +*/ +#undef pthread_key_create +#undef pthread_key_delete +#undef pthread_setspecific +#undef pthread_getspecific +#endif #include <mysql/psi/mysql_table.h> #ifdef MARIAROCKS_NOT_YET #include <mysql/thread_pool_priv.h> @@ -64,7 +75,22 @@ class Rdb_thread int join() { +#ifndef _WIN32 return pthread_join(m_handle, nullptr); +#else + /* + mysys on Windows creates "detached" threads in pthread_create(). + + m_handle here is the thread id I(it is not reused by the OS + thus it is safe to state there can't be other thread with + the same id at this point). + + If thread is already finished before pthread_join(), + we get EINVAL, and it is safe to ignore and handle this as success. + */ + (void)pthread_join(m_handle, nullptr); + return 0; +#endif } void uninit(); |