@nxtedition/rocksdb 7.1.20 → 7.1.21
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/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
- package/deps/rocksdb/rocksdb/Makefile +1 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
- package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
- package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
- package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
- package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
- package/index.js +12 -4
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
9
9
|
|
|
10
10
|
#include "memory/arena.h"
|
|
11
|
-
|
|
12
|
-
#include <sys/mman.h>
|
|
13
|
-
#endif
|
|
11
|
+
|
|
14
12
|
#include <algorithm>
|
|
15
13
|
|
|
16
14
|
#include "logging/logging.h"
|
|
@@ -22,16 +20,7 @@
|
|
|
22
20
|
|
|
23
21
|
namespace ROCKSDB_NAMESPACE {
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
#ifndef _MSC_VER
|
|
27
|
-
const size_t Arena::kInlineSize;
|
|
28
|
-
#endif
|
|
29
|
-
|
|
30
|
-
const size_t Arena::kMinBlockSize = 4096;
|
|
31
|
-
const size_t Arena::kMaxBlockSize = 2u << 30;
|
|
32
|
-
static const int kAlignUnit = alignof(max_align_t);
|
|
33
|
-
|
|
34
|
-
size_t OptimizeBlockSize(size_t block_size) {
|
|
23
|
+
size_t Arena::OptimizeBlockSize(size_t block_size) {
|
|
35
24
|
// Make sure block_size is in optimal range
|
|
36
25
|
block_size = std::max(Arena::kMinBlockSize, block_size);
|
|
37
26
|
block_size = std::min(Arena::kMaxBlockSize, block_size);
|
|
@@ -53,14 +42,12 @@ Arena::Arena(size_t block_size, AllocTracker* tracker, size_t huge_page_size)
|
|
|
53
42
|
blocks_memory_ += alloc_bytes_remaining_;
|
|
54
43
|
aligned_alloc_ptr_ = inline_block_;
|
|
55
44
|
unaligned_alloc_ptr_ = inline_block_ + alloc_bytes_remaining_;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
45
|
+
if (MemMapping::kHugePageSupported) {
|
|
46
|
+
hugetlb_size_ = huge_page_size;
|
|
47
|
+
if (hugetlb_size_ && kBlockSize > hugetlb_size_) {
|
|
48
|
+
hugetlb_size_ = ((kBlockSize - 1U) / hugetlb_size_ + 1U) * hugetlb_size_;
|
|
49
|
+
}
|
|
60
50
|
}
|
|
61
|
-
#else
|
|
62
|
-
(void)huge_page_size;
|
|
63
|
-
#endif
|
|
64
51
|
if (tracker_ != nullptr) {
|
|
65
52
|
tracker_->Allocate(kInlineSize);
|
|
66
53
|
}
|
|
@@ -71,21 +58,6 @@ Arena::~Arena() {
|
|
|
71
58
|
assert(tracker_->is_freed());
|
|
72
59
|
tracker_->FreeMem();
|
|
73
60
|
}
|
|
74
|
-
for (const auto& block : blocks_) {
|
|
75
|
-
delete[] block;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
#ifdef MAP_HUGETLB
|
|
79
|
-
for (const auto& mmap_info : huge_blocks_) {
|
|
80
|
-
if (mmap_info.addr_ == nullptr) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
auto ret = munmap(mmap_info.addr_, mmap_info.length_);
|
|
84
|
-
if (ret != 0) {
|
|
85
|
-
// TODO(sdong): Better handling
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
#endif
|
|
89
61
|
}
|
|
90
62
|
|
|
91
63
|
char* Arena::AllocateFallback(size_t bytes, bool aligned) {
|
|
@@ -99,12 +71,10 @@ char* Arena::AllocateFallback(size_t bytes, bool aligned) {
|
|
|
99
71
|
// We waste the remaining space in the current block.
|
|
100
72
|
size_t size = 0;
|
|
101
73
|
char* block_head = nullptr;
|
|
102
|
-
|
|
103
|
-
if (hugetlb_size_) {
|
|
74
|
+
if (MemMapping::kHugePageSupported && hugetlb_size_ > 0) {
|
|
104
75
|
size = hugetlb_size_;
|
|
105
76
|
block_head = AllocateFromHugePage(size);
|
|
106
77
|
}
|
|
107
|
-
#endif
|
|
108
78
|
if (!block_head) {
|
|
109
79
|
size = kBlockSize;
|
|
110
80
|
block_head = AllocateNewBlock(size);
|
|
@@ -123,45 +93,22 @@ char* Arena::AllocateFallback(size_t bytes, bool aligned) {
|
|
|
123
93
|
}
|
|
124
94
|
|
|
125
95
|
char* Arena::AllocateFromHugePage(size_t bytes) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// - If `emplace_back` throws, no memory leaks because we haven't called
|
|
135
|
-
// `mmap` yet.
|
|
136
|
-
// - If `mmap` throws, no memory leaks because the vector will be cleaned up
|
|
137
|
-
// via RAII.
|
|
138
|
-
huge_blocks_.emplace_back(nullptr /* addr */, 0 /* length */);
|
|
139
|
-
|
|
140
|
-
void* addr = mmap(nullptr, bytes, (PROT_READ | PROT_WRITE),
|
|
141
|
-
(MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB), -1, 0);
|
|
142
|
-
|
|
143
|
-
if (addr == MAP_FAILED) {
|
|
144
|
-
return nullptr;
|
|
145
|
-
}
|
|
146
|
-
huge_blocks_.back() = MmapInfo(addr, bytes);
|
|
147
|
-
blocks_memory_ += bytes;
|
|
148
|
-
if (tracker_ != nullptr) {
|
|
149
|
-
tracker_->Allocate(bytes);
|
|
96
|
+
MemMapping mm = MemMapping::AllocateHuge(bytes);
|
|
97
|
+
auto addr = static_cast<char*>(mm.Get());
|
|
98
|
+
if (addr) {
|
|
99
|
+
huge_blocks_.push_back(std::move(mm));
|
|
100
|
+
blocks_memory_ += bytes;
|
|
101
|
+
if (tracker_ != nullptr) {
|
|
102
|
+
tracker_->Allocate(bytes);
|
|
103
|
+
}
|
|
150
104
|
}
|
|
151
|
-
return
|
|
152
|
-
#else
|
|
153
|
-
(void)bytes;
|
|
154
|
-
return nullptr;
|
|
155
|
-
#endif
|
|
105
|
+
return addr;
|
|
156
106
|
}
|
|
157
107
|
|
|
158
108
|
char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
|
|
159
109
|
Logger* logger) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
#ifdef MAP_HUGETLB
|
|
164
|
-
if (huge_page_size > 0 && bytes > 0) {
|
|
110
|
+
if (MemMapping::kHugePageSupported && hugetlb_size_ > 0 &&
|
|
111
|
+
huge_page_size > 0 && bytes > 0) {
|
|
165
112
|
// Allocate from a huge page TLB table.
|
|
166
113
|
size_t reserved_size =
|
|
167
114
|
((bytes - 1U) / huge_page_size + 1U) * huge_page_size;
|
|
@@ -177,10 +124,6 @@ char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
|
|
|
177
124
|
return addr;
|
|
178
125
|
}
|
|
179
126
|
}
|
|
180
|
-
#else
|
|
181
|
-
(void)huge_page_size;
|
|
182
|
-
(void)logger;
|
|
183
|
-
#endif
|
|
184
127
|
|
|
185
128
|
size_t current_mod =
|
|
186
129
|
reinterpret_cast<uintptr_t>(aligned_alloc_ptr_) & (kAlignUnit - 1);
|
|
@@ -200,17 +143,10 @@ char* Arena::AllocateAligned(size_t bytes, size_t huge_page_size,
|
|
|
200
143
|
}
|
|
201
144
|
|
|
202
145
|
char* Arena::AllocateNewBlock(size_t block_bytes) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
// - If `emplace_back` throws, no memory leaks because we haven't called `new`
|
|
208
|
-
// yet.
|
|
209
|
-
// - If `new` throws, no memory leaks because the vector will be cleaned up
|
|
210
|
-
// via RAII.
|
|
211
|
-
blocks_.emplace_back(nullptr);
|
|
212
|
-
|
|
213
|
-
char* block = new char[block_bytes];
|
|
146
|
+
auto uniq = std::make_unique<char[]>(block_bytes);
|
|
147
|
+
char* block = uniq.get();
|
|
148
|
+
blocks_.push_back(std::move(uniq));
|
|
149
|
+
|
|
214
150
|
size_t allocated_size;
|
|
215
151
|
#ifdef ROCKSDB_MALLOC_USABLE_SIZE
|
|
216
152
|
allocated_size = malloc_usable_size(block);
|
|
@@ -227,7 +163,6 @@ char* Arena::AllocateNewBlock(size_t block_bytes) {
|
|
|
227
163
|
if (tracker_ != nullptr) {
|
|
228
164
|
tracker_->Allocate(allocated_size);
|
|
229
165
|
}
|
|
230
|
-
blocks_.back() = block;
|
|
231
166
|
return block;
|
|
232
167
|
}
|
|
233
168
|
|
|
@@ -12,16 +12,13 @@
|
|
|
12
12
|
// size, it uses malloc to directly get the requested size.
|
|
13
13
|
|
|
14
14
|
#pragma once
|
|
15
|
-
|
|
16
|
-
#include <sys/mman.h>
|
|
17
|
-
#endif
|
|
18
|
-
#include <assert.h>
|
|
19
|
-
#include <stdint.h>
|
|
20
|
-
#include <cerrno>
|
|
15
|
+
|
|
21
16
|
#include <cstddef>
|
|
22
|
-
#include <
|
|
17
|
+
#include <deque>
|
|
18
|
+
|
|
23
19
|
#include "memory/allocator.h"
|
|
24
|
-
#include "
|
|
20
|
+
#include "port/mmap.h"
|
|
21
|
+
#include "rocksdb/env.h"
|
|
25
22
|
|
|
26
23
|
namespace ROCKSDB_NAMESPACE {
|
|
27
24
|
|
|
@@ -31,9 +28,13 @@ class Arena : public Allocator {
|
|
|
31
28
|
Arena(const Arena&) = delete;
|
|
32
29
|
void operator=(const Arena&) = delete;
|
|
33
30
|
|
|
34
|
-
static
|
|
35
|
-
static
|
|
36
|
-
static
|
|
31
|
+
static constexpr size_t kInlineSize = 2048;
|
|
32
|
+
static constexpr size_t kMinBlockSize = 4096;
|
|
33
|
+
static constexpr size_t kMaxBlockSize = 2u << 30;
|
|
34
|
+
|
|
35
|
+
static constexpr unsigned kAlignUnit = alignof(std::max_align_t);
|
|
36
|
+
static_assert((kAlignUnit & (kAlignUnit - 1)) == 0,
|
|
37
|
+
"Pointer size should be power of 2");
|
|
37
38
|
|
|
38
39
|
// huge_page_size: if 0, don't use huge page TLB. If > 0 (should set to the
|
|
39
40
|
// supported hugepage size of the system), block allocation will try huge
|
|
@@ -63,7 +64,7 @@ class Arena : public Allocator {
|
|
|
63
64
|
// by the arena (exclude the space allocated but not yet used for future
|
|
64
65
|
// allocations).
|
|
65
66
|
size_t ApproximateMemoryUsage() const {
|
|
66
|
-
return blocks_memory_ + blocks_.
|
|
67
|
+
return blocks_memory_ + blocks_.size() * sizeof(char*) -
|
|
67
68
|
alloc_bytes_remaining_;
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -81,21 +82,19 @@ class Arena : public Allocator {
|
|
|
81
82
|
return blocks_.empty() && huge_blocks_.empty();
|
|
82
83
|
}
|
|
83
84
|
|
|
85
|
+
// check and adjust the block_size so that the return value is
|
|
86
|
+
// 1. in the range of [kMinBlockSize, kMaxBlockSize].
|
|
87
|
+
// 2. the multiple of align unit.
|
|
88
|
+
static size_t OptimizeBlockSize(size_t block_size);
|
|
89
|
+
|
|
84
90
|
private:
|
|
85
|
-
char inline_block_[kInlineSize]
|
|
91
|
+
alignas(std::max_align_t) char inline_block_[kInlineSize];
|
|
86
92
|
// Number of bytes allocated in one block
|
|
87
93
|
const size_t kBlockSize;
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
struct MmapInfo {
|
|
93
|
-
void* addr_;
|
|
94
|
-
size_t length_;
|
|
95
|
-
|
|
96
|
-
MmapInfo(void* addr, size_t length) : addr_(addr), length_(length) {}
|
|
97
|
-
};
|
|
98
|
-
std::vector<MmapInfo> huge_blocks_;
|
|
94
|
+
// Allocated memory blocks
|
|
95
|
+
std::deque<std::unique_ptr<char[]>> blocks_;
|
|
96
|
+
// Huge page allocations
|
|
97
|
+
std::deque<MemMapping> huge_blocks_;
|
|
99
98
|
size_t irregular_block_num = 0;
|
|
100
99
|
|
|
101
100
|
// Stats for current active block.
|
|
@@ -108,15 +107,15 @@ class Arena : public Allocator {
|
|
|
108
107
|
// How many bytes left in currently active block?
|
|
109
108
|
size_t alloc_bytes_remaining_ = 0;
|
|
110
109
|
|
|
111
|
-
#ifdef MAP_HUGETLB
|
|
112
110
|
size_t hugetlb_size_ = 0;
|
|
113
|
-
|
|
111
|
+
|
|
114
112
|
char* AllocateFromHugePage(size_t bytes);
|
|
115
113
|
char* AllocateFallback(size_t bytes, bool aligned);
|
|
116
114
|
char* AllocateNewBlock(size_t block_bytes);
|
|
117
115
|
|
|
118
116
|
// Bytes of memory in blocks allocated so far
|
|
119
117
|
size_t blocks_memory_ = 0;
|
|
118
|
+
// Non-owned
|
|
120
119
|
AllocTracker* tracker_;
|
|
121
120
|
};
|
|
122
121
|
|
|
@@ -133,9 +132,4 @@ inline char* Arena::Allocate(size_t bytes) {
|
|
|
133
132
|
return AllocateFallback(bytes, false /* unaligned */);
|
|
134
133
|
}
|
|
135
134
|
|
|
136
|
-
// check and adjust the block_size so that the return value is
|
|
137
|
-
// 1. in the range of [kMinBlockSize, kMaxBlockSize].
|
|
138
|
-
// 2. the multiple of align unit.
|
|
139
|
-
extern size_t OptimizeBlockSize(size_t block_size);
|
|
140
|
-
|
|
141
135
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
9
9
|
|
|
10
10
|
#include "memory/arena.h"
|
|
11
|
+
|
|
12
|
+
#ifndef OS_WIN
|
|
13
|
+
#include <sys/resource.h>
|
|
14
|
+
#endif
|
|
15
|
+
#include "port/port.h"
|
|
11
16
|
#include "test_util/testharness.h"
|
|
12
17
|
#include "util/random.h"
|
|
13
18
|
|
|
@@ -196,9 +201,65 @@ TEST_F(ArenaTest, Simple) {
|
|
|
196
201
|
SimpleTest(0);
|
|
197
202
|
SimpleTest(kHugePageSize);
|
|
198
203
|
}
|
|
204
|
+
|
|
205
|
+
// Number of minor page faults since last call
|
|
206
|
+
size_t PopMinorPageFaultCount() {
|
|
207
|
+
#ifdef RUSAGE_SELF
|
|
208
|
+
static long prev = 0;
|
|
209
|
+
struct rusage usage;
|
|
210
|
+
EXPECT_EQ(getrusage(RUSAGE_SELF, &usage), 0);
|
|
211
|
+
size_t rv = usage.ru_minflt - prev;
|
|
212
|
+
prev = usage.ru_minflt;
|
|
213
|
+
return rv;
|
|
214
|
+
#else
|
|
215
|
+
// Conservative
|
|
216
|
+
return SIZE_MAX;
|
|
217
|
+
#endif // RUSAGE_SELF
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
TEST(MmapTest, AllocateLazyZeroed) {
|
|
221
|
+
// Doesn't have to be page aligned
|
|
222
|
+
constexpr size_t len = 1234567;
|
|
223
|
+
MemMapping m = MemMapping::AllocateLazyZeroed(len);
|
|
224
|
+
auto arr = static_cast<char*>(m.Get());
|
|
225
|
+
|
|
226
|
+
// Should generally work
|
|
227
|
+
ASSERT_NE(arr, nullptr);
|
|
228
|
+
|
|
229
|
+
// Start counting page faults
|
|
230
|
+
PopMinorPageFaultCount();
|
|
231
|
+
|
|
232
|
+
// Access half of the allocation
|
|
233
|
+
size_t i = 0;
|
|
234
|
+
for (; i < len / 2; ++i) {
|
|
235
|
+
ASSERT_EQ(arr[i], 0);
|
|
236
|
+
arr[i] = static_cast<char>(i & 255);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Appropriate page faults (maybe more)
|
|
240
|
+
size_t faults = PopMinorPageFaultCount();
|
|
241
|
+
ASSERT_GE(faults, len / 2 / port::kPageSize);
|
|
242
|
+
|
|
243
|
+
// Access rest of the allocation
|
|
244
|
+
for (; i < len; ++i) {
|
|
245
|
+
ASSERT_EQ(arr[i], 0);
|
|
246
|
+
arr[i] = static_cast<char>(i & 255);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Appropriate page faults (maybe more)
|
|
250
|
+
faults = PopMinorPageFaultCount();
|
|
251
|
+
ASSERT_GE(faults, len / 2 / port::kPageSize);
|
|
252
|
+
|
|
253
|
+
// Verify data
|
|
254
|
+
for (i = 0; i < len; ++i) {
|
|
255
|
+
ASSERT_EQ(arr[i], static_cast<char>(i & 255));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
199
259
|
} // namespace ROCKSDB_NAMESPACE
|
|
200
260
|
|
|
201
261
|
int main(int argc, char** argv) {
|
|
262
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
202
263
|
::testing::InitGoogleTest(&argc, argv);
|
|
203
264
|
return RUN_ALL_TESTS();
|
|
204
265
|
}
|
|
@@ -658,6 +658,7 @@ TEST_F(InlineSkipTest, ConcurrentInsertWithHint3) {
|
|
|
658
658
|
} // namespace ROCKSDB_NAMESPACE
|
|
659
659
|
|
|
660
660
|
int main(int argc, char** argv) {
|
|
661
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
661
662
|
::testing::InitGoogleTest(&argc, argv);
|
|
662
663
|
return RUN_ALL_TESTS();
|
|
663
664
|
}
|
|
@@ -383,6 +383,7 @@ TEST_F(SkipTest, Concurrent5) { RunConcurrent(5); }
|
|
|
383
383
|
} // namespace ROCKSDB_NAMESPACE
|
|
384
384
|
|
|
385
385
|
int main(int argc, char** argv) {
|
|
386
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
386
387
|
::testing::InitGoogleTest(&argc, argv);
|
|
387
388
|
return RUN_ALL_TESTS();
|
|
388
389
|
}
|
|
@@ -298,6 +298,7 @@ TEST_F(ChargeWriteBufferTest, BasicWithCacheFull) {
|
|
|
298
298
|
} // namespace ROCKSDB_NAMESPACE
|
|
299
299
|
|
|
300
300
|
int main(int argc, char** argv) {
|
|
301
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
301
302
|
::testing::InitGoogleTest(&argc, argv);
|
|
302
303
|
return RUN_ALL_TESTS();
|
|
303
304
|
}
|
|
@@ -248,6 +248,7 @@ TEST_F(HistogramTest, LostUpdateStandardDeviation) {
|
|
|
248
248
|
} // namespace ROCKSDB_NAMESPACE
|
|
249
249
|
|
|
250
250
|
int main(int argc, char** argv) {
|
|
251
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
251
252
|
::testing::InitGoogleTest(&argc, argv);
|
|
252
253
|
return RUN_ALL_TESTS();
|
|
253
254
|
}
|
|
@@ -270,6 +270,11 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
270
270
|
{offsetof(struct MutableCFOptions, max_compaction_bytes),
|
|
271
271
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
272
272
|
OptionTypeFlags::kMutable}},
|
|
273
|
+
{"ignore_max_compaction_bytes_for_input",
|
|
274
|
+
{offsetof(struct MutableCFOptions,
|
|
275
|
+
ignore_max_compaction_bytes_for_input),
|
|
276
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
277
|
+
OptionTypeFlags::kMutable}},
|
|
273
278
|
{"expanded_compaction_factor",
|
|
274
279
|
{0, OptionType::kInt, OptionVerificationType::kDeprecated,
|
|
275
280
|
OptionTypeFlags::kMutable}},
|
|
@@ -550,6 +555,11 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
550
555
|
level_compaction_dynamic_level_bytes),
|
|
551
556
|
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
552
557
|
OptionTypeFlags::kNone}},
|
|
558
|
+
{"level_compaction_dynamic_file_size",
|
|
559
|
+
{offsetof(struct ImmutableCFOptions,
|
|
560
|
+
level_compaction_dynamic_file_size),
|
|
561
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
562
|
+
OptionTypeFlags::kNone}},
|
|
553
563
|
{"optimize_filters_for_hits",
|
|
554
564
|
{offsetof(struct ImmutableCFOptions, optimize_filters_for_hits),
|
|
555
565
|
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
@@ -562,6 +572,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
562
572
|
{offsetof(struct ImmutableCFOptions, preclude_last_level_data_seconds),
|
|
563
573
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
564
574
|
OptionTypeFlags::kNone}},
|
|
575
|
+
{"preserve_internal_time_seconds",
|
|
576
|
+
{offsetof(struct ImmutableCFOptions, preserve_internal_time_seconds),
|
|
577
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
578
|
+
OptionTypeFlags::kNone}},
|
|
565
579
|
// Need to keep this around to be able to read old OPTIONS files.
|
|
566
580
|
{"max_mem_compaction_level",
|
|
567
581
|
{0, OptionType::kInt, OptionVerificationType::kDeprecated,
|
|
@@ -892,11 +906,14 @@ ImmutableCFOptions::ImmutableCFOptions(const ColumnFamilyOptions& cf_options)
|
|
|
892
906
|
bloom_locality(cf_options.bloom_locality),
|
|
893
907
|
level_compaction_dynamic_level_bytes(
|
|
894
908
|
cf_options.level_compaction_dynamic_level_bytes),
|
|
909
|
+
level_compaction_dynamic_file_size(
|
|
910
|
+
cf_options.level_compaction_dynamic_file_size),
|
|
895
911
|
num_levels(cf_options.num_levels),
|
|
896
912
|
optimize_filters_for_hits(cf_options.optimize_filters_for_hits),
|
|
897
913
|
force_consistency_checks(cf_options.force_consistency_checks),
|
|
898
914
|
preclude_last_level_data_seconds(
|
|
899
915
|
cf_options.preclude_last_level_data_seconds),
|
|
916
|
+
preserve_internal_time_seconds(cf_options.preserve_internal_time_seconds),
|
|
900
917
|
memtable_insert_with_hint_prefix_extractor(
|
|
901
918
|
cf_options.memtable_insert_with_hint_prefix_extractor),
|
|
902
919
|
cf_paths(cf_options.cf_paths),
|
|
@@ -1022,6 +1039,8 @@ void MutableCFOptions::Dump(Logger* log) const {
|
|
|
1022
1039
|
level0_stop_writes_trigger);
|
|
1023
1040
|
ROCKS_LOG_INFO(log, " max_compaction_bytes: %" PRIu64,
|
|
1024
1041
|
max_compaction_bytes);
|
|
1042
|
+
ROCKS_LOG_INFO(log, " ignore_max_compaction_bytes_for_input: %s",
|
|
1043
|
+
ignore_max_compaction_bytes_for_input ? "true" : "false");
|
|
1025
1044
|
ROCKS_LOG_INFO(log, " target_file_size_base: %" PRIu64,
|
|
1026
1045
|
target_file_size_base);
|
|
1027
1046
|
ROCKS_LOG_INFO(log, " target_file_size_multiplier: %d",
|
|
@@ -64,6 +64,8 @@ struct ImmutableCFOptions {
|
|
|
64
64
|
|
|
65
65
|
bool level_compaction_dynamic_level_bytes;
|
|
66
66
|
|
|
67
|
+
bool level_compaction_dynamic_file_size;
|
|
68
|
+
|
|
67
69
|
int num_levels;
|
|
68
70
|
|
|
69
71
|
bool optimize_filters_for_hits;
|
|
@@ -72,6 +74,8 @@ struct ImmutableCFOptions {
|
|
|
72
74
|
|
|
73
75
|
uint64_t preclude_last_level_data_seconds;
|
|
74
76
|
|
|
77
|
+
uint64_t preserve_internal_time_seconds;
|
|
78
|
+
|
|
75
79
|
std::shared_ptr<const SliceTransform>
|
|
76
80
|
memtable_insert_with_hint_prefix_extractor;
|
|
77
81
|
|
|
@@ -126,6 +130,8 @@ struct MutableCFOptions {
|
|
|
126
130
|
level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger),
|
|
127
131
|
level0_stop_writes_trigger(options.level0_stop_writes_trigger),
|
|
128
132
|
max_compaction_bytes(options.max_compaction_bytes),
|
|
133
|
+
ignore_max_compaction_bytes_for_input(
|
|
134
|
+
options.ignore_max_compaction_bytes_for_input),
|
|
129
135
|
target_file_size_base(options.target_file_size_base),
|
|
130
136
|
target_file_size_multiplier(options.target_file_size_multiplier),
|
|
131
137
|
max_bytes_for_level_base(options.max_bytes_for_level_base),
|
|
@@ -188,6 +194,7 @@ struct MutableCFOptions {
|
|
|
188
194
|
level0_slowdown_writes_trigger(0),
|
|
189
195
|
level0_stop_writes_trigger(0),
|
|
190
196
|
max_compaction_bytes(0),
|
|
197
|
+
ignore_max_compaction_bytes_for_input(true),
|
|
191
198
|
target_file_size_base(0),
|
|
192
199
|
target_file_size_multiplier(0),
|
|
193
200
|
max_bytes_for_level_base(0),
|
|
@@ -269,6 +276,7 @@ struct MutableCFOptions {
|
|
|
269
276
|
int level0_slowdown_writes_trigger;
|
|
270
277
|
int level0_stop_writes_trigger;
|
|
271
278
|
uint64_t max_compaction_bytes;
|
|
279
|
+
bool ignore_max_compaction_bytes_for_input;
|
|
272
280
|
uint64_t target_file_size_base;
|
|
273
281
|
int target_file_size_multiplier;
|
|
274
282
|
uint64_t max_bytes_for_level_base;
|
|
@@ -872,6 +872,7 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
872
872
|
} // namespace test
|
|
873
873
|
} // namespace ROCKSDB_NAMESPACE
|
|
874
874
|
int main(int argc, char** argv) {
|
|
875
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
875
876
|
::testing::InitGoogleTest(&argc, argv);
|
|
876
877
|
#ifdef GFLAGS
|
|
877
878
|
ParseCommandLineFlags(&argc, &argv, true);
|
|
@@ -71,6 +71,8 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
|
|
|
71
71
|
max_bytes_for_level_multiplier_additional(
|
|
72
72
|
options.max_bytes_for_level_multiplier_additional),
|
|
73
73
|
max_compaction_bytes(options.max_compaction_bytes),
|
|
74
|
+
ignore_max_compaction_bytes_for_input(
|
|
75
|
+
options.ignore_max_compaction_bytes_for_input),
|
|
74
76
|
soft_pending_compaction_bytes_limit(
|
|
75
77
|
options.soft_pending_compaction_bytes_limit),
|
|
76
78
|
hard_pending_compaction_bytes_limit(
|
|
@@ -94,6 +96,7 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
|
|
|
94
96
|
sample_for_compression(options.sample_for_compression),
|
|
95
97
|
preclude_last_level_data_seconds(
|
|
96
98
|
options.preclude_last_level_data_seconds),
|
|
99
|
+
preserve_internal_time_seconds(options.preserve_internal_time_seconds),
|
|
97
100
|
enable_blob_files(options.enable_blob_files),
|
|
98
101
|
min_blob_size(options.min_blob_size),
|
|
99
102
|
blob_file_size(options.blob_file_size),
|
|
@@ -280,6 +283,8 @@ void ColumnFamilyOptions::Dump(Logger* log) const {
|
|
|
280
283
|
ROCKS_LOG_HEADER(
|
|
281
284
|
log, " Options.max_compaction_bytes: %" PRIu64,
|
|
282
285
|
max_compaction_bytes);
|
|
286
|
+
ROCKS_LOG_HEADER(log, " Options.ignore_max_compaction_bytes_for_input: %s",
|
|
287
|
+
ignore_max_compaction_bytes_for_input ? "true" : "false");
|
|
283
288
|
ROCKS_LOG_HEADER(
|
|
284
289
|
log,
|
|
285
290
|
" Options.arena_block_size: %" ROCKSDB_PRIszt,
|
|
@@ -403,6 +408,8 @@ void ColumnFamilyOptions::Dump(Logger* log) const {
|
|
|
403
408
|
periodic_compaction_seconds);
|
|
404
409
|
ROCKS_LOG_HEADER(log, " Options.preclude_last_level_data_seconds: %" PRIu64,
|
|
405
410
|
preclude_last_level_data_seconds);
|
|
411
|
+
ROCKS_LOG_HEADER(log, " Options.preserve_internal_time_seconds: %" PRIu64,
|
|
412
|
+
preserve_internal_time_seconds);
|
|
406
413
|
ROCKS_LOG_HEADER(log, " Options.enable_blob_files: %s",
|
|
407
414
|
enable_blob_files ? "true" : "false");
|
|
408
415
|
ROCKS_LOG_HEADER(
|
|
@@ -229,6 +229,8 @@ void UpdateColumnFamilyOptions(const MutableCFOptions& moptions,
|
|
|
229
229
|
moptions.level0_slowdown_writes_trigger;
|
|
230
230
|
cf_opts->level0_stop_writes_trigger = moptions.level0_stop_writes_trigger;
|
|
231
231
|
cf_opts->max_compaction_bytes = moptions.max_compaction_bytes;
|
|
232
|
+
cf_opts->ignore_max_compaction_bytes_for_input =
|
|
233
|
+
moptions.ignore_max_compaction_bytes_for_input;
|
|
232
234
|
cf_opts->target_file_size_base = moptions.target_file_size_base;
|
|
233
235
|
cf_opts->target_file_size_multiplier = moptions.target_file_size_multiplier;
|
|
234
236
|
cf_opts->max_bytes_for_level_base = moptions.max_bytes_for_level_base;
|
|
@@ -301,6 +303,8 @@ void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions,
|
|
|
301
303
|
cf_opts->bloom_locality = ioptions.bloom_locality;
|
|
302
304
|
cf_opts->level_compaction_dynamic_level_bytes =
|
|
303
305
|
ioptions.level_compaction_dynamic_level_bytes;
|
|
306
|
+
cf_opts->level_compaction_dynamic_file_size =
|
|
307
|
+
ioptions.level_compaction_dynamic_file_size;
|
|
304
308
|
cf_opts->num_levels = ioptions.num_levels;
|
|
305
309
|
cf_opts->optimize_filters_for_hits = ioptions.optimize_filters_for_hits;
|
|
306
310
|
cf_opts->force_consistency_checks = ioptions.force_consistency_checks;
|
|
@@ -312,6 +316,8 @@ void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions,
|
|
|
312
316
|
cf_opts->blob_cache = ioptions.blob_cache;
|
|
313
317
|
cf_opts->preclude_last_level_data_seconds =
|
|
314
318
|
ioptions.preclude_last_level_data_seconds;
|
|
319
|
+
cf_opts->preserve_internal_time_seconds =
|
|
320
|
+
ioptions.preserve_internal_time_seconds;
|
|
315
321
|
|
|
316
322
|
// TODO(yhchiang): find some way to handle the following derived options
|
|
317
323
|
// * max_file_size
|
|
@@ -403,6 +403,8 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
|
|
403
403
|
sizeof(ColumnFamilyOptions::TablePropertiesCollectorFactories)},
|
|
404
404
|
{offsetof(struct ColumnFamilyOptions, preclude_last_level_data_seconds),
|
|
405
405
|
sizeof(uint64_t)},
|
|
406
|
+
{offsetof(struct ColumnFamilyOptions, preserve_internal_time_seconds),
|
|
407
|
+
sizeof(uint64_t)},
|
|
406
408
|
{offsetof(struct ColumnFamilyOptions, blob_cache),
|
|
407
409
|
sizeof(std::shared_ptr<Cache>)},
|
|
408
410
|
{offsetof(struct ColumnFamilyOptions, comparator), sizeof(Comparator*)},
|
|
@@ -484,6 +486,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
|
|
484
486
|
"max_write_buffer_number=84;"
|
|
485
487
|
"write_buffer_size=1653;"
|
|
486
488
|
"max_compaction_bytes=64;"
|
|
489
|
+
"ignore_max_compaction_bytes_for_input=true;"
|
|
487
490
|
"max_bytes_for_level_multiplier=60;"
|
|
488
491
|
"memtable_factory=SkipListFactory;"
|
|
489
492
|
"compression=kNoCompression;"
|
|
@@ -509,6 +512,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
|
|
509
512
|
"experimental_mempurge_threshold=0.0001;"
|
|
510
513
|
"optimize_filters_for_hits=false;"
|
|
511
514
|
"level_compaction_dynamic_level_bytes=false;"
|
|
515
|
+
"level_compaction_dynamic_file_size=true;"
|
|
512
516
|
"inplace_update_support=false;"
|
|
513
517
|
"compaction_style=kCompactionStyleFIFO;"
|
|
514
518
|
"compaction_pri=kMinOverlappingRatio;"
|
|
@@ -531,6 +535,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
|
|
531
535
|
"bottommost_temperature=kWarm;"
|
|
532
536
|
"last_level_temperature=kWarm;"
|
|
533
537
|
"preclude_last_level_data_seconds=86400;"
|
|
538
|
+
"preserve_internal_time_seconds=86400;"
|
|
534
539
|
"compaction_options_fifo={max_table_files_size=3;allow_"
|
|
535
540
|
"compaction=false;age_for_warm=1;};"
|
|
536
541
|
"blob_cache=1M;"
|
|
@@ -607,6 +612,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
|
|
607
612
|
} // namespace ROCKSDB_NAMESPACE
|
|
608
613
|
|
|
609
614
|
int main(int argc, char** argv) {
|
|
615
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
610
616
|
::testing::InitGoogleTest(&argc, argv);
|
|
611
617
|
#ifdef GFLAGS
|
|
612
618
|
ParseCommandLineFlags(&argc, &argv, true);
|