@nxtedition/rocksdb 7.1.29 → 7.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +34 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +15 -23
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +4 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -1
- package/deps/rocksdb/rocksdb/crash_test.mk +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +15 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +78 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +32 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +47 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +105 -166
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +46 -15
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +47 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +17 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +11 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +12 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +337 -103
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +524 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +164 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -23
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +30 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.h +9 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +29 -9
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +10 -7
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_set.cc +11 -6
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +59 -53
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +0 -2
- package/deps/rocksdb/rocksdb/env/env.cc +16 -19
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +20 -20
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +62 -60
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_test.cc +179 -176
- package/deps/rocksdb/rocksdb/env/file_system.cc +3 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -2
- package/deps/rocksdb/rocksdb/env/io_posix.h +1 -2
- package/deps/rocksdb/rocksdb/env/mock_env.h +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +4 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +6 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +2 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +6 -7
- package/deps/rocksdb/rocksdb/file/file_util.cc +1 -1
- package/deps/rocksdb/rocksdb/file/filename.cc +16 -17
- package/deps/rocksdb/rocksdb/file/filename.h +4 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +492 -496
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +1 -3
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +1 -0
- package/deps/rocksdb/rocksdb/file/read_write_util.h +1 -0
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +6 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/block_cache_trace_writer.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +166 -167
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +0 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +3 -7
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +20 -23
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger.cc +1 -3
- package/deps/rocksdb/rocksdb/logging/event_logger.h +4 -5
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +2 -1
- package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -3
- package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -2
- package/deps/rocksdb/rocksdb/logging/logging.h +3 -3
- package/deps/rocksdb/rocksdb/memory/allocator.h +1 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +2 -0
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -0
- package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +17 -20
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +13 -15
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +11 -10
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +3 -3
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +30 -28
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +4 -6
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +73 -70
- package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +1 -1
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +21 -23
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +24 -38
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +10 -17
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +19 -19
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +22 -30
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +4 -6
- package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +4 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +12 -14
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -3
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +7 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +12 -22
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +7 -10
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/port/lang.h +3 -1
- package/deps/rocksdb/rocksdb/port/likely.h +2 -2
- package/deps/rocksdb/rocksdb/port/mmap.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_dirent.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_posix.cc +32 -27
- package/deps/rocksdb/rocksdb/port/port_posix.h +31 -30
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -1
- package/deps/rocksdb/rocksdb/port/sys_time.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/io_win.h +6 -7
- package/deps/rocksdb/rocksdb/port/win/port_win.h +12 -20
- package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -4
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +30 -49
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +5 -5
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -62
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +2 -2
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +4 -3
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -6
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -6
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +90 -80
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +5 -4
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +63 -69
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +58 -57
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +3 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +35 -30
- package/deps/rocksdb/rocksdb/table/get_context.cc +16 -10
- package/deps/rocksdb/rocksdb/table/iter_heap.h +2 -0
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -3
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +31 -16
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +6 -6
- package/deps/rocksdb/rocksdb/table/multiget_context.h +5 -6
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +7 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +4 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +10 -21
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +14 -12
- package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +2 -5
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -3
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +0 -6
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +0 -33
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -6
- package/deps/rocksdb/rocksdb/table/table_properties.cc +24 -37
- package/deps/rocksdb/rocksdb/table/table_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +9 -8
- package/deps/rocksdb/rocksdb/table/table_test.cc +77 -82
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +8 -18
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +2 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +13 -18
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -7
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +1 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -7
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +3 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +296 -314
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +6 -6
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +57 -64
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +6 -5
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +10 -10
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +6 -3
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +12 -31
- package/deps/rocksdb/rocksdb/util/autovector.h +3 -6
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +12 -12
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +8 -12
- package/deps/rocksdb/rocksdb/util/coding.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding.h +17 -15
- package/deps/rocksdb/rocksdb/util/coding_test.cc +14 -15
- package/deps/rocksdb/rocksdb/util/comparator.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +6 -3
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +5 -8
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +202 -297
- package/deps/rocksdb/rocksdb/util/crc32c.h +2 -3
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +2 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +39 -54
- package/deps/rocksdb/rocksdb/util/defer.h +2 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +24 -29
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +4 -4
- package/deps/rocksdb/rocksdb/util/hash_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/heap.h +5 -4
- package/deps/rocksdb/rocksdb/util/heap_test.cc +15 -25
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.cc +7 -2
- package/deps/rocksdb/rocksdb/util/murmurhash.h +4 -3
- package/deps/rocksdb/rocksdb/util/mutexlock.h +5 -11
- package/deps/rocksdb/rocksdb/util/random.cc +1 -0
- package/deps/rocksdb/rocksdb/util/random.h +2 -4
- package/deps/rocksdb/rocksdb/util/random_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +4 -3
- package/deps/rocksdb/rocksdb/util/slice.cc +1 -1
- package/deps/rocksdb/rocksdb/util/slice_test.cc +1 -2
- package/deps/rocksdb/rocksdb/util/status.cc +2 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +64 -76
- package/deps/rocksdb/rocksdb/util/thread_local.cc +18 -32
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -3
- package/deps/rocksdb/rocksdb/util/thread_operation.h +34 -43
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +54 -73
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +18 -18
- package/deps/rocksdb/rocksdb/util/timer.h +4 -9
- package/deps/rocksdb/rocksdb/util/timer_queue.h +1 -0
- package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +1 -2
- package/deps/rocksdb/rocksdb/util/xxhash.h +7 -4
- package/deps/rocksdb/rocksdb/util/xxph3.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +16 -24
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +106 -104
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +11 -15
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +12 -12
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +56 -55
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +91 -74
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +17 -34
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +21 -45
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +74 -97
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +17 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +19 -19
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +19 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +7 -10
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +10 -15
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -13
- package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +7 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +2 -4
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +39 -50
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +5 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +3 -6
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +18 -13
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +1 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +15 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +14 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +5 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +2 -6
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +80 -79
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -17
- package/index.js +4 -0
- package/package.json +2 -2
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
package/binding.cc
CHANGED
|
@@ -608,6 +608,24 @@ napi_status InitOptions(napi_env env, T& columnOptions, const U& options) {
|
|
|
608
608
|
}
|
|
609
609
|
}
|
|
610
610
|
|
|
611
|
+
std::optional<std::string> compactionPriority;
|
|
612
|
+
NAPI_STATUS_RETURN(GetProperty(env, options, "compactionPriority", compactionPriority));
|
|
613
|
+
if (compactionPriority) {
|
|
614
|
+
if (compactionPriority == "byCompensatedSize") {
|
|
615
|
+
columnOptions.compaction_pri = rocksdb::kByCompensatedSize;
|
|
616
|
+
} else if (compactionPriority == "oldestLargestSeqFirst") {
|
|
617
|
+
columnOptions.compaction_pri = rocksdb::kOldestLargestSeqFirst;
|
|
618
|
+
} else if (compactionPriority == "smallestSeqFirst") {
|
|
619
|
+
columnOptions.compaction_pri = rocksdb::kOldestSmallestSeqFirst;
|
|
620
|
+
} else if (compactionPriority == "overlappingRatio") {
|
|
621
|
+
columnOptions.compaction_pri = rocksdb::kMinOverlappingRatio;
|
|
622
|
+
} else if (compactionPriority == "roundRobin") {
|
|
623
|
+
columnOptions.compaction_pri = rocksdb::kRoundRobin;
|
|
624
|
+
} else {
|
|
625
|
+
// Throw?
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
611
629
|
uint32_t cacheSize = 8 << 20;
|
|
612
630
|
NAPI_STATUS_RETURN(GetProperty(env, options, "cacheSize", cacheSize));
|
|
613
631
|
|
|
@@ -661,6 +679,21 @@ napi_status InitOptions(napi_env env, T& columnOptions, const U& options) {
|
|
|
661
679
|
return napi_ok;
|
|
662
680
|
}
|
|
663
681
|
|
|
682
|
+
NAPI_METHOD(db_get_identity) {
|
|
683
|
+
NAPI_ARGV(1);
|
|
684
|
+
|
|
685
|
+
Database* database;
|
|
686
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
687
|
+
|
|
688
|
+
std::string identity;
|
|
689
|
+
ROCKS_STATUS_THROWS_NAPI(database->db->GetDbIdentity(identity));
|
|
690
|
+
|
|
691
|
+
napi_value result;
|
|
692
|
+
NAPI_STATUS_THROWS(Convert(env, &identity, Encoding::String, result));
|
|
693
|
+
|
|
694
|
+
return result;
|
|
695
|
+
}
|
|
696
|
+
|
|
664
697
|
NAPI_METHOD(db_open) {
|
|
665
698
|
NAPI_ARGV(4);
|
|
666
699
|
|
|
@@ -1683,6 +1716,7 @@ NAPI_METHOD(db_flush_wal) {
|
|
|
1683
1716
|
NAPI_INIT() {
|
|
1684
1717
|
NAPI_EXPORT_FUNCTION(db_init);
|
|
1685
1718
|
NAPI_EXPORT_FUNCTION(db_open);
|
|
1719
|
+
NAPI_EXPORT_FUNCTION(db_get_identity);
|
|
1686
1720
|
NAPI_EXPORT_FUNCTION(db_close);
|
|
1687
1721
|
NAPI_EXPORT_FUNCTION(db_get_many);
|
|
1688
1722
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
@@ -1573,9 +1573,9 @@ endif()
|
|
|
1573
1573
|
|
|
1574
1574
|
option(WITH_TRACE_TOOLS "build with trace tools" ON)
|
|
1575
1575
|
if(WITH_TRACE_TOOLS)
|
|
1576
|
-
add_executable(
|
|
1576
|
+
add_executable(block_cache_trace_analyzer${ARTIFACT_SUFFIX}
|
|
1577
1577
|
tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc)
|
|
1578
|
-
target_link_libraries(
|
|
1578
|
+
target_link_libraries(block_cache_trace_analyzer${ARTIFACT_SUFFIX}
|
|
1579
1579
|
${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS})
|
|
1580
1580
|
|
|
1581
1581
|
add_executable(trace_analyzer${ARTIFACT_SUFFIX}
|
|
@@ -202,29 +202,21 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
202
202
|
cache->Erase(EncodeKey(key));
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
int Lookup(int key) {
|
|
206
|
-
return Lookup(cache_, key);
|
|
207
|
-
}
|
|
205
|
+
int Lookup(int key) { return Lookup(cache_, key); }
|
|
208
206
|
|
|
209
207
|
void Insert(int key, int value, int charge = 1) {
|
|
210
208
|
Insert(cache_, key, value, charge);
|
|
211
209
|
}
|
|
212
210
|
|
|
213
|
-
void Erase(int key) {
|
|
214
|
-
Erase(cache_, key);
|
|
215
|
-
}
|
|
211
|
+
void Erase(int key) { Erase(cache_, key); }
|
|
216
212
|
|
|
217
|
-
int Lookup2(int key) {
|
|
218
|
-
return Lookup(cache2_, key);
|
|
219
|
-
}
|
|
213
|
+
int Lookup2(int key) { return Lookup(cache2_, key); }
|
|
220
214
|
|
|
221
215
|
void Insert2(int key, int value, int charge = 1) {
|
|
222
216
|
Insert(cache2_, key, value, charge);
|
|
223
217
|
}
|
|
224
218
|
|
|
225
|
-
void Erase2(int key) {
|
|
226
|
-
Erase(cache2_, key);
|
|
227
|
-
}
|
|
219
|
+
void Erase2(int key) { Erase(cache2_, key); }
|
|
228
220
|
};
|
|
229
221
|
|
|
230
222
|
CacheTest* CacheTest::current_;
|
|
@@ -418,13 +410,13 @@ TEST_P(CacheTest, HitAndMiss) {
|
|
|
418
410
|
|
|
419
411
|
Insert(100, 101);
|
|
420
412
|
ASSERT_EQ(101, Lookup(100));
|
|
421
|
-
ASSERT_EQ(-1,
|
|
422
|
-
ASSERT_EQ(-1,
|
|
413
|
+
ASSERT_EQ(-1, Lookup(200));
|
|
414
|
+
ASSERT_EQ(-1, Lookup(300));
|
|
423
415
|
|
|
424
416
|
Insert(200, 201);
|
|
425
417
|
ASSERT_EQ(101, Lookup(100));
|
|
426
418
|
ASSERT_EQ(201, Lookup(200));
|
|
427
|
-
ASSERT_EQ(-1,
|
|
419
|
+
ASSERT_EQ(-1, Lookup(300));
|
|
428
420
|
|
|
429
421
|
Insert(100, 102);
|
|
430
422
|
if (GetParam() == kHyperClock) {
|
|
@@ -434,7 +426,7 @@ TEST_P(CacheTest, HitAndMiss) {
|
|
|
434
426
|
ASSERT_EQ(102, Lookup(100));
|
|
435
427
|
}
|
|
436
428
|
ASSERT_EQ(201, Lookup(200));
|
|
437
|
-
ASSERT_EQ(-1,
|
|
429
|
+
ASSERT_EQ(-1, Lookup(300));
|
|
438
430
|
|
|
439
431
|
ASSERT_EQ(1U, deleted_keys_.size());
|
|
440
432
|
ASSERT_EQ(100, deleted_keys_[0]);
|
|
@@ -463,14 +455,14 @@ TEST_P(CacheTest, Erase) {
|
|
|
463
455
|
Insert(100, 101);
|
|
464
456
|
Insert(200, 201);
|
|
465
457
|
Erase(100);
|
|
466
|
-
ASSERT_EQ(-1,
|
|
458
|
+
ASSERT_EQ(-1, Lookup(100));
|
|
467
459
|
ASSERT_EQ(201, Lookup(200));
|
|
468
460
|
ASSERT_EQ(1U, deleted_keys_.size());
|
|
469
461
|
ASSERT_EQ(100, deleted_keys_[0]);
|
|
470
462
|
ASSERT_EQ(101, deleted_values_[0]);
|
|
471
463
|
|
|
472
464
|
Erase(100);
|
|
473
|
-
ASSERT_EQ(-1,
|
|
465
|
+
ASSERT_EQ(-1, Lookup(100));
|
|
474
466
|
ASSERT_EQ(201, Lookup(200));
|
|
475
467
|
ASSERT_EQ(1U, deleted_keys_.size());
|
|
476
468
|
}
|
|
@@ -515,7 +507,7 @@ TEST_P(CacheTest, EvictionPolicy) {
|
|
|
515
507
|
Insert(200, 201);
|
|
516
508
|
// Frequently used entry must be kept around
|
|
517
509
|
for (int i = 0; i < 2 * kCacheSize; i++) {
|
|
518
|
-
Insert(1000+i, 2000+i);
|
|
510
|
+
Insert(1000 + i, 2000 + i);
|
|
519
511
|
ASSERT_EQ(101, Lookup(100));
|
|
520
512
|
}
|
|
521
513
|
ASSERT_EQ(101, Lookup(100));
|
|
@@ -686,7 +678,7 @@ TEST_P(CacheTest, HeavyEntries) {
|
|
|
686
678
|
ASSERT_EQ(1000 + i, r);
|
|
687
679
|
}
|
|
688
680
|
}
|
|
689
|
-
ASSERT_LE(cached_weight, kCacheSize + kCacheSize/10);
|
|
681
|
+
ASSERT_LE(cached_weight, kCacheSize + kCacheSize / 10);
|
|
690
682
|
}
|
|
691
683
|
|
|
692
684
|
TEST_P(CacheTest, NewId) {
|
|
@@ -704,7 +696,7 @@ class Value {
|
|
|
704
696
|
|
|
705
697
|
namespace {
|
|
706
698
|
void deleter(const Slice& /*key*/, void* value) {
|
|
707
|
-
delete static_cast<Value
|
|
699
|
+
delete static_cast<Value*>(value);
|
|
708
700
|
}
|
|
709
701
|
} // namespace
|
|
710
702
|
|
|
@@ -859,7 +851,7 @@ TEST_P(CacheTest, OverCapacity) {
|
|
|
859
851
|
// a LRUCache with n entries and one shard only
|
|
860
852
|
std::shared_ptr<Cache> cache = NewCache(n, 0, false);
|
|
861
853
|
|
|
862
|
-
std::vector<Cache::Handle*> handles(n+1);
|
|
854
|
+
std::vector<Cache::Handle*> handles(n + 1);
|
|
863
855
|
|
|
864
856
|
// Insert n+1 entries, but not releasing.
|
|
865
857
|
for (int i = 0; i < static_cast<int>(n + 1); i++) {
|
|
@@ -919,7 +911,7 @@ void legacy_callback(void* value, size_t charge) {
|
|
|
919
911
|
legacy_callback_state.push_back(
|
|
920
912
|
{DecodeValue(value), static_cast<int>(charge)});
|
|
921
913
|
}
|
|
922
|
-
};
|
|
914
|
+
}; // namespace
|
|
923
915
|
|
|
924
916
|
TEST_P(CacheTest, ApplyToAllCacheEntriesTest) {
|
|
925
917
|
std::vector<std::pair<int, int>> inserted;
|
|
@@ -386,7 +386,7 @@ Status LRUCacheShard::InsertItem(LRUHandle* e, LRUHandle** handle,
|
|
|
386
386
|
last_reference_list.push_back(e);
|
|
387
387
|
} else {
|
|
388
388
|
if (free_handle_on_fail) {
|
|
389
|
-
|
|
389
|
+
free(e);
|
|
390
390
|
*handle = nullptr;
|
|
391
391
|
}
|
|
392
392
|
s = Status::MemoryLimit("Insert failed due to LRU cache being full.");
|
|
@@ -559,8 +559,7 @@ LRUHandle* LRUCacheShard::Lookup(const Slice& key, uint32_t hash,
|
|
|
559
559
|
secondary_cache_->Lookup(key, create_cb, wait, found_dummy_entry,
|
|
560
560
|
is_in_sec_cache);
|
|
561
561
|
if (secondary_handle != nullptr) {
|
|
562
|
-
e =
|
|
563
|
-
new char[sizeof(LRUHandle) - 1 + key.size()]);
|
|
562
|
+
e = static_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size()));
|
|
564
563
|
|
|
565
564
|
e->m_flags = 0;
|
|
566
565
|
e->im_flags = 0;
|
|
@@ -683,8 +682,8 @@ Status LRUCacheShard::Insert(const Slice& key, uint32_t hash, void* value,
|
|
|
683
682
|
// Allocate the memory here outside of the mutex.
|
|
684
683
|
// If the cache is full, we'll have to release it.
|
|
685
684
|
// It shouldn't happen very often though.
|
|
686
|
-
LRUHandle* e =
|
|
687
|
-
|
|
685
|
+
LRUHandle* e =
|
|
686
|
+
static_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size()));
|
|
688
687
|
|
|
689
688
|
e->value = value;
|
|
690
689
|
e->m_flags = 0;
|
|
@@ -212,6 +212,7 @@ struct LRUHandle {
|
|
|
212
212
|
|
|
213
213
|
void Free() {
|
|
214
214
|
assert(refs == 0);
|
|
215
|
+
|
|
215
216
|
if (!IsSecondaryCacheCompatible() && info_.deleter) {
|
|
216
217
|
(*info_.deleter)(key(), value);
|
|
217
218
|
} else if (IsSecondaryCacheCompatible()) {
|
|
@@ -226,7 +227,8 @@ struct LRUHandle {
|
|
|
226
227
|
(*info_.helper->del_cb)(key(), value);
|
|
227
228
|
}
|
|
228
229
|
}
|
|
229
|
-
|
|
230
|
+
|
|
231
|
+
free(this);
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
inline size_t CalcuMetaCharge(
|
|
@@ -8,7 +8,7 @@ DB_STRESS_CMD?=./db_stress
|
|
|
8
8
|
include common.mk
|
|
9
9
|
|
|
10
10
|
CRASHTEST_MAKE=$(MAKE) -f crash_test.mk
|
|
11
|
-
CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD)
|
|
11
|
+
CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --cleanup_cmd='$(DB_CLEANUP_CMD)'
|
|
12
12
|
|
|
13
13
|
.PHONY: crash_test crash_test_with_atomic_flush crash_test_with_txn \
|
|
14
14
|
crash_test_with_best_efforts_recovery crash_test_with_ts \
|
|
@@ -22,6 +22,8 @@ constexpr uint32_t kVersion1 = 1;
|
|
|
22
22
|
|
|
23
23
|
using ExpirationRange = std::pair<uint64_t, uint64_t>;
|
|
24
24
|
|
|
25
|
+
// clang-format off
|
|
26
|
+
|
|
25
27
|
// Format of blob log file header (30 bytes):
|
|
26
28
|
//
|
|
27
29
|
// +--------------+---------+---------+-------+-------------+-------------------+
|
|
@@ -35,6 +37,9 @@ using ExpirationRange = std::pair<uint64_t, uint64_t>;
|
|
|
35
37
|
//
|
|
36
38
|
// Expiration range in the header is a rough range based on
|
|
37
39
|
// blob_db_options.ttl_range_secs.
|
|
40
|
+
|
|
41
|
+
// clang-format on
|
|
42
|
+
|
|
38
43
|
struct BlobLogHeader {
|
|
39
44
|
static constexpr size_t kSize = 30;
|
|
40
45
|
|
|
@@ -57,6 +62,8 @@ struct BlobLogHeader {
|
|
|
57
62
|
Status DecodeFrom(Slice slice);
|
|
58
63
|
};
|
|
59
64
|
|
|
65
|
+
// clang-format off
|
|
66
|
+
|
|
60
67
|
// Format of blob log file footer (32 bytes):
|
|
61
68
|
//
|
|
62
69
|
// +--------------+------------+-------------------+------------+
|
|
@@ -69,6 +76,9 @@ struct BlobLogHeader {
|
|
|
69
76
|
//
|
|
70
77
|
// Unlike the same field in file header, expiration range in the footer is the
|
|
71
78
|
// range of smallest and largest expiration of the data in this file.
|
|
79
|
+
|
|
80
|
+
// clang-format on
|
|
81
|
+
|
|
72
82
|
struct BlobLogFooter {
|
|
73
83
|
static constexpr size_t kSize = 32;
|
|
74
84
|
|
|
@@ -81,6 +91,8 @@ struct BlobLogFooter {
|
|
|
81
91
|
Status DecodeFrom(Slice slice);
|
|
82
92
|
};
|
|
83
93
|
|
|
94
|
+
// clang-format off
|
|
95
|
+
|
|
84
96
|
// Blob record format (32 bytes header + key + value):
|
|
85
97
|
//
|
|
86
98
|
// +------------+--------------+------------+------------+----------+---------+-----------+
|
|
@@ -100,6 +112,9 @@ struct BlobLogFooter {
|
|
|
100
112
|
//
|
|
101
113
|
// We could use variable length encoding (Varint64) to save more space, but it
|
|
102
114
|
// make reader more complicated.
|
|
115
|
+
|
|
116
|
+
// clang-format on
|
|
117
|
+
|
|
103
118
|
struct BlobLogRecord {
|
|
104
119
|
// header include fields up to blob CRC
|
|
105
120
|
static constexpr size_t kHeaderSize = 32;
|
|
@@ -779,7 +779,7 @@ TEST_F(DBBlobBasicTest, MultiGetBlobsFromMultipleFiles) {
|
|
|
779
779
|
Options options = GetDefaultOptions();
|
|
780
780
|
|
|
781
781
|
LRUCacheOptions co;
|
|
782
|
-
co.capacity = 2 << 20;
|
|
782
|
+
co.capacity = 2 << 20; // 2MB
|
|
783
783
|
co.num_shard_bits = 2;
|
|
784
784
|
co.metadata_charge_policy = kDontChargeCacheMetadata;
|
|
785
785
|
auto backing_cache = NewLRUCache(co);
|
|
@@ -1211,11 +1211,14 @@ Compaction* ColumnFamilyData::CompactRange(
|
|
|
1211
1211
|
const InternalKey* begin, const InternalKey* end,
|
|
1212
1212
|
InternalKey** compaction_end, bool* conflict,
|
|
1213
1213
|
uint64_t max_file_num_to_ignore, const std::string& trim_ts) {
|
|
1214
|
+
SequenceNumber earliest_mem_seqno =
|
|
1215
|
+
std::min(mem_->GetEarliestSequenceNumber(),
|
|
1216
|
+
imm_.current()->GetEarliestSequenceNumber(false));
|
|
1214
1217
|
auto* result = compaction_picker_->CompactRange(
|
|
1215
1218
|
GetName(), mutable_cf_options, mutable_db_options,
|
|
1216
1219
|
current_->storage_info(), input_level, output_level,
|
|
1217
1220
|
compact_range_options, begin, end, compaction_end, conflict,
|
|
1218
|
-
max_file_num_to_ignore, trim_ts);
|
|
1221
|
+
max_file_num_to_ignore, trim_ts, earliest_mem_seqno);
|
|
1219
1222
|
if (result != nullptr) {
|
|
1220
1223
|
result->SetInputVersion(current_);
|
|
1221
1224
|
}
|
|
@@ -259,7 +259,7 @@ Compaction::Compaction(
|
|
|
259
259
|
? mutable_cf_options()->blob_garbage_collection_age_cutoff
|
|
260
260
|
: _blob_garbage_collection_age_cutoff),
|
|
261
261
|
penultimate_level_(EvaluatePenultimateLevel(
|
|
262
|
-
immutable_options_, start_level_, output_level_)) {
|
|
262
|
+
vstorage, immutable_options_, start_level_, output_level_)) {
|
|
263
263
|
MarkFilesBeingCompacted(true);
|
|
264
264
|
if (is_manual_compaction_) {
|
|
265
265
|
compaction_reason_ = CompactionReason::kManualCompaction;
|
|
@@ -322,13 +322,67 @@ void Compaction::PopulatePenultimateLevelOutputRange() {
|
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
325
|
+
// exclude the last level, the range of all input levels is the safe range
|
|
326
|
+
// of keys that can be moved up.
|
|
327
|
+
int exclude_level = number_levels_ - 1;
|
|
328
|
+
penultimate_output_range_type_ = PenultimateOutputRangeType::kNonLastRange;
|
|
329
|
+
|
|
330
|
+
// For universal compaction, the penultimate_output_range could be extended if
|
|
331
|
+
// all penultimate level files are included in the compaction (which includes
|
|
332
|
+
// the case that the penultimate level is empty).
|
|
333
|
+
if (immutable_options_.compaction_style == kCompactionStyleUniversal) {
|
|
334
|
+
exclude_level = kInvalidLevel;
|
|
335
|
+
std::set<uint64_t> penultimate_inputs;
|
|
336
|
+
for (const auto& input_lvl : inputs_) {
|
|
337
|
+
if (input_lvl.level == penultimate_level_) {
|
|
338
|
+
for (const auto& file : input_lvl.files) {
|
|
339
|
+
penultimate_inputs.emplace(file->fd.GetNumber());
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
auto penultimate_files = input_vstorage_->LevelFiles(penultimate_level_);
|
|
344
|
+
for (const auto& file : penultimate_files) {
|
|
345
|
+
if (penultimate_inputs.find(file->fd.GetNumber()) ==
|
|
346
|
+
penultimate_inputs.end()) {
|
|
347
|
+
exclude_level = number_levels_ - 1;
|
|
348
|
+
penultimate_output_range_type_ = PenultimateOutputRangeType::kFullRange;
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
329
354
|
GetBoundaryKeys(input_vstorage_, inputs_,
|
|
330
355
|
&penultimate_level_smallest_user_key_,
|
|
331
356
|
&penultimate_level_largest_user_key_, exclude_level);
|
|
357
|
+
|
|
358
|
+
// If there's a case that the penultimate level output range is overlapping
|
|
359
|
+
// with the existing files, disable the penultimate level output by setting
|
|
360
|
+
// the range to empty. One example is the range delete could have overlap
|
|
361
|
+
// boundary with the next file. (which is actually a false overlap)
|
|
362
|
+
// TODO: Exclude such false overlap, so it won't disable the penultimate
|
|
363
|
+
// output.
|
|
364
|
+
std::set<uint64_t> penultimate_inputs;
|
|
365
|
+
for (const auto& input_lvl : inputs_) {
|
|
366
|
+
if (input_lvl.level == penultimate_level_) {
|
|
367
|
+
for (const auto& file : input_lvl.files) {
|
|
368
|
+
penultimate_inputs.emplace(file->fd.GetNumber());
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
auto penultimate_files = input_vstorage_->LevelFiles(penultimate_level_);
|
|
374
|
+
for (const auto& file : penultimate_files) {
|
|
375
|
+
if (penultimate_inputs.find(file->fd.GetNumber()) ==
|
|
376
|
+
penultimate_inputs.end() &&
|
|
377
|
+
OverlapPenultimateLevelOutputRange(file->smallest.user_key(),
|
|
378
|
+
file->largest.user_key())) {
|
|
379
|
+
// basically disable the penultimate range output. which should be rare
|
|
380
|
+
// or a false overlap caused by range del
|
|
381
|
+
penultimate_level_smallest_user_key_ = "";
|
|
382
|
+
penultimate_level_largest_user_key_ = "";
|
|
383
|
+
penultimate_output_range_type_ = PenultimateOutputRangeType::kDisabled;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
332
386
|
}
|
|
333
387
|
|
|
334
388
|
Compaction::~Compaction() {
|
|
@@ -368,6 +422,11 @@ bool Compaction::WithinPenultimateLevelOutputRange(const Slice& key) const {
|
|
|
368
422
|
return false;
|
|
369
423
|
}
|
|
370
424
|
|
|
425
|
+
if (penultimate_level_smallest_user_key_.empty() ||
|
|
426
|
+
penultimate_level_largest_user_key_.empty()) {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
|
|
371
430
|
const Comparator* ucmp =
|
|
372
431
|
input_vstorage_->InternalComparator()->user_comparator();
|
|
373
432
|
|
|
@@ -749,6 +808,7 @@ uint64_t Compaction::MinInputFileOldestAncesterTime(
|
|
|
749
808
|
}
|
|
750
809
|
|
|
751
810
|
int Compaction::EvaluatePenultimateLevel(
|
|
811
|
+
const VersionStorageInfo* vstorage,
|
|
752
812
|
const ImmutableOptions& immutable_options, const int start_level,
|
|
753
813
|
const int output_level) {
|
|
754
814
|
// TODO: currently per_key_placement feature only support level and universal
|
|
@@ -763,7 +823,19 @@ int Compaction::EvaluatePenultimateLevel(
|
|
|
763
823
|
|
|
764
824
|
int penultimate_level = output_level - 1;
|
|
765
825
|
assert(penultimate_level < immutable_options.num_levels);
|
|
766
|
-
if (penultimate_level <= 0
|
|
826
|
+
if (penultimate_level <= 0) {
|
|
827
|
+
return kInvalidLevel;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
// If the penultimate level is not within input level -> output level range
|
|
831
|
+
// check if the penultimate output level is empty, if it's empty, it could
|
|
832
|
+
// also be locked for the penultimate output.
|
|
833
|
+
// TODO: ideally, it only needs to check if there's a file within the
|
|
834
|
+
// compaction output key range. For simplicity, it just check if there's any
|
|
835
|
+
// file on the penultimate level.
|
|
836
|
+
if (start_level == immutable_options.num_levels - 1 &&
|
|
837
|
+
(immutable_options.compaction_style != kCompactionStyleUniversal ||
|
|
838
|
+
!vstorage->LevelFiles(penultimate_level).empty())) {
|
|
767
839
|
return kInvalidLevel;
|
|
768
840
|
}
|
|
769
841
|
|
|
@@ -87,6 +87,15 @@ class Compaction {
|
|
|
87
87
|
BlobGarbageCollectionPolicy::kUseDefault,
|
|
88
88
|
double blob_garbage_collection_age_cutoff = -1);
|
|
89
89
|
|
|
90
|
+
// The type of the penultimate level output range
|
|
91
|
+
enum class PenultimateOutputRangeType : int {
|
|
92
|
+
kNotSupported, // it cannot output to the penultimate level
|
|
93
|
+
kFullRange, // any data could be output to the penultimate level
|
|
94
|
+
kNonLastRange, // only the keys within non_last_level compaction inputs can
|
|
95
|
+
// be outputted to the penultimate level
|
|
96
|
+
kDisabled, // no data can be outputted to the penultimate level
|
|
97
|
+
};
|
|
98
|
+
|
|
90
99
|
// No copying allowed
|
|
91
100
|
Compaction(const Compaction&) = delete;
|
|
92
101
|
void operator=(const Compaction&) = delete;
|
|
@@ -310,6 +319,18 @@ class Compaction {
|
|
|
310
319
|
|
|
311
320
|
Slice GetLargestUserKey() const { return largest_user_key_; }
|
|
312
321
|
|
|
322
|
+
Slice GetPenultimateLevelSmallestUserKey() const {
|
|
323
|
+
return penultimate_level_smallest_user_key_;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
Slice GetPenultimateLevelLargestUserKey() const {
|
|
327
|
+
return penultimate_level_largest_user_key_;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
PenultimateOutputRangeType GetPenultimateOutputRangeType() const {
|
|
331
|
+
return penultimate_output_range_type_;
|
|
332
|
+
}
|
|
333
|
+
|
|
313
334
|
// Return true if the compaction supports per_key_placement
|
|
314
335
|
bool SupportsPerKeyPlacement() const;
|
|
315
336
|
|
|
@@ -369,11 +390,18 @@ class Compaction {
|
|
|
369
390
|
}
|
|
370
391
|
|
|
371
392
|
static constexpr int kInvalidLevel = -1;
|
|
393
|
+
|
|
372
394
|
// Evaluate penultimate output level. If the compaction supports
|
|
373
395
|
// per_key_placement feature, it returns the penultimate level number.
|
|
374
396
|
// Otherwise, it's set to kInvalidLevel (-1), which means
|
|
375
397
|
// output_to_penultimate_level is not supported.
|
|
376
|
-
|
|
398
|
+
// Note: even the penultimate level output is supported (PenultimateLevel !=
|
|
399
|
+
// kInvalidLevel), some key range maybe unsafe to be outputted to the
|
|
400
|
+
// penultimate level. The safe key range is populated by
|
|
401
|
+
// `PopulatePenultimateLevelOutputRange()`.
|
|
402
|
+
// Which could potentially disable all penultimate level output.
|
|
403
|
+
static int EvaluatePenultimateLevel(const VersionStorageInfo* vstorage,
|
|
404
|
+
const ImmutableOptions& immutable_options,
|
|
377
405
|
const int start_level,
|
|
378
406
|
const int output_level);
|
|
379
407
|
|
|
@@ -390,11 +418,6 @@ class Compaction {
|
|
|
390
418
|
// populate penultimate level output range, which will be used to determine if
|
|
391
419
|
// a key is safe to output to the penultimate level (details see
|
|
392
420
|
// `Compaction::WithinPenultimateLevelOutputRange()`.
|
|
393
|
-
// TODO: Currently the penultimate level output range is the min/max keys of
|
|
394
|
-
// non-last-level input files. Which is only good if there's no key moved
|
|
395
|
-
// from the last level to the penultimate level. For a more complicated per
|
|
396
|
-
// key placement which may move data from the last level to the penultimate
|
|
397
|
-
// level, it needs extra check.
|
|
398
421
|
void PopulatePenultimateLevelOutputRange();
|
|
399
422
|
|
|
400
423
|
// Get the atomic file boundaries for all files in the compaction. Necessary
|
|
@@ -503,8 +526,11 @@ class Compaction {
|
|
|
503
526
|
|
|
504
527
|
// Key range for penultimate level output
|
|
505
528
|
// includes timestamp if user-defined timestamp is enabled.
|
|
529
|
+
// penultimate_output_range_type_ shows the range type
|
|
506
530
|
Slice penultimate_level_smallest_user_key_;
|
|
507
531
|
Slice penultimate_level_largest_user_key_;
|
|
532
|
+
PenultimateOutputRangeType penultimate_output_range_type_ =
|
|
533
|
+
PenultimateOutputRangeType::kNotSupported;
|
|
508
534
|
};
|
|
509
535
|
|
|
510
536
|
#ifndef NDEBUG
|
|
@@ -825,8 +825,8 @@ void CompactionIterator::NextFromInput() {
|
|
|
825
825
|
cmp_with_history_ts_low_ < 0)) &&
|
|
826
826
|
bottommost_level_) {
|
|
827
827
|
// Handle the case where we have a delete key at the bottom most level
|
|
828
|
-
// We can skip outputting the key iff there are no subsequent puts for
|
|
829
|
-
// key
|
|
828
|
+
// We can skip outputting the key iff there are no subsequent puts for
|
|
829
|
+
// this key
|
|
830
830
|
assert(!compaction_ || compaction_->KeyNotExistsBeyondOutputLevel(
|
|
831
831
|
ikey_.user_key, &level_ptrs_));
|
|
832
832
|
ParsedInternalKey next_ikey;
|
|
@@ -853,8 +853,8 @@ void CompactionIterator::NextFromInput() {
|
|
|
853
853
|
DefinitelyNotInSnapshot(next_ikey.sequence, prev_snapshot))) {
|
|
854
854
|
AdvanceInputIter();
|
|
855
855
|
}
|
|
856
|
-
// If you find you still need to output a row with this key, we need to
|
|
857
|
-
// delete too
|
|
856
|
+
// If you find you still need to output a row with this key, we need to
|
|
857
|
+
// output the delete too
|
|
858
858
|
if (input_.Valid() &&
|
|
859
859
|
(ParseInternalKey(input_.key(), &next_ikey, allow_data_in_errors_)
|
|
860
860
|
.ok()) &&
|
|
@@ -1212,8 +1212,8 @@ inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot(
|
|
|
1212
1212
|
ROCKS_LOG_FATAL(info_log_,
|
|
1213
1213
|
"No snapshot left in findEarliestVisibleSnapshot");
|
|
1214
1214
|
}
|
|
1215
|
-
auto snapshots_iter =
|
|
1216
|
-
snapshots_->begin(), snapshots_->end(), in);
|
|
1215
|
+
auto snapshots_iter =
|
|
1216
|
+
std::lower_bound(snapshots_->begin(), snapshots_->end(), in);
|
|
1217
1217
|
assert(prev_snapshot != nullptr);
|
|
1218
1218
|
if (snapshots_iter == snapshots_->begin()) {
|
|
1219
1219
|
*prev_snapshot = 0;
|
|
@@ -1228,8 +1228,8 @@ inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot(
|
|
|
1228
1228
|
}
|
|
1229
1229
|
}
|
|
1230
1230
|
if (snapshot_checker_ == nullptr) {
|
|
1231
|
-
return snapshots_iter != snapshots_->end()
|
|
1232
|
-
|
|
1231
|
+
return snapshots_iter != snapshots_->end() ? *snapshots_iter
|
|
1232
|
+
: kMaxSequenceNumber;
|
|
1233
1233
|
}
|
|
1234
1234
|
bool has_released_snapshot = !released_snapshots_.empty();
|
|
1235
1235
|
for (; snapshots_iter != snapshots_->end(); ++snapshots_iter) {
|
|
@@ -203,7 +203,8 @@ class TestSnapshotChecker : public SnapshotChecker {
|
|
|
203
203
|
public:
|
|
204
204
|
explicit TestSnapshotChecker(
|
|
205
205
|
SequenceNumber last_committed_sequence,
|
|
206
|
-
const std::unordered_map<SequenceNumber, SequenceNumber>& snapshots =
|
|
206
|
+
const std::unordered_map<SequenceNumber, SequenceNumber>& snapshots =
|
|
207
|
+
{{}})
|
|
207
208
|
: last_committed_sequence_(last_committed_sequence),
|
|
208
209
|
snapshots_(snapshots) {}
|
|
209
210
|
|
|
@@ -1038,7 +1039,7 @@ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
|
|
|
1038
1039
|
|
|
1039
1040
|
TEST_F(CompactionIteratorWithSnapshotCheckerTest,
|
|
1040
1041
|
NotRemoveDeletionIfValuePresentToEarlierSnapshot) {
|
|
1041
|
-
AddSnapshot(2,1);
|
|
1042
|
+
AddSnapshot(2, 1);
|
|
1042
1043
|
RunTest({test::KeyStr("a", 4, kTypeDeletion),
|
|
1043
1044
|
test::KeyStr("a", 1, kTypeValue), test::KeyStr("b", 3, kTypeValue)},
|
|
1044
1045
|
{"", "", ""},
|