@nxtedition/rocksdb 7.1.14 → 7.1.16
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 +1 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
- package/deps/rocksdb/rocksdb/Makefile +91 -11
- package/deps/rocksdb/rocksdb/TARGETS +8 -4
- package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
- package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
- package/deps/rocksdb/rocksdb/db/c.cc +29 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
- package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
- package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
- package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
- package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
- package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
- package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
- package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
- package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
- package/deps/rocksdb/rocksdb/file/filename.h +4 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options.cc +2 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
- package/deps/rocksdb/rocksdb/src.mk +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +26 -29
- package/deps/rocksdb/rocksdb/table/format.h +44 -26
- package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
- package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
- package/deps/rocksdb/rocksdb/util/timer.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
- package/deps/rocksdb/rocksdb.gyp +0 -1
- package/index.js +6 -10
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +0 -168
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc
CHANGED
|
@@ -20,7 +20,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
20
20
|
class DBOptionChangeMigrationTests
|
|
21
21
|
: public DBTestBase,
|
|
22
22
|
public testing::WithParamInterface<
|
|
23
|
-
std::tuple<int, int, bool, int, int, bool>> {
|
|
23
|
+
std::tuple<int, int, bool, int, int, bool, uint64_t>> {
|
|
24
24
|
public:
|
|
25
25
|
DBOptionChangeMigrationTests()
|
|
26
26
|
: DBTestBase("db_option_change_migration_test", /*env_do_fsync=*/true) {
|
|
@@ -31,6 +31,7 @@ class DBOptionChangeMigrationTests
|
|
|
31
31
|
level2_ = std::get<3>(GetParam());
|
|
32
32
|
compaction_style2_ = std::get<4>(GetParam());
|
|
33
33
|
is_dynamic2_ = std::get<5>(GetParam());
|
|
34
|
+
fifo_max_table_files_size_ = std::get<6>(GetParam());
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
// Required if inheriting from testing::WithParamInterface<>
|
|
@@ -44,6 +45,8 @@ class DBOptionChangeMigrationTests
|
|
|
44
45
|
int level2_;
|
|
45
46
|
int compaction_style2_;
|
|
46
47
|
bool is_dynamic2_;
|
|
48
|
+
|
|
49
|
+
uint64_t fifo_max_table_files_size_;
|
|
47
50
|
};
|
|
48
51
|
|
|
49
52
|
#ifndef ROCKSDB_LITE
|
|
@@ -97,6 +100,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate1) {
|
|
|
97
100
|
if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
|
|
98
101
|
new_options.max_open_files = -1;
|
|
99
102
|
}
|
|
103
|
+
if (fifo_max_table_files_size_ != 0) {
|
|
104
|
+
new_options.compaction_options_fifo.max_table_files_size =
|
|
105
|
+
fifo_max_table_files_size_;
|
|
106
|
+
}
|
|
100
107
|
new_options.target_file_size_base = 256 * 1024;
|
|
101
108
|
new_options.num_levels = level2_;
|
|
102
109
|
new_options.max_bytes_for_level_base = 150 * 1024;
|
|
@@ -172,6 +179,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate2) {
|
|
|
172
179
|
if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
|
|
173
180
|
new_options.max_open_files = -1;
|
|
174
181
|
}
|
|
182
|
+
if (fifo_max_table_files_size_ != 0) {
|
|
183
|
+
new_options.compaction_options_fifo.max_table_files_size =
|
|
184
|
+
fifo_max_table_files_size_;
|
|
185
|
+
}
|
|
175
186
|
new_options.target_file_size_base = 256 * 1024;
|
|
176
187
|
new_options.num_levels = level1_;
|
|
177
188
|
new_options.max_bytes_for_level_base = 150 * 1024;
|
|
@@ -251,6 +262,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate3) {
|
|
|
251
262
|
if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
|
|
252
263
|
new_options.max_open_files = -1;
|
|
253
264
|
}
|
|
265
|
+
if (fifo_max_table_files_size_ != 0) {
|
|
266
|
+
new_options.compaction_options_fifo.max_table_files_size =
|
|
267
|
+
fifo_max_table_files_size_;
|
|
268
|
+
}
|
|
254
269
|
new_options.target_file_size_base = 256 * 1024;
|
|
255
270
|
new_options.num_levels = level2_;
|
|
256
271
|
new_options.max_bytes_for_level_base = 150 * 1024;
|
|
@@ -332,6 +347,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
|
|
|
332
347
|
if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
|
|
333
348
|
new_options.max_open_files = -1;
|
|
334
349
|
}
|
|
350
|
+
if (fifo_max_table_files_size_ != 0) {
|
|
351
|
+
new_options.compaction_options_fifo.max_table_files_size =
|
|
352
|
+
fifo_max_table_files_size_;
|
|
353
|
+
}
|
|
335
354
|
new_options.target_file_size_base = 256 * 1024;
|
|
336
355
|
new_options.num_levels = level1_;
|
|
337
356
|
new_options.max_bytes_for_level_base = 150 * 1024;
|
|
@@ -357,21 +376,100 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
|
|
|
357
376
|
|
|
358
377
|
INSTANTIATE_TEST_CASE_P(
|
|
359
378
|
DBOptionChangeMigrationTests, DBOptionChangeMigrationTests,
|
|
360
|
-
::testing::Values(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
379
|
+
::testing::Values(
|
|
380
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
381
|
+
false /* is dynamic leveling in old option */,
|
|
382
|
+
4 /* old num_levels */, 0 /* new compaction style */,
|
|
383
|
+
false /* is dynamic leveling in new option */,
|
|
384
|
+
0 /*fifo max_table_files_size*/),
|
|
385
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
386
|
+
true /* is dynamic leveling in old option */,
|
|
387
|
+
4 /* old num_levels */, 0 /* new compaction style */,
|
|
388
|
+
true /* is dynamic leveling in new option */,
|
|
389
|
+
0 /*fifo max_table_files_size*/),
|
|
390
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
391
|
+
true /* is dynamic leveling in old option */,
|
|
392
|
+
4 /* old num_levels */, 0 /* new compaction style */,
|
|
393
|
+
false, 0 /*fifo max_table_files_size*/),
|
|
394
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
395
|
+
false /* is dynamic leveling in old option */,
|
|
396
|
+
4 /* old num_levels */, 0 /* new compaction style */,
|
|
397
|
+
true /* is dynamic leveling in new option */,
|
|
398
|
+
0 /*fifo max_table_files_size*/),
|
|
399
|
+
std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
|
|
400
|
+
false /* is dynamic leveling in old option */,
|
|
401
|
+
4 /* old num_levels */, 1 /* new compaction style */,
|
|
402
|
+
false /* is dynamic leveling in new option */,
|
|
403
|
+
0 /*fifo max_table_files_size*/),
|
|
404
|
+
std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
|
|
405
|
+
false /* is dynamic leveling in old option */,
|
|
406
|
+
4 /* old num_levels */, 1 /* new compaction style */,
|
|
407
|
+
false /* is dynamic leveling in new option */,
|
|
408
|
+
0 /*fifo max_table_files_size*/),
|
|
409
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
410
|
+
false /* is dynamic leveling in old option */,
|
|
411
|
+
4 /* old num_levels */, 1 /* new compaction style */,
|
|
412
|
+
false /* is dynamic leveling in new option */,
|
|
413
|
+
0 /*fifo max_table_files_size*/),
|
|
414
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
415
|
+
false /* is dynamic leveling in old option */,
|
|
416
|
+
1 /* old num_levels */, 1 /* new compaction style */,
|
|
417
|
+
false /* is dynamic leveling in new option */,
|
|
418
|
+
0 /*fifo max_table_files_size*/),
|
|
419
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
420
|
+
true /* is dynamic leveling in old option */,
|
|
421
|
+
4 /* old num_levels */, 1 /* new compaction style */,
|
|
422
|
+
false /* is dynamic leveling in new option */,
|
|
423
|
+
0 /*fifo max_table_files_size*/),
|
|
424
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
425
|
+
true /* is dynamic leveling in old option */,
|
|
426
|
+
1 /* old num_levels */, 1 /* new compaction style */,
|
|
427
|
+
false /* is dynamic leveling in new option */,
|
|
428
|
+
0 /*fifo max_table_files_size*/),
|
|
429
|
+
std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
|
|
430
|
+
false /* is dynamic leveling in old option */,
|
|
431
|
+
4 /* old num_levels */, 0 /* new compaction style */,
|
|
432
|
+
false /* is dynamic leveling in new option */,
|
|
433
|
+
0 /*fifo max_table_files_size*/),
|
|
434
|
+
std::make_tuple(4 /* old num_levels */, 0 /* old compaction style */,
|
|
435
|
+
false /* is dynamic leveling in old option */,
|
|
436
|
+
1 /* old num_levels */, 2 /* new compaction style */,
|
|
437
|
+
false /* is dynamic leveling in new option */,
|
|
438
|
+
0 /*fifo max_table_files_size*/),
|
|
439
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
440
|
+
true /* is dynamic leveling in old option */,
|
|
441
|
+
2 /* old num_levels */, 2 /* new compaction style */,
|
|
442
|
+
false /* is dynamic leveling in new option */,
|
|
443
|
+
0 /*fifo max_table_files_size*/),
|
|
444
|
+
std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
|
|
445
|
+
false /* is dynamic leveling in old option */,
|
|
446
|
+
3 /* old num_levels */, 2 /* new compaction style */,
|
|
447
|
+
false /* is dynamic leveling in new option */,
|
|
448
|
+
0 /*fifo max_table_files_size*/),
|
|
449
|
+
std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
|
|
450
|
+
false /* is dynamic leveling in old option */,
|
|
451
|
+
4 /* old num_levels */, 2 /* new compaction style */,
|
|
452
|
+
false /* is dynamic leveling in new option */, 0),
|
|
453
|
+
std::make_tuple(4 /* old num_levels */, 0 /* old compaction style */,
|
|
454
|
+
false /* is dynamic leveling in old option */,
|
|
455
|
+
1 /* old num_levels */, 2 /* new compaction style */,
|
|
456
|
+
false /* is dynamic leveling in new option */,
|
|
457
|
+
5 * 1024 * 1024 /*fifo max_table_files_size*/),
|
|
458
|
+
std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
|
|
459
|
+
true /* is dynamic leveling in old option */,
|
|
460
|
+
2 /* old num_levels */, 2 /* new compaction style */,
|
|
461
|
+
false /* is dynamic leveling in new option */,
|
|
462
|
+
5 * 1024 * 1024 /*fifo max_table_files_size*/),
|
|
463
|
+
std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
|
|
464
|
+
false /* is dynamic leveling in old option */,
|
|
465
|
+
3 /* old num_levels */, 2 /* new compaction style */,
|
|
466
|
+
false /* is dynamic leveling in new option */,
|
|
467
|
+
5 * 1024 * 1024 /*fifo max_table_files_size*/),
|
|
468
|
+
std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
|
|
469
|
+
false /* is dynamic leveling in old option */,
|
|
470
|
+
4 /* old num_levels */, 2 /* new compaction style */,
|
|
471
|
+
false /* is dynamic leveling in new option */,
|
|
472
|
+
5 * 1024 * 1024 /*fifo max_table_files_size*/)));
|
|
375
473
|
|
|
376
474
|
class DBOptionChangeMigrationTest : public DBTestBase {
|
|
377
475
|
public:
|
|
@@ -140,7 +140,7 @@ TEST_F(PersistentCacheTierTest, DISABLED_BlockCacheInsertWithFileCreateError) {
|
|
|
140
140
|
// Travis is unable to handle the normal version of the tests running out of
|
|
141
141
|
// fds, out of space and timeouts. This is an easier version of the test
|
|
142
142
|
// specifically written for Travis
|
|
143
|
-
TEST_F(PersistentCacheTierTest,
|
|
143
|
+
TEST_F(PersistentCacheTierTest, DISABLED_BasicTest) {
|
|
144
144
|
cache_ = std::make_shared<VolatileCacheTier>();
|
|
145
145
|
RunInsertTest(/*nthreads=*/1, /*max_keys=*/1024);
|
|
146
146
|
|
|
@@ -166,6 +166,65 @@ TEST_P(OptimisticTransactionTest, WriteConflictTest2) {
|
|
|
166
166
|
delete txn;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
TEST_P(OptimisticTransactionTest, WriteConflictTest3) {
|
|
170
|
+
ASSERT_OK(txn_db->Put(WriteOptions(), "foo", "bar"));
|
|
171
|
+
|
|
172
|
+
Transaction* txn = txn_db->BeginTransaction(WriteOptions());
|
|
173
|
+
ASSERT_NE(txn, nullptr);
|
|
174
|
+
|
|
175
|
+
std::string value;
|
|
176
|
+
ASSERT_OK(txn->GetForUpdate(ReadOptions(), "foo", &value));
|
|
177
|
+
ASSERT_EQ(value, "bar");
|
|
178
|
+
ASSERT_OK(txn->Merge("foo", "bar3"));
|
|
179
|
+
|
|
180
|
+
// Merge outside of a transaction should conflict with the previous merge
|
|
181
|
+
ASSERT_OK(txn_db->Merge(WriteOptions(), "foo", "bar2"));
|
|
182
|
+
ASSERT_OK(txn_db->Get(ReadOptions(), "foo", &value));
|
|
183
|
+
ASSERT_EQ(value, "bar2");
|
|
184
|
+
|
|
185
|
+
ASSERT_EQ(1, txn->GetNumKeys());
|
|
186
|
+
|
|
187
|
+
Status s = txn->Commit();
|
|
188
|
+
EXPECT_TRUE(s.IsBusy()); // Txn should not commit
|
|
189
|
+
|
|
190
|
+
// Verify that transaction did not write anything
|
|
191
|
+
ASSERT_OK(txn_db->Get(ReadOptions(), "foo", &value));
|
|
192
|
+
ASSERT_EQ(value, "bar2");
|
|
193
|
+
|
|
194
|
+
delete txn;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
TEST_P(OptimisticTransactionTest, WriteConflict4) {
|
|
198
|
+
ASSERT_OK(txn_db->Put(WriteOptions(), "foo", "bar"));
|
|
199
|
+
|
|
200
|
+
Transaction* txn = txn_db->BeginTransaction(WriteOptions());
|
|
201
|
+
ASSERT_NE(txn, nullptr);
|
|
202
|
+
|
|
203
|
+
std::string value;
|
|
204
|
+
ASSERT_OK(txn->GetForUpdate(ReadOptions(), "foo", &value));
|
|
205
|
+
ASSERT_EQ(value, "bar");
|
|
206
|
+
ASSERT_OK(txn->Merge("foo", "bar3"));
|
|
207
|
+
|
|
208
|
+
// Range delete outside of a transaction should conflict with the previous
|
|
209
|
+
// merge inside txn
|
|
210
|
+
auto* dbimpl = static_cast_with_check<DBImpl>(txn_db->GetRootDB());
|
|
211
|
+
ColumnFamilyHandle* default_cf = dbimpl->DefaultColumnFamily();
|
|
212
|
+
ASSERT_OK(dbimpl->DeleteRange(WriteOptions(), default_cf, "foo", "foo1"));
|
|
213
|
+
Status s = txn_db->Get(ReadOptions(), "foo", &value);
|
|
214
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
215
|
+
|
|
216
|
+
ASSERT_EQ(1, txn->GetNumKeys());
|
|
217
|
+
|
|
218
|
+
s = txn->Commit();
|
|
219
|
+
EXPECT_TRUE(s.IsBusy()); // Txn should not commit
|
|
220
|
+
|
|
221
|
+
// Verify that transaction did not write anything
|
|
222
|
+
s = txn_db->Get(ReadOptions(), "foo", &value);
|
|
223
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
224
|
+
|
|
225
|
+
delete txn;
|
|
226
|
+
}
|
|
227
|
+
|
|
169
228
|
TEST_P(OptimisticTransactionTest, ReadConflictTest) {
|
|
170
229
|
WriteOptions write_options;
|
|
171
230
|
ReadOptions read_options, snapshot_read_options;
|
|
@@ -100,6 +100,9 @@ void PessimisticTransaction::Initialize(const TransactionOptions& txn_options) {
|
|
|
100
100
|
use_only_the_last_commit_time_batch_for_recovery_ =
|
|
101
101
|
txn_options.use_only_the_last_commit_time_batch_for_recovery;
|
|
102
102
|
skip_prepare_ = txn_options.skip_prepare;
|
|
103
|
+
|
|
104
|
+
read_timestamp_ = kMaxTxnTimestamp;
|
|
105
|
+
commit_timestamp_ = kMaxTxnTimestamp;
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
PessimisticTransaction::~PessimisticTransaction() {
|
|
@@ -115,6 +115,45 @@ TEST_P(TransactionTest, WithoutCommitTs) {
|
|
|
115
115
|
ASSERT_TRUE(s.IsInvalidArgument());
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
TEST_P(TransactionTest, ReuseExistingTxn) {
|
|
119
|
+
Transaction* txn = db->BeginTransaction(WriteOptions(), TransactionOptions());
|
|
120
|
+
assert(txn);
|
|
121
|
+
ASSERT_OK(txn->SetName("txn0"));
|
|
122
|
+
ASSERT_OK(txn->Put("a", "v1"));
|
|
123
|
+
ASSERT_OK(txn->Prepare());
|
|
124
|
+
|
|
125
|
+
auto notifier = std::make_shared<TsCheckingTxnNotifier>();
|
|
126
|
+
std::shared_ptr<const Snapshot> snapshot1;
|
|
127
|
+
Status s =
|
|
128
|
+
txn->CommitAndTryCreateSnapshot(notifier, /*commit_ts=*/100, &snapshot1);
|
|
129
|
+
ASSERT_OK(s);
|
|
130
|
+
ASSERT_EQ(100, snapshot1->GetTimestamp());
|
|
131
|
+
|
|
132
|
+
Transaction* txn1 =
|
|
133
|
+
db->BeginTransaction(WriteOptions(), TransactionOptions(), txn);
|
|
134
|
+
assert(txn1 == txn);
|
|
135
|
+
ASSERT_OK(txn1->SetName("txn1"));
|
|
136
|
+
ASSERT_OK(txn->Put("a", "v2"));
|
|
137
|
+
ASSERT_OK(txn->Prepare());
|
|
138
|
+
std::shared_ptr<const Snapshot> snapshot2;
|
|
139
|
+
s = txn->CommitAndTryCreateSnapshot(notifier, /*commit_ts=*/110, &snapshot2);
|
|
140
|
+
ASSERT_OK(s);
|
|
141
|
+
ASSERT_EQ(110, snapshot2->GetTimestamp());
|
|
142
|
+
delete txn;
|
|
143
|
+
|
|
144
|
+
{
|
|
145
|
+
std::string value;
|
|
146
|
+
ReadOptions read_opts;
|
|
147
|
+
read_opts.snapshot = snapshot1.get();
|
|
148
|
+
ASSERT_OK(db->Get(read_opts, "a", &value));
|
|
149
|
+
ASSERT_EQ("v1", value);
|
|
150
|
+
|
|
151
|
+
read_opts.snapshot = snapshot2.get();
|
|
152
|
+
ASSERT_OK(db->Get(read_opts, "a", &value));
|
|
153
|
+
ASSERT_EQ("v2", value);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
118
157
|
TEST_P(TransactionTest, CreateSnapshotWhenCommit) {
|
|
119
158
|
std::unique_ptr<Transaction> txn(
|
|
120
159
|
db->BeginTransaction(WriteOptions(), TransactionOptions()));
|
package/deps/rocksdb/rocksdb.gyp
CHANGED
|
@@ -234,7 +234,6 @@
|
|
|
234
234
|
"rocksdb/db/merge_helper.cc",
|
|
235
235
|
"rocksdb/db/merge_operator.cc",
|
|
236
236
|
"rocksdb/db/output_validator.cc",
|
|
237
|
-
"rocksdb/db/periodic_work_scheduler.cc",
|
|
238
237
|
"rocksdb/db/range_del_aggregator.cc",
|
|
239
238
|
"rocksdb/db/range_tombstone_fragmenter.cc",
|
|
240
239
|
"rocksdb/db/repair.cc",
|
package/index.js
CHANGED
|
@@ -360,7 +360,7 @@ class RocksLevel extends AbstractLevel {
|
|
|
360
360
|
const buffer = new Readable({
|
|
361
361
|
signal: ac.signal,
|
|
362
362
|
objectMode: true,
|
|
363
|
-
readableHighWaterMark:
|
|
363
|
+
readableHighWaterMark: 8192,
|
|
364
364
|
construct (callback) {
|
|
365
365
|
this._next = (update) => {
|
|
366
366
|
if (!this.push(update)) {
|
|
@@ -389,7 +389,7 @@ class RocksLevel extends AbstractLevel {
|
|
|
389
389
|
...options,
|
|
390
390
|
signal: ac.signal,
|
|
391
391
|
// HACK: https://github.com/facebook/rocksdb/issues/10476
|
|
392
|
-
since: Math.max(0, options.since -
|
|
392
|
+
since: Math.max(0, options.since - 8192)
|
|
393
393
|
})) {
|
|
394
394
|
if (first) {
|
|
395
395
|
if (update.sequence > since) {
|
|
@@ -398,10 +398,8 @@ class RocksLevel extends AbstractLevel {
|
|
|
398
398
|
first = false
|
|
399
399
|
}
|
|
400
400
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
since = update.sequence + update.count
|
|
404
|
-
}
|
|
401
|
+
yield update
|
|
402
|
+
since = update.sequence + update.count
|
|
405
403
|
}
|
|
406
404
|
}
|
|
407
405
|
} catch (err) {
|
|
@@ -422,10 +420,8 @@ class RocksLevel extends AbstractLevel {
|
|
|
422
420
|
}
|
|
423
421
|
first = false
|
|
424
422
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
since = update.sequence + update.count
|
|
428
|
-
}
|
|
423
|
+
yield update
|
|
424
|
+
since = update.sequence + update.count
|
|
429
425
|
}
|
|
430
426
|
}
|
|
431
427
|
} finally {
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
2
|
-
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
-
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
-
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
-
|
|
6
|
-
#include "db/periodic_work_scheduler.h"
|
|
7
|
-
|
|
8
|
-
#include "db/db_impl/db_impl.h"
|
|
9
|
-
#include "rocksdb/system_clock.h"
|
|
10
|
-
|
|
11
|
-
#ifndef ROCKSDB_LITE
|
|
12
|
-
namespace ROCKSDB_NAMESPACE {
|
|
13
|
-
|
|
14
|
-
const std::string PeriodicWorkTaskNames::kDumpStats = "dump_st";
|
|
15
|
-
const std::string PeriodicWorkTaskNames::kPersistStats = "pst_st";
|
|
16
|
-
const std::string PeriodicWorkTaskNames::kFlushInfoLog = "flush_info_log";
|
|
17
|
-
const std::string PeriodicWorkTaskNames::kRecordSeqnoTime = "record_seq_time";
|
|
18
|
-
|
|
19
|
-
PeriodicWorkScheduler::PeriodicWorkScheduler(
|
|
20
|
-
const std::shared_ptr<SystemClock>& clock) {
|
|
21
|
-
timer = std::unique_ptr<Timer>(new Timer(clock.get()));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
Status PeriodicWorkScheduler::Register(DBImpl* dbi,
|
|
25
|
-
unsigned int stats_dump_period_sec,
|
|
26
|
-
unsigned int stats_persist_period_sec) {
|
|
27
|
-
MutexLock l(&timer_mu_);
|
|
28
|
-
static std::atomic<uint64_t> initial_delay(0);
|
|
29
|
-
timer->Start();
|
|
30
|
-
if (stats_dump_period_sec > 0) {
|
|
31
|
-
bool succeeded = timer->Add(
|
|
32
|
-
[dbi]() { dbi->DumpStats(); },
|
|
33
|
-
GetTaskName(dbi, PeriodicWorkTaskNames::kDumpStats),
|
|
34
|
-
initial_delay.fetch_add(1) %
|
|
35
|
-
static_cast<uint64_t>(stats_dump_period_sec) * kMicrosInSecond,
|
|
36
|
-
static_cast<uint64_t>(stats_dump_period_sec) * kMicrosInSecond);
|
|
37
|
-
if (!succeeded) {
|
|
38
|
-
return Status::Aborted("Unable to add periodic task DumpStats");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (stats_persist_period_sec > 0) {
|
|
42
|
-
bool succeeded = timer->Add(
|
|
43
|
-
[dbi]() { dbi->PersistStats(); },
|
|
44
|
-
GetTaskName(dbi, PeriodicWorkTaskNames::kPersistStats),
|
|
45
|
-
initial_delay.fetch_add(1) %
|
|
46
|
-
static_cast<uint64_t>(stats_persist_period_sec) * kMicrosInSecond,
|
|
47
|
-
static_cast<uint64_t>(stats_persist_period_sec) * kMicrosInSecond);
|
|
48
|
-
if (!succeeded) {
|
|
49
|
-
return Status::Aborted("Unable to add periodic task PersistStats");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
bool succeeded =
|
|
53
|
-
timer->Add([dbi]() { dbi->FlushInfoLog(); },
|
|
54
|
-
GetTaskName(dbi, PeriodicWorkTaskNames::kFlushInfoLog),
|
|
55
|
-
initial_delay.fetch_add(1) % kDefaultFlushInfoLogPeriodSec *
|
|
56
|
-
kMicrosInSecond,
|
|
57
|
-
kDefaultFlushInfoLogPeriodSec * kMicrosInSecond);
|
|
58
|
-
if (!succeeded) {
|
|
59
|
-
return Status::Aborted("Unable to add periodic task FlushInfoLog");
|
|
60
|
-
}
|
|
61
|
-
return Status::OK();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
Status PeriodicWorkScheduler::RegisterRecordSeqnoTimeWorker(
|
|
65
|
-
DBImpl* dbi, uint64_t record_cadence_sec) {
|
|
66
|
-
MutexLock l(&timer_mu_);
|
|
67
|
-
timer->Start();
|
|
68
|
-
static std::atomic_uint64_t initial_delay(0);
|
|
69
|
-
bool succeeded = timer->Add(
|
|
70
|
-
[dbi]() { dbi->RecordSeqnoToTimeMapping(); },
|
|
71
|
-
GetTaskName(dbi, PeriodicWorkTaskNames::kRecordSeqnoTime),
|
|
72
|
-
initial_delay.fetch_add(1) % record_cadence_sec * kMicrosInSecond,
|
|
73
|
-
record_cadence_sec * kMicrosInSecond);
|
|
74
|
-
if (!succeeded) {
|
|
75
|
-
return Status::NotSupported(
|
|
76
|
-
"Updating seqno to time worker cadence is not supported yet");
|
|
77
|
-
}
|
|
78
|
-
return Status::OK();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
void PeriodicWorkScheduler::UnregisterRecordSeqnoTimeWorker(DBImpl* dbi) {
|
|
82
|
-
MutexLock l(&timer_mu_);
|
|
83
|
-
timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kRecordSeqnoTime));
|
|
84
|
-
if (!timer->HasPendingTask()) {
|
|
85
|
-
timer->Shutdown();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
void PeriodicWorkScheduler::Unregister(DBImpl* dbi) {
|
|
90
|
-
MutexLock l(&timer_mu_);
|
|
91
|
-
timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kDumpStats));
|
|
92
|
-
timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kPersistStats));
|
|
93
|
-
timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kFlushInfoLog));
|
|
94
|
-
if (!timer->HasPendingTask()) {
|
|
95
|
-
timer->Shutdown();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
PeriodicWorkScheduler* PeriodicWorkScheduler::Default() {
|
|
100
|
-
// Always use the default SystemClock for the scheduler, as we only use the
|
|
101
|
-
// NowMicros which is the same for all clocks. The Env could only be
|
|
102
|
-
// overridden in test.
|
|
103
|
-
static PeriodicWorkScheduler scheduler(SystemClock::Default());
|
|
104
|
-
return &scheduler;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
std::string PeriodicWorkScheduler::GetTaskName(
|
|
108
|
-
const DBImpl* dbi, const std::string& func_name) const {
|
|
109
|
-
std::string db_session_id;
|
|
110
|
-
// TODO: Should this error be ignored?
|
|
111
|
-
dbi->GetDbSessionId(db_session_id).PermitUncheckedError();
|
|
112
|
-
return db_session_id + ":" + func_name;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
#ifndef NDEBUG
|
|
116
|
-
|
|
117
|
-
// Get the static scheduler. For a new SystemClock, it needs to re-create the
|
|
118
|
-
// internal timer, so only re-create it when there's no running task. Otherwise,
|
|
119
|
-
// return the existing scheduler. Which means if the unittest needs to update
|
|
120
|
-
// MockClock, Close all db instances and then re-open them.
|
|
121
|
-
PeriodicWorkTestScheduler* PeriodicWorkTestScheduler::Default(
|
|
122
|
-
const std::shared_ptr<SystemClock>& clock) {
|
|
123
|
-
static PeriodicWorkTestScheduler scheduler(clock);
|
|
124
|
-
static port::Mutex mutex;
|
|
125
|
-
{
|
|
126
|
-
MutexLock l(&mutex);
|
|
127
|
-
if (scheduler.timer.get() != nullptr &&
|
|
128
|
-
scheduler.timer->TEST_GetPendingTaskNum() == 0) {
|
|
129
|
-
{
|
|
130
|
-
MutexLock timer_mu_guard(&scheduler.timer_mu_);
|
|
131
|
-
scheduler.timer->Shutdown();
|
|
132
|
-
}
|
|
133
|
-
scheduler.timer.reset(new Timer(clock.get()));
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return &scheduler;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
void PeriodicWorkTestScheduler::TEST_WaitForRun(
|
|
140
|
-
std::function<void()> callback) const {
|
|
141
|
-
if (timer != nullptr) {
|
|
142
|
-
timer->TEST_WaitForRun(callback);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
size_t PeriodicWorkTestScheduler::TEST_GetValidTaskNum() const {
|
|
147
|
-
if (timer != nullptr) {
|
|
148
|
-
return timer->TEST_GetPendingTaskNum();
|
|
149
|
-
}
|
|
150
|
-
return 0;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
bool PeriodicWorkTestScheduler::TEST_HasValidTask(
|
|
154
|
-
const DBImpl* dbi, const std::string& func_name) const {
|
|
155
|
-
if (timer == nullptr) {
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
return timer->TEST_HasVaildTask(GetTaskName(dbi, func_name));
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
PeriodicWorkTestScheduler::PeriodicWorkTestScheduler(
|
|
162
|
-
const std::shared_ptr<SystemClock>& clock)
|
|
163
|
-
: PeriodicWorkScheduler(clock) {}
|
|
164
|
-
|
|
165
|
-
#endif // !NDEBUG
|
|
166
|
-
} // namespace ROCKSDB_NAMESPACE
|
|
167
|
-
|
|
168
|
-
#endif // ROCKSDB_LITE
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
2
|
-
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
-
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
-
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
-
|
|
6
|
-
#pragma once
|
|
7
|
-
|
|
8
|
-
#ifndef ROCKSDB_LITE
|
|
9
|
-
|
|
10
|
-
#include "db/db_impl/db_impl.h"
|
|
11
|
-
#include "util/timer.h"
|
|
12
|
-
|
|
13
|
-
namespace ROCKSDB_NAMESPACE {
|
|
14
|
-
class SystemClock;
|
|
15
|
-
|
|
16
|
-
// PeriodicWorkScheduler is a singleton object, which is scheduling/running
|
|
17
|
-
// DumpStats(), PersistStats(), and FlushInfoLog() for all DB instances. All DB
|
|
18
|
-
// instances use the same object from `Default()`.
|
|
19
|
-
//
|
|
20
|
-
// Internally, it uses a single threaded timer object to run the periodic work
|
|
21
|
-
// functions. Timer thread will always be started since the info log flushing
|
|
22
|
-
// cannot be disabled.
|
|
23
|
-
class PeriodicWorkScheduler {
|
|
24
|
-
public:
|
|
25
|
-
static PeriodicWorkScheduler* Default();
|
|
26
|
-
|
|
27
|
-
PeriodicWorkScheduler() = delete;
|
|
28
|
-
PeriodicWorkScheduler(const PeriodicWorkScheduler&) = delete;
|
|
29
|
-
PeriodicWorkScheduler(PeriodicWorkScheduler&&) = delete;
|
|
30
|
-
PeriodicWorkScheduler& operator=(const PeriodicWorkScheduler&) = delete;
|
|
31
|
-
PeriodicWorkScheduler& operator=(PeriodicWorkScheduler&&) = delete;
|
|
32
|
-
|
|
33
|
-
Status Register(DBImpl* dbi, unsigned int stats_dump_period_sec,
|
|
34
|
-
unsigned int stats_persist_period_sec);
|
|
35
|
-
Status RegisterRecordSeqnoTimeWorker(DBImpl* dbi, uint64_t record_cadence);
|
|
36
|
-
|
|
37
|
-
void Unregister(DBImpl* dbi);
|
|
38
|
-
void UnregisterRecordSeqnoTimeWorker(DBImpl* dbi);
|
|
39
|
-
|
|
40
|
-
// Periodically flush info log out of application buffer at a low frequency.
|
|
41
|
-
// This improves debuggability in case of RocksDB hanging since it ensures the
|
|
42
|
-
// log messages leading up to the hang will eventually become visible in the
|
|
43
|
-
// log.
|
|
44
|
-
static const uint64_t kDefaultFlushInfoLogPeriodSec = 10;
|
|
45
|
-
|
|
46
|
-
protected:
|
|
47
|
-
std::unique_ptr<Timer> timer;
|
|
48
|
-
// `timer_mu_` serves two purposes currently:
|
|
49
|
-
// (1) to ensure calls to `Start()` and `Shutdown()` are serialized, as
|
|
50
|
-
// they are currently not implemented in a thread-safe way; and
|
|
51
|
-
// (2) to ensure the `Timer::Add()`s and `Timer::Start()` run atomically, and
|
|
52
|
-
// the `Timer::Cancel()`s and `Timer::Shutdown()` run atomically.
|
|
53
|
-
port::Mutex timer_mu_;
|
|
54
|
-
|
|
55
|
-
explicit PeriodicWorkScheduler(const std::shared_ptr<SystemClock>& clock);
|
|
56
|
-
|
|
57
|
-
// Get the unique task name (prefix with db session id)
|
|
58
|
-
std::string GetTaskName(const DBImpl* dbi,
|
|
59
|
-
const std::string& func_name) const;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
#ifndef NDEBUG
|
|
63
|
-
// PeriodicWorkTestScheduler is for unittest, which can specify the SystemClock
|
|
64
|
-
// It also contains functions for unittest.
|
|
65
|
-
class PeriodicWorkTestScheduler : public PeriodicWorkScheduler {
|
|
66
|
-
public:
|
|
67
|
-
static PeriodicWorkTestScheduler* Default(
|
|
68
|
-
const std::shared_ptr<SystemClock>& clock);
|
|
69
|
-
|
|
70
|
-
void TEST_WaitForRun(std::function<void()> callback) const;
|
|
71
|
-
|
|
72
|
-
size_t TEST_GetValidTaskNum() const;
|
|
73
|
-
|
|
74
|
-
bool TEST_HasValidTask(const DBImpl* dbi, const std::string& func_name) const;
|
|
75
|
-
|
|
76
|
-
private:
|
|
77
|
-
explicit PeriodicWorkTestScheduler(const std::shared_ptr<SystemClock>& clock);
|
|
78
|
-
};
|
|
79
|
-
#endif // !NDEBUG
|
|
80
|
-
|
|
81
|
-
struct PeriodicWorkTaskNames {
|
|
82
|
-
static const std::string kDumpStats;
|
|
83
|
-
static const std::string kPersistStats;
|
|
84
|
-
static const std::string kFlushInfoLog;
|
|
85
|
-
static const std::string kRecordSeqnoTime;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
} // namespace ROCKSDB_NAMESPACE
|
|
89
|
-
|
|
90
|
-
#endif // ROCKSDB_LITE
|