@nxtedition/rocksdb 15.1.2 → 15.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +79 -38
- package/build.sh +1 -2
- package/deps/rocksdb/rocksdb/BUCK +10 -8
- package/deps/rocksdb/rocksdb/CMakeLists.txt +27 -2
- package/deps/rocksdb/rocksdb/Makefile +27 -116
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +101 -124
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +47 -30
- package/deps/rocksdb/rocksdb/db/c.cc +793 -131
- package/deps/rocksdb/rocksdb/db/c_test.c +571 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +226 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +4 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +95 -59
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +45 -35
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +47 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +69 -24
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +9 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +65 -0
- package/deps/rocksdb/rocksdb/db/db_etc3_test.cc +161 -0
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +20 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +13 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +114 -39
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +39 -25
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +361 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +83 -0
- package/deps/rocksdb/rocksdb/db/db_test.cc +249 -4
- package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/listener_test.cc +7 -17
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +41 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +7 -4
- package/deps/rocksdb/rocksdb/db/version_set.cc +299 -90
- package/deps/rocksdb/rocksdb/db/version_set.h +56 -9
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +41 -39
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +7 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +48 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +16 -5
- package/deps/rocksdb/rocksdb/env/env_test.cc +126 -41
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -7
- package/deps/rocksdb/rocksdb/env/io_posix.cc +304 -112
- package/deps/rocksdb/rocksdb/env/io_posix.h +16 -4
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/folly.mk +148 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +29 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +73 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +246 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +15 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +67 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +1 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +6 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +8 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +0 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +33 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +2 -0
- package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +5 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +6 -6
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +10 -5
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +15 -3
- package/deps/rocksdb/rocksdb/options/cf_options.h +7 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +27 -36
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -2
- package/deps/rocksdb/rocksdb/options/options.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options_test.cc +19 -3
- package/deps/rocksdb/rocksdb/src.mk +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +155 -32
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +169 -125
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +22 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +43 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +9 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +9 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +17 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +15 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +13 -18
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +29 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +15 -0
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +79 -19
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +48 -20
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +51 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +19 -0
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +2 -2
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +3 -2
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +5 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +48 -39
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +4 -0
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +32 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +14 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +3 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +63 -12
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +16 -1
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +5 -1
- package/deps/rocksdb/rocksdb/util/bit_fields.h +133 -23
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +2 -5
- package/deps/rocksdb/rocksdb/util/compression.cc +51 -23
- package/deps/rocksdb/rocksdb/util/compression_test.cc +525 -270
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +3 -4
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +11 -2
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -1
- package/deps/rocksdb/rocksdb/util/slice_test.cc +92 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -2
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +19 -2
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +75 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +303 -111
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +379 -0
- package/deps/rocksdb/rocksdb.gyp +6 -4
- package/iterator.js +66 -70
- package/package.json +6 -6
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/table/block_based/index_builder_test.cc +0 -183
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# This file contains the vast majority of folly-related build configuration
|
|
2
|
+
# for the checkout_folly and build_folly targets, so that this file can be
|
|
3
|
+
# hashed for purposes of caching folly builds and not hitting that cache when
|
|
4
|
+
# something here changes.
|
|
5
|
+
|
|
6
|
+
# This provides a Makefile simulation of a Meta-internal folly integration.
|
|
7
|
+
# It is not validated for general use.
|
|
8
|
+
#
|
|
9
|
+
# USE_FOLLY links the build targets with libfolly.a. The latter could be
|
|
10
|
+
# built using 'make build_folly', or built externally and specified in
|
|
11
|
+
# the CXXFLAGS and EXTRA_LDFLAGS env variables. The build_detect_platform
|
|
12
|
+
# script tries to detect if an external folly dependency has been specified.
|
|
13
|
+
# If not, it exports FOLLY_PATH to the path of the installed Folly and
|
|
14
|
+
# dependency libraries.
|
|
15
|
+
#
|
|
16
|
+
# USE_FOLLY_LITE cherry picks source files from Folly to include in the
|
|
17
|
+
# RocksDB library. Its faster and has fewer dependencies on 3rd party
|
|
18
|
+
# libraries, but with limited functionality. For example, coroutine
|
|
19
|
+
# functionality is not available.
|
|
20
|
+
ifeq ($(USE_FOLLY),1)
|
|
21
|
+
ifeq ($(USE_FOLLY_LITE),1)
|
|
22
|
+
$(error Please specify only one of USE_FOLLY and USE_FOLLY_LITE)
|
|
23
|
+
endif
|
|
24
|
+
ifneq ($(strip $(FOLLY_PATH)),)
|
|
25
|
+
BOOST_PATH = $(shell (ls -d $(FOLLY_PATH)/../boost*))
|
|
26
|
+
DBL_CONV_PATH = $(shell (ls -d $(FOLLY_PATH)/../double-conversion*))
|
|
27
|
+
GFLAGS_PATH = $(shell (ls -d $(FOLLY_PATH)/../gflags*))
|
|
28
|
+
GLOG_PATH = $(shell (ls -d $(FOLLY_PATH)/../glog*))
|
|
29
|
+
LIBEVENT_PATH = $(shell (ls -d $(FOLLY_PATH)/../libevent*))
|
|
30
|
+
XZ_PATH = $(shell (ls -d $(FOLLY_PATH)/../xz*))
|
|
31
|
+
LIBSODIUM_PATH = $(shell (ls -d $(FOLLY_PATH)/../libsodium*))
|
|
32
|
+
FMT_PATH = $(shell (ls -d $(FOLLY_PATH)/../fmt*))
|
|
33
|
+
|
|
34
|
+
# For some reason, glog and fmt libraries are under either lib or lib64
|
|
35
|
+
GLOG_LIB_PATH = $(shell (ls -d $(GLOG_PATH)/lib*))
|
|
36
|
+
FMT_LIB_PATH = $(shell (ls -d $(FMT_PATH)/lib*))
|
|
37
|
+
|
|
38
|
+
# AIX: pre-defined system headers are surrounded by an extern "C" block
|
|
39
|
+
ifeq ($(PLATFORM), OS_AIX)
|
|
40
|
+
PLATFORM_CCFLAGS += -I$(BOOST_PATH)/include -I$(DBL_CONV_PATH)/include -I$(GLOG_PATH)/include -I$(LIBEVENT_PATH)/include -I$(XZ_PATH)/include -I$(LIBSODIUM_PATH)/include -I$(FOLLY_PATH)/include -I$(FMT_PATH)/include
|
|
41
|
+
PLATFORM_CXXFLAGS += -I$(BOOST_PATH)/include -I$(DBL_CONV_PATH)/include -I$(GLOG_PATH)/include -I$(LIBEVENT_PATH)/include -I$(XZ_PATH)/include -I$(LIBSODIUM_PATH)/include -I$(FOLLY_PATH)/include -I$(FMT_PATH)/include
|
|
42
|
+
else
|
|
43
|
+
PLATFORM_CCFLAGS += -isystem $(BOOST_PATH)/include -isystem $(DBL_CONV_PATH)/include -isystem $(GLOG_PATH)/include -isystem $(LIBEVENT_PATH)/include -isystem $(XZ_PATH)/include -isystem $(LIBSODIUM_PATH)/include -isystem $(FOLLY_PATH)/include -isystem $(FMT_PATH)/include
|
|
44
|
+
PLATFORM_CXXFLAGS += -isystem $(BOOST_PATH)/include -isystem $(DBL_CONV_PATH)/include -isystem $(GLOG_PATH)/include -isystem $(LIBEVENT_PATH)/include -isystem $(XZ_PATH)/include -isystem $(LIBSODIUM_PATH)/include -isystem $(FOLLY_PATH)/include -isystem $(FMT_PATH)/include
|
|
45
|
+
endif
|
|
46
|
+
|
|
47
|
+
# Add -ldl at the end as gcc resolves a symbol in a library by searching only in libraries specified later
|
|
48
|
+
# in the command line
|
|
49
|
+
|
|
50
|
+
PLATFORM_LDFLAGS += $(FOLLY_PATH)/lib/libfolly.a $(BOOST_PATH)/lib/libboost_context.a $(BOOST_PATH)/lib/libboost_filesystem.a $(BOOST_PATH)/lib/libboost_atomic.a $(BOOST_PATH)/lib/libboost_program_options.a $(BOOST_PATH)/lib/libboost_regex.a $(BOOST_PATH)/lib/libboost_system.a $(BOOST_PATH)/lib/libboost_thread.a $(DBL_CONV_PATH)/lib/libdouble-conversion.a $(LIBEVENT_PATH)/lib/libevent-2.1.so $(LIBSODIUM_PATH)/lib/libsodium.a -ldl
|
|
51
|
+
ifneq ($(DEBUG_LEVEL),0)
|
|
52
|
+
PLATFORM_LDFLAGS += $(FMT_LIB_PATH)/libfmtd.a $(GLOG_LIB_PATH)/libglogd.so $(GFLAGS_PATH)/lib/libgflags_debug.so.2.2
|
|
53
|
+
else
|
|
54
|
+
PLATFORM_LDFLAGS += $(FMT_LIB_PATH)/libfmt.a $(GLOG_LIB_PATH)/libglog.so $(GFLAGS_PATH)/lib/libgflags.so.2.2
|
|
55
|
+
endif
|
|
56
|
+
PLATFORM_LDFLAGS += -Wl,-rpath=$(LIBEVENT_PATH)/lib -Wl,-rpath=$(GLOG_LIB_PATH) -Wl,-rpath=$(GFLAGS_PATH)/lib
|
|
57
|
+
endif
|
|
58
|
+
PLATFORM_CCFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
59
|
+
PLATFORM_CXXFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
60
|
+
endif
|
|
61
|
+
|
|
62
|
+
ifeq ($(USE_FOLLY_LITE),1)
|
|
63
|
+
# Path to the Folly source code and include files
|
|
64
|
+
FOLLY_DIR = ./third-party/folly
|
|
65
|
+
ifneq ($(strip $(BOOST_SOURCE_PATH)),)
|
|
66
|
+
BOOST_INCLUDE = $(shell (ls -d $(BOOST_SOURCE_PATH)/boost*/))
|
|
67
|
+
# AIX: pre-defined system headers are surrounded by an extern "C" block
|
|
68
|
+
ifeq ($(PLATFORM), OS_AIX)
|
|
69
|
+
PLATFORM_CCFLAGS += -I$(BOOST_INCLUDE)
|
|
70
|
+
PLATFORM_CXXFLAGS += -I$(BOOST_INCLUDE)
|
|
71
|
+
else
|
|
72
|
+
PLATFORM_CCFLAGS += -isystem $(BOOST_INCLUDE)
|
|
73
|
+
PLATFORM_CXXFLAGS += -isystem $(BOOST_INCLUDE)
|
|
74
|
+
endif
|
|
75
|
+
endif # BOOST_SOURCE_PATH
|
|
76
|
+
ifneq ($(strip $(FMT_SOURCE_PATH)),)
|
|
77
|
+
FMT_INCLUDE = $(shell (ls -d $(FMT_SOURCE_PATH)/fmt*/include/))
|
|
78
|
+
# AIX: pre-defined system headers are surrounded by an extern "C" block
|
|
79
|
+
ifeq ($(PLATFORM), OS_AIX)
|
|
80
|
+
PLATFORM_CCFLAGS += -I$(FMT_INCLUDE)
|
|
81
|
+
PLATFORM_CXXFLAGS += -I$(FMT_INCLUDE)
|
|
82
|
+
else
|
|
83
|
+
PLATFORM_CCFLAGS += -isystem $(FMT_INCLUDE)
|
|
84
|
+
PLATFORM_CXXFLAGS += -isystem $(FMT_INCLUDE)
|
|
85
|
+
endif
|
|
86
|
+
endif # FMT_SOURCE_PATH
|
|
87
|
+
# AIX: pre-defined system headers are surrounded by an extern "C" block
|
|
88
|
+
ifeq ($(PLATFORM), OS_AIX)
|
|
89
|
+
PLATFORM_CCFLAGS += -I$(FOLLY_DIR)
|
|
90
|
+
PLATFORM_CXXFLAGS += -I$(FOLLY_DIR)
|
|
91
|
+
else
|
|
92
|
+
PLATFORM_CCFLAGS += -isystem $(FOLLY_DIR)
|
|
93
|
+
PLATFORM_CXXFLAGS += -isystem $(FOLLY_DIR)
|
|
94
|
+
endif
|
|
95
|
+
PLATFORM_CCFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
96
|
+
PLATFORM_CXXFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
97
|
+
# TODO: fix linking with fbcode compiler config
|
|
98
|
+
PLATFORM_LDFLAGS += -lglog
|
|
99
|
+
endif
|
|
100
|
+
|
|
101
|
+
FOLLY_COMMIT_HASH = abe68f7e917e8b7a0ee2fe066c972dc98fd35aa1
|
|
102
|
+
|
|
103
|
+
# For public CI runs, checkout folly in a way that can build with RocksDB.
|
|
104
|
+
# This is mostly intended as a test-only simulation of Meta-internal folly
|
|
105
|
+
# integration.
|
|
106
|
+
checkout_folly:
|
|
107
|
+
if [ -e third-party/folly ]; then \
|
|
108
|
+
cd third-party/folly && ${GIT_COMMAND} fetch origin; \
|
|
109
|
+
else \
|
|
110
|
+
cd third-party && ${GIT_COMMAND} clone https://github.com/facebook/folly.git; \
|
|
111
|
+
fi
|
|
112
|
+
@# Pin to a particular version for public CI, so that PR authors don't
|
|
113
|
+
@# need to worry about folly breaking our integration. Update periodically
|
|
114
|
+
cd third-party/folly && git reset --hard $(FOLLY_COMMIT_HASH)
|
|
115
|
+
@# Apparently missing include
|
|
116
|
+
perl -pi -e 's/(#include <atomic>)/$$1\n#include <cstring>/' third-party/folly/folly/lang/Exception.h
|
|
117
|
+
@# const mismatch
|
|
118
|
+
perl -pi -e 's/: environ/: (const char**)(environ)/' third-party/folly/folly/Subprocess.cpp
|
|
119
|
+
@# Use gnu.org mirrors to improve download speed (ftp.gnu.org is often super slow)
|
|
120
|
+
cd third-party/folly && perl -pi -e 's/ftp.gnu.org/ftpmirror.gnu.org/' `git grep -l ftp.gnu.org` README.md
|
|
121
|
+
@# NOTE: boost and fmt source will be needed for any build including `USE_FOLLY_LITE` builds as those depend on those headers
|
|
122
|
+
cd third-party/folly && GETDEPS_USE_WGET=1 $(PYTHON) build/fbcode_builder/getdeps.py fetch boost && GETDEPS_USE_WGET=1 $(PYTHON) build/fbcode_builder/getdeps.py fetch fmt
|
|
123
|
+
|
|
124
|
+
CXX_M_FLAGS = $(filter -m%, $(CXXFLAGS))
|
|
125
|
+
|
|
126
|
+
FOLLY_BUILD_FLAGS = --no-tests
|
|
127
|
+
# NOTE: To avoid ODR violations, we must build folly in debug mode iff
|
|
128
|
+
# building RocksDB in debug mode.
|
|
129
|
+
ifneq ($(DEBUG_LEVEL),0)
|
|
130
|
+
FOLLY_BUILD_FLAGS += --build-type Debug
|
|
131
|
+
endif
|
|
132
|
+
|
|
133
|
+
build_folly:
|
|
134
|
+
FOLLY_INST_PATH=`cd third-party/folly && $(PYTHON) build/fbcode_builder/getdeps.py show-inst-dir`; \
|
|
135
|
+
if [ "$$FOLLY_INST_PATH" ]; then \
|
|
136
|
+
rm -rf $${FOLLY_INST_PATH}/../../*; \
|
|
137
|
+
else \
|
|
138
|
+
echo "Please run checkout_folly first"; \
|
|
139
|
+
false; \
|
|
140
|
+
fi
|
|
141
|
+
cd third-party/folly && \
|
|
142
|
+
CXXFLAGS=" $(CXX_M_FLAGS) -DHAVE_CXX11_ATOMIC " GETDEPS_USE_WGET=1 $(PYTHON) build/fbcode_builder/getdeps.py build $(FOLLY_BUILD_FLAGS)
|
|
143
|
+
@# In the folly build, glog and gflags are only built as dynamic libraries,
|
|
144
|
+
@# not static. This patchelf command is needed to reliably have the glog
|
|
145
|
+
@# library find its dependency gflags, because apparently the rpath of the
|
|
146
|
+
@# final binary is not used in resolving that transitive dependency.
|
|
147
|
+
FOLLY_INST_PATH=`cd third-party/folly && $(PYTHON) build/fbcode_builder/getdeps.py show-inst-dir`; \
|
|
148
|
+
cd "$$FOLLY_INST_PATH" && patchelf --add-rpath $$PWD/../gflags-*/lib ../glog-*/lib*/libglog*.so.*.*.*
|
|
@@ -90,6 +90,10 @@ class Compressor {
|
|
|
90
90
|
return CompressionType::kDisableCompressionOption;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
// Return a distinct but functionally equivalent Compressor. This is often
|
|
94
|
+
// needed to implement MaybeCloneSpecialized() in wrapper compressors.
|
|
95
|
+
virtual std::unique_ptr<Compressor> Clone() const = 0;
|
|
96
|
+
|
|
93
97
|
// Utility struct for providing sample data for the compression dictionary.
|
|
94
98
|
// Potentially extensible by callers of Compressor (but not recommended)
|
|
95
99
|
struct DictSampleArgs {
|
|
@@ -121,7 +125,7 @@ class Compressor {
|
|
|
121
125
|
// dictionary associated with a returned compressor must be read from
|
|
122
126
|
// GetSerializedDict().
|
|
123
127
|
virtual std::unique_ptr<Compressor> MaybeCloneSpecialized(
|
|
124
|
-
CacheEntryRole block_type, DictSampleArgs&& dict_samples) {
|
|
128
|
+
CacheEntryRole block_type, DictSampleArgs&& dict_samples) const {
|
|
125
129
|
// Default implementation: no specialization
|
|
126
130
|
(void)block_type;
|
|
127
131
|
(void)dict_samples;
|
|
@@ -131,6 +135,18 @@ class Compressor {
|
|
|
131
135
|
return nullptr;
|
|
132
136
|
}
|
|
133
137
|
|
|
138
|
+
// A convenience function when a clone is needed and may or may not be
|
|
139
|
+
// specialized.
|
|
140
|
+
std::unique_ptr<Compressor> CloneMaybeSpecialized(
|
|
141
|
+
CacheEntryRole block_type, DictSampleArgs&& dict_samples) const {
|
|
142
|
+
auto clone = MaybeCloneSpecialized(block_type, std::move(dict_samples));
|
|
143
|
+
if (clone == nullptr) {
|
|
144
|
+
clone = Clone();
|
|
145
|
+
assert(clone != nullptr);
|
|
146
|
+
}
|
|
147
|
+
return clone;
|
|
148
|
+
}
|
|
149
|
+
|
|
134
150
|
// A WorkingArea is an optional structure (both for callers and
|
|
135
151
|
// implementations) that can enable optimizing repeated compressions by
|
|
136
152
|
// reusing working space or thread-local tracking of statistics or trends.
|
|
@@ -473,9 +489,19 @@ class CompressorWrapper : public Compressor {
|
|
|
473
489
|
return wrapped_->GetPreferredCompressionType();
|
|
474
490
|
}
|
|
475
491
|
|
|
492
|
+
// NOTE: Clone() not implemented here because it needs to be in the derived
|
|
493
|
+
// class
|
|
494
|
+
|
|
495
|
+
// NOTE: MaybeCloneSpecialized() is only implemented here for convenience
|
|
496
|
+
// when the wrapped Compressor uses the default implementation of
|
|
497
|
+
// MaybeCloneSpecialized(). This needs to be overridden if not.
|
|
476
498
|
std::unique_ptr<Compressor> MaybeCloneSpecialized(
|
|
477
|
-
CacheEntryRole block_type, DictSampleArgs&& dict_samples) override {
|
|
478
|
-
|
|
499
|
+
CacheEntryRole block_type, DictSampleArgs&& dict_samples) const override {
|
|
500
|
+
auto clone =
|
|
501
|
+
wrapped_->MaybeCloneSpecialized(block_type, std::move(dict_samples));
|
|
502
|
+
// Assert default no-op MaybeCloneSpecialized()
|
|
503
|
+
assert(clone == nullptr);
|
|
504
|
+
return clone;
|
|
479
505
|
}
|
|
480
506
|
|
|
481
507
|
ManagedWorkingArea ObtainWorkingArea() override {
|
|
@@ -156,6 +156,61 @@ enum class PrepopulateBlobCache : uint8_t {
|
|
|
156
156
|
kFlushOnly = 0x1, // Prepopulate blobs during flush only
|
|
157
157
|
};
|
|
158
158
|
|
|
159
|
+
// Bitmask enum for verify output flags during compaction.
|
|
160
|
+
// This allows fine-grained control over what verification is performed
|
|
161
|
+
// on compaction output files and when it's enabled.
|
|
162
|
+
enum class VerifyOutputFlags : uint32_t {
|
|
163
|
+
kVerifyNone = 0x0, // No verification
|
|
164
|
+
|
|
165
|
+
// First set of bits: type of verifications
|
|
166
|
+
kVerifyBlockChecksum = 1 << 0, // Verify block checksums
|
|
167
|
+
kVerifyIteration = 1 << 1, // Verify iteration and full key/value hash
|
|
168
|
+
// by comparing the one inserted into a
|
|
169
|
+
// file, and what is read back.
|
|
170
|
+
|
|
171
|
+
// TODO - Implement
|
|
172
|
+
// kVerifyFileChecksum = 1 << 2, // Verify file-level checksum
|
|
173
|
+
|
|
174
|
+
// Second set of bits: when to enable verification
|
|
175
|
+
kEnableForLocalCompaction = 1 << 10, // Enable for local compaction
|
|
176
|
+
kEnableForRemoteCompaction = 1 << 11, // Enable for remote compaction
|
|
177
|
+
|
|
178
|
+
// TODO - Implement
|
|
179
|
+
// kEnableForFlush = 1 << 12, // Enable for flush
|
|
180
|
+
|
|
181
|
+
kVerifyAll = 0xFFFFFFFF,
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
inline VerifyOutputFlags operator|(VerifyOutputFlags lhs,
|
|
185
|
+
VerifyOutputFlags rhs) {
|
|
186
|
+
using T = std::underlying_type_t<VerifyOutputFlags>;
|
|
187
|
+
return static_cast<VerifyOutputFlags>(static_cast<T>(lhs) |
|
|
188
|
+
static_cast<T>(rhs));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
inline VerifyOutputFlags& operator|=(VerifyOutputFlags& lhs,
|
|
192
|
+
VerifyOutputFlags rhs) {
|
|
193
|
+
lhs = lhs | rhs;
|
|
194
|
+
return lhs;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
inline VerifyOutputFlags operator&(VerifyOutputFlags lhs,
|
|
198
|
+
VerifyOutputFlags rhs) {
|
|
199
|
+
using T = std::underlying_type_t<VerifyOutputFlags>;
|
|
200
|
+
return static_cast<VerifyOutputFlags>(static_cast<T>(lhs) &
|
|
201
|
+
static_cast<T>(rhs));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
inline VerifyOutputFlags& operator&=(VerifyOutputFlags& lhs,
|
|
205
|
+
VerifyOutputFlags rhs) {
|
|
206
|
+
lhs = lhs & rhs;
|
|
207
|
+
return lhs;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
inline bool operator!(VerifyOutputFlags flag) {
|
|
211
|
+
return flag == VerifyOutputFlags::kVerifyNone;
|
|
212
|
+
}
|
|
213
|
+
|
|
159
214
|
struct AdvancedColumnFamilyOptions {
|
|
160
215
|
// The maximum number of write buffers that are built up in memory.
|
|
161
216
|
// The default and the minimum number is 2, so that when 1 write buffer
|
|
@@ -473,6 +528,17 @@ struct AdvancedColumnFamilyOptions {
|
|
|
473
528
|
// Dynamically changeable through SetOptions() API
|
|
474
529
|
int target_file_size_multiplier = 1;
|
|
475
530
|
|
|
531
|
+
// If true, RocksDB will consider the estimated tail size (filter + index +
|
|
532
|
+
// meta blocks) when deciding whether to cut a compaction output file. This
|
|
533
|
+
// helps prevent output files from exceeding the target_file_size_base due to
|
|
534
|
+
// large tail blocks. When disabled, only the data block size is considered,
|
|
535
|
+
// which may result in SST files exceeding the target_file_size_base.
|
|
536
|
+
//
|
|
537
|
+
// Default: false
|
|
538
|
+
//
|
|
539
|
+
// Dynamically changeable through SetOptions() API
|
|
540
|
+
bool target_file_size_is_upper_bound = false;
|
|
541
|
+
|
|
476
542
|
// If true, RocksDB will pick target size of each level dynamically.
|
|
477
543
|
// We will pick a base level b >= 1. L0 will be directly merged into level b,
|
|
478
544
|
// instead of always into level 1. Level 1 to b-1 need to be empty.
|
|
@@ -704,6 +770,13 @@ struct AdvancedColumnFamilyOptions {
|
|
|
704
770
|
// Dynamically changeable through SetOptions() API
|
|
705
771
|
bool paranoid_file_checks = false;
|
|
706
772
|
|
|
773
|
+
// Bitmask enum for output verification option.
|
|
774
|
+
//
|
|
775
|
+
// Default: 0 (kVerifyNone)
|
|
776
|
+
//
|
|
777
|
+
// Dynamically changeable (as a uint32_t) through SetOptions() API.
|
|
778
|
+
VerifyOutputFlags verify_output_flags = VerifyOutputFlags::kVerifyNone;
|
|
779
|
+
|
|
707
780
|
// In debug mode, RocksDB runs consistency checks on the LSM every time the
|
|
708
781
|
// LSM changes (Flush, Compaction, AddFile). When this option is true, these
|
|
709
782
|
// checks are also enabled in release mode. These checks were historically
|
|
@@ -148,6 +148,14 @@ typedef struct rocksdb_statistics_histogram_data_t
|
|
|
148
148
|
rocksdb_statistics_histogram_data_t;
|
|
149
149
|
typedef struct rocksdb_wait_for_compact_options_t
|
|
150
150
|
rocksdb_wait_for_compact_options_t;
|
|
151
|
+
|
|
152
|
+
/* rocksdb_slice_t: Optimized slice type for high-performance C API operations
|
|
153
|
+
* This struct is ABI-compatible with rocksdb::Slice for zero-copy interop.
|
|
154
|
+
* Used by slice iterator functions and batched operations. */
|
|
155
|
+
typedef struct rocksdb_slice_t {
|
|
156
|
+
const char* data;
|
|
157
|
+
size_t size;
|
|
158
|
+
} rocksdb_slice_t;
|
|
151
159
|
typedef struct rocksdb_flushjobinfo_t rocksdb_flushjobinfo_t;
|
|
152
160
|
typedef struct rocksdb_compactionjobinfo_t rocksdb_compactionjobinfo_t;
|
|
153
161
|
typedef struct rocksdb_subcompactionjobinfo_t rocksdb_subcompactionjobinfo_t;
|
|
@@ -158,6 +166,31 @@ typedef struct rocksdb_writestallinfo_t rocksdb_writestallinfo_t;
|
|
|
158
166
|
typedef struct rocksdb_writestallcondition_t rocksdb_writestallcondition_t;
|
|
159
167
|
typedef struct rocksdb_memtableinfo_t rocksdb_memtableinfo_t;
|
|
160
168
|
|
|
169
|
+
// Remote Compaction typedef
|
|
170
|
+
typedef struct rocksdb_compactionservice_scheduleresponse_t
|
|
171
|
+
rocksdb_compactionservice_scheduleresponse_t;
|
|
172
|
+
typedef struct rocksdb_compactionservice_jobinfo_t
|
|
173
|
+
rocksdb_compactionservice_jobinfo_t;
|
|
174
|
+
typedef struct rocksdb_compactionservice_t rocksdb_compactionservice_t;
|
|
175
|
+
typedef struct rocksdb_compaction_service_options_override_t
|
|
176
|
+
rocksdb_compaction_service_options_override_t;
|
|
177
|
+
typedef struct rocksdb_open_and_compact_options_t
|
|
178
|
+
rocksdb_open_and_compact_options_t;
|
|
179
|
+
typedef rocksdb_compactionservice_scheduleresponse_t* (
|
|
180
|
+
*rocksdb_compaction_service_schedule_cb)(
|
|
181
|
+
void* state, const rocksdb_compactionservice_jobinfo_t* info,
|
|
182
|
+
const char* compaction_service_input, size_t input_len);
|
|
183
|
+
|
|
184
|
+
typedef int (*rocksdb_compaction_service_wait_cb)(void* state,
|
|
185
|
+
const char* scheduled_job_id,
|
|
186
|
+
char** result,
|
|
187
|
+
size_t* result_len);
|
|
188
|
+
|
|
189
|
+
typedef void (*rocksdb_compaction_service_cancel_awaiting_jobs_cb)(void* state);
|
|
190
|
+
|
|
191
|
+
typedef void (*rocksdb_compaction_service_on_installation_cb)(
|
|
192
|
+
void* state, const char* scheduled_job_id, int status);
|
|
193
|
+
|
|
161
194
|
/* DB operations */
|
|
162
195
|
|
|
163
196
|
extern ROCKSDB_LIBRARY_API rocksdb_t* rocksdb_open(
|
|
@@ -610,6 +643,16 @@ extern ROCKSDB_LIBRARY_API void rocksdb_batched_multi_get_cf(
|
|
|
610
643
|
const char* const* keys_list, const size_t* keys_list_sizes,
|
|
611
644
|
rocksdb_pinnableslice_t** values, char** errs, const bool sorted_input);
|
|
612
645
|
|
|
646
|
+
/* Batched MultiGet with slice array: Takes rocksdb_slice_t array directly,
|
|
647
|
+
* avoiding key conversion. faster than rocksdb_batched_multi_get_cf for
|
|
648
|
+
* operations with many keys. Eliminates overhead of converting keys from
|
|
649
|
+
* separate pointer+size arrays to Slice objects. */
|
|
650
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_batched_multi_get_cf_slice(
|
|
651
|
+
rocksdb_t* db, const rocksdb_readoptions_t* options,
|
|
652
|
+
rocksdb_column_family_handle_t* column_family, size_t num_keys,
|
|
653
|
+
const rocksdb_slice_t* keys_list, rocksdb_pinnableslice_t** values,
|
|
654
|
+
char** errs, const bool sorted_input);
|
|
655
|
+
|
|
613
656
|
// The value is only allocated (using malloc) and returned if it is found and
|
|
614
657
|
// value_found isn't NULL. In that case the user is responsible for freeing it.
|
|
615
658
|
extern ROCKSDB_LIBRARY_API unsigned char rocksdb_key_may_exist(
|
|
@@ -776,6 +819,18 @@ extern ROCKSDB_LIBRARY_API const char* rocksdb_iter_timestamp(
|
|
|
776
819
|
const rocksdb_iterator_t*, size_t* tslen);
|
|
777
820
|
extern ROCKSDB_LIBRARY_API void rocksdb_iter_get_error(
|
|
778
821
|
const rocksdb_iterator_t*, char** errptr);
|
|
822
|
+
|
|
823
|
+
/* Slice iterator functions: Return rocksdb_slice_t directly for better
|
|
824
|
+
* performance. These functions avoid the overhead of passing output parameters
|
|
825
|
+
* and provide zero-copy access to key/value/timestamp data. faster than
|
|
826
|
+
* traditional rocksdb_iter_key/value/timestamp functions. */
|
|
827
|
+
extern ROCKSDB_LIBRARY_API rocksdb_slice_t
|
|
828
|
+
rocksdb_iter_key_slice(const rocksdb_iterator_t* iter);
|
|
829
|
+
extern ROCKSDB_LIBRARY_API rocksdb_slice_t
|
|
830
|
+
rocksdb_iter_value_slice(const rocksdb_iterator_t* iter);
|
|
831
|
+
extern ROCKSDB_LIBRARY_API rocksdb_slice_t
|
|
832
|
+
rocksdb_iter_timestamp_slice(const rocksdb_iterator_t* iter);
|
|
833
|
+
|
|
779
834
|
extern ROCKSDB_LIBRARY_API void rocksdb_iter_refresh(
|
|
780
835
|
const rocksdb_iterator_t* iter, char** errptr);
|
|
781
836
|
|
|
@@ -3440,6 +3495,197 @@ extern ROCKSDB_LIBRARY_API uint64_t
|
|
|
3440
3495
|
rocksdb_wait_for_compact_options_get_timeout(
|
|
3441
3496
|
rocksdb_wait_for_compact_options_t* opt);
|
|
3442
3497
|
|
|
3498
|
+
/* High-performance zero-copy Get variants
|
|
3499
|
+
These functions avoid unnecessary memory allocations and copies.
|
|
3500
|
+
The returned buffer is valid until the handle is destroyed.
|
|
3501
|
+
Bindings should migrate to these for better performance. */
|
|
3502
|
+
|
|
3503
|
+
/* Zero-copy get that returns a handle to pinned data.
|
|
3504
|
+
The data remains valid until rocksdb_pinnable_handle_destroy is called.
|
|
3505
|
+
Returns NULL on error or not found. Check errptr to distinguish. */
|
|
3506
|
+
typedef struct rocksdb_pinnable_handle_t rocksdb_pinnable_handle_t;
|
|
3507
|
+
|
|
3508
|
+
extern ROCKSDB_LIBRARY_API rocksdb_pinnable_handle_t* rocksdb_get_pinned_v2(
|
|
3509
|
+
rocksdb_t* db, const rocksdb_readoptions_t* options, const char* key,
|
|
3510
|
+
size_t keylen, char** errptr);
|
|
3511
|
+
|
|
3512
|
+
extern ROCKSDB_LIBRARY_API rocksdb_pinnable_handle_t* rocksdb_get_pinned_cf_v2(
|
|
3513
|
+
rocksdb_t* db, const rocksdb_readoptions_t* options,
|
|
3514
|
+
rocksdb_column_family_handle_t* column_family, const char* key,
|
|
3515
|
+
size_t keylen, char** errptr);
|
|
3516
|
+
|
|
3517
|
+
/* Get the data pointer and size from a pinnable handle.
|
|
3518
|
+
The data pointer is valid until the handle is destroyed. */
|
|
3519
|
+
extern ROCKSDB_LIBRARY_API const char* rocksdb_pinnable_handle_get_value(
|
|
3520
|
+
const rocksdb_pinnable_handle_t* handle, size_t* vallen);
|
|
3521
|
+
|
|
3522
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_pinnable_handle_destroy(
|
|
3523
|
+
rocksdb_pinnable_handle_t* handle);
|
|
3524
|
+
|
|
3525
|
+
/* Direct get into caller-provided buffer.
|
|
3526
|
+
Returns 1 if value fits in buffer, 0 if buffer too small.
|
|
3527
|
+
Sets *vallen to actual value size.
|
|
3528
|
+
If buffer is too small, no data is copied but *vallen is set. */
|
|
3529
|
+
extern ROCKSDB_LIBRARY_API unsigned char rocksdb_get_into_buffer(
|
|
3530
|
+
rocksdb_t* db, const rocksdb_readoptions_t* options, const char* key,
|
|
3531
|
+
size_t keylen, char* buffer, size_t buffer_size, size_t* vallen,
|
|
3532
|
+
unsigned char* found, char** errptr);
|
|
3533
|
+
|
|
3534
|
+
extern ROCKSDB_LIBRARY_API unsigned char rocksdb_get_into_buffer_cf(
|
|
3535
|
+
rocksdb_t* db, const rocksdb_readoptions_t* options,
|
|
3536
|
+
rocksdb_column_family_handle_t* column_family, const char* key,
|
|
3537
|
+
size_t keylen, char* buffer, size_t buffer_size, size_t* vallen,
|
|
3538
|
+
unsigned char* found, char** errptr);
|
|
3539
|
+
|
|
3540
|
+
// Remote compaction
|
|
3541
|
+
enum {
|
|
3542
|
+
rocksdb_compactionservice_jobstatus_success = 0,
|
|
3543
|
+
rocksdb_compactionservice_jobstatus_failure = 1,
|
|
3544
|
+
rocksdb_compactionservice_jobstatus_aborted = 2,
|
|
3545
|
+
rocksdb_compactionservice_jobstatus_use_local = 3,
|
|
3546
|
+
};
|
|
3547
|
+
|
|
3548
|
+
extern ROCKSDB_LIBRARY_API rocksdb_compactionservice_scheduleresponse_t*
|
|
3549
|
+
rocksdb_compactionservice_scheduleresponse_create(const char* scheduled_job_id,
|
|
3550
|
+
int status, char** errptr);
|
|
3551
|
+
|
|
3552
|
+
extern ROCKSDB_LIBRARY_API rocksdb_compactionservice_scheduleresponse_t*
|
|
3553
|
+
rocksdb_compactionservice_scheduleresponse_create_with_status(int status,
|
|
3554
|
+
char** errptr);
|
|
3555
|
+
|
|
3556
|
+
extern ROCKSDB_LIBRARY_API int
|
|
3557
|
+
rocksdb_compactionservice_scheduleresponse_getstatus(
|
|
3558
|
+
const rocksdb_compactionservice_scheduleresponse_t* response);
|
|
3559
|
+
|
|
3560
|
+
extern ROCKSDB_LIBRARY_API const char*
|
|
3561
|
+
rocksdb_compactionservice_scheduleresponse_get_scheduled_job_id(
|
|
3562
|
+
const rocksdb_compactionservice_scheduleresponse_t* response, size_t* len);
|
|
3563
|
+
|
|
3564
|
+
extern ROCKSDB_LIBRARY_API void
|
|
3565
|
+
rocksdb_compactionservice_scheduleresponse_t_destroy(
|
|
3566
|
+
rocksdb_compactionservice_scheduleresponse_t* response);
|
|
3567
|
+
|
|
3568
|
+
extern ROCKSDB_LIBRARY_API const char*
|
|
3569
|
+
rocksdb_compactionservice_jobinfo_t_get_db_name(
|
|
3570
|
+
const rocksdb_compactionservice_jobinfo_t* info, size_t* len);
|
|
3571
|
+
|
|
3572
|
+
extern ROCKSDB_LIBRARY_API const char*
|
|
3573
|
+
rocksdb_compactionservice_jobinfo_t_get_db_id(
|
|
3574
|
+
const rocksdb_compactionservice_jobinfo_t* info, size_t* len);
|
|
3575
|
+
|
|
3576
|
+
extern ROCKSDB_LIBRARY_API const char*
|
|
3577
|
+
rocksdb_compactionservice_jobinfo_t_get_db_session_id(
|
|
3578
|
+
const rocksdb_compactionservice_jobinfo_t* info, size_t* len);
|
|
3579
|
+
|
|
3580
|
+
extern ROCKSDB_LIBRARY_API const char*
|
|
3581
|
+
rocksdb_compactionservice_jobinfo_t_get_cf_name(
|
|
3582
|
+
const rocksdb_compactionservice_jobinfo_t* info, size_t* len);
|
|
3583
|
+
|
|
3584
|
+
extern ROCKSDB_LIBRARY_API uint32_t
|
|
3585
|
+
rocksdb_compactionservice_jobinfo_t_get_cf_id(
|
|
3586
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3587
|
+
|
|
3588
|
+
extern ROCKSDB_LIBRARY_API uint64_t
|
|
3589
|
+
rocksdb_compactionservice_jobinfo_t_get_job_id(
|
|
3590
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3591
|
+
|
|
3592
|
+
extern ROCKSDB_LIBRARY_API int rocksdb_compactionservice_jobinfo_t_get_priority(
|
|
3593
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3594
|
+
|
|
3595
|
+
extern ROCKSDB_LIBRARY_API int
|
|
3596
|
+
rocksdb_compactionservice_jobinfo_t_get_compaction_reason(
|
|
3597
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3598
|
+
|
|
3599
|
+
extern ROCKSDB_LIBRARY_API int
|
|
3600
|
+
rocksdb_compactionservice_jobinfo_t_get_base_input_level(
|
|
3601
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3602
|
+
|
|
3603
|
+
extern ROCKSDB_LIBRARY_API int
|
|
3604
|
+
rocksdb_compactionservice_jobinfo_t_get_output_level(
|
|
3605
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3606
|
+
|
|
3607
|
+
extern ROCKSDB_LIBRARY_API unsigned char
|
|
3608
|
+
rocksdb_compactionservice_jobinfo_t_is_full_compaction(
|
|
3609
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3610
|
+
|
|
3611
|
+
extern ROCKSDB_LIBRARY_API unsigned char
|
|
3612
|
+
rocksdb_compactionservice_jobinfo_t_is_manual_compaction(
|
|
3613
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3614
|
+
|
|
3615
|
+
extern ROCKSDB_LIBRARY_API unsigned char
|
|
3616
|
+
rocksdb_compactionservice_jobinfo_t_is_bottommost_level(
|
|
3617
|
+
const rocksdb_compactionservice_jobinfo_t* info);
|
|
3618
|
+
|
|
3619
|
+
extern ROCKSDB_LIBRARY_API rocksdb_compactionservice_t*
|
|
3620
|
+
rocksdb_compactionservice_create(
|
|
3621
|
+
void* state, void (*destructor)(void*),
|
|
3622
|
+
rocksdb_compaction_service_schedule_cb schedule, const char* name,
|
|
3623
|
+
rocksdb_compaction_service_wait_cb wait,
|
|
3624
|
+
rocksdb_compaction_service_cancel_awaiting_jobs_cb cancel_awaiting_jobs,
|
|
3625
|
+
rocksdb_compaction_service_on_installation_cb on_installation);
|
|
3626
|
+
|
|
3627
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_options_set_compaction_service(
|
|
3628
|
+
rocksdb_options_t* options, rocksdb_compactionservice_t* service);
|
|
3629
|
+
|
|
3630
|
+
// CompactionServiceOptionsOverride
|
|
3631
|
+
extern ROCKSDB_LIBRARY_API rocksdb_compaction_service_options_override_t*
|
|
3632
|
+
rocksdb_compaction_service_options_override_create(void);
|
|
3633
|
+
|
|
3634
|
+
extern ROCKSDB_LIBRARY_API void
|
|
3635
|
+
rocksdb_compaction_service_options_override_destroy(
|
|
3636
|
+
rocksdb_compaction_service_options_override_t* override_options);
|
|
3637
|
+
|
|
3638
|
+
extern ROCKSDB_LIBRARY_API void
|
|
3639
|
+
rocksdb_compaction_service_options_override_set_env(
|
|
3640
|
+
rocksdb_compaction_service_options_override_t* override_options,
|
|
3641
|
+
rocksdb_env_t* env);
|
|
3642
|
+
|
|
3643
|
+
extern ROCKSDB_LIBRARY_API void
|
|
3644
|
+
rocksdb_compaction_service_options_override_set_comparator(
|
|
3645
|
+
rocksdb_compaction_service_options_override_t* override_options,
|
|
3646
|
+
rocksdb_comparator_t* comparator);
|
|
3647
|
+
|
|
3648
|
+
// Atomic bool management for cancellation
|
|
3649
|
+
// Creates an atomic bool that can be used for cancellation.
|
|
3650
|
+
// User must call rocksdb_open_and_compact_canceled_destroy() to free it.
|
|
3651
|
+
extern ROCKSDB_LIBRARY_API unsigned char*
|
|
3652
|
+
rocksdb_open_and_compact_canceled_create(void);
|
|
3653
|
+
|
|
3654
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_open_and_compact_canceled_destroy(
|
|
3655
|
+
unsigned char* canceled);
|
|
3656
|
+
|
|
3657
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_open_and_compact_canceled_set(
|
|
3658
|
+
unsigned char* canceled, unsigned char value);
|
|
3659
|
+
|
|
3660
|
+
// OpenAndCompactOptions
|
|
3661
|
+
extern ROCKSDB_LIBRARY_API rocksdb_open_and_compact_options_t*
|
|
3662
|
+
rocksdb_open_and_compact_options_create(void);
|
|
3663
|
+
|
|
3664
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_open_and_compact_options_destroy(
|
|
3665
|
+
rocksdb_open_and_compact_options_t* options);
|
|
3666
|
+
|
|
3667
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_open_and_compact_options_set_canceled(
|
|
3668
|
+
rocksdb_open_and_compact_options_t* options, unsigned char* canceled);
|
|
3669
|
+
|
|
3670
|
+
extern ROCKSDB_LIBRARY_API void
|
|
3671
|
+
rocksdb_open_and_compact_options_set_allow_resumption(
|
|
3672
|
+
rocksdb_open_and_compact_options_t* options,
|
|
3673
|
+
unsigned char allow_resumption);
|
|
3674
|
+
|
|
3675
|
+
// OpenAndCompact - main functions
|
|
3676
|
+
extern ROCKSDB_LIBRARY_API char* rocksdb_open_and_compact(
|
|
3677
|
+
const char* db_path, const char* output_directory, const char* input,
|
|
3678
|
+
size_t input_len, size_t* output_len,
|
|
3679
|
+
const rocksdb_compaction_service_options_override_t* override_options,
|
|
3680
|
+
char** errptr);
|
|
3681
|
+
|
|
3682
|
+
extern ROCKSDB_LIBRARY_API char* rocksdb_open_and_compact_with_options(
|
|
3683
|
+
const rocksdb_open_and_compact_options_t* options, const char* db_path,
|
|
3684
|
+
const char* output_directory, const char* input, size_t input_len,
|
|
3685
|
+
size_t* output_len,
|
|
3686
|
+
const rocksdb_compaction_service_options_override_t* override_options,
|
|
3687
|
+
char** errptr);
|
|
3688
|
+
|
|
3443
3689
|
#ifdef __cplusplus
|
|
3444
3690
|
} /* end extern "C" */
|
|
3445
3691
|
#endif
|
|
@@ -284,9 +284,7 @@ class CompactionFilter : public Customizable {
|
|
|
284
284
|
std::string* new_value,
|
|
285
285
|
std::vector<std::pair<std::string, std::string>>* /* new_columns */,
|
|
286
286
|
std::string* skip_until) const {
|
|
287
|
-
#ifdef NDEBUG
|
|
288
287
|
(void)existing_columns;
|
|
289
|
-
#endif
|
|
290
288
|
|
|
291
289
|
assert(!existing_value || !existing_columns);
|
|
292
290
|
assert(value_type == ValueType::kWideColumnEntity || existing_value);
|
|
@@ -247,15 +247,7 @@ class ManagedPtr {
|
|
|
247
247
|
public:
|
|
248
248
|
ManagedPtr() = default;
|
|
249
249
|
ManagedPtr(T* ptr, Owner* owner) : ptr_(ptr), owner_(owner) {}
|
|
250
|
-
~ManagedPtr() {
|
|
251
|
-
if (ptr_ && owner_) {
|
|
252
|
-
if constexpr (std::is_member_function_pointer_v<decltype(Fn)>) {
|
|
253
|
-
(owner_->*Fn)(ptr_);
|
|
254
|
-
} else {
|
|
255
|
-
Fn(owner_, ptr_);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
250
|
+
~ManagedPtr() { Free(); }
|
|
259
251
|
// No copies
|
|
260
252
|
ManagedPtr(const ManagedPtr&) = delete;
|
|
261
253
|
ManagedPtr& operator=(const ManagedPtr&) = delete;
|
|
@@ -267,6 +259,10 @@ class ManagedPtr {
|
|
|
267
259
|
other.owner_ = nullptr;
|
|
268
260
|
}
|
|
269
261
|
ManagedPtr& operator=(ManagedPtr&& other) noexcept {
|
|
262
|
+
if (this == &other) {
|
|
263
|
+
return *this;
|
|
264
|
+
}
|
|
265
|
+
Free();
|
|
270
266
|
ptr_ = other.ptr_;
|
|
271
267
|
owner_ = other.owner_;
|
|
272
268
|
other.ptr_ = nullptr;
|
|
@@ -284,6 +280,16 @@ class ManagedPtr {
|
|
|
284
280
|
private:
|
|
285
281
|
T* ptr_ = nullptr;
|
|
286
282
|
Owner* owner_ = nullptr;
|
|
283
|
+
|
|
284
|
+
void Free() {
|
|
285
|
+
if (ptr_ && owner_) {
|
|
286
|
+
if constexpr (std::is_member_function_pointer_v<decltype(Fn)>) {
|
|
287
|
+
(owner_->*Fn)(ptr_);
|
|
288
|
+
} else {
|
|
289
|
+
Fn(owner_, ptr_);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
287
293
|
};
|
|
288
294
|
|
|
289
295
|
template <typename T, typename comp>
|