@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
|
@@ -613,7 +613,7 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
613
613
|
&new_cf_opt));
|
|
614
614
|
ASSERT_NE(new_cf_opt.blob_cache, nullptr);
|
|
615
615
|
ASSERT_EQ(new_cf_opt.blob_cache->GetCapacity(), 1024UL * 1024UL);
|
|
616
|
-
ASSERT_EQ(static_cast<
|
|
616
|
+
ASSERT_EQ(static_cast<ShardedCacheBase*>(new_cf_opt.blob_cache.get())
|
|
617
617
|
->GetNumShardBits(),
|
|
618
618
|
4);
|
|
619
619
|
ASSERT_EQ(new_cf_opt.blob_cache->HasStrictCapacityLimit(), true);
|
|
@@ -1064,15 +1064,18 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1064
1064
|
&new_opt));
|
|
1065
1065
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
1066
1066
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
1067
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1068
|
-
|
|
1067
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
1068
|
+
->GetNumShardBits(),
|
|
1069
|
+
4);
|
|
1069
1070
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
|
|
1070
1071
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
1071
1072
|
new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
|
|
1072
1073
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
1073
1074
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
|
|
1074
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1075
|
-
new_opt.block_cache_compressed)
|
|
1075
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
1076
|
+
new_opt.block_cache_compressed)
|
|
1077
|
+
->GetNumShardBits(),
|
|
1078
|
+
4);
|
|
1076
1079
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
|
|
1077
1080
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
1078
1081
|
new_opt.block_cache_compressed)->GetHighPriPoolRatio(),
|
|
@@ -1088,9 +1091,9 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1088
1091
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
1089
1092
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 2*1024UL*1024UL);
|
|
1090
1093
|
// Default values
|
|
1091
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
1095
|
+
->GetNumShardBits(),
|
|
1096
|
+
GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
|
|
1094
1097
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
|
|
1095
1098
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
|
|
1096
1099
|
->GetHighPriPoolRatio(),
|
|
@@ -1098,10 +1101,11 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1098
1101
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
1099
1102
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 2*1024UL*1024UL);
|
|
1100
1103
|
// Default values
|
|
1101
|
-
ASSERT_EQ(
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1104
|
+
ASSERT_EQ(
|
|
1105
|
+
std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
1106
|
+
new_opt.block_cache_compressed)
|
|
1107
|
+
->GetNumShardBits(),
|
|
1108
|
+
GetDefaultCacheShardBits(new_opt.block_cache_compressed->GetCapacity()));
|
|
1105
1109
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
|
|
1106
1110
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
1107
1111
|
->GetHighPriPoolRatio(),
|
|
@@ -1115,15 +1119,18 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1115
1119
|
"high_pri_pool_ratio=0.0;}",
|
|
1116
1120
|
&new_opt));
|
|
1117
1121
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 0);
|
|
1118
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1119
|
-
|
|
1122
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
1123
|
+
->GetNumShardBits(),
|
|
1124
|
+
5);
|
|
1120
1125
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
|
|
1121
1126
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
1122
1127
|
new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
|
|
1123
1128
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
1124
1129
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 0);
|
|
1125
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1126
|
-
new_opt.block_cache_compressed)
|
|
1130
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
1131
|
+
new_opt.block_cache_compressed)
|
|
1132
|
+
->GetNumShardBits(),
|
|
1133
|
+
5);
|
|
1127
1134
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
|
|
1128
1135
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
1129
1136
|
->GetHighPriPoolRatio(),
|
|
@@ -1139,16 +1146,19 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1139
1146
|
&new_opt));
|
|
1140
1147
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
1141
1148
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
1142
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1143
|
-
|
|
1149
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
1150
|
+
->GetNumShardBits(),
|
|
1151
|
+
4);
|
|
1144
1152
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
|
|
1145
1153
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
|
|
1146
1154
|
->GetHighPriPoolRatio(),
|
|
1147
1155
|
0.5);
|
|
1148
1156
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
1149
1157
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
|
|
1150
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
1151
|
-
new_opt.block_cache_compressed)
|
|
1158
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
1159
|
+
new_opt.block_cache_compressed)
|
|
1160
|
+
->GetNumShardBits(),
|
|
1161
|
+
4);
|
|
1152
1162
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
|
|
1153
1163
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
1154
1164
|
->GetHighPriPoolRatio(),
|
|
@@ -2322,6 +2332,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
2322
2332
|
{"target_file_size_multiplier", "13"},
|
|
2323
2333
|
{"max_bytes_for_level_base", "14"},
|
|
2324
2334
|
{"level_compaction_dynamic_level_bytes", "true"},
|
|
2335
|
+
{"level_compaction_dynamic_file_size", "true"},
|
|
2325
2336
|
{"max_bytes_for_level_multiplier", "15.0"},
|
|
2326
2337
|
{"max_bytes_for_level_multiplier_additional", "16:17:18"},
|
|
2327
2338
|
{"max_compaction_bytes", "21"},
|
|
@@ -2458,6 +2469,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
2458
2469
|
ASSERT_EQ(new_cf_opt.target_file_size_multiplier, 13);
|
|
2459
2470
|
ASSERT_EQ(new_cf_opt.max_bytes_for_level_base, 14U);
|
|
2460
2471
|
ASSERT_EQ(new_cf_opt.level_compaction_dynamic_level_bytes, true);
|
|
2472
|
+
ASSERT_EQ(new_cf_opt.level_compaction_dynamic_file_size, true);
|
|
2461
2473
|
ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier, 15.0);
|
|
2462
2474
|
ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier_additional.size(), 3U);
|
|
2463
2475
|
ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier_additional[0], 16);
|
|
@@ -2788,7 +2800,7 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
2788
2800
|
&new_cf_opt));
|
|
2789
2801
|
ASSERT_NE(new_cf_opt.blob_cache, nullptr);
|
|
2790
2802
|
ASSERT_EQ(new_cf_opt.blob_cache->GetCapacity(), 1024UL * 1024UL);
|
|
2791
|
-
ASSERT_EQ(static_cast<
|
|
2803
|
+
ASSERT_EQ(static_cast<ShardedCacheBase*>(new_cf_opt.blob_cache.get())
|
|
2792
2804
|
->GetNumShardBits(),
|
|
2793
2805
|
4);
|
|
2794
2806
|
ASSERT_EQ(new_cf_opt.blob_cache->HasStrictCapacityLimit(), true);
|
|
@@ -2968,15 +2980,18 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2968
2980
|
&new_opt));
|
|
2969
2981
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
2970
2982
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
2971
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
2972
|
-
|
|
2983
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
2984
|
+
->GetNumShardBits(),
|
|
2985
|
+
4);
|
|
2973
2986
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
|
|
2974
2987
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
2975
2988
|
new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
|
|
2976
2989
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
2977
2990
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
|
|
2978
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
2979
|
-
new_opt.block_cache_compressed)
|
|
2991
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
2992
|
+
new_opt.block_cache_compressed)
|
|
2993
|
+
->GetNumShardBits(),
|
|
2994
|
+
4);
|
|
2980
2995
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
|
|
2981
2996
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
2982
2997
|
new_opt.block_cache_compressed)->GetHighPriPoolRatio(),
|
|
@@ -2991,9 +3006,9 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2991
3006
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
2992
3007
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 2*1024UL*1024UL);
|
|
2993
3008
|
// Default values
|
|
2994
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
2995
|
-
|
|
2996
|
-
|
|
3009
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
3010
|
+
->GetNumShardBits(),
|
|
3011
|
+
GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
|
|
2997
3012
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
|
|
2998
3013
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
|
|
2999
3014
|
->GetHighPriPoolRatio(),
|
|
@@ -3001,10 +3016,11 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
3001
3016
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
3002
3017
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 2*1024UL*1024UL);
|
|
3003
3018
|
// Default values
|
|
3004
|
-
ASSERT_EQ(
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3019
|
+
ASSERT_EQ(
|
|
3020
|
+
std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
3021
|
+
new_opt.block_cache_compressed)
|
|
3022
|
+
->GetNumShardBits(),
|
|
3023
|
+
GetDefaultCacheShardBits(new_opt.block_cache_compressed->GetCapacity()));
|
|
3008
3024
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
|
|
3009
3025
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
3010
3026
|
->GetHighPriPoolRatio(),
|
|
@@ -3018,15 +3034,18 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
3018
3034
|
"high_pri_pool_ratio=0.0;}",
|
|
3019
3035
|
&new_opt));
|
|
3020
3036
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 0);
|
|
3021
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
3022
|
-
|
|
3037
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
3038
|
+
->GetNumShardBits(),
|
|
3039
|
+
5);
|
|
3023
3040
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
|
|
3024
3041
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
|
|
3025
3042
|
new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
|
|
3026
3043
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
3027
3044
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 0);
|
|
3028
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
3029
|
-
new_opt.block_cache_compressed)
|
|
3045
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
3046
|
+
new_opt.block_cache_compressed)
|
|
3047
|
+
->GetNumShardBits(),
|
|
3048
|
+
5);
|
|
3030
3049
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
|
|
3031
3050
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
3032
3051
|
->GetHighPriPoolRatio(),
|
|
@@ -3041,16 +3060,19 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
3041
3060
|
&new_opt));
|
|
3042
3061
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
3043
3062
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
3044
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
3045
|
-
|
|
3063
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
|
|
3064
|
+
->GetNumShardBits(),
|
|
3065
|
+
4);
|
|
3046
3066
|
ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
|
|
3047
3067
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
|
|
3048
3068
|
->GetHighPriPoolRatio(),
|
|
3049
3069
|
0.5);
|
|
3050
3070
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
3051
3071
|
ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
|
|
3052
|
-
ASSERT_EQ(std::dynamic_pointer_cast<
|
|
3053
|
-
new_opt.block_cache_compressed)
|
|
3072
|
+
ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
|
|
3073
|
+
new_opt.block_cache_compressed)
|
|
3074
|
+
->GetNumShardBits(),
|
|
3075
|
+
4);
|
|
3054
3076
|
ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
|
|
3055
3077
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
3056
3078
|
->GetHighPriPoolRatio(),
|
|
@@ -4983,6 +5005,7 @@ INSTANTIATE_TEST_CASE_P(OptionsSanityCheckTest, OptionsSanityCheckTest,
|
|
|
4983
5005
|
} // namespace ROCKSDB_NAMESPACE
|
|
4984
5006
|
|
|
4985
5007
|
int main(int argc, char** argv) {
|
|
5008
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
4986
5009
|
::testing::InitGoogleTest(&argc, argv);
|
|
4987
5010
|
#ifdef GFLAGS
|
|
4988
5011
|
ParseCommandLineFlags(&argc, &argv, true);
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
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 "port/mmap.h"
|
|
7
|
+
|
|
8
|
+
#include <cassert>
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <cstring>
|
|
11
|
+
#include <new>
|
|
12
|
+
#include <utility>
|
|
13
|
+
|
|
14
|
+
#include "util/hash.h"
|
|
15
|
+
|
|
16
|
+
namespace ROCKSDB_NAMESPACE {
|
|
17
|
+
|
|
18
|
+
MemMapping::~MemMapping() {
|
|
19
|
+
#ifdef OS_WIN
|
|
20
|
+
if (addr_ != nullptr) {
|
|
21
|
+
(void)::UnmapViewOfFile(addr_);
|
|
22
|
+
}
|
|
23
|
+
if (page_file_handle_ != NULL) {
|
|
24
|
+
(void)::CloseHandle(page_file_handle_);
|
|
25
|
+
}
|
|
26
|
+
#else // OS_WIN -> !OS_WIN
|
|
27
|
+
if (addr_ != nullptr) {
|
|
28
|
+
auto status = munmap(addr_, length_);
|
|
29
|
+
assert(status == 0);
|
|
30
|
+
if (status != 0) {
|
|
31
|
+
// TODO: handle error?
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
#endif // OS_WIN
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
MemMapping::MemMapping(MemMapping&& other) noexcept {
|
|
38
|
+
*this = std::move(other);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
MemMapping& MemMapping::operator=(MemMapping&& other) noexcept {
|
|
42
|
+
if (&other == this) {
|
|
43
|
+
return *this;
|
|
44
|
+
}
|
|
45
|
+
this->~MemMapping();
|
|
46
|
+
std::memcpy(this, &other, sizeof(*this));
|
|
47
|
+
new (&other) MemMapping();
|
|
48
|
+
return *this;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
MemMapping MemMapping::AllocateAnonymous(size_t length, bool huge) {
|
|
52
|
+
MemMapping mm;
|
|
53
|
+
mm.length_ = length;
|
|
54
|
+
assert(mm.addr_ == nullptr);
|
|
55
|
+
if (length == 0) {
|
|
56
|
+
// OK to leave addr as nullptr
|
|
57
|
+
return mm;
|
|
58
|
+
}
|
|
59
|
+
int huge_flag = 0;
|
|
60
|
+
#ifdef OS_WIN
|
|
61
|
+
if (huge) {
|
|
62
|
+
#ifdef FILE_MAP_LARGE_PAGES
|
|
63
|
+
huge_flag = FILE_MAP_LARGE_PAGES;
|
|
64
|
+
#endif // FILE_MAP_LARGE_PAGES
|
|
65
|
+
}
|
|
66
|
+
mm.page_file_handle_ = ::CreateFileMapping(
|
|
67
|
+
INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE | SEC_COMMIT,
|
|
68
|
+
Upper32of64(length), Lower32of64(length), nullptr);
|
|
69
|
+
if (mm.page_file_handle_ == NULL) {
|
|
70
|
+
// Failure
|
|
71
|
+
return mm;
|
|
72
|
+
}
|
|
73
|
+
mm.addr_ = ::MapViewOfFile(mm.page_file_handle_, FILE_MAP_WRITE | huge_flag,
|
|
74
|
+
0, 0, length);
|
|
75
|
+
#else // OS_WIN -> !OS_WIN
|
|
76
|
+
if (huge) {
|
|
77
|
+
#ifdef MAP_HUGETLB
|
|
78
|
+
huge_flag = MAP_HUGETLB;
|
|
79
|
+
#endif // MAP_HUGE_TLB
|
|
80
|
+
}
|
|
81
|
+
mm.addr_ = mmap(nullptr, length, PROT_READ | PROT_WRITE,
|
|
82
|
+
MAP_PRIVATE | MAP_ANONYMOUS | huge_flag, -1, 0);
|
|
83
|
+
if (mm.addr_ == MAP_FAILED) {
|
|
84
|
+
mm.addr_ = nullptr;
|
|
85
|
+
}
|
|
86
|
+
#endif // OS_WIN
|
|
87
|
+
return mm;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
MemMapping MemMapping::AllocateHuge(size_t length) {
|
|
91
|
+
return AllocateAnonymous(length, /*huge*/ true);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
MemMapping MemMapping::AllocateLazyZeroed(size_t length) {
|
|
95
|
+
return AllocateAnonymous(length, /*huge*/ false);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
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
|
+
#ifdef OS_WIN
|
|
9
|
+
#include <windows.h>
|
|
10
|
+
// ^^^ Must come first
|
|
11
|
+
#include <memoryapi.h>
|
|
12
|
+
#else
|
|
13
|
+
#include <sys/mman.h>
|
|
14
|
+
#endif // OS_WIN
|
|
15
|
+
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
|
|
18
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
19
|
+
|
|
20
|
+
namespace ROCKSDB_NAMESPACE {
|
|
21
|
+
|
|
22
|
+
// An RAII wrapper for mmaped memory
|
|
23
|
+
class MemMapping {
|
|
24
|
+
public:
|
|
25
|
+
static constexpr bool kHugePageSupported =
|
|
26
|
+
#if defined(MAP_HUGETLB) || defined(FILE_MAP_LARGE_PAGES)
|
|
27
|
+
true;
|
|
28
|
+
#else
|
|
29
|
+
false;
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
// Allocate memory requesting to be backed by huge pages
|
|
33
|
+
static MemMapping AllocateHuge(size_t length);
|
|
34
|
+
|
|
35
|
+
// Allocate memory that is only lazily mapped to resident memory and
|
|
36
|
+
// guaranteed to be zero-initialized. Note that some platforms like
|
|
37
|
+
// Linux allow memory over-commit, where only the used portion of memory
|
|
38
|
+
// matters, while other platforms require enough swap space (page file) to
|
|
39
|
+
// back the full mapping.
|
|
40
|
+
static MemMapping AllocateLazyZeroed(size_t length);
|
|
41
|
+
|
|
42
|
+
// No copies
|
|
43
|
+
MemMapping(const MemMapping&) = delete;
|
|
44
|
+
MemMapping& operator=(const MemMapping&) = delete;
|
|
45
|
+
// Move
|
|
46
|
+
MemMapping(MemMapping&&) noexcept;
|
|
47
|
+
MemMapping& operator=(MemMapping&&) noexcept;
|
|
48
|
+
|
|
49
|
+
// Releases the mapping
|
|
50
|
+
~MemMapping();
|
|
51
|
+
|
|
52
|
+
inline void* Get() const { return addr_; }
|
|
53
|
+
inline size_t Length() const { return length_; }
|
|
54
|
+
|
|
55
|
+
private:
|
|
56
|
+
MemMapping() {}
|
|
57
|
+
|
|
58
|
+
// The mapped memory, or nullptr on failure / not supported
|
|
59
|
+
void* addr_ = nullptr;
|
|
60
|
+
// The known usable number of bytes starting at that address
|
|
61
|
+
size_t length_ = 0;
|
|
62
|
+
|
|
63
|
+
#ifdef OS_WIN
|
|
64
|
+
HANDLE page_file_handle_ = NULL;
|
|
65
|
+
#endif // OS_WIN
|
|
66
|
+
|
|
67
|
+
static MemMapping AllocateAnonymous(size_t length, bool huge);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -35,6 +35,9 @@ void* SaveStack(int* /*num_frames*/, int /*first_frames_to_skip*/) {
|
|
|
35
35
|
#if defined(OS_FREEBSD)
|
|
36
36
|
#include <sys/sysctl.h>
|
|
37
37
|
#endif
|
|
38
|
+
#ifdef OS_LINUX
|
|
39
|
+
#include <sys/prctl.h>
|
|
40
|
+
#endif
|
|
38
41
|
|
|
39
42
|
#include "port/lang.h"
|
|
40
43
|
|
|
@@ -187,6 +190,10 @@ void InstallStackTraceHandler() {
|
|
|
187
190
|
signal(SIGSEGV, StackTraceHandler);
|
|
188
191
|
signal(SIGBUS, StackTraceHandler);
|
|
189
192
|
signal(SIGABRT, StackTraceHandler);
|
|
193
|
+
// Allow ouside debugger to attach, even with Yama security restrictions
|
|
194
|
+
#ifdef PR_SET_PTRACER_ANY
|
|
195
|
+
(void)prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
|
|
196
|
+
#endif
|
|
190
197
|
}
|
|
191
198
|
|
|
192
199
|
} // namespace port
|
|
@@ -12,7 +12,10 @@ namespace port {
|
|
|
12
12
|
|
|
13
13
|
// Install a signal handler to print callstack on the following signals:
|
|
14
14
|
// SIGILL SIGSEGV SIGBUS SIGABRT
|
|
15
|
-
//
|
|
15
|
+
// And also (Linux ony for now) overrides security settings to allow outside
|
|
16
|
+
// processes to attach to this one as a debugger. ONLY USE FOR NON-SECURITY
|
|
17
|
+
// CRITICAL PROCESSES such as unit tests or benchmarking tools.
|
|
18
|
+
// Currently supports only some POSIX implementations. No-op otherwise.
|
|
16
19
|
void InstallStackTraceHandler();
|
|
17
20
|
|
|
18
21
|
// Prints stack, skips skip_first_frames frames
|
|
@@ -246,13 +246,8 @@ inline void cacheline_aligned_free(void *memblock) {
|
|
|
246
246
|
|
|
247
247
|
extern const size_t kPageSize;
|
|
248
248
|
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
#ifndef __MINGW32__
|
|
252
|
-
#define ALIGN_AS(n) __declspec(align(n))
|
|
253
|
-
#else
|
|
254
|
-
#define ALIGN_AS(n)
|
|
255
|
-
#endif
|
|
249
|
+
// Part of C++11
|
|
250
|
+
#define ALIGN_AS(n) alignas(n)
|
|
256
251
|
|
|
257
252
|
static inline void AsmVolatilePause() {
|
|
258
253
|
#if defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM)
|
|
@@ -524,32 +524,32 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
524
524
|
|
|
525
525
|
// More complex test of shared key space, in case the instances are wrappers
|
|
526
526
|
// for some shared underlying cache.
|
|
527
|
-
|
|
527
|
+
CacheKey sentinel_key = CacheKey::CreateUniqueForProcessLifetime();
|
|
528
528
|
static char kRegularBlockCacheMarker = 'b';
|
|
529
529
|
static char kCompressedBlockCacheMarker = 'c';
|
|
530
530
|
static char kPersistentCacheMarker = 'p';
|
|
531
531
|
if (bbto.block_cache) {
|
|
532
532
|
bbto.block_cache
|
|
533
|
-
->Insert(
|
|
533
|
+
->Insert(sentinel_key.AsSlice(), &kRegularBlockCacheMarker, 1,
|
|
534
534
|
GetNoopDeleterForRole<CacheEntryRole::kMisc>())
|
|
535
535
|
.PermitUncheckedError();
|
|
536
536
|
}
|
|
537
537
|
if (bbto.block_cache_compressed) {
|
|
538
538
|
bbto.block_cache_compressed
|
|
539
|
-
->Insert(
|
|
539
|
+
->Insert(sentinel_key.AsSlice(), &kCompressedBlockCacheMarker, 1,
|
|
540
540
|
GetNoopDeleterForRole<CacheEntryRole::kMisc>())
|
|
541
541
|
.PermitUncheckedError();
|
|
542
542
|
}
|
|
543
543
|
if (bbto.persistent_cache) {
|
|
544
544
|
// Note: persistent cache copies the data, not keeping the pointer
|
|
545
545
|
bbto.persistent_cache
|
|
546
|
-
->Insert(
|
|
546
|
+
->Insert(sentinel_key.AsSlice(), &kPersistentCacheMarker, 1)
|
|
547
547
|
.PermitUncheckedError();
|
|
548
548
|
}
|
|
549
549
|
// If we get something different from what we inserted, that indicates
|
|
550
550
|
// dangerously overlapping key spaces.
|
|
551
551
|
if (bbto.block_cache) {
|
|
552
|
-
auto handle = bbto.block_cache->Lookup(
|
|
552
|
+
auto handle = bbto.block_cache->Lookup(sentinel_key.AsSlice());
|
|
553
553
|
if (handle) {
|
|
554
554
|
auto v = static_cast<char*>(bbto.block_cache->Value(handle));
|
|
555
555
|
char c = *v;
|
|
@@ -568,7 +568,7 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
568
568
|
}
|
|
569
569
|
}
|
|
570
570
|
if (bbto.block_cache_compressed) {
|
|
571
|
-
auto handle = bbto.block_cache_compressed->Lookup(
|
|
571
|
+
auto handle = bbto.block_cache_compressed->Lookup(sentinel_key.AsSlice());
|
|
572
572
|
if (handle) {
|
|
573
573
|
auto v = static_cast<char*>(bbto.block_cache_compressed->Value(handle));
|
|
574
574
|
char c = *v;
|
|
@@ -591,7 +591,7 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
591
591
|
if (bbto.persistent_cache) {
|
|
592
592
|
std::unique_ptr<char[]> data;
|
|
593
593
|
size_t size = 0;
|
|
594
|
-
bbto.persistent_cache->Lookup(
|
|
594
|
+
bbto.persistent_cache->Lookup(sentinel_key.AsSlice(), &data, &size)
|
|
595
595
|
.PermitUncheckedError();
|
|
596
596
|
if (data && size > 0) {
|
|
597
597
|
if (data[0] == kRegularBlockCacheMarker) {
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
|
|
22
22
|
#include "cache/cache_entry_roles.h"
|
|
23
23
|
#include "cache/cache_key.h"
|
|
24
|
-
#include "cache/sharded_cache.h"
|
|
25
24
|
#include "db/compaction/compaction_picker.h"
|
|
26
25
|
#include "db/dbformat.h"
|
|
27
26
|
#include "db/pinned_iterators_manager.h"
|
|
@@ -2026,8 +2025,9 @@ FragmentedRangeTombstoneIterator* BlockBasedTable::NewRangeTombstoneIterator(
|
|
|
2026
2025
|
if (read_options.snapshot != nullptr) {
|
|
2027
2026
|
snapshot = read_options.snapshot->GetSequenceNumber();
|
|
2028
2027
|
}
|
|
2029
|
-
return new FragmentedRangeTombstoneIterator(
|
|
2030
|
-
|
|
2028
|
+
return new FragmentedRangeTombstoneIterator(rep_->fragmented_range_dels,
|
|
2029
|
+
rep_->internal_comparator,
|
|
2030
|
+
snapshot, read_options.timestamp);
|
|
2031
2031
|
}
|
|
2032
2032
|
|
|
2033
2033
|
bool BlockBasedTable::FullFilterKeyMayMatch(
|
|
@@ -621,6 +621,7 @@ INSTANTIATE_TEST_CASE_P(P, IndexBlockTest,
|
|
|
621
621
|
} // namespace ROCKSDB_NAMESPACE
|
|
622
622
|
|
|
623
623
|
int main(int argc, char **argv) {
|
|
624
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
624
625
|
::testing::InitGoogleTest(&argc, argv);
|
|
625
626
|
return RUN_ALL_TESTS();
|
|
626
627
|
}
|
|
@@ -711,6 +711,7 @@ TEST(DataBlockHashIndex, BlockBoundary) {
|
|
|
711
711
|
} // namespace ROCKSDB_NAMESPACE
|
|
712
712
|
|
|
713
713
|
int main(int argc, char** argv) {
|
|
714
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
714
715
|
::testing::InitGoogleTest(&argc, argv);
|
|
715
716
|
return RUN_ALL_TESTS();
|
|
716
717
|
}
|
|
@@ -334,6 +334,7 @@ TEST_F(FullFilterBlockTest, SingleChunk) {
|
|
|
334
334
|
} // namespace ROCKSDB_NAMESPACE
|
|
335
335
|
|
|
336
336
|
int main(int argc, char** argv) {
|
|
337
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
337
338
|
::testing::InitGoogleTest(&argc, argv);
|
|
338
339
|
return RUN_ALL_TESTS();
|
|
339
340
|
}
|
|
@@ -429,6 +429,7 @@ TEST_P(PartitionedFilterBlockTest, PartitionCount) {
|
|
|
429
429
|
} // namespace ROCKSDB_NAMESPACE
|
|
430
430
|
|
|
431
431
|
int main(int argc, char** argv) {
|
|
432
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
432
433
|
::testing::InitGoogleTest(&argc, argv);
|
|
433
434
|
return RUN_ALL_TESTS();
|
|
434
435
|
}
|
|
@@ -630,6 +630,7 @@ TEST_F(CuckooBuilderTest, FailWhenSameKeyInserted) {
|
|
|
630
630
|
} // namespace ROCKSDB_NAMESPACE
|
|
631
631
|
|
|
632
632
|
int main(int argc, char** argv) {
|
|
633
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
633
634
|
::testing::InitGoogleTest(&argc, argv);
|
|
634
635
|
return RUN_ALL_TESTS();
|
|
635
636
|
}
|
|
@@ -556,6 +556,7 @@ TEST_F(CuckooReaderTest, TestReadPerformance) {
|
|
|
556
556
|
|
|
557
557
|
int main(int argc, char** argv) {
|
|
558
558
|
if (ROCKSDB_NAMESPACE::port::kLittleEndian) {
|
|
559
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
559
560
|
::testing::InitGoogleTest(&argc, argv);
|
|
560
561
|
ParseCommandLineFlags(&argc, &argv, true);
|
|
561
562
|
return RUN_ALL_TESTS();
|
|
@@ -250,6 +250,20 @@ bool GetContext::SaveValue(const ParsedInternalKey& parsed_key,
|
|
|
250
250
|
if (ts_sz > 0 && timestamp_ != nullptr) {
|
|
251
251
|
if (!timestamp_->empty()) {
|
|
252
252
|
assert(ts_sz == timestamp_->size());
|
|
253
|
+
// `timestamp` can be set before `SaveValue` is ever called
|
|
254
|
+
// when max_covering_tombstone_seq_ was set.
|
|
255
|
+
// If this key has a higher sequence number than range tombstone,
|
|
256
|
+
// then timestamp should be updated. `ts_from_rangetombstone_` is
|
|
257
|
+
// set to false afterwards so that only the key with highest seqno
|
|
258
|
+
// updates the timestamp.
|
|
259
|
+
if (ts_from_rangetombstone_) {
|
|
260
|
+
assert(max_covering_tombstone_seq_);
|
|
261
|
+
if (parsed_key.sequence > *max_covering_tombstone_seq_) {
|
|
262
|
+
Slice ts = ExtractTimestampFromUserKey(parsed_key.user_key, ts_sz);
|
|
263
|
+
timestamp_->assign(ts.data(), ts.size());
|
|
264
|
+
ts_from_rangetombstone_ = false;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
253
267
|
}
|
|
254
268
|
// TODO optimize for small size ts
|
|
255
269
|
const std::string kMaxTs(ts_sz, '\xff');
|
|
@@ -263,9 +277,13 @@ bool GetContext::SaveValue(const ParsedInternalKey& parsed_key,
|
|
|
263
277
|
auto type = parsed_key.type;
|
|
264
278
|
// Key matches. Process it
|
|
265
279
|
if ((type == kTypeValue || type == kTypeMerge || type == kTypeBlobIndex ||
|
|
266
|
-
type == kTypeWideColumnEntity
|
|
280
|
+
type == kTypeWideColumnEntity || type == kTypeDeletion ||
|
|
281
|
+
type == kTypeDeletionWithTimestamp || type == kTypeSingleDeletion) &&
|
|
267
282
|
max_covering_tombstone_seq_ != nullptr &&
|
|
268
283
|
*max_covering_tombstone_seq_ > parsed_key.sequence) {
|
|
284
|
+
// Note that deletion types are also considered, this is for the case
|
|
285
|
+
// when we need to return timestamp to user. If a range tombstone has a
|
|
286
|
+
// higher seqno than point tombstone, its timestamp should be returned.
|
|
269
287
|
type = kTypeRangeDeletion;
|
|
270
288
|
}
|
|
271
289
|
switch (type) {
|
|
@@ -148,6 +148,14 @@ class GetContext {
|
|
|
148
148
|
return max_covering_tombstone_seq_;
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
+
bool NeedTimestamp() { return timestamp_ != nullptr; }
|
|
152
|
+
|
|
153
|
+
void SetTimestampFromRangeTombstone(const Slice& timestamp) {
|
|
154
|
+
assert(timestamp_);
|
|
155
|
+
timestamp_->assign(timestamp.data(), timestamp.size());
|
|
156
|
+
ts_from_rangetombstone_ = true;
|
|
157
|
+
}
|
|
158
|
+
|
|
151
159
|
PinnedIteratorsManager* pinned_iters_mgr() { return pinned_iters_mgr_; }
|
|
152
160
|
|
|
153
161
|
// If a non-null string is passed, all the SaveValue calls will be
|
|
@@ -190,6 +198,7 @@ class GetContext {
|
|
|
190
198
|
PinnableSlice* pinnable_val_;
|
|
191
199
|
PinnableWideColumns* columns_;
|
|
192
200
|
std::string* timestamp_;
|
|
201
|
+
bool ts_from_rangetombstone_{false};
|
|
193
202
|
bool* value_found_; // Is value set correctly? Used by KeyMayExist
|
|
194
203
|
MergeContext* merge_context_;
|
|
195
204
|
SequenceNumber* max_covering_tombstone_seq_;
|