@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
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
|
|
10
10
|
#pragma once
|
|
11
11
|
|
|
12
|
+
#include "db/range_del_aggregator.h"
|
|
12
13
|
#include "rocksdb/slice.h"
|
|
13
14
|
#include "rocksdb/types.h"
|
|
14
15
|
|
|
15
16
|
namespace ROCKSDB_NAMESPACE {
|
|
16
17
|
|
|
17
18
|
class Arena;
|
|
19
|
+
class ArenaWrappedDBIter;
|
|
18
20
|
class InternalKeyComparator;
|
|
19
21
|
|
|
20
22
|
template <class TValue>
|
|
@@ -36,6 +38,8 @@ extern InternalIterator* NewMergingIterator(
|
|
|
36
38
|
class MergingIterator;
|
|
37
39
|
|
|
38
40
|
// A builder class to build a merging iterator by adding iterators one by one.
|
|
41
|
+
// User should call only one of AddIterator() or AddPointAndTombstoneIterator()
|
|
42
|
+
// exclusively for the same builder.
|
|
39
43
|
class MergeIteratorBuilder {
|
|
40
44
|
public:
|
|
41
45
|
// comparator: the comparator used in merging comparator
|
|
@@ -47,18 +51,41 @@ class MergeIteratorBuilder {
|
|
|
47
51
|
// Add iter to the merging iterator.
|
|
48
52
|
void AddIterator(InternalIterator* iter);
|
|
49
53
|
|
|
54
|
+
// Add a point key iterator and a range tombstone iterator.
|
|
55
|
+
// `tombstone_iter_ptr` should and only be set by LevelIterator.
|
|
56
|
+
// *tombstone_iter_ptr will be set to where the merging iterator stores
|
|
57
|
+
// `tombstone_iter` when MergeIteratorBuilder::Finish() is called. This is
|
|
58
|
+
// used by LevelIterator to update range tombstone iters when switching to a
|
|
59
|
+
// different SST file. If a single point iterator with a nullptr range
|
|
60
|
+
// tombstone iterator is provided, and the point iterator is not a level
|
|
61
|
+
// iterator, then this builder will return the point iterator directly,
|
|
62
|
+
// instead of creating a merging iterator on top of it. Internally, if all
|
|
63
|
+
// point iterators are not LevelIterator, then range tombstone iterator is
|
|
64
|
+
// only added to the merging iter if there is a non-null `tombstone_iter`.
|
|
65
|
+
void AddPointAndTombstoneIterator(
|
|
66
|
+
InternalIterator* point_iter, TruncatedRangeDelIterator* tombstone_iter,
|
|
67
|
+
TruncatedRangeDelIterator*** tombstone_iter_ptr = nullptr);
|
|
68
|
+
|
|
50
69
|
// Get arena used to build the merging iterator. It is called one a child
|
|
51
70
|
// iterator needs to be allocated.
|
|
52
71
|
Arena* GetArena() { return arena; }
|
|
53
72
|
|
|
54
73
|
// Return the result merging iterator.
|
|
55
|
-
|
|
74
|
+
// If db_iter is not nullptr, then db_iter->SetMemtableRangetombstoneIter()
|
|
75
|
+
// will be called with pointer to where the merging iterator
|
|
76
|
+
// stores the memtable range tombstone iterator.
|
|
77
|
+
// This is used for DB iterator to refresh memtable range tombstones.
|
|
78
|
+
InternalIterator* Finish(ArenaWrappedDBIter* db_iter = nullptr);
|
|
56
79
|
|
|
57
80
|
private:
|
|
58
81
|
MergingIterator* merge_iter;
|
|
59
82
|
InternalIterator* first_iter;
|
|
60
83
|
bool use_merging_iter;
|
|
61
84
|
Arena* arena;
|
|
85
|
+
// Used to set LevelIterator.range_tombstone_iter_.
|
|
86
|
+
// See AddRangeTombstoneIterator() implementation for more detail.
|
|
87
|
+
std::vector<std::pair<size_t, TruncatedRangeDelIterator***>>
|
|
88
|
+
range_del_iter_ptrs_;
|
|
62
89
|
};
|
|
63
90
|
|
|
64
91
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -196,10 +196,11 @@ bool NotifyCollectTableCollectorsOnAdd(
|
|
|
196
196
|
|
|
197
197
|
void NotifyCollectTableCollectorsOnBlockAdd(
|
|
198
198
|
const std::vector<std::unique_ptr<IntTblPropCollector>>& collectors,
|
|
199
|
-
const uint64_t
|
|
199
|
+
const uint64_t block_uncomp_bytes,
|
|
200
|
+
const uint64_t block_compressed_bytes_fast,
|
|
200
201
|
const uint64_t block_compressed_bytes_slow) {
|
|
201
202
|
for (auto& collector : collectors) {
|
|
202
|
-
collector->BlockAdd(
|
|
203
|
+
collector->BlockAdd(block_uncomp_bytes, block_compressed_bytes_fast,
|
|
203
204
|
block_compressed_bytes_slow);
|
|
204
205
|
}
|
|
205
206
|
}
|
|
@@ -92,7 +92,7 @@ bool NotifyCollectTableCollectorsOnAdd(
|
|
|
92
92
|
|
|
93
93
|
void NotifyCollectTableCollectorsOnBlockAdd(
|
|
94
94
|
const std::vector<std::unique_ptr<IntTblPropCollector>>& collectors,
|
|
95
|
-
uint64_t
|
|
95
|
+
uint64_t block_uncomp_bytes, uint64_t block_compressed_bytes_fast,
|
|
96
96
|
uint64_t block_compressed_bytes_slow);
|
|
97
97
|
|
|
98
98
|
// NotifyCollectTableCollectorsOnFinish() triggers the `Finish` event for all
|
|
@@ -11,7 +11,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
11
11
|
|
|
12
12
|
const PersistentCacheOptions PersistentCacheOptions::kEmpty;
|
|
13
13
|
|
|
14
|
-
void PersistentCacheHelper::
|
|
14
|
+
void PersistentCacheHelper::InsertSerialized(
|
|
15
15
|
const PersistentCacheOptions& cache_options, const BlockHandle& handle,
|
|
16
16
|
const char* data, const size_t size) {
|
|
17
17
|
assert(cache_options.persistent_cache);
|
|
@@ -24,7 +24,7 @@ void PersistentCacheHelper::InsertRawPage(
|
|
|
24
24
|
.PermitUncheckedError();
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
void PersistentCacheHelper::
|
|
27
|
+
void PersistentCacheHelper::InsertUncompressed(
|
|
28
28
|
const PersistentCacheOptions& cache_options, const BlockHandle& handle,
|
|
29
29
|
const BlockContents& contents) {
|
|
30
30
|
assert(cache_options.persistent_cache);
|
|
@@ -42,11 +42,11 @@ void PersistentCacheHelper::InsertUncompressedPage(
|
|
|
42
42
|
;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
Status PersistentCacheHelper::
|
|
45
|
+
Status PersistentCacheHelper::LookupSerialized(
|
|
46
46
|
const PersistentCacheOptions& cache_options, const BlockHandle& handle,
|
|
47
|
-
std::unique_ptr<char[]>*
|
|
47
|
+
std::unique_ptr<char[]>* out_data, const size_t expected_data_size) {
|
|
48
48
|
#ifdef NDEBUG
|
|
49
|
-
(void)
|
|
49
|
+
(void)expected_data_size;
|
|
50
50
|
#endif
|
|
51
51
|
assert(cache_options.persistent_cache);
|
|
52
52
|
assert(cache_options.persistent_cache->IsCompressed());
|
|
@@ -56,7 +56,7 @@ Status PersistentCacheHelper::LookupRawPage(
|
|
|
56
56
|
|
|
57
57
|
size_t size;
|
|
58
58
|
Status s =
|
|
59
|
-
cache_options.persistent_cache->Lookup(key.AsSlice(),
|
|
59
|
+
cache_options.persistent_cache->Lookup(key.AsSlice(), out_data, &size);
|
|
60
60
|
if (!s.ok()) {
|
|
61
61
|
// cache miss
|
|
62
62
|
RecordTick(cache_options.statistics, PERSISTENT_CACHE_MISS);
|
|
@@ -65,13 +65,14 @@ Status PersistentCacheHelper::LookupRawPage(
|
|
|
65
65
|
|
|
66
66
|
// cache hit
|
|
67
67
|
// Block-based table is assumed
|
|
68
|
-
assert(
|
|
69
|
-
|
|
68
|
+
assert(expected_data_size ==
|
|
69
|
+
handle.size() + BlockBasedTable::kBlockTrailerSize);
|
|
70
|
+
assert(size == expected_data_size);
|
|
70
71
|
RecordTick(cache_options.statistics, PERSISTENT_CACHE_HIT);
|
|
71
72
|
return Status::OK();
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
Status PersistentCacheHelper::
|
|
75
|
+
Status PersistentCacheHelper::LookupUncompressed(
|
|
75
76
|
const PersistentCacheOptions& cache_options, const BlockHandle& handle,
|
|
76
77
|
BlockContents* contents) {
|
|
77
78
|
assert(cache_options.persistent_cache);
|
|
@@ -19,26 +19,28 @@ struct BlockContents;
|
|
|
19
19
|
// Encapsulates some of the helper logic for read and writing from the cache
|
|
20
20
|
class PersistentCacheHelper {
|
|
21
21
|
public:
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
22
|
+
// Insert block into cache of serialized blocks. Size includes block trailer
|
|
23
|
+
// (if applicable).
|
|
24
|
+
static void InsertSerialized(const PersistentCacheOptions& cache_options,
|
|
25
|
+
const BlockHandle& handle, const char* data,
|
|
26
|
+
const size_t size);
|
|
27
|
+
|
|
28
|
+
// Insert block into cache of uncompressed blocks. No block trailer.
|
|
29
|
+
static void InsertUncompressed(const PersistentCacheOptions& cache_options,
|
|
30
|
+
const BlockHandle& handle,
|
|
31
|
+
const BlockContents& contents);
|
|
32
|
+
|
|
33
|
+
// Lookup block from cache of serialized blocks. Size includes block trailer
|
|
34
|
+
// (if applicable).
|
|
35
|
+
static Status LookupSerialized(const PersistentCacheOptions& cache_options,
|
|
36
|
+
const BlockHandle& handle,
|
|
37
|
+
std::unique_ptr<char[]>* out_data,
|
|
38
|
+
const size_t expected_data_size);
|
|
39
|
+
|
|
40
|
+
// Lookup block from uncompressed cache. No block trailer.
|
|
41
|
+
static Status LookupUncompressed(const PersistentCacheOptions& cache_options,
|
|
42
|
+
const BlockHandle& handle,
|
|
43
|
+
BlockContents* contents);
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -277,7 +277,7 @@ Status PlainTableBuilder::Finish() {
|
|
|
277
277
|
IOStatus s = WriteBlock(property_block_builder.Finish(), file_, &offset_,
|
|
278
278
|
&property_block_handle);
|
|
279
279
|
if (!s.ok()) {
|
|
280
|
-
return
|
|
280
|
+
return static_cast<Status>(s);
|
|
281
281
|
}
|
|
282
282
|
meta_index_builer.Add(kPropertiesBlockName, property_block_handle);
|
|
283
283
|
|
|
@@ -36,7 +36,7 @@ class SstFileWriterPropertiesCollector : public IntTblPropCollector {
|
|
|
36
36
|
return Status::OK();
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
virtual void BlockAdd(uint64_t /*
|
|
39
|
+
virtual void BlockAdd(uint64_t /* block_uncomp_bytes */,
|
|
40
40
|
uint64_t /* block_compressed_bytes_fast */,
|
|
41
41
|
uint64_t /* block_compressed_bytes_slow */) override {
|
|
42
42
|
// Intentionally left blank. No interest in collecting stats for
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include "options/cf_options.h"
|
|
23
23
|
#include "rocksdb/options.h"
|
|
24
24
|
#include "rocksdb/table_properties.h"
|
|
25
|
+
#include "table/unique_id_impl.h"
|
|
25
26
|
#include "trace_replay/block_cache_tracer.h"
|
|
26
27
|
|
|
27
28
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -40,25 +41,8 @@ struct TableReaderOptions {
|
|
|
40
41
|
bool _force_direct_prefetch = false, int _level = -1,
|
|
41
42
|
BlockCacheTracer* const _block_cache_tracer = nullptr,
|
|
42
43
|
size_t _max_file_size_for_l0_meta_pin = 0,
|
|
43
|
-
const std::string& _cur_db_session_id = "", uint64_t _cur_file_num = 0
|
|
44
|
-
|
|
45
|
-
_ioptions, _prefix_extractor, _env_options, _internal_comparator,
|
|
46
|
-
_skip_filters, _immortal, _force_direct_prefetch, _level,
|
|
47
|
-
0 /* _largest_seqno */, _block_cache_tracer,
|
|
48
|
-
_max_file_size_for_l0_meta_pin, _cur_db_session_id, _cur_file_num) {
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// @param skip_filters Disables loading/accessing the filter block
|
|
52
|
-
TableReaderOptions(
|
|
53
|
-
const ImmutableOptions& _ioptions,
|
|
54
|
-
const std::shared_ptr<const SliceTransform>& _prefix_extractor,
|
|
55
|
-
const EnvOptions& _env_options,
|
|
56
|
-
const InternalKeyComparator& _internal_comparator, bool _skip_filters,
|
|
57
|
-
bool _immortal, bool _force_direct_prefetch, int _level,
|
|
58
|
-
SequenceNumber _largest_seqno,
|
|
59
|
-
BlockCacheTracer* const _block_cache_tracer,
|
|
60
|
-
size_t _max_file_size_for_l0_meta_pin,
|
|
61
|
-
const std::string& _cur_db_session_id, uint64_t _cur_file_num)
|
|
44
|
+
const std::string& _cur_db_session_id = "", uint64_t _cur_file_num = 0,
|
|
45
|
+
UniqueId64x2 _unique_id = {}, SequenceNumber _largest_seqno = 0)
|
|
62
46
|
: ioptions(_ioptions),
|
|
63
47
|
prefix_extractor(_prefix_extractor),
|
|
64
48
|
env_options(_env_options),
|
|
@@ -71,7 +55,8 @@ struct TableReaderOptions {
|
|
|
71
55
|
block_cache_tracer(_block_cache_tracer),
|
|
72
56
|
max_file_size_for_l0_meta_pin(_max_file_size_for_l0_meta_pin),
|
|
73
57
|
cur_db_session_id(_cur_db_session_id),
|
|
74
|
-
cur_file_num(_cur_file_num)
|
|
58
|
+
cur_file_num(_cur_file_num),
|
|
59
|
+
unique_id(_unique_id) {}
|
|
75
60
|
|
|
76
61
|
const ImmutableOptions& ioptions;
|
|
77
62
|
const std::shared_ptr<const SliceTransform>& prefix_extractor;
|
|
@@ -88,7 +73,7 @@ struct TableReaderOptions {
|
|
|
88
73
|
// What level this table/file is on, -1 for "not set, don't know." Used
|
|
89
74
|
// for level-specific statistics.
|
|
90
75
|
int level;
|
|
91
|
-
// largest seqno in the table
|
|
76
|
+
// largest seqno in the table (or 0 means unknown???)
|
|
92
77
|
SequenceNumber largest_seqno;
|
|
93
78
|
BlockCacheTracer* const block_cache_tracer;
|
|
94
79
|
// Largest L0 file size whose meta-blocks may be pinned (can be zero when
|
|
@@ -98,6 +83,9 @@ struct TableReaderOptions {
|
|
|
98
83
|
std::string cur_db_session_id;
|
|
99
84
|
|
|
100
85
|
uint64_t cur_file_num;
|
|
86
|
+
|
|
87
|
+
// Known unique_id or {}, kNullUniqueId64x2 means unknown
|
|
88
|
+
UniqueId64x2 unique_id;
|
|
101
89
|
};
|
|
102
90
|
|
|
103
91
|
struct TableBuilderOptions {
|
|
@@ -407,7 +407,7 @@ class TableConstructor : public Constructor {
|
|
|
407
407
|
EXPECT_EQ(TEST_GetSink()->contents().size(), builder->FileSize());
|
|
408
408
|
|
|
409
409
|
// Open the table
|
|
410
|
-
|
|
410
|
+
file_num_ = cur_file_num_++;
|
|
411
411
|
|
|
412
412
|
return Reopen(ioptions, moptions);
|
|
413
413
|
}
|
|
@@ -438,15 +438,15 @@ class TableConstructor : public Constructor {
|
|
|
438
438
|
virtual Status Reopen(const ImmutableOptions& ioptions,
|
|
439
439
|
const MutableCFOptions& moptions) {
|
|
440
440
|
std::unique_ptr<FSRandomAccessFile> source(new test::StringSource(
|
|
441
|
-
TEST_GetSink()->contents(),
|
|
441
|
+
TEST_GetSink()->contents(), file_num_, ioptions.allow_mmap_reads));
|
|
442
442
|
|
|
443
443
|
file_reader_.reset(new RandomAccessFileReader(std::move(source), "test"));
|
|
444
444
|
return ioptions.table_factory->NewTableReader(
|
|
445
445
|
TableReaderOptions(ioptions, moptions.prefix_extractor, soptions,
|
|
446
446
|
*last_internal_comparator_, /*skip_filters*/ false,
|
|
447
|
-
/*immortal*/ false, false, level_,
|
|
447
|
+
/*immortal*/ false, false, level_,
|
|
448
448
|
&block_cache_tracer_, moptions.write_buffer_size, "",
|
|
449
|
-
|
|
449
|
+
file_num_, kNullUniqueId64x2, largest_seqno_),
|
|
450
450
|
std::move(file_reader_), TEST_GetSink()->contents().size(),
|
|
451
451
|
&table_reader_);
|
|
452
452
|
}
|
|
@@ -469,14 +469,14 @@ class TableConstructor : public Constructor {
|
|
|
469
469
|
|
|
470
470
|
private:
|
|
471
471
|
void Reset() {
|
|
472
|
-
|
|
472
|
+
file_num_ = 0;
|
|
473
473
|
table_reader_.reset();
|
|
474
474
|
file_writer_.reset();
|
|
475
475
|
file_reader_.reset();
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
const ReadOptions read_options_;
|
|
479
|
-
uint64_t
|
|
479
|
+
uint64_t file_num_;
|
|
480
480
|
std::unique_ptr<WritableFileWriter> file_writer_;
|
|
481
481
|
std::unique_ptr<RandomAccessFileReader> file_reader_;
|
|
482
482
|
std::unique_ptr<TableReader> table_reader_;
|
|
@@ -486,11 +486,11 @@ class TableConstructor : public Constructor {
|
|
|
486
486
|
|
|
487
487
|
TableConstructor();
|
|
488
488
|
|
|
489
|
-
static uint64_t
|
|
489
|
+
static uint64_t cur_file_num_;
|
|
490
490
|
EnvOptions soptions;
|
|
491
491
|
Env* env_;
|
|
492
492
|
};
|
|
493
|
-
uint64_t TableConstructor::
|
|
493
|
+
uint64_t TableConstructor::cur_file_num_ = 1;
|
|
494
494
|
|
|
495
495
|
class MemTableConstructor: public Constructor {
|
|
496
496
|
public:
|
|
@@ -1310,7 +1310,7 @@ class FileChecksumTestHelper {
|
|
|
1310
1310
|
Status CalculateFileChecksum(FileChecksumGenerator* file_checksum_generator,
|
|
1311
1311
|
std::string* checksum) {
|
|
1312
1312
|
assert(file_checksum_generator != nullptr);
|
|
1313
|
-
|
|
1313
|
+
cur_file_num_ = checksum_file_num_++;
|
|
1314
1314
|
test::StringSink* ss_rw =
|
|
1315
1315
|
static_cast<test::StringSink*>(file_writer_->writable_file());
|
|
1316
1316
|
std::unique_ptr<FSRandomAccessFile> source(
|
|
@@ -1344,17 +1344,17 @@ class FileChecksumTestHelper {
|
|
|
1344
1344
|
|
|
1345
1345
|
private:
|
|
1346
1346
|
bool convert_to_internal_key_;
|
|
1347
|
-
uint64_t
|
|
1347
|
+
uint64_t cur_file_num_;
|
|
1348
1348
|
std::unique_ptr<WritableFileWriter> file_writer_;
|
|
1349
1349
|
std::unique_ptr<RandomAccessFileReader> file_reader_;
|
|
1350
1350
|
std::unique_ptr<TableBuilder> table_builder_;
|
|
1351
1351
|
stl_wrappers::KVMap kv_map_;
|
|
1352
1352
|
test::StringSink* sink_ = nullptr;
|
|
1353
1353
|
|
|
1354
|
-
static uint64_t
|
|
1354
|
+
static uint64_t checksum_file_num_;
|
|
1355
1355
|
};
|
|
1356
1356
|
|
|
1357
|
-
uint64_t FileChecksumTestHelper::
|
|
1357
|
+
uint64_t FileChecksumTestHelper::checksum_file_num_ = 1;
|
|
1358
1358
|
|
|
1359
1359
|
INSTANTIATE_TEST_CASE_P(FormatVersions, BlockBasedTableTest,
|
|
1360
1360
|
testing::ValuesIn(test::kFooterFormatVersionsToTest));
|
|
@@ -8,9 +8,12 @@ import sys
|
|
|
8
8
|
from block_cache_pysim import (
|
|
9
9
|
ARCCache,
|
|
10
10
|
CacheEntry,
|
|
11
|
+
create_cache,
|
|
11
12
|
GDSizeCache,
|
|
12
13
|
HashTable,
|
|
13
14
|
HyperbolicPolicy,
|
|
15
|
+
kMicrosInSecond,
|
|
16
|
+
kSampleSize,
|
|
14
17
|
LFUPolicy,
|
|
15
18
|
LinUCBCache,
|
|
16
19
|
LRUCache,
|
|
@@ -18,13 +21,10 @@ from block_cache_pysim import (
|
|
|
18
21
|
MRUPolicy,
|
|
19
22
|
OPTCache,
|
|
20
23
|
OPTCacheEntry,
|
|
24
|
+
run,
|
|
21
25
|
ThompsonSamplingCache,
|
|
22
26
|
TraceCache,
|
|
23
27
|
TraceRecord,
|
|
24
|
-
create_cache,
|
|
25
|
-
kMicrosInSecond,
|
|
26
|
-
kSampleSize,
|
|
27
|
-
run,
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
|
|
@@ -37,7 +37,6 @@
|
|
|
37
37
|
#include <thread>
|
|
38
38
|
#include <unordered_map>
|
|
39
39
|
|
|
40
|
-
#include "cache/clock_cache.h"
|
|
41
40
|
#include "cache/fast_lru_cache.h"
|
|
42
41
|
#include "db/db_impl/db_impl.h"
|
|
43
42
|
#include "db/malloc_stats.h"
|
|
@@ -560,7 +559,7 @@ DEFINE_bool(universal_incremental, false,
|
|
|
560
559
|
DEFINE_int64(cache_size, 8 << 20, // 8MB
|
|
561
560
|
"Number of bytes to use as a cache of uncompressed data");
|
|
562
561
|
|
|
563
|
-
DEFINE_int32(cache_numshardbits,
|
|
562
|
+
DEFINE_int32(cache_numshardbits, -1,
|
|
564
563
|
"Number of shards for the block cache"
|
|
565
564
|
" is 2 ** cache_numshardbits. Negative means use default settings."
|
|
566
565
|
" This is applied only if FLAGS_cache_size is non-negative.");
|
|
@@ -617,8 +616,11 @@ DEFINE_int64(simcache_size, -1,
|
|
|
617
616
|
DEFINE_bool(cache_index_and_filter_blocks, false,
|
|
618
617
|
"Cache index/filter blocks in block cache.");
|
|
619
618
|
|
|
619
|
+
DEFINE_bool(use_cache_jemalloc_no_dump_allocator, false,
|
|
620
|
+
"Use JemallocNodumpAllocator for block/blob cache.");
|
|
621
|
+
|
|
620
622
|
DEFINE_bool(use_cache_memkind_kmem_allocator, false,
|
|
621
|
-
"Use memkind kmem allocator for block cache.");
|
|
623
|
+
"Use memkind kmem allocator for block/blob cache.");
|
|
622
624
|
|
|
623
625
|
DEFINE_bool(partition_index_and_filters, false,
|
|
624
626
|
"Partition index and filter blocks.");
|
|
@@ -1236,6 +1238,14 @@ DEFINE_uint64(
|
|
|
1236
1238
|
"BlockBasedTableOptions.initial_auto_readahead_size and doubles on every "
|
|
1237
1239
|
"additional read upto max_auto_readahead_size");
|
|
1238
1240
|
|
|
1241
|
+
DEFINE_uint64(
|
|
1242
|
+
num_file_reads_for_auto_readahead,
|
|
1243
|
+
ROCKSDB_NAMESPACE::BlockBasedTableOptions()
|
|
1244
|
+
.num_file_reads_for_auto_readahead,
|
|
1245
|
+
"Rocksdb implicit readahead is enabled if reads are sequential and "
|
|
1246
|
+
"num_file_reads_for_auto_readahead indicates after how many sequential "
|
|
1247
|
+
"reads into that file internal auto prefetching should be start.");
|
|
1248
|
+
|
|
1239
1249
|
static enum ROCKSDB_NAMESPACE::CompressionType StringToCompressionType(
|
|
1240
1250
|
const char* ctype) {
|
|
1241
1251
|
assert(ctype);
|
|
@@ -3020,20 +3030,39 @@ class Benchmark {
|
|
|
3020
3030
|
const char* Name() const override { return "KeepFilter"; }
|
|
3021
3031
|
};
|
|
3022
3032
|
|
|
3023
|
-
std::shared_ptr<
|
|
3033
|
+
static std::shared_ptr<MemoryAllocator> GetCacheAllocator() {
|
|
3034
|
+
std::shared_ptr<MemoryAllocator> allocator;
|
|
3035
|
+
|
|
3036
|
+
if (FLAGS_use_cache_jemalloc_no_dump_allocator) {
|
|
3037
|
+
JemallocAllocatorOptions jemalloc_options;
|
|
3038
|
+
if (!NewJemallocNodumpAllocator(jemalloc_options, &allocator).ok()) {
|
|
3039
|
+
fprintf(stderr, "JemallocNodumpAllocator not supported.\n");
|
|
3040
|
+
exit(1);
|
|
3041
|
+
}
|
|
3042
|
+
} else if (FLAGS_use_cache_memkind_kmem_allocator) {
|
|
3043
|
+
#ifdef MEMKIND
|
|
3044
|
+
allocator = std::make_shared<MemkindKmemAllocator>();
|
|
3045
|
+
#else
|
|
3046
|
+
fprintf(stderr, "Memkind library is not linked with the binary.\n");
|
|
3047
|
+
exit(1);
|
|
3048
|
+
#endif
|
|
3049
|
+
}
|
|
3050
|
+
|
|
3051
|
+
return allocator;
|
|
3052
|
+
}
|
|
3053
|
+
|
|
3054
|
+
static std::shared_ptr<Cache> NewCache(int64_t capacity) {
|
|
3024
3055
|
if (capacity <= 0) {
|
|
3025
3056
|
return nullptr;
|
|
3026
3057
|
}
|
|
3027
3058
|
if (FLAGS_cache_type == "clock_cache") {
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
}
|
|
3036
|
-
return cache;
|
|
3059
|
+
fprintf(stderr, "Old clock cache implementation has been removed.\n");
|
|
3060
|
+
exit(1);
|
|
3061
|
+
} else if (FLAGS_cache_type == "hyper_clock_cache") {
|
|
3062
|
+
return HyperClockCacheOptions(static_cast<size_t>(capacity),
|
|
3063
|
+
FLAGS_block_size /*estimated_entry_charge*/,
|
|
3064
|
+
FLAGS_cache_numshardbits)
|
|
3065
|
+
.MakeSharedCache();
|
|
3037
3066
|
} else if (FLAGS_cache_type == "fast_lru_cache") {
|
|
3038
3067
|
return NewFastLRUCache(static_cast<size_t>(capacity), FLAGS_block_size,
|
|
3039
3068
|
FLAGS_cache_numshardbits,
|
|
@@ -3043,21 +3072,9 @@ class Benchmark {
|
|
|
3043
3072
|
LRUCacheOptions opts(
|
|
3044
3073
|
static_cast<size_t>(capacity), FLAGS_cache_numshardbits,
|
|
3045
3074
|
false /*strict_capacity_limit*/, FLAGS_cache_high_pri_pool_ratio,
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
: nullptr,
|
|
3050
|
-
#else
|
|
3051
|
-
nullptr,
|
|
3052
|
-
#endif
|
|
3053
|
-
kDefaultToAdaptiveMutex, kDefaultCacheMetadataChargePolicy,
|
|
3054
|
-
FLAGS_cache_low_pri_pool_ratio);
|
|
3055
|
-
if (FLAGS_use_cache_memkind_kmem_allocator) {
|
|
3056
|
-
#ifndef MEMKIND
|
|
3057
|
-
fprintf(stderr, "Memkind library is not linked with the binary.");
|
|
3058
|
-
exit(1);
|
|
3059
|
-
#endif
|
|
3060
|
-
}
|
|
3075
|
+
GetCacheAllocator(), kDefaultToAdaptiveMutex,
|
|
3076
|
+
kDefaultCacheMetadataChargePolicy, FLAGS_cache_low_pri_pool_ratio);
|
|
3077
|
+
|
|
3061
3078
|
#ifndef ROCKSDB_LITE
|
|
3062
3079
|
if (!FLAGS_secondary_cache_uri.empty()) {
|
|
3063
3080
|
Status s = SecondaryCache::CreateFromString(
|
|
@@ -3598,6 +3615,9 @@ class Benchmark {
|
|
|
3598
3615
|
}
|
|
3599
3616
|
fresh_db = true;
|
|
3600
3617
|
method = &Benchmark::TimeSeries;
|
|
3618
|
+
} else if (name == "block_cache_entry_stats") {
|
|
3619
|
+
// DB::Properties::kBlockCacheEntryStats
|
|
3620
|
+
PrintStats("rocksdb.block-cache-entry-stats");
|
|
3601
3621
|
} else if (name == "stats") {
|
|
3602
3622
|
PrintStats("rocksdb.stats");
|
|
3603
3623
|
} else if (name == "resetstats") {
|
|
@@ -4372,6 +4392,8 @@ class Benchmark {
|
|
|
4372
4392
|
FLAGS_max_auto_readahead_size;
|
|
4373
4393
|
block_based_options.initial_auto_readahead_size =
|
|
4374
4394
|
FLAGS_initial_auto_readahead_size;
|
|
4395
|
+
block_based_options.num_file_reads_for_auto_readahead =
|
|
4396
|
+
FLAGS_num_file_reads_for_auto_readahead;
|
|
4375
4397
|
BlockBasedTableOptions::PrepopulateBlockCache prepopulate_block_cache =
|
|
4376
4398
|
block_based_options.prepopulate_block_cache;
|
|
4377
4399
|
switch (FLAGS_prepopulate_block_cache) {
|
|
@@ -4444,6 +4466,8 @@ class Benchmark {
|
|
|
4444
4466
|
LRUCacheOptions co;
|
|
4445
4467
|
co.capacity = FLAGS_blob_cache_size;
|
|
4446
4468
|
co.num_shard_bits = FLAGS_blob_cache_numshardbits;
|
|
4469
|
+
co.memory_allocator = GetCacheAllocator();
|
|
4470
|
+
|
|
4447
4471
|
options.blob_cache = NewLRUCache(co);
|
|
4448
4472
|
} else {
|
|
4449
4473
|
fprintf(
|
|
@@ -4464,13 +4488,19 @@ class Benchmark {
|
|
|
4464
4488
|
fprintf(stderr, "Unknown prepopulate blob cache mode\n");
|
|
4465
4489
|
exit(1);
|
|
4466
4490
|
}
|
|
4491
|
+
|
|
4467
4492
|
fprintf(stdout,
|
|
4468
|
-
"Integrated BlobDB: blob cache enabled
|
|
4469
|
-
"
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4493
|
+
"Integrated BlobDB: blob cache enabled"
|
|
4494
|
+
", block and blob caches shared: %d",
|
|
4495
|
+
FLAGS_use_shared_block_and_blob_cache);
|
|
4496
|
+
if (!FLAGS_use_shared_block_and_blob_cache) {
|
|
4497
|
+
fprintf(stdout,
|
|
4498
|
+
", blob cache size %" PRIu64
|
|
4499
|
+
", blob cache num shard bits: %d",
|
|
4500
|
+
FLAGS_blob_cache_size, FLAGS_blob_cache_numshardbits);
|
|
4501
|
+
}
|
|
4502
|
+
fprintf(stdout, ", blob cache prepopulated: %d\n",
|
|
4503
|
+
FLAGS_prepopulate_blob_cache);
|
|
4474
4504
|
} else {
|
|
4475
4505
|
fprintf(stdout, "Integrated BlobDB: blob cache disabled\n");
|
|
4476
4506
|
}
|
|
@@ -6900,6 +6930,19 @@ class Benchmark {
|
|
|
6900
6930
|
std::unique_ptr<const char[]> key_guard;
|
|
6901
6931
|
Slice key = AllocateKey(&key_guard);
|
|
6902
6932
|
std::unique_ptr<char[]> ts_guard;
|
|
6933
|
+
std::unique_ptr<const char[]> begin_key_guard;
|
|
6934
|
+
Slice begin_key = AllocateKey(&begin_key_guard);
|
|
6935
|
+
std::unique_ptr<const char[]> end_key_guard;
|
|
6936
|
+
Slice end_key = AllocateKey(&end_key_guard);
|
|
6937
|
+
uint64_t num_range_deletions = 0;
|
|
6938
|
+
std::vector<std::unique_ptr<const char[]>> expanded_key_guards;
|
|
6939
|
+
std::vector<Slice> expanded_keys;
|
|
6940
|
+
if (FLAGS_expand_range_tombstones) {
|
|
6941
|
+
expanded_key_guards.resize(range_tombstone_width_);
|
|
6942
|
+
for (auto& expanded_key_guard : expanded_key_guards) {
|
|
6943
|
+
expanded_keys.emplace_back(AllocateKey(&expanded_key_guard));
|
|
6944
|
+
}
|
|
6945
|
+
}
|
|
6903
6946
|
if (user_timestamp_size_ > 0) {
|
|
6904
6947
|
ts_guard.reset(new char[user_timestamp_size_]);
|
|
6905
6948
|
}
|
|
@@ -6962,6 +7005,45 @@ class Benchmark {
|
|
|
6962
7005
|
key.size() + val.size(), Env::IO_HIGH,
|
|
6963
7006
|
nullptr /* stats */, RateLimiter::OpType::kWrite);
|
|
6964
7007
|
}
|
|
7008
|
+
|
|
7009
|
+
if (writes_per_range_tombstone_ > 0 &&
|
|
7010
|
+
written > writes_before_delete_range_ &&
|
|
7011
|
+
(written - writes_before_delete_range_) /
|
|
7012
|
+
writes_per_range_tombstone_ <=
|
|
7013
|
+
max_num_range_tombstones_ &&
|
|
7014
|
+
(written - writes_before_delete_range_) %
|
|
7015
|
+
writes_per_range_tombstone_ ==
|
|
7016
|
+
0) {
|
|
7017
|
+
num_range_deletions++;
|
|
7018
|
+
int64_t begin_num = thread->rand.Next() % FLAGS_num;
|
|
7019
|
+
if (FLAGS_expand_range_tombstones) {
|
|
7020
|
+
for (int64_t offset = 0; offset < range_tombstone_width_; ++offset) {
|
|
7021
|
+
GenerateKeyFromInt(begin_num + offset, FLAGS_num,
|
|
7022
|
+
&expanded_keys[offset]);
|
|
7023
|
+
if (!db->Delete(write_options_, expanded_keys[offset]).ok()) {
|
|
7024
|
+
fprintf(stderr, "delete error: %s\n", s.ToString().c_str());
|
|
7025
|
+
exit(1);
|
|
7026
|
+
}
|
|
7027
|
+
}
|
|
7028
|
+
} else {
|
|
7029
|
+
GenerateKeyFromInt(begin_num, FLAGS_num, &begin_key);
|
|
7030
|
+
GenerateKeyFromInt(begin_num + range_tombstone_width_, FLAGS_num,
|
|
7031
|
+
&end_key);
|
|
7032
|
+
if (!db->DeleteRange(write_options_, db->DefaultColumnFamily(),
|
|
7033
|
+
begin_key, end_key)
|
|
7034
|
+
.ok()) {
|
|
7035
|
+
fprintf(stderr, "deleterange error: %s\n", s.ToString().c_str());
|
|
7036
|
+
exit(1);
|
|
7037
|
+
}
|
|
7038
|
+
}
|
|
7039
|
+
thread->stats.FinishedOps(&db_, db_.db, 1, kWrite);
|
|
7040
|
+
// TODO: DeleteRange is not included in calculcation of bytes/rate
|
|
7041
|
+
// limiter request
|
|
7042
|
+
}
|
|
7043
|
+
}
|
|
7044
|
+
if (num_range_deletions > 0) {
|
|
7045
|
+
std::cout << "Number of range deletions: " << num_range_deletions
|
|
7046
|
+
<< std::endl;
|
|
6965
7047
|
}
|
|
6966
7048
|
thread->stats.AddBytes(bytes);
|
|
6967
7049
|
}
|
|
@@ -4196,7 +4196,12 @@ void UnsafeRemoveSstFileCommand::DoCommand() {
|
|
|
4196
4196
|
VersionEdit edit;
|
|
4197
4197
|
edit.SetColumnFamily(cfd->GetID());
|
|
4198
4198
|
edit.DeleteFile(level, sst_file_number_);
|
|
4199
|
-
|
|
4199
|
+
std::unique_ptr<FSDirectory> db_dir;
|
|
4200
|
+
s = options_.env->GetFileSystem()->NewDirectory(db_path_, IOOptions(),
|
|
4201
|
+
&db_dir, nullptr);
|
|
4202
|
+
if (s.ok()) {
|
|
4203
|
+
s = w.LogAndApply(cfd, &edit, db_dir.get());
|
|
4204
|
+
}
|
|
4200
4205
|
}
|
|
4201
4206
|
|
|
4202
4207
|
if (!s.ok()) {
|