--- storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake 2020-09-19 17:44:40.244576772 +0200 @@ -109,3 +109,43 @@ set_target_properties(snappy PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/lib/libsnappy.a") add_dependencies(snappy build_snappy) + + +## add zstd with an external project +set(ZSTD_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/zstd-1.4.5" CACHE FILEPATH "Where to find sources for zstd.") +if (NOT EXISTS "${ZSTD_SOURCE_DIR}/build/cmake/CMakeLists.txt") + message(FATAL_ERROR "Can't find the zstd sources. Please check them out to ${ZSTD_SOURCE_DIR} or modify ZSTD_SOURCE_DIR.") +endif () + +FILE(GLOB ZSTD_ALL_FILES ${ZSTD_SOURCE_DIR}/*) +ExternalProject_Add(build_zstd + PREFIX zstd + DOWNLOAD_COMMAND + cp -a "${ZSTD_ALL_FILES}" "/" + SOURCE_SUBDIR "build/cmake" + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_AR=${CMAKE_AR} + -DCMAKE_NM=${CMAKE_NM} + -DCMAKE_RANLIB=${CMAKE_RANLIB} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + ${USE_PROJECT_CMAKE_MODULE_PATH} +) +FILE(GLOB_RECURSE ZSTD_ALL_FILES_RECURSIVE ${ZSTD_SOURCE_DIR}/*) +ExternalProject_Add_Step(build_zstd reclone_src # Names of project and custom step + COMMENT "(re)cloning zstd source..." # Text printed when step executes + DEPENDERS download configure # Steps that depend on this step + DEPENDS ${ZSTD_ALL_FILES_RECURSIVE} # Files on which this step depends +) + +include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/zstd/include") + +add_library(zstd STATIC IMPORTED) +set_target_properties(zstd PROPERTIES IMPORTED_LOCATION + "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/zstd/lib64/libzstd.a") +add_dependencies(zstd build_zstd) + --- storage/tokudb/CMakeLists.txt 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/CMakeLists.txt 2020-09-19 18:10:33.267767954 +0200 @@ -101,6 +101,7 @@ MARK_AS_ADVANCED(LIBTOKUPORTABILITY) MARK_AS_ADVANCED(PROFILING) MARK_AS_ADVANCED(SNAPPY_SOURCE_DIR) +MARK_AS_ADVANCED(ZSTD_SOURCE_DIR) MARK_AS_ADVANCED(TOKUDB_DATA) MARK_AS_ADVANCED(TOKU_DEBUG_PARANOID) MARK_AS_ADVANCED(USE_VALGRIND) --- storage/tokudb/hatoku_hton.h 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/hatoku_hton.h 2020-09-19 18:33:56.933714861 +0200 @@ -53,6 +53,8 @@ return tokudb::sysvars::SRV_ROW_FORMAT_ZLIB; case TOKU_SNAPPY_METHOD: return tokudb::sysvars::SRV_ROW_FORMAT_SNAPPY; + case TOKU_ZSTD_METHOD: + return tokudb::sysvars::SRV_ROW_FORMAT_ZSTD; case TOKU_QUICKLZ_METHOD: return tokudb::sysvars::SRV_ROW_FORMAT_QUICKLZ; case TOKU_LZMA_METHOD: @@ -79,6 +81,8 @@ return TOKU_QUICKLZ_METHOD; case tokudb::sysvars::SRV_ROW_FORMAT_SNAPPY: return TOKU_SNAPPY_METHOD; + case tokudb::sysvars::SRV_ROW_FORMAT_ZSTD: + return TOKU_ZSTD_METHOD; case tokudb::sysvars::SRV_ROW_FORMAT_ZLIB: case tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT: return TOKU_ZLIB_WITHOUT_CHECKSUM_METHOD; @@ -101,6 +105,8 @@ return ROW_TYPE_TOKU_ZLIB; case tokudb::sysvars::SRV_ROW_FORMAT_SNAPPY: return ROW_TYPE_TOKU_SNAPPY; + case tokudb::sysvars::SRV_ROW_FORMAT_ZSTD: + return ROW_TYPE_TOKU_ZSTD; case tokudb::sysvars::SRV_ROW_FORMAT_QUICKLZ: return ROW_TYPE_TOKU_QUICKLZ; case tokudb::sysvars::SRV_ROW_FORMAT_LZMA: @@ -128,6 +134,8 @@ return tokudb::sysvars::SRV_ROW_FORMAT_ZLIB; case ROW_TYPE_TOKU_SNAPPY: return tokudb::sysvars::SRV_ROW_FORMAT_SNAPPY; + case ROW_TYPE_TOKU_ZSTD: + return tokudb::sysvars::SRV_ROW_FORMAT_ZSTD; case ROW_TYPE_TOKU_QUICKLZ: return tokudb::sysvars::SRV_ROW_FORMAT_QUICKLZ; case ROW_TYPE_TOKU_LZMA: --- storage/tokudb/mysql-test/tokudb/r/compressions.result 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/mysql-test/tokudb/r/compressions.result 2020-09-19 18:34:43.098733433 +0200 @@ -3,10 +3,12 @@ CREATE TABLE t3 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_QUICKLZ; CREATE TABLE t4 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_LZMA; CREATE TABLE t5 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_ZLIB; +CREATE TABLE t6 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_ZSTD; FOUND 1 /compression_method=0/ in dump FOUND 1 /compression_method=7/ in dump FOUND 1 /compression_method=9/ in dump FOUND 1 /compression_method=10/ in dump FOUND 1 /compression_method=11/ in dump +FOUND 1 /compression_method=12/ in dump # restart -DROP TABLE t1, t2, t3, t4, t5; +DROP TABLE t1, t2, t3, t4, t5, t6; --- storage/tokudb/mysql-test/tokudb/r/row_format.result 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/mysql-test/tokudb/r/row_format.result 2020-09-19 18:38:41.060983779 +0200 @@ -8,6 +8,7 @@ CREATE TABLE tokudb_row_format_test_6 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_LZMA; CREATE TABLE tokudb_row_format_test_7 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_QUICKLZ; CREATE TABLE tokudb_row_format_test_8 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_SNAPPY; +CREATE TABLE tokudb_row_format_test_9 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZSTD; CREATE TABLE tdb76_1 LIKE tokudb_row_format_test_1; CREATE TABLE tdb76_2 LIKE tokudb_row_format_test_2; CREATE TABLE tdb76_3 LIKE tokudb_row_format_test_3; @@ -16,6 +17,7 @@ CREATE TABLE tdb76_6 LIKE tokudb_row_format_test_6; CREATE TABLE tdb76_7 LIKE tokudb_row_format_test_7; CREATE TABLE tdb76_8 LIKE tokudb_row_format_test_8; +CREATE TABLE tdb76_8 LIKE tokudb_row_format_test_9; CREATE TABLE tdb76_compact(a INT) ENGINE=TokuDB ROW_FORMAT=COMPACT; Warnings: Warning 1478 TokuDB: invalid ROW_FORMAT specifier. @@ -38,11 +40,12 @@ tdb76_6 tokudb_lzma TokuDB tdb76_7 tokudb_quicklz TokuDB tdb76_8 tokudb_snappy TokuDB +tdb76_9 tokudb_zstd TokuDB tdb76_compact tokudb_zlib TokuDB tdb76_compressed tokudb_zlib TokuDB tdb76_dynamic tokudb_zlib TokuDB tdb76_redundant tokudb_zlib TokuDB -DROP TABLE tdb76_1, tdb76_2, tdb76_3, tdb76_4, tdb76_5, tdb76_6, tdb76_7, tdb76_8, tdb76_compact, tdb76_redundant, tdb76_dynamic, tdb76_compressed; +DROP TABLE tdb76_1, tdb76_2, tdb76_3, tdb76_4, tdb76_5, tdb76_6, tdb76_7, tdb76_8, tdb76_9, tdb76_compact, tdb76_redundant, tdb76_dynamic, tdb76_compressed; SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name like 'tokudb_row_format_test%' ORDER BY table_name; table_name row_format engine tokudb_row_format_test_1 tokudb_zlib TokuDB @@ -53,6 +56,7 @@ tokudb_row_format_test_6 tokudb_lzma TokuDB tokudb_row_format_test_7 tokudb_quicklz TokuDB tokudb_row_format_test_8 tokudb_snappy TokuDB +tokudb_row_format_test_9 tokudb_zstd TokuDB ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_FAST; SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; table_name row_format engine @@ -81,10 +85,14 @@ SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; table_name row_format engine tokudb_row_format_test_1 tokudb_lzma TokuDB +ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZSTD; +SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; +table_name row_format engine +tokudb_row_format_test_1 tokudb_zstd TokuDB ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_DEFAULT; Warnings: Warning 1478 TokuDB: invalid ROW_FORMAT specifier. SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; table_name row_format engine tokudb_row_format_test_1 tokudb_zlib TokuDB -DROP TABLE tokudb_row_format_test_1, tokudb_row_format_test_2, tokudb_row_format_test_3, tokudb_row_format_test_4, tokudb_row_format_test_5, tokudb_row_format_test_6, tokudb_row_format_test_7, tokudb_row_format_test_8; +DROP TABLE tokudb_row_format_test_1, tokudb_row_format_test_2, tokudb_row_format_test_3, tokudb_row_format_test_4, tokudb_row_format_test_5, tokudb_row_format_test_6, tokudb_row_format_test_7, tokudb_row_format_test_8, tokudb_row_format_test_9; --- storage/tokudb/mysql-test/tokudb/t/compressions.test 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/mysql-test/tokudb/t/compressions.test 2020-09-19 18:35:37.480933312 +0200 @@ -28,6 +28,10 @@ CREATE TABLE t5 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_ZLIB; --let $t5_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t5-main'` +# ZSTD - compression_method=12 +CREATE TABLE t6 (a INT) ENGINE=TokuDB COMPRESSION=TOKUDB_ZSTD; +--let $t6_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t6-main'` + --let $datadir = `SELECT @@global.datadir` # To ensure we have correct headers written to FT data files and no chance of a @@ -62,7 +66,12 @@ --let SEARCH_PATTERN=compression_method=11 --source include/search_pattern_in_file.inc +# ZSTD - compression_method=12 +--exec $MYSQL_TOKUFTDUMP $datadir/$t6_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=12 +--source include/search_pattern_in_file.inc + --remove_file $SEARCH_FILE --source include/start_mysqld.inc -DROP TABLE t1, t2, t3, t4, t5; +DROP TABLE t1, t2, t3, t4, t5, t6; --- storage/tokudb/mysql-test/tokudb/t/row_format.test 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/mysql-test/tokudb/t/row_format.test 2020-09-19 18:37:03.026820776 +0200 @@ -11,6 +11,7 @@ CREATE TABLE tokudb_row_format_test_6 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_LZMA; CREATE TABLE tokudb_row_format_test_7 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_QUICKLZ; CREATE TABLE tokudb_row_format_test_8 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_SNAPPY; +CREATE TABLE tokudb_row_format_test_9 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZSTD; # TDB-76 : CREATE TABLE ... LIKE ... does not use source row_format on target table CREATE TABLE tdb76_1 LIKE tokudb_row_format_test_1; @@ -21,6 +22,7 @@ CREATE TABLE tdb76_6 LIKE tokudb_row_format_test_6; CREATE TABLE tdb76_7 LIKE tokudb_row_format_test_7; CREATE TABLE tdb76_8 LIKE tokudb_row_format_test_8; +CREATE TABLE tdb76_9 LIKE tokudb_row_format_test_9; CREATE TABLE tdb76_compact(a INT) ENGINE=TokuDB ROW_FORMAT=COMPACT; CREATE TABLE tdb76_redundant(a INT) ENGINE=TokuDB ROW_FORMAT=REDUNDANT; @@ -29,7 +31,7 @@ SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name like 'tdb76_%' ORDER BY table_name; -DROP TABLE tdb76_1, tdb76_2, tdb76_3, tdb76_4, tdb76_5, tdb76_6, tdb76_7, tdb76_8, tdb76_compact, tdb76_redundant, tdb76_dynamic, tdb76_compressed; +DROP TABLE tdb76_1, tdb76_2, tdb76_3, tdb76_4, tdb76_5, tdb76_6, tdb76_7, tdb76_8, tdb76_9, tdb76_compact, tdb76_redundant, tdb76_dynamic, tdb76_compressed; @@ -56,7 +58,10 @@ ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_LZMA; SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; +ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZSTD; +SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; + ALTER TABLE tokudb_row_format_test_1 ENGINE=TokuDB ROW_FORMAT=TOKUDB_DEFAULT; SELECT table_name, row_format, engine FROM information_schema.tables WHERE table_name = 'tokudb_row_format_test_1'; -DROP TABLE tokudb_row_format_test_1, tokudb_row_format_test_2, tokudb_row_format_test_3, tokudb_row_format_test_4, tokudb_row_format_test_5, tokudb_row_format_test_6, tokudb_row_format_test_7, tokudb_row_format_test_8; +DROP TABLE tokudb_row_format_test_1, tokudb_row_format_test_2, tokudb_row_format_test_3, tokudb_row_format_test_4, tokudb_row_format_test_5, tokudb_row_format_test_6, tokudb_row_format_test_7, tokudb_row_format_test_8, tokudb_row_format_test_9; --- storage/tokudb/PerconaFT/buildheader/make_tdb.cc 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/buildheader/make_tdb.cc 2020-09-19 18:14:30.582996777 +0200 @@ -672,6 +672,7 @@ printf(" TOKU_QUICKLZ_METHOD = 9,\n"); // We use 9 for QUICKLZ (the QLZ compression level is stored int he high-order nibble). I couldn't find any standard for any other numbers, so I just use 9. -Bradley printf(" TOKU_LZMA_METHOD = 10,\n"); // We use 10 for LZMA. (Note the compression level is stored in the high-order nibble). printf(" TOKU_ZLIB_WITHOUT_CHECKSUM_METHOD = 11,\n"); // We wrap a zlib without checksumming compression technique in our own checksummed metadata. + printf(" TOKU_ZSTD_METHOD = 12,\n"); // 12 for ZSTD printf(" TOKU_DEFAULT_COMPRESSION_METHOD = 1,\n"); // default is actually quicklz printf(" TOKU_FAST_COMPRESSION_METHOD = 2,\n"); // friendlier names printf(" TOKU_SMALL_COMPRESSION_METHOD = 3,\n"); --- storage/tokudb/PerconaFT/ft/CMakeLists.txt 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/ft/CMakeLists.txt 2020-09-19 18:15:00.121647610 +0200 @@ -85,12 +85,12 @@ maybe_add_gcov_to_libraries(ft ft_static) ## depend on other generated targets -add_dependencies(ft install_tdb_h generate_log_code build_lzma build_snappy) -add_dependencies(ft_static install_tdb_h generate_log_code build_lzma build_snappy) +add_dependencies(ft install_tdb_h generate_log_code build_lzma build_snappy build_zstd) +add_dependencies(ft_static install_tdb_h generate_log_code build_lzma build_snappy build_zstd) ## link with lzma (which should be static) and link dependers with zlib -target_link_libraries(ft LINK_PRIVATE util_static lzma snappy ${LIBTOKUPORTABILITY}) +target_link_libraries(ft LINK_PRIVATE util_static lzma snappy zstd ${LIBTOKUPORTABILITY}) target_link_libraries(ft LINK_PUBLIC z) -target_link_libraries(ft_static LINK_PRIVATE lzma snappy) +target_link_libraries(ft_static LINK_PRIVATE lzma snappy zstd) add_subdirectory(tests) --- storage/tokudb/PerconaFT/ft/serialize/compress.cc 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/ft/serialize/compress.cc 2020-09-19 18:29:05.492284564 +0200 @@ -43,6 +43,7 @@ #include #include #include +#include #include "compress.h" #include "memory.h" @@ -81,6 +82,8 @@ return 2+deflateBound(nullptr, size); // We need one extra for the rfc1950-style header byte, and one extra to store windowBits (a bit over cautious about future upgrades maybe). case TOKU_SNAPPY_METHOD: return (1 + snappy::MaxCompressedLength(size)); + case TOKU_ZSTD_METHOD: + return (1 + ZSTD_compressBound(size)); default: break; } @@ -178,6 +181,19 @@ dest[0] = TOKU_SNAPPY_METHOD; return; } + case TOKU_ZSTD_METHOD: { + if (sourceLen == 0) { + // ZSTD version 1.4.5 requires at least one byte, so we do it ourselves + assert(1 <= *destLen); + *destLen = 1; + } else { + size_t compressed_len = ZSTD_compress((void *)(dest + 1), *destLen - 1, source, sourceLen, ZSTD_CLEVEL_DEFAULT); + assert(!ZSTD_isError(compressed_len)); + *destLen = compressed_len + 1; + } + dest[0] = TOKU_ZSTD_METHOD; + return; + } default: break; } @@ -253,6 +269,11 @@ assert(r); return; } + case TOKU_ZSTD_METHOD: { + size_t decompressed_len = ZSTD_decompress((void*)dest, destLen, (void*)(source + 1), sourceLen - 1); + assert(!ZSTD_isError(decompressed_len)); + return; + } } // default fall through to error. assert(0); --- storage/tokudb/PerconaFT/ft/tests/compress-test.cc 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/ft/tests/compress-test.cc 2020-09-19 18:31:14.116122489 +0200 @@ -36,7 +36,7 @@ #ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." -// Test zlib, lzma, quicklz, and snappy. +// Test zlib, lzma, quicklz, snappy, zstd. // Compare to compress-test which tests the toku compression (which is a composite of quicklz and zlib). #include @@ -134,6 +134,15 @@ printf("TOKU_SNAPPY_METHOD Time=%.6fs, Ratio=%.2f[%d/%d]\n", tdiff(&start, &end), (float)compress_size / (float)uncompress_size, (int)compress_size, (int)uncompress_size); + + compress_size = 0; + uncompress_size = 0; + gettimeofday(&start, NULL); + test_compress(TOKU_ZSTD_METHOD, &compress_size, &uncompress_size); + gettimeofday(&end, NULL); + printf("TOKU_ZSTD_METHOD Time=%.6fs, Ratio=%.2f[%d/%d]\n", + tdiff(&start, &end), + (float)compress_size / (float)uncompress_size, (int)compress_size, (int)uncompress_size); } int test_main (int argc, const char *argv[]) { --- storage/tokudb/PerconaFT/scripts/run-nightly-coverage-tests.bash 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/scripts/run-nightly-coverage-tests.bash 2020-09-19 18:31:47.422857361 +0200 @@ -26,7 +26,7 @@ -D RUN_LONG_TESTS=ON \ -D TOKUDB_DATA=$tokudbdir/../tokudb.data \ .. - ninja build_lzma build_snappy + ninja build_lzma build_snappy build_zstd popd fi --- storage/tokudb/PerconaFT/scripts/run-nightly-drd-tests.bash 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/scripts/run-nightly-drd-tests.bash 2020-09-19 18:31:51.807954112 +0200 @@ -25,7 +25,7 @@ -D RUN_LONG_TESTS=ON \ -D TOKUDB_DATA=$tokudbdir/../tokudb.data \ .. - ninja build_lzma build_snappy + ninja build_lzma build_snappy build_zstd popd fi --- storage/tokudb/PerconaFT/scripts/run-nightly-release-tests.bash 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/scripts/run-nightly-release-tests.bash 2020-09-19 18:31:56.096048725 +0200 @@ -25,7 +25,7 @@ -D RUN_LONG_TESTS=ON \ -D TOKUDB_DATA=$tokudbdir/../tokudb.data \ .. - ninja build_lzma build_snappy + ninja build_lzma build_snappy build_zstd popd fi --- storage/tokudb/PerconaFT/src/CMakeLists.txt 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/src/CMakeLists.txt 2020-09-19 18:32:10.955376574 +0200 @@ -18,14 +18,14 @@ ## make the shared library add_library(${LIBTOKUDB} SHARED ${tokudb_srcs}) add_dependencies(${LIBTOKUDB} install_tdb_h generate_log_code) -target_link_libraries(${LIBTOKUDB} LINK_PRIVATE locktree_static ft_static util_static lzma snappy dbug ${LIBTOKUPORTABILITY}) +target_link_libraries(${LIBTOKUDB} LINK_PRIVATE locktree_static ft_static util_static lzma snappy zstd dbug ${LIBTOKUPORTABILITY}) target_link_libraries(${LIBTOKUDB} LINK_PUBLIC ${ZLIB_LIBRARY} ) ## make the static library add_library(tokudb_static_conv STATIC ${tokudb_srcs}) add_dependencies(tokudb_static_conv install_tdb_h generate_log_code) set_target_properties(tokudb_static_conv PROPERTIES POSITION_INDEPENDENT_CODE ON) -set(tokudb_source_libs tokudb_static_conv locktree_static ft_static util_static lzma snappy) +set(tokudb_source_libs tokudb_static_conv locktree_static ft_static util_static lzma snappy zstd) toku_merge_static_libs(${LIBTOKUDB}_static ${LIBTOKUDB}_static "${tokudb_source_libs}") ## add gcov and define _GNU_SOURCE --- storage/tokudb/PerconaFT/src/tests/threaded_stress_test_helpers.h 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/src/tests/threaded_stress_test_helpers.h 2020-09-19 18:32:34.716900847 +0200 @@ -2727,6 +2727,8 @@ args->compression_method = TOKU_LZMA_METHOD; } else if (strcmp(compression_method_s, "snappy") == 0) { args->compression_method = TOKU_SNAPPY_METHOD; + } else if (strcmp(compression_method_s, "zstd") == 0) { + args->compression_method = TOKU_ZSTD_METHOD; } else if (strcmp(compression_method_s, "none") == 0) { args->compression_method = TOKU_NO_COMPRESSION; } else { --- storage/tokudb/PerconaFT/tools/CMakeLists.txt 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/PerconaFT/tools/CMakeLists.txt 2020-09-19 18:33:13.777762677 +0200 @@ -4,7 +4,7 @@ foreach(tool ${tools}) add_executable(${tool} ${tool}.cc) add_dependencies(${tool} install_tdb_h) - target_link_libraries(${tool} ${LIBTOKUDB}_static ft_static z lzma snappy ${LIBTOKUPORTABILITY}_static ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_SYSTEM_LIBS}) + target_link_libraries(${tool} ${LIBTOKUDB}_static ft_static z lzma snappy zstd ${LIBTOKUPORTABILITY}_static ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_SYSTEM_LIBS}) # detect when we are being built as a subproject if (DEFINED MYSQL_PROJECT_NAME_DOCSTRING) --- storage/tokudb/tokudb_sysvars.cc 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/tokudb_sysvars.cc 2020-09-19 18:39:24.050932302 +0200 @@ -818,6 +818,7 @@ "tokudb_uncompressed", "tokudb_zlib", "tokudb_snappy", + "tokudb_zstd", "tokudb_quicklz", "tokudb_lzma", "tokudb_fast", @@ -837,7 +838,7 @@ row_format, PLUGIN_VAR_OPCMDARG, "Specifies the compression method for a table created during this session. " - "Possible values are TOKUDB_UNCOMPRESSED, TOKUDB_ZLIB, TOKUDB_SNAPPY, " + "Possible values are TOKUDB_UNCOMPRESSED, TOKUDB_ZLIB, TOKUDB_SNAPPY, TOKUDB_ZSTD, " "TOKUDB_QUICKLZ, TOKUDB_LZMA, TOKUDB_FAST, TOKUDB_SMALL and TOKUDB_DEFAULT", NULL, NULL, --- storage/tokudb/tokudb_sysvars.h 2020-08-07 14:57:38.000000000 +0200 +++ storage/tokudb/tokudb_sysvars.h 2020-09-19 18:40:26.811317048 +0200 @@ -65,11 +65,12 @@ SRV_ROW_FORMAT_UNCOMPRESSED = 0, SRV_ROW_FORMAT_ZLIB = 1, SRV_ROW_FORMAT_SNAPPY = 2, - SRV_ROW_FORMAT_QUICKLZ = 3, - SRV_ROW_FORMAT_LZMA = 4, - SRV_ROW_FORMAT_FAST = 5, - SRV_ROW_FORMAT_SMALL = 6, - SRV_ROW_FORMAT_DEFAULT = 7 + SRV_ROW_FORMAT_ZSTD = 3, + SRV_ROW_FORMAT_QUICKLZ = 4, + SRV_ROW_FORMAT_LZMA = 5, + SRV_ROW_FORMAT_FAST = 6, + SRV_ROW_FORMAT_SMALL = 7, + SRV_ROW_FORMAT_DEFAULT = 8 }; #define DEFAULT_TOKUDB_CLEANER_ITERATIONS 5