@nxtedition/rocksdb 15.4.1 → 15.5.0
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 +24 -15
- package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
- package/deps/rocksdb/rocksdb/BUCK +42 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
- package/deps/rocksdb/rocksdb/Makefile +59 -32
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
- package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
- package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
- package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
- package/deps/rocksdb/rocksdb/db/builder.h +7 -0
- package/deps/rocksdb/rocksdb/db/c.cc +373 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
- package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
- package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
- package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
- package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
- package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
- package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
- package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
- package/deps/rocksdb/rocksdb/env/env.cc +1 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
- package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
- package/deps/rocksdb/rocksdb/folly.mk +22 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
- package/deps/rocksdb/rocksdb/options/options.cc +5 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
- package/deps/rocksdb/rocksdb/port/lang.h +4 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
- package/deps/rocksdb/rocksdb/src.mk +12 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
- package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
- package/deps/rocksdb/rocksdb/table/format.cc +27 -15
- package/deps/rocksdb/rocksdb/table/format.h +41 -15
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
- package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
- package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
- package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
- package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
- package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
- package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
- package/deps/rocksdb/rocksdb/util/coding.h +14 -27
- package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
- package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
- package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
- package/deps/rocksdb/rocksdb/util/math.h +3 -1
- package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
- package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
- package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
- package/deps/rocksdb/rocksdb/util/status.cc +3 -1
- package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
- package/deps/rocksdb/rocksdb.gyp +7 -0
- package/iterator.js +2 -2
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
|
@@ -39,20 +39,64 @@
|
|
|
39
39
|
|
|
40
40
|
#include <algorithm>
|
|
41
41
|
#include <cassert>
|
|
42
|
+
#include <cmath>
|
|
42
43
|
|
|
43
44
|
#include "db/dbformat.h"
|
|
45
|
+
#include "monitoring/statistics_impl.h"
|
|
44
46
|
#include "rocksdb/comparator.h"
|
|
47
|
+
#include "table/block_based/block_util.h"
|
|
45
48
|
#include "table/block_based/data_block_footer.h"
|
|
46
49
|
#include "util/coding.h"
|
|
47
50
|
|
|
48
51
|
namespace ROCKSDB_NAMESPACE {
|
|
49
52
|
|
|
53
|
+
namespace {
|
|
54
|
+
|
|
55
|
+
// Tracks whether restart-point keys are uniformly distributed using Welford's
|
|
56
|
+
// online algorithm to incrementally compute the coefficient of variation (CV)
|
|
57
|
+
// of gaps between consecutive restart keys.
|
|
58
|
+
class UniformDataTracker {
|
|
59
|
+
public:
|
|
60
|
+
void AddKey(uint64_t key_value) {
|
|
61
|
+
if (num_keys_ > 0) {
|
|
62
|
+
double gap = static_cast<double>(key_value - prev_key_value_);
|
|
63
|
+
size_t gap_count = num_keys_;
|
|
64
|
+
double delta = gap - mean_;
|
|
65
|
+
mean_ += delta / static_cast<double>(gap_count);
|
|
66
|
+
double delta2 = gap - mean_;
|
|
67
|
+
m2_ += delta * delta2;
|
|
68
|
+
}
|
|
69
|
+
prev_key_value_ = key_value;
|
|
70
|
+
num_keys_++;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Returns the coefficient of variation (CV) of the key gaps, or -1.0 if
|
|
74
|
+
// there are not enough data points to compute it.
|
|
75
|
+
double GetCV() const {
|
|
76
|
+
size_t gap_count = num_keys_ > 0 ? num_keys_ - 1 : 0;
|
|
77
|
+
if (gap_count < 2 || mean_ <= 0) {
|
|
78
|
+
return -1.0;
|
|
79
|
+
}
|
|
80
|
+
return std::sqrt(m2_ / static_cast<double>(gap_count)) / mean_;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private:
|
|
84
|
+
uint64_t prev_key_value_ = 0;
|
|
85
|
+
size_t num_keys_ = 0;
|
|
86
|
+
double mean_ = 0;
|
|
87
|
+
double m2_ = 0;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
} // namespace
|
|
91
|
+
|
|
50
92
|
BlockBuilder::BlockBuilder(
|
|
51
93
|
int block_restart_interval, bool use_delta_encoding,
|
|
52
94
|
bool use_value_delta_encoding,
|
|
53
95
|
BlockBasedTableOptions::DataBlockIndexType index_type,
|
|
54
96
|
double data_block_hash_table_util_ratio, size_t ts_sz,
|
|
55
|
-
bool persist_user_defined_timestamps, bool is_user_key
|
|
97
|
+
bool persist_user_defined_timestamps, bool is_user_key,
|
|
98
|
+
bool use_separated_kv_storage, Statistics* statistics,
|
|
99
|
+
double uniform_cv_threshold)
|
|
56
100
|
: block_restart_interval_(block_restart_interval),
|
|
57
101
|
use_delta_encoding_(use_delta_encoding),
|
|
58
102
|
use_value_delta_encoding_(use_value_delta_encoding),
|
|
@@ -60,7 +104,10 @@ BlockBuilder::BlockBuilder(
|
|
|
60
104
|
is_user_key_(is_user_key),
|
|
61
105
|
restarts_(1, 0), // First restart point is at offset 0
|
|
62
106
|
counter_(0),
|
|
63
|
-
finished_(false)
|
|
107
|
+
finished_(false),
|
|
108
|
+
uniform_cv_threshold_(uniform_cv_threshold),
|
|
109
|
+
statistics_(statistics),
|
|
110
|
+
use_separated_kv_storage_(use_separated_kv_storage) {
|
|
64
111
|
switch (index_type) {
|
|
65
112
|
case BlockBasedTableOptions::kDataBlockBinarySearch:
|
|
66
113
|
break;
|
|
@@ -72,20 +119,24 @@ BlockBuilder::BlockBuilder(
|
|
|
72
119
|
assert(0);
|
|
73
120
|
}
|
|
74
121
|
assert(block_restart_interval_ >= 1);
|
|
75
|
-
estimate_ = sizeof(uint32_t) + sizeof(uint32_t)
|
|
122
|
+
estimate_ = sizeof(uint32_t) + sizeof(uint32_t) +
|
|
123
|
+
(use_separated_kv_storage_ ? sizeof(uint32_t) : 0);
|
|
76
124
|
}
|
|
77
125
|
|
|
78
126
|
void BlockBuilder::Reset() {
|
|
79
127
|
buffer_.clear();
|
|
80
128
|
restarts_.resize(1); // First restart point is at offset 0
|
|
81
129
|
assert(restarts_[0] == 0);
|
|
82
|
-
estimate_ = sizeof(uint32_t) + sizeof(uint32_t)
|
|
130
|
+
estimate_ = sizeof(uint32_t) + sizeof(uint32_t) +
|
|
131
|
+
(use_separated_kv_storage_ ? sizeof(uint32_t) : 0);
|
|
83
132
|
counter_ = 0;
|
|
84
133
|
finished_ = false;
|
|
85
134
|
last_key_.clear();
|
|
86
135
|
if (data_block_hash_index_builder_.Valid()) {
|
|
87
136
|
data_block_hash_index_builder_.Reset();
|
|
88
137
|
}
|
|
138
|
+
values_buffer_.clear();
|
|
139
|
+
|
|
89
140
|
#ifndef NDEBUG
|
|
90
141
|
add_with_last_key_called_ = false;
|
|
91
142
|
#endif
|
|
@@ -116,6 +167,12 @@ size_t BlockBuilder::EstimateSizeAfterKV(const Slice& key,
|
|
|
116
167
|
estimate += sizeof(uint32_t); // a new restart entry.
|
|
117
168
|
}
|
|
118
169
|
|
|
170
|
+
// For separated KV storage, value_offset varint is written at restart points
|
|
171
|
+
if (use_separated_kv_storage_ &&
|
|
172
|
+
(counter_ == 0 || counter_ >= block_restart_interval_)) {
|
|
173
|
+
estimate += VarintLength(values_buffer_.size());
|
|
174
|
+
}
|
|
175
|
+
|
|
119
176
|
estimate += sizeof(int32_t); // varint for shared prefix length.
|
|
120
177
|
// Note: this is an imprecise estimate as we will have to encoded size, one
|
|
121
178
|
// for shared key and one for non-shared key.
|
|
@@ -128,24 +185,34 @@ size_t BlockBuilder::EstimateSizeAfterKV(const Slice& key,
|
|
|
128
185
|
}
|
|
129
186
|
|
|
130
187
|
Slice BlockBuilder::Finish() {
|
|
188
|
+
bool is_uniform = ScanForUniformity();
|
|
189
|
+
|
|
131
190
|
// Append restart array
|
|
191
|
+
size_t values_buffer_offset = buffer_.size();
|
|
192
|
+
|
|
193
|
+
if (use_separated_kv_storage_) {
|
|
194
|
+
buffer_.append(values_buffer_);
|
|
195
|
+
}
|
|
196
|
+
|
|
132
197
|
for (size_t i = 0; i < restarts_.size(); i++) {
|
|
133
198
|
PutFixed32(&buffer_, restarts_[i]);
|
|
134
199
|
}
|
|
135
200
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
201
|
+
DataBlockFooter footer;
|
|
202
|
+
footer.num_restarts = static_cast<uint32_t>(restarts_.size());
|
|
203
|
+
footer.index_type = BlockBasedTableOptions::kDataBlockBinarySearch;
|
|
204
|
+
footer.is_uniform = is_uniform;
|
|
139
205
|
if (data_block_hash_index_builder_.Valid() &&
|
|
140
206
|
CurrentSizeEstimate() <= kMaxBlockSizeSupportedByHashIndex) {
|
|
141
207
|
data_block_hash_index_builder_.Finish(buffer_);
|
|
142
|
-
index_type = BlockBasedTableOptions::kDataBlockBinaryAndHash;
|
|
208
|
+
footer.index_type = BlockBasedTableOptions::kDataBlockBinaryAndHash;
|
|
143
209
|
}
|
|
144
210
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
211
|
+
if (use_separated_kv_storage_) {
|
|
212
|
+
footer.separated_kv = true;
|
|
213
|
+
footer.values_section_offset = static_cast<uint32_t>(values_buffer_offset);
|
|
214
|
+
}
|
|
215
|
+
footer.EncodeTo(&buffer_);
|
|
149
216
|
finished_ = true;
|
|
150
217
|
return Slice(buffer_);
|
|
151
218
|
}
|
|
@@ -221,28 +288,45 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
221
288
|
}
|
|
222
289
|
|
|
223
290
|
const size_t non_shared = key_to_persist.size() - shared;
|
|
224
|
-
|
|
291
|
+
const size_t previous_value_offset = values_buffer_.size();
|
|
225
292
|
if (use_value_delta_encoding_) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
293
|
+
if (use_separated_kv_storage_ && counter_ == 0) {
|
|
294
|
+
// Add "<shared><non_shared><value_offset>" to buffer_
|
|
295
|
+
PutVarint32(&buffer_, static_cast<uint32_t>(shared),
|
|
296
|
+
static_cast<uint32_t>(non_shared),
|
|
297
|
+
static_cast<uint32_t>(values_buffer_.size()));
|
|
298
|
+
} else {
|
|
299
|
+
// Add "<shared><non_shared>" to buffer_
|
|
300
|
+
PutVarint32(&buffer_, static_cast<uint32_t>(shared),
|
|
301
|
+
static_cast<uint32_t>(non_shared));
|
|
302
|
+
}
|
|
229
303
|
} else {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
304
|
+
if (use_separated_kv_storage_ && counter_ == 0) {
|
|
305
|
+
// Add "<shared><non_shared><value_size><value_offset>" to buffer_
|
|
306
|
+
PutVarint32(&buffer_, static_cast<uint32_t>(shared),
|
|
307
|
+
static_cast<uint32_t>(non_shared),
|
|
308
|
+
static_cast<uint32_t>(value.size()),
|
|
309
|
+
static_cast<uint32_t>(values_buffer_.size()));
|
|
310
|
+
} else {
|
|
311
|
+
// Add "<shared><non_shared><value_size>" to buffer_
|
|
312
|
+
PutVarint32(&buffer_, static_cast<uint32_t>(shared),
|
|
313
|
+
static_cast<uint32_t>(non_shared),
|
|
314
|
+
static_cast<uint32_t>(value.size()));
|
|
315
|
+
}
|
|
234
316
|
}
|
|
235
317
|
|
|
236
|
-
// Add string delta to buffer_
|
|
318
|
+
// Add string delta to buffer_
|
|
237
319
|
buffer_.append(key_to_persist.data() + shared, non_shared);
|
|
320
|
+
|
|
321
|
+
auto& values_buffer = use_separated_kv_storage_ ? values_buffer_ : buffer_;
|
|
238
322
|
// Use value delta encoding only when the key has shared bytes. This would
|
|
239
323
|
// simplify the decoding, where it can figure which decoding to use simply by
|
|
240
324
|
// looking at the shared bytes size.
|
|
241
325
|
if (shared != 0 && use_value_delta_encoding_) {
|
|
242
326
|
assert(delta_value != nullptr);
|
|
243
|
-
|
|
327
|
+
values_buffer.append(delta_value->data(), delta_value->size());
|
|
244
328
|
} else {
|
|
245
|
-
|
|
329
|
+
values_buffer.append(value.data(), value.size());
|
|
246
330
|
}
|
|
247
331
|
|
|
248
332
|
// TODO(yuzhangyu): make user defined timestamp work with block hash index.
|
|
@@ -256,7 +340,8 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
256
340
|
}
|
|
257
341
|
|
|
258
342
|
counter_++;
|
|
259
|
-
estimate_ += buffer_.size() - buffer_size
|
|
343
|
+
estimate_ += buffer_.size() - buffer_size + values_buffer_.size() -
|
|
344
|
+
previous_value_offset;
|
|
260
345
|
}
|
|
261
346
|
|
|
262
347
|
const Slice BlockBuilder::MaybeStripTimestampFromKey(std::string* key_buf,
|
|
@@ -272,4 +357,63 @@ const Slice BlockBuilder::MaybeStripTimestampFromKey(std::string* key_buf,
|
|
|
272
357
|
}
|
|
273
358
|
return stripped_key;
|
|
274
359
|
}
|
|
360
|
+
|
|
361
|
+
Slice BlockBuilder::GetRestartKey(uint32_t index, const char* limit) const {
|
|
362
|
+
assert(index < restarts_.size());
|
|
363
|
+
const char* p = buffer_.data() + restarts_[index];
|
|
364
|
+
uint32_t shared;
|
|
365
|
+
uint32_t non_shared;
|
|
366
|
+
// When separated KV storage is enabled, restart point entries include an
|
|
367
|
+
// extra value_offset varint that must be consumed to find the key delta.
|
|
368
|
+
uint32_t value_offset;
|
|
369
|
+
uint32_t* value_offset_ptr =
|
|
370
|
+
use_separated_kv_storage_ ? &value_offset : nullptr;
|
|
371
|
+
if (use_value_delta_encoding_) {
|
|
372
|
+
p = DecodeKeyV4()(p, limit, &shared, &non_shared, value_offset_ptr);
|
|
373
|
+
} else {
|
|
374
|
+
p = DecodeKey()(p, limit, &shared, &non_shared, value_offset_ptr);
|
|
375
|
+
}
|
|
376
|
+
assert(p != nullptr);
|
|
377
|
+
assert(shared == 0);
|
|
378
|
+
(void)shared;
|
|
379
|
+
return Slice(p, non_shared);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
bool BlockBuilder::ScanForUniformity() const {
|
|
383
|
+
if (uniform_cv_threshold_ < 0 || restarts_.size() < 3) {
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const char* limit = buffer_.data() + buffer_.size();
|
|
388
|
+
|
|
389
|
+
Slice first_key = GetRestartKey(0, limit);
|
|
390
|
+
Slice last_key =
|
|
391
|
+
GetRestartKey(static_cast<uint32_t>(restarts_.size() - 1), limit);
|
|
392
|
+
|
|
393
|
+
// Keys must be long enough for ReadBe64FromKey which strips internal bytes
|
|
394
|
+
if (!is_user_key_ && (first_key.size() < kNumInternalBytes ||
|
|
395
|
+
last_key.size() < kNumInternalBytes)) {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
size_t prefix_len = first_key.difference_offset(last_key);
|
|
400
|
+
|
|
401
|
+
UniformDataTracker tracker;
|
|
402
|
+
for (size_t i = 0; i < restarts_.size(); i++) {
|
|
403
|
+
Slice key = GetRestartKey(static_cast<uint32_t>(i), limit);
|
|
404
|
+
if (!is_user_key_ && key.size() < kNumInternalBytes) {
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
tracker.AddKey(ReadBe64FromKey(key, is_user_key_, prefix_len));
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
double cv = tracker.GetCV();
|
|
411
|
+
if (statistics_ != nullptr && cv >= 0) {
|
|
412
|
+
RecordInHistogram(statistics_, BLOCK_KEY_DISTRIBUTION_CV,
|
|
413
|
+
static_cast<uint64_t>(cv * 10000));
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return cv >= 0 && cv < uniform_cv_threshold_;
|
|
417
|
+
}
|
|
418
|
+
|
|
275
419
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -18,20 +18,22 @@
|
|
|
18
18
|
|
|
19
19
|
namespace ROCKSDB_NAMESPACE {
|
|
20
20
|
|
|
21
|
+
class Statistics;
|
|
22
|
+
|
|
21
23
|
class BlockBuilder {
|
|
22
24
|
public:
|
|
23
25
|
BlockBuilder(const BlockBuilder&) = delete;
|
|
24
26
|
void operator=(const BlockBuilder&) = delete;
|
|
25
27
|
|
|
26
|
-
explicit BlockBuilder(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
explicit BlockBuilder(
|
|
29
|
+
int block_restart_interval, bool use_delta_encoding = true,
|
|
30
|
+
bool use_value_delta_encoding = false,
|
|
31
|
+
BlockBasedTableOptions::DataBlockIndexType index_type =
|
|
32
|
+
BlockBasedTableOptions::kDataBlockBinarySearch,
|
|
33
|
+
double data_block_hash_table_util_ratio = 0.75, size_t ts_sz = 0,
|
|
34
|
+
bool persist_user_defined_timestamps = true, bool is_user_key = false,
|
|
35
|
+
bool use_separated_kv_storage = false, Statistics* statistics = nullptr,
|
|
36
|
+
double uniform_cv_threshold = -1.0);
|
|
35
37
|
|
|
36
38
|
// Reset the contents as if the BlockBuilder was just constructed.
|
|
37
39
|
void Reset();
|
|
@@ -90,6 +92,10 @@ class BlockBuilder {
|
|
|
90
92
|
const Slice* const delta_value,
|
|
91
93
|
bool skip_delta_encoding, size_t buffer_size);
|
|
92
94
|
|
|
95
|
+
bool ScanForUniformity() const;
|
|
96
|
+
|
|
97
|
+
Slice GetRestartKey(uint32_t index, const char* limit) const;
|
|
98
|
+
|
|
93
99
|
inline const Slice MaybeStripTimestampFromKey(std::string* key_buf,
|
|
94
100
|
const Slice& key);
|
|
95
101
|
|
|
@@ -124,6 +130,16 @@ class BlockBuilder {
|
|
|
124
130
|
bool finished_; // Has Finish() been called?
|
|
125
131
|
std::string last_key_;
|
|
126
132
|
DataBlockHashIndexBuilder data_block_hash_index_builder_;
|
|
133
|
+
const double uniform_cv_threshold_;
|
|
134
|
+
Statistics* statistics_;
|
|
135
|
+
|
|
136
|
+
const bool use_separated_kv_storage_; // When enabled, keys are stored first,
|
|
137
|
+
// followed by values in a separate
|
|
138
|
+
// section. Value offset is stored as
|
|
139
|
+
// varint only at restart points; for
|
|
140
|
+
// other entries, offset is computed
|
|
141
|
+
// as prev_offset + prev_length.
|
|
142
|
+
std::string values_buffer_;
|
|
127
143
|
#ifndef NDEBUG
|
|
128
144
|
bool add_with_last_key_called_ = false;
|
|
129
145
|
#endif
|
|
@@ -11,15 +11,17 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
11
11
|
|
|
12
12
|
void BlockCreateContext::Create(std::unique_ptr<Block_kData>* parsed_out,
|
|
13
13
|
BlockContents&& block) {
|
|
14
|
-
parsed_out->reset(new Block_kData(
|
|
15
|
-
|
|
14
|
+
parsed_out->reset(new Block_kData(std::move(block),
|
|
15
|
+
table_options->read_amp_bytes_per_bit,
|
|
16
|
+
statistics, data_block_restart_interval));
|
|
16
17
|
parsed_out->get()->InitializeDataBlockProtectionInfo(protection_bytes_per_key,
|
|
17
18
|
raw_ucmp);
|
|
18
19
|
}
|
|
19
20
|
void BlockCreateContext::Create(std::unique_ptr<Block_kIndex>* parsed_out,
|
|
20
21
|
BlockContents&& block) {
|
|
21
22
|
parsed_out->reset(new Block_kIndex(std::move(block),
|
|
22
|
-
/*read_amp_bytes_per_bit*/ 0, statistics
|
|
23
|
+
/*read_amp_bytes_per_bit*/ 0, statistics,
|
|
24
|
+
index_block_restart_interval));
|
|
23
25
|
parsed_out->get()->InitializeIndexBlockProtectionInfo(
|
|
24
26
|
protection_bytes_per_key, raw_ucmp, index_value_is_full,
|
|
25
27
|
index_has_first_key);
|
|
@@ -28,7 +30,8 @@ void BlockCreateContext::Create(
|
|
|
28
30
|
std::unique_ptr<Block_kFilterPartitionIndex>* parsed_out,
|
|
29
31
|
BlockContents&& block) {
|
|
30
32
|
parsed_out->reset(new Block_kFilterPartitionIndex(
|
|
31
|
-
std::move(block), /*read_amp_bytes_per_bit*/ 0, statistics
|
|
33
|
+
std::move(block), /*read_amp_bytes_per_bit*/ 0, statistics,
|
|
34
|
+
index_block_restart_interval));
|
|
32
35
|
parsed_out->get()->InitializeIndexBlockProtectionInfo(
|
|
33
36
|
protection_bytes_per_key, raw_ucmp, index_value_is_full,
|
|
34
37
|
index_has_first_key);
|
|
@@ -85,7 +85,9 @@ struct BlockCreateContext : public Cache::CreateContext {
|
|
|
85
85
|
uint8_t _protection_bytes_per_key,
|
|
86
86
|
const Comparator* _raw_ucmp,
|
|
87
87
|
bool _index_value_is_full = false,
|
|
88
|
-
bool _index_has_first_key = false
|
|
88
|
+
bool _index_has_first_key = false,
|
|
89
|
+
uint32_t _data_block_restart_interval = 0,
|
|
90
|
+
uint32_t _index_block_restart_interval = 0)
|
|
89
91
|
: table_options(_table_options),
|
|
90
92
|
ioptions(_ioptions),
|
|
91
93
|
statistics(_statistics),
|
|
@@ -93,7 +95,9 @@ struct BlockCreateContext : public Cache::CreateContext {
|
|
|
93
95
|
raw_ucmp(_raw_ucmp),
|
|
94
96
|
protection_bytes_per_key(_protection_bytes_per_key),
|
|
95
97
|
index_value_is_full(_index_value_is_full),
|
|
96
|
-
index_has_first_key(_index_has_first_key)
|
|
98
|
+
index_has_first_key(_index_has_first_key),
|
|
99
|
+
data_block_restart_interval(_data_block_restart_interval),
|
|
100
|
+
index_block_restart_interval(_index_block_restart_interval) {}
|
|
97
101
|
|
|
98
102
|
const BlockBasedTableOptions* table_options = nullptr;
|
|
99
103
|
const ImmutableOptions* ioptions = nullptr;
|
|
@@ -104,6 +108,9 @@ struct BlockCreateContext : public Cache::CreateContext {
|
|
|
104
108
|
uint8_t protection_bytes_per_key = 0;
|
|
105
109
|
bool index_value_is_full;
|
|
106
110
|
bool index_has_first_key;
|
|
111
|
+
// Restart intervals from table properties (0 if not available)
|
|
112
|
+
uint32_t data_block_restart_interval = 0;
|
|
113
|
+
uint32_t index_block_restart_interval = 0;
|
|
107
114
|
|
|
108
115
|
// For TypedCacheInterface
|
|
109
116
|
template <typename TBlocklike>
|