@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
|
@@ -113,9 +113,9 @@ FilterBlockBuilder* CreateFilterBlockBuilder(
|
|
|
113
113
|
// A convenience function for populating the Compressor* fields; see ~Rep()
|
|
114
114
|
Compressor* MaybeCloneSpecialized(
|
|
115
115
|
Compressor* compressor, CacheEntryRole block_type,
|
|
116
|
-
Compressor::
|
|
116
|
+
Compressor::DictConfigArgs&& dict_config = Compressor::DictDisabled{}) {
|
|
117
117
|
auto specialized =
|
|
118
|
-
compressor->MaybeCloneSpecialized(block_type, std::move(
|
|
118
|
+
compressor->MaybeCloneSpecialized(block_type, std::move(dict_config));
|
|
119
119
|
if (specialized) {
|
|
120
120
|
// Caller is responsible for freeing when distinct
|
|
121
121
|
return specialized.release();
|
|
@@ -134,9 +134,6 @@ Compressor* MaybeCloneSpecialized(
|
|
|
134
134
|
// allocated
|
|
135
135
|
// it must be not extern in one place.
|
|
136
136
|
const uint64_t kBlockBasedTableMagicNumber = 0x88e241b785f4cff7ull;
|
|
137
|
-
// We also support reading and writing legacy block based table format (for
|
|
138
|
-
// backwards compatibility)
|
|
139
|
-
const uint64_t kLegacyBlockBasedTableMagicNumber = 0xdb4775248b80fb57ull;
|
|
140
137
|
|
|
141
138
|
// A collector that collects properties of interest to block-based table.
|
|
142
139
|
// For now this class looks heavy-weight since we only write one additional
|
|
@@ -318,7 +315,7 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
318
315
|
// simplify the interesting interleavings that have to be considered and
|
|
319
316
|
// accommodated.
|
|
320
317
|
struct State : public BitFields<uint64_t, State> {};
|
|
321
|
-
ALIGN_AS(CACHE_LINE_SIZE)
|
|
318
|
+
ALIGN_AS(CACHE_LINE_SIZE) BitFieldsAtomic<State> atomic_state;
|
|
322
319
|
|
|
323
320
|
// The first field is a bit for each ring buffer slot (max 32) for whether
|
|
324
321
|
// that slot is ready to be claimed for writing by a worker thread. Because
|
|
@@ -782,6 +779,35 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
782
779
|
#endif // BBTB_PC_WATCHDOG
|
|
783
780
|
};
|
|
784
781
|
|
|
782
|
+
struct WarmCacheConfig {
|
|
783
|
+
const bool enabled;
|
|
784
|
+
const Cache::Priority priority;
|
|
785
|
+
|
|
786
|
+
static WarmCacheConfig Compute(
|
|
787
|
+
BlockBasedTableOptions::PrepopulateBlockCache mode,
|
|
788
|
+
TableFileCreationReason reason) {
|
|
789
|
+
bool enabled = false;
|
|
790
|
+
Cache::Priority priority = Cache::Priority::LOW;
|
|
791
|
+
switch (mode) {
|
|
792
|
+
case BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly:
|
|
793
|
+
enabled = (reason == TableFileCreationReason::kFlush);
|
|
794
|
+
break;
|
|
795
|
+
case BlockBasedTableOptions::PrepopulateBlockCache::kFlushAndCompaction:
|
|
796
|
+
enabled = (reason == TableFileCreationReason::kFlush ||
|
|
797
|
+
reason == TableFileCreationReason::kCompaction);
|
|
798
|
+
if (reason == TableFileCreationReason::kCompaction) {
|
|
799
|
+
priority = Cache::Priority::BOTTOM;
|
|
800
|
+
}
|
|
801
|
+
break;
|
|
802
|
+
case BlockBasedTableOptions::PrepopulateBlockCache::kDisable:
|
|
803
|
+
break;
|
|
804
|
+
default:
|
|
805
|
+
assert(false);
|
|
806
|
+
}
|
|
807
|
+
return {enabled, priority};
|
|
808
|
+
}
|
|
809
|
+
};
|
|
810
|
+
|
|
785
811
|
struct BlockBasedTableBuilder::Rep {
|
|
786
812
|
const ImmutableOptions ioptions;
|
|
787
813
|
// BEGIN from MutableCFOptions
|
|
@@ -822,7 +848,6 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
822
848
|
PartitionedIndexBuilder* p_index_builder_ = nullptr;
|
|
823
849
|
|
|
824
850
|
std::string last_ikey; // Internal key or empty (unset)
|
|
825
|
-
bool warm_cache = false;
|
|
826
851
|
bool uses_explicit_compression_manager = false;
|
|
827
852
|
|
|
828
853
|
uint64_t sample_for_compression;
|
|
@@ -833,7 +858,8 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
833
858
|
RelaxedAtomic<uint64_t> sampled_output_fast_data_bytes{0};
|
|
834
859
|
uint32_t compression_parallel_threads;
|
|
835
860
|
int max_compressed_bytes_per_kb;
|
|
836
|
-
|
|
861
|
+
// Dictionary guidance for data blocks (from GetDictGuidance())
|
|
862
|
+
Compressor::DictConfig data_block_dict_guidance;
|
|
837
863
|
|
|
838
864
|
// *** Compressors & decompressors - Yes, it seems like a lot here but ***
|
|
839
865
|
// *** these are distinct fields to minimize extra conditionals and ***
|
|
@@ -842,6 +868,9 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
842
868
|
|
|
843
869
|
// A compressor for blocks in general, without dictionary compression
|
|
844
870
|
std::unique_ptr<Compressor> basic_compressor;
|
|
871
|
+
// Built-in compressors for compression size sampling
|
|
872
|
+
std::unique_ptr<Compressor> fast_sample_compressor;
|
|
873
|
+
std::unique_ptr<Compressor> slow_sample_compressor;
|
|
845
874
|
// A compressor for data blocks, which might be tuned differently and might
|
|
846
875
|
// use dictionary compression (when applicable). See ~Rep() for some details.
|
|
847
876
|
UnownedPtr<Compressor> data_block_compressor = nullptr;
|
|
@@ -920,6 +949,7 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
920
949
|
|
|
921
950
|
std::unique_ptr<ParallelCompressionRep> pc_rep;
|
|
922
951
|
RelaxedAtomic<uint64_t> worker_cpu_micros{0};
|
|
952
|
+
const WarmCacheConfig warm_cache_config;
|
|
923
953
|
BlockCreateContext create_context;
|
|
924
954
|
|
|
925
955
|
// The size of the "tail" part of a SST file. "Tail" refers to
|
|
@@ -1037,13 +1067,16 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1037
1067
|
? BlockBasedTableOptions::kDataBlockBinarySearch
|
|
1038
1068
|
: table_options.data_block_index_type,
|
|
1039
1069
|
table_options.data_block_hash_table_util_ratio, ts_sz,
|
|
1040
|
-
persist_user_defined_timestamps
|
|
1070
|
+
persist_user_defined_timestamps, false /* is_user_key */,
|
|
1071
|
+
table_options.separate_key_value_in_data_block,
|
|
1072
|
+
tbo.ioptions.stats),
|
|
1041
1073
|
range_del_block(
|
|
1042
1074
|
1 /* block_restart_interval */, true /* use_delta_encoding */,
|
|
1043
1075
|
false /* use_value_delta_encoding */,
|
|
1044
1076
|
BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
|
|
1045
1077
|
0.75 /* data_block_hash_table_util_ratio */, ts_sz,
|
|
1046
|
-
persist_user_defined_timestamps
|
|
1078
|
+
persist_user_defined_timestamps, false /* is_user_key */,
|
|
1079
|
+
false /* use_separated_kv_storage */),
|
|
1047
1080
|
internal_prefix_transform(prefix_extractor.get()),
|
|
1048
1081
|
sample_for_compression(tbo.moptions.sample_for_compression),
|
|
1049
1082
|
compression_parallel_threads(
|
|
@@ -1062,13 +1095,17 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1062
1095
|
flush_block_policy(
|
|
1063
1096
|
table_options.flush_block_policy_factory->NewFlushBlockPolicy(
|
|
1064
1097
|
table_options, data_block)),
|
|
1098
|
+
warm_cache_config(WarmCacheConfig::Compute(
|
|
1099
|
+
table_options.prepopulate_block_cache, reason)),
|
|
1065
1100
|
create_context(&table_options, &ioptions, ioptions.stats,
|
|
1066
1101
|
/*decompressor=*/nullptr,
|
|
1067
1102
|
tbo.moptions.block_protection_bytes_per_key,
|
|
1068
1103
|
tbo.internal_comparator.user_comparator(),
|
|
1069
1104
|
!use_delta_encoding_for_index_values,
|
|
1070
1105
|
table_opt.index_type ==
|
|
1071
|
-
BlockBasedTableOptions::kBinarySearchWithFirstKey
|
|
1106
|
+
BlockBasedTableOptions::kBinarySearchWithFirstKey,
|
|
1107
|
+
table_options.block_restart_interval,
|
|
1108
|
+
table_options.index_block_restart_interval),
|
|
1072
1109
|
tail_size(0) {
|
|
1073
1110
|
FilterBuildingContext filter_context(table_options);
|
|
1074
1111
|
|
|
@@ -1092,10 +1129,7 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1092
1129
|
auto* mgr = tbo.moptions.compression_manager.get();
|
|
1093
1130
|
if (mgr == nullptr) {
|
|
1094
1131
|
uses_explicit_compression_manager = false;
|
|
1095
|
-
mgr =
|
|
1096
|
-
GetCompressFormatForVersion(
|
|
1097
|
-
static_cast<uint32_t>(table_opt.format_version)))
|
|
1098
|
-
.get();
|
|
1132
|
+
mgr = GetBuiltinV2CompressionManager().get();
|
|
1099
1133
|
} else {
|
|
1100
1134
|
uses_explicit_compression_manager = true;
|
|
1101
1135
|
|
|
@@ -1119,9 +1153,12 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1119
1153
|
index_block_working_area.compress =
|
|
1120
1154
|
index_block_compressor->ObtainWorkingArea();
|
|
1121
1155
|
}
|
|
1122
|
-
|
|
1123
|
-
CacheEntryRole::kDataBlock);
|
|
1124
|
-
if (
|
|
1156
|
+
data_block_dict_guidance =
|
|
1157
|
+
basic_compressor->GetDictGuidance(CacheEntryRole::kDataBlock);
|
|
1158
|
+
if (auto* sampling =
|
|
1159
|
+
std::get_if<Compressor::DictSampling>(&data_block_dict_guidance);
|
|
1160
|
+
sampling != nullptr && sampling->max_sample_bytes > 0) {
|
|
1161
|
+
// Sampling mode: collect samples up to max_sample_bytes
|
|
1125
1162
|
state = State::kBuffered;
|
|
1126
1163
|
if (tbo.target_file_size == 0) {
|
|
1127
1164
|
buffer_limit = tbo.compression_opts.max_dict_buffer_bytes;
|
|
@@ -1131,7 +1168,22 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1131
1168
|
buffer_limit = std::min(tbo.target_file_size,
|
|
1132
1169
|
tbo.compression_opts.max_dict_buffer_bytes);
|
|
1133
1170
|
}
|
|
1171
|
+
} else if (auto* predef = std::get_if<Compressor::DictPreDefined>(
|
|
1172
|
+
&data_block_dict_guidance);
|
|
1173
|
+
predef != nullptr && !predef->dict_data.empty()) {
|
|
1174
|
+
// Pre-defined dictionary mode: use it immediately, no buffering
|
|
1175
|
+
data_block_compressor = MaybeCloneSpecialized(
|
|
1176
|
+
basic_compressor.get(), CacheEntryRole::kDataBlock,
|
|
1177
|
+
Compressor::DictPreDefined{std::string{predef->dict_data}});
|
|
1178
|
+
data_block_working_area.compress =
|
|
1179
|
+
data_block_compressor->ObtainWorkingArea();
|
|
1134
1180
|
} else {
|
|
1181
|
+
assert(std::holds_alternative<Compressor::DictSampling>(
|
|
1182
|
+
data_block_dict_guidance) ||
|
|
1183
|
+
std::holds_alternative<Compressor::DictPreDefined>(
|
|
1184
|
+
data_block_dict_guidance) ||
|
|
1185
|
+
std::holds_alternative<Compressor::DictDisabled>(
|
|
1186
|
+
data_block_dict_guidance));
|
|
1135
1187
|
// No distinct data block compressor using dictionary, but
|
|
1136
1188
|
// implementation might still want to specialize for data blocks
|
|
1137
1189
|
data_block_compressor = MaybeCloneSpecialized(
|
|
@@ -1163,17 +1215,20 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1163
1215
|
}
|
|
1164
1216
|
}
|
|
1165
1217
|
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1218
|
+
if (sample_for_compression > 0) {
|
|
1219
|
+
auto builtin = GetBuiltinV2CompressionManager();
|
|
1220
|
+
if (builtin->SupportsCompressionType(kLZ4Compression)) {
|
|
1221
|
+
fast_sample_compressor = builtin->GetCompressor({}, kLZ4Compression);
|
|
1222
|
+
} else if (builtin->SupportsCompressionType(kSnappyCompression)) {
|
|
1223
|
+
fast_sample_compressor = builtin->GetCompressor({}, kSnappyCompression);
|
|
1224
|
+
}
|
|
1225
|
+
if (builtin->SupportsCompressionType(kZSTD)) {
|
|
1226
|
+
slow_sample_compressor = builtin->GetCompressor({}, kZSTD);
|
|
1227
|
+
} else if (builtin->SupportsCompressionType(kZlibCompression)) {
|
|
1228
|
+
slow_sample_compressor = builtin->GetCompressor({}, kZlibCompression);
|
|
1229
|
+
}
|
|
1230
|
+
// NOTE: even if both sampling compressors are nullptr, we still populate
|
|
1231
|
+
// the table properties with placeholder info
|
|
1177
1232
|
}
|
|
1178
1233
|
|
|
1179
1234
|
const auto compress_dict_build_buffer_charged =
|
|
@@ -1197,13 +1252,15 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1197
1252
|
BlockBasedTableOptions::kTwoLevelIndexSearch) {
|
|
1198
1253
|
p_index_builder_ = PartitionedIndexBuilder::CreateIndexBuilder(
|
|
1199
1254
|
&internal_comparator, use_delta_encoding_for_index_values,
|
|
1200
|
-
table_options, ts_sz, persist_user_defined_timestamps
|
|
1255
|
+
table_options, ts_sz, persist_user_defined_timestamps,
|
|
1256
|
+
ioptions.stats);
|
|
1201
1257
|
index_builder.reset(p_index_builder_);
|
|
1202
1258
|
} else {
|
|
1203
1259
|
index_builder.reset(IndexBuilder::CreateIndexBuilder(
|
|
1204
1260
|
table_options.index_type, &internal_comparator,
|
|
1205
1261
|
&this->internal_prefix_transform, use_delta_encoding_for_index_values,
|
|
1206
|
-
table_options, ts_sz, persist_user_defined_timestamps
|
|
1262
|
+
table_options, ts_sz, persist_user_defined_timestamps,
|
|
1263
|
+
ioptions.stats));
|
|
1207
1264
|
}
|
|
1208
1265
|
|
|
1209
1266
|
// If user_defined_index_factory is provided, wrap the index builder with
|
|
@@ -1237,9 +1294,6 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1237
1294
|
// Apply optimize_filters_for_hits setting here when applicable by
|
|
1238
1295
|
// skipping filter generation
|
|
1239
1296
|
filter_builder.reset();
|
|
1240
|
-
} else if (tbo.skip_filters) {
|
|
1241
|
-
// For SstFileWriter skip_filters
|
|
1242
|
-
filter_builder.reset();
|
|
1243
1297
|
} else if (!table_options.filter_policy) {
|
|
1244
1298
|
// Null filter_policy -> no filter
|
|
1245
1299
|
filter_builder.reset();
|
|
@@ -1285,6 +1339,11 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1285
1339
|
props.db_session_id = tbo.db_session_id;
|
|
1286
1340
|
props.db_host_id = ioptions.db_host_id;
|
|
1287
1341
|
props.format_version = table_options.format_version;
|
|
1342
|
+
props.data_block_restart_interval = table_options.block_restart_interval;
|
|
1343
|
+
props.index_block_restart_interval =
|
|
1344
|
+
table_options.index_block_restart_interval;
|
|
1345
|
+
props.separate_key_value_in_data_block =
|
|
1346
|
+
table_options.separate_key_value_in_data_block ? 1 : 0;
|
|
1288
1347
|
if (!ReifyDbHostIdProperty(ioptions.env, &props.db_host_id).ok()) {
|
|
1289
1348
|
ROCKS_LOG_INFO(ioptions.logger, "db_host_id property will not be set");
|
|
1290
1349
|
}
|
|
@@ -1349,11 +1408,10 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
1349
1408
|
// Use legacy compression_name property, populated at the end of
|
|
1350
1409
|
// building the file. Not compatible with compression managers using
|
|
1351
1410
|
// custom algorithms / compression types.
|
|
1352
|
-
assert(
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
->CompatibilityName()) == 0);
|
|
1411
|
+
assert(
|
|
1412
|
+
Slice(mgr->CompatibilityName())
|
|
1413
|
+
.compare(GetBuiltinV2CompressionManager()->CompatibilityName()) ==
|
|
1414
|
+
0);
|
|
1357
1415
|
}
|
|
1358
1416
|
}
|
|
1359
1417
|
void PostPopulateCompressionProperties() {
|
|
@@ -1586,51 +1644,43 @@ void BlockBasedTableBuilder::Flush(const Slice* first_key_in_next_block) {
|
|
|
1586
1644
|
if (r->sample_for_compression > 0 &&
|
|
1587
1645
|
Random::GetTLSInstance()->OneIn(
|
|
1588
1646
|
static_cast<int>(r->sample_for_compression))) {
|
|
1589
|
-
|
|
1590
|
-
|
|
1647
|
+
GrowableBuffer sampled_output;
|
|
1648
|
+
sampled_output.ResetForSize(uncompressed_block_data.size());
|
|
1649
|
+
size_t fast_size = uncompressed_block_data.size();
|
|
1650
|
+
size_t slow_size = uncompressed_block_data.size();
|
|
1591
1651
|
|
|
1592
1652
|
// Sampling with a fast compression algorithm
|
|
1593
|
-
if (
|
|
1594
|
-
CompressionType
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
uncompressed_block_data, info_tmp,
|
|
1603
|
-
GetCompressFormatForVersion(r->table_options.format_version),
|
|
1604
|
-
&sampled_output_fast);
|
|
1653
|
+
if (r->fast_sample_compressor) {
|
|
1654
|
+
CompressionType result_type = kNoCompression;
|
|
1655
|
+
Status s = r->fast_sample_compressor->CompressBlock(
|
|
1656
|
+
uncompressed_block_data, sampled_output.data(), &fast_size,
|
|
1657
|
+
&result_type, /*working_area=*/nullptr);
|
|
1658
|
+
if (!s.ok() || result_type == kNoCompression) {
|
|
1659
|
+
// For accounting, fall back on no compression
|
|
1660
|
+
fast_size = uncompressed_block_data.size();
|
|
1661
|
+
}
|
|
1605
1662
|
}
|
|
1606
1663
|
|
|
1607
1664
|
// Sampling with a slow but high-compression algorithm
|
|
1608
|
-
if (
|
|
1609
|
-
CompressionType
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
GetCompressFormatForVersion(r->table_options.format_version),
|
|
1618
|
-
&sampled_output_slow);
|
|
1619
|
-
}
|
|
1620
|
-
|
|
1621
|
-
if (sampled_output_slow.size() > 0 || sampled_output_fast.size() > 0) {
|
|
1622
|
-
// Currently compression sampling is only enabled for data block.
|
|
1623
|
-
r->sampled_input_data_bytes.FetchAddRelaxed(
|
|
1624
|
-
uncompressed_block_data.size());
|
|
1625
|
-
r->sampled_output_slow_data_bytes.FetchAddRelaxed(
|
|
1626
|
-
sampled_output_slow.size());
|
|
1627
|
-
r->sampled_output_fast_data_bytes.FetchAddRelaxed(
|
|
1628
|
-
sampled_output_fast.size());
|
|
1665
|
+
if (r->slow_sample_compressor) {
|
|
1666
|
+
CompressionType result_type = kNoCompression;
|
|
1667
|
+
Status s = r->slow_sample_compressor->CompressBlock(
|
|
1668
|
+
uncompressed_block_data, sampled_output.data(), &slow_size,
|
|
1669
|
+
&result_type, /*working_area=*/nullptr);
|
|
1670
|
+
if (!s.ok() || result_type == kNoCompression) {
|
|
1671
|
+
// For accounting, fall back on no compression
|
|
1672
|
+
slow_size = uncompressed_block_data.size();
|
|
1673
|
+
}
|
|
1629
1674
|
}
|
|
1630
1675
|
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1676
|
+
// NOTE: Currently compression sampling is only enabled for data block.
|
|
1677
|
+
r->sampled_input_data_bytes.FetchAddRelaxed(uncompressed_block_data.size());
|
|
1678
|
+
r->sampled_output_slow_data_bytes.FetchAddRelaxed(slow_size);
|
|
1679
|
+
r->sampled_output_fast_data_bytes.FetchAddRelaxed(fast_size);
|
|
1680
|
+
|
|
1681
|
+
NotifyCollectTableCollectorsOnBlockAdd(r->table_properties_collectors,
|
|
1682
|
+
uncompressed_block_data.size(),
|
|
1683
|
+
slow_size, fast_size);
|
|
1634
1684
|
} else {
|
|
1635
1685
|
NotifyCollectTableCollectorsOnBlockAdd(
|
|
1636
1686
|
r->table_properties_collectors, uncompressed_block_data.size(),
|
|
@@ -1911,6 +1961,10 @@ Status BlockBasedTableBuilder::CompressAndVerifyBlock(
|
|
|
1911
1961
|
assert(type == kNoCompression ||
|
|
1912
1962
|
r->table_options.verify_compression == (verify_decomp != nullptr));
|
|
1913
1963
|
|
|
1964
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
1965
|
+
"BlockBasedTableBuilder::CompressAndVerifyBlock:TamperWithResultType",
|
|
1966
|
+
&type);
|
|
1967
|
+
|
|
1914
1968
|
// Some of the compression algorithms are known to be unreliable. If
|
|
1915
1969
|
// the verify_compression flag is set then try to de-compress the
|
|
1916
1970
|
// compressed data and compare to the input.
|
|
@@ -2105,7 +2159,7 @@ IOStatus BlockBasedTableBuilder::WriteMaybeCompressedBlockImpl(
|
|
|
2105
2159
|
}
|
|
2106
2160
|
}
|
|
2107
2161
|
|
|
2108
|
-
if (r->
|
|
2162
|
+
if (r->warm_cache_config.enabled) {
|
|
2109
2163
|
io_s = status_to_io_status(
|
|
2110
2164
|
InsertBlockInCacheHelper(*uncompressed_block_data, handle, block_type));
|
|
2111
2165
|
if (UNLIKELY(!io_s.ok())) {
|
|
@@ -2235,8 +2289,8 @@ Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
|
|
|
2235
2289
|
// (de)compression dictionary, which will clone and save a dict-based
|
|
2236
2290
|
// decompressor from the corresponding non-dict decompressor.
|
|
2237
2291
|
s = WarmInCache(block_cache, key.AsSlice(), block_contents,
|
|
2238
|
-
&rep_->create_context, helper,
|
|
2239
|
-
&charge);
|
|
2292
|
+
&rep_->create_context, helper,
|
|
2293
|
+
rep_->warm_cache_config.priority, &charge);
|
|
2240
2294
|
if (LIKELY(s.ok())) {
|
|
2241
2295
|
BlockBasedTable::UpdateCacheInsertionMetrics(
|
|
2242
2296
|
block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
|
|
@@ -2532,9 +2586,6 @@ void BlockBasedTableBuilder::WriteFooter(BlockHandle& metaindex_block_handle,
|
|
|
2532
2586
|
BlockHandle& index_block_handle) {
|
|
2533
2587
|
assert(LIKELY(ok()));
|
|
2534
2588
|
Rep* r = rep_.get();
|
|
2535
|
-
// this is guaranteed by BlockBasedTableBuilder's constructor
|
|
2536
|
-
assert(r->table_options.checksum == kCRC32c ||
|
|
2537
|
-
r->table_options.format_version != 0);
|
|
2538
2589
|
FooterBuilder footer;
|
|
2539
2590
|
Status s = footer.Build(kBlockBasedTableMagicNumber,
|
|
2540
2591
|
r->table_options.format_version, r->get_offset(),
|
|
@@ -2616,14 +2667,18 @@ void BlockBasedTableBuilder::MaybeEnterUnbuffered(
|
|
|
2616
2667
|
kPrimeGenerator % static_cast<uint64_t>(kNumBlocksBuffered));
|
|
2617
2668
|
const size_t kInitSampleIdx = kNumBlocksBuffered / 2;
|
|
2618
2669
|
|
|
2619
|
-
Compressor::
|
|
2670
|
+
Compressor::DictSamples samples;
|
|
2620
2671
|
size_t buffer_idx = kInitSampleIdx;
|
|
2621
|
-
|
|
2622
|
-
|
|
2672
|
+
// Get max_sample_bytes from the DictSampling guidance
|
|
2673
|
+
auto* sampling =
|
|
2674
|
+
std::get_if<Compressor::DictSampling>(&r->data_block_dict_guidance);
|
|
2675
|
+
assert(sampling != nullptr);
|
|
2676
|
+
size_t max_sample_bytes = sampling->max_sample_bytes;
|
|
2677
|
+
for (size_t i = 0;
|
|
2678
|
+
i < kNumBlocksBuffered && samples.sample_data.size() < max_sample_bytes;
|
|
2623
2679
|
++i) {
|
|
2624
|
-
size_t copy_len =
|
|
2625
|
-
|
|
2626
|
-
r->data_block_buffers[buffer_idx].size());
|
|
2680
|
+
size_t copy_len = std::min(max_sample_bytes - samples.sample_data.size(),
|
|
2681
|
+
r->data_block_buffers[buffer_idx].size());
|
|
2627
2682
|
samples.sample_data.append(r->data_block_buffers[buffer_idx], 0, copy_len);
|
|
2628
2683
|
samples.sample_lens.emplace_back(copy_len);
|
|
2629
2684
|
|
|
@@ -2668,7 +2723,10 @@ void BlockBasedTableBuilder::MaybeEnterUnbuffered(
|
|
|
2668
2723
|
auto& data_block = r->data_block_buffers[i];
|
|
2669
2724
|
assert(!data_block.empty());
|
|
2670
2725
|
|
|
2671
|
-
Block reader{
|
|
2726
|
+
Block reader{
|
|
2727
|
+
BlockContents{data_block}, 0 /* read_amp_bytes_per_bit */,
|
|
2728
|
+
nullptr /* statistics */,
|
|
2729
|
+
static_cast<uint32_t>(r->table_options.block_restart_interval)};
|
|
2672
2730
|
DataBlockIter* iter = reader.NewDataIterator(
|
|
2673
2731
|
r->internal_comparator.user_comparator(), kDisableGlobalSequenceNumber,
|
|
2674
2732
|
nullptr /* iter */, nullptr /* stats */,
|
|
@@ -2819,6 +2877,12 @@ void BlockBasedTableBuilder::Abandon() {
|
|
|
2819
2877
|
rep_->GetIOStatus().PermitUncheckedError();
|
|
2820
2878
|
}
|
|
2821
2879
|
|
|
2880
|
+
#ifndef NDEBUG
|
|
2881
|
+
void BlockBasedTableBuilder::TEST_InjectIOError() {
|
|
2882
|
+
rep_->SetIOStatus(IOStatus::IOError("Injected IOError for testing"));
|
|
2883
|
+
}
|
|
2884
|
+
#endif // !NDEBUG
|
|
2885
|
+
|
|
2822
2886
|
uint64_t BlockBasedTableBuilder::NumEntries() const {
|
|
2823
2887
|
return rep_->props.num_entries;
|
|
2824
2888
|
}
|
|
@@ -35,7 +35,6 @@ class WritableFile;
|
|
|
35
35
|
struct BlockBasedTableOptions;
|
|
36
36
|
|
|
37
37
|
extern const uint64_t kBlockBasedTableMagicNumber;
|
|
38
|
-
extern const uint64_t kLegacyBlockBasedTableMagicNumber;
|
|
39
38
|
|
|
40
39
|
class BlockBasedTableBuilder : public TableBuilder {
|
|
41
40
|
public:
|
|
@@ -118,6 +117,11 @@ class BlockBasedTableBuilder : public TableBuilder {
|
|
|
118
117
|
|
|
119
118
|
uint64_t GetWorkerCPUMicros() const override;
|
|
120
119
|
|
|
120
|
+
#ifndef NDEBUG
|
|
121
|
+
// Test-only: inject an IOError into the builder's status.
|
|
122
|
+
void TEST_InjectIOError();
|
|
123
|
+
#endif // !NDEBUG
|
|
124
|
+
|
|
121
125
|
private:
|
|
122
126
|
bool ok() const;
|
|
123
127
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "options/options_helper.h"
|
|
21
21
|
#include "port/port.h"
|
|
22
22
|
#include "rocksdb/cache.h"
|
|
23
|
+
#include "rocksdb/comparator.h"
|
|
23
24
|
#include "rocksdb/convenience.h"
|
|
24
25
|
#include "rocksdb/filter_policy.h"
|
|
25
26
|
#include "rocksdb/flush_block_policy.h"
|
|
@@ -184,6 +185,13 @@ static std::unordered_map<std::string, BlockBasedTableOptions::IndexType>
|
|
|
184
185
|
{"kBinarySearchWithFirstKey",
|
|
185
186
|
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey}};
|
|
186
187
|
|
|
188
|
+
static std::unordered_map<std::string, BlockBasedTableOptions::BlockSearchType>
|
|
189
|
+
block_base_table_index_search_type_string_map = {
|
|
190
|
+
{"kBinary", BlockBasedTableOptions::BlockSearchType::kBinary},
|
|
191
|
+
{"kInterpolation",
|
|
192
|
+
BlockBasedTableOptions::BlockSearchType::kInterpolation},
|
|
193
|
+
{"kAuto", BlockBasedTableOptions::BlockSearchType::kAuto}};
|
|
194
|
+
|
|
187
195
|
static std::unordered_map<std::string,
|
|
188
196
|
BlockBasedTableOptions::DataBlockIndexType>
|
|
189
197
|
block_base_table_data_block_index_type_string_map = {
|
|
@@ -223,7 +231,9 @@ static std::unordered_map<std::string,
|
|
|
223
231
|
block_base_table_prepopulate_block_cache_string_map = {
|
|
224
232
|
{"kDisable", BlockBasedTableOptions::PrepopulateBlockCache::kDisable},
|
|
225
233
|
{"kFlushOnly",
|
|
226
|
-
BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly}
|
|
234
|
+
BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly},
|
|
235
|
+
{"kFlushAndCompaction",
|
|
236
|
+
BlockBasedTableOptions::PrepopulateBlockCache::kFlushAndCompaction}};
|
|
227
237
|
|
|
228
238
|
static struct BlockBasedTableTypeInfo {
|
|
229
239
|
std::unordered_map<std::string, OptionTypeInfo> info;
|
|
@@ -261,6 +271,10 @@ static struct BlockBasedTableTypeInfo {
|
|
|
261
271
|
{"index_type", OptionTypeInfo::Enum<BlockBasedTableOptions::IndexType>(
|
|
262
272
|
offsetof(struct BlockBasedTableOptions, index_type),
|
|
263
273
|
&block_base_table_index_type_string_map)},
|
|
274
|
+
{"index_block_search_type",
|
|
275
|
+
OptionTypeInfo::Enum<BlockBasedTableOptions::BlockSearchType>(
|
|
276
|
+
offsetof(struct BlockBasedTableOptions, index_block_search_type),
|
|
277
|
+
&block_base_table_index_search_type_string_map)},
|
|
264
278
|
{"hash_index_allow_collision",
|
|
265
279
|
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
|
|
266
280
|
{"data_block_index_type",
|
|
@@ -335,6 +349,13 @@ static struct BlockBasedTableTypeInfo {
|
|
|
335
349
|
{"format_version",
|
|
336
350
|
{offsetof(struct BlockBasedTableOptions, format_version),
|
|
337
351
|
OptionType::kUInt32T, OptionVerificationType::kNormal}},
|
|
352
|
+
{"separate_key_value_in_data_block",
|
|
353
|
+
{offsetof(struct BlockBasedTableOptions,
|
|
354
|
+
separate_key_value_in_data_block),
|
|
355
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
356
|
+
{"uniform_cv_threshold",
|
|
357
|
+
{offsetof(struct BlockBasedTableOptions, uniform_cv_threshold),
|
|
358
|
+
OptionType::kDouble, OptionVerificationType::kNormal}},
|
|
338
359
|
{"verify_compression",
|
|
339
360
|
{offsetof(struct BlockBasedTableOptions, verify_compression),
|
|
340
361
|
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
@@ -485,19 +506,20 @@ void BlockBasedTableFactory::InitializeOptions() {
|
|
|
485
506
|
}
|
|
486
507
|
}
|
|
487
508
|
|
|
488
|
-
if (table_options_.format_version <
|
|
509
|
+
if (table_options_.format_version < kMinSupportedBbtFormatVersionForWrite) {
|
|
510
|
+
// In TEST mode, allow writing format versions that are at least supported
|
|
511
|
+
// for reading (so that we have a way of testing the read side).
|
|
489
512
|
if (TEST_AllowUnsupportedFormatVersion()) {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
table_options_.checksum != kCRC32c) {
|
|
494
|
-
// silently convert format_version to 1 to support non-CRC32c checksum
|
|
495
|
-
table_options_.format_version = 1;
|
|
513
|
+
if (table_options_.format_version <
|
|
514
|
+
kMinSupportedBbtFormatVersionForRead) {
|
|
515
|
+
table_options_.format_version = kMinSupportedBbtFormatVersionForWrite;
|
|
496
516
|
}
|
|
497
517
|
} else {
|
|
498
|
-
table_options_.format_version =
|
|
518
|
+
table_options_.format_version = kMinSupportedBbtFormatVersionForWrite;
|
|
499
519
|
}
|
|
500
520
|
}
|
|
521
|
+
// NOTE: do not sanitize too high format_version, so that it can be rejected
|
|
522
|
+
// in validation
|
|
501
523
|
}
|
|
502
524
|
|
|
503
525
|
Status BlockBasedTableFactory::PrepareOptions(const ConfigOptions& opts) {
|
|
@@ -615,6 +637,14 @@ Status BlockBasedTableFactory::ValidateOptions(
|
|
|
615
637
|
"Hash index is specified for block-based "
|
|
616
638
|
"table, but prefix_extractor is not given");
|
|
617
639
|
}
|
|
640
|
+
if (table_options_.index_block_search_type ==
|
|
641
|
+
BlockBasedTableOptions::kInterpolation) {
|
|
642
|
+
// Interpolation search requires BytewiseComparator
|
|
643
|
+
if (cf_opts.comparator != BytewiseComparator()) {
|
|
644
|
+
return Status::InvalidArgument(
|
|
645
|
+
"Interpolation search requires BytewiseComparator");
|
|
646
|
+
}
|
|
647
|
+
}
|
|
618
648
|
if (table_options_.cache_index_and_filter_blocks &&
|
|
619
649
|
table_options_.no_block_cache) {
|
|
620
650
|
return Status::InvalidArgument(
|
|
@@ -627,8 +657,14 @@ Status BlockBasedTableFactory::ValidateOptions(
|
|
|
627
657
|
"Enable pin_l0_filter_and_index_blocks_in_cache, "
|
|
628
658
|
", but block cache is disabled");
|
|
629
659
|
}
|
|
630
|
-
|
|
631
|
-
|
|
660
|
+
// In TEST mode, also allow writing
|
|
661
|
+
// (a) old format_versions that for users are only supported for reads
|
|
662
|
+
// (b) future "draft" format versions that are not yet published to users
|
|
663
|
+
if (!(IsSupportedFormatVersionForWrite(kBlockBasedTableMagicNumber,
|
|
664
|
+
table_options_.format_version) ||
|
|
665
|
+
(TEST_AllowUnsupportedFormatVersion() &&
|
|
666
|
+
table_options_.format_version >=
|
|
667
|
+
kMinSupportedBbtFormatVersionForRead))) {
|
|
632
668
|
return Status::InvalidArgument(
|
|
633
669
|
"Unsupported BlockBasedTable format_version. Please check "
|
|
634
670
|
"include/rocksdb/table.h for more info");
|
|
@@ -636,9 +672,7 @@ Status BlockBasedTableFactory::ValidateOptions(
|
|
|
636
672
|
bool using_builtin_compatible_compression = true;
|
|
637
673
|
if (cf_opts.compression_manager &&
|
|
638
674
|
strcmp(cf_opts.compression_manager->CompatibilityName(),
|
|
639
|
-
|
|
640
|
-
GetCompressFormatForVersion(table_options_.format_version))
|
|
641
|
-
->CompatibilityName()) != 0) {
|
|
675
|
+
GetBuiltinV2CompressionManager()->CompatibilityName()) != 0) {
|
|
642
676
|
if (FormatVersionUsesCompressionManagerName(
|
|
643
677
|
table_options_.format_version)) {
|
|
644
678
|
using_builtin_compatible_compression = false;
|
|
@@ -920,6 +954,9 @@ std::string BlockBasedTableFactory::GetPrintableOptions() const {
|
|
|
920
954
|
snprintf(buffer, kBufferSize, " format_version: %d\n",
|
|
921
955
|
table_options_.format_version);
|
|
922
956
|
ret.append(buffer);
|
|
957
|
+
snprintf(buffer, kBufferSize, " uniform_cv_threshold: %lf\n",
|
|
958
|
+
table_options_.uniform_cv_threshold);
|
|
959
|
+
ret.append(buffer);
|
|
923
960
|
snprintf(buffer, kBufferSize, " enable_index_compression: %d\n",
|
|
924
961
|
table_options_.enable_index_compression);
|
|
925
962
|
ret.append(buffer);
|
|
@@ -87,8 +87,6 @@ class BlockBasedTableFactory : public TableFactory {
|
|
|
87
87
|
return &shared_state_->tail_prefetch_stats;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
static constexpr int kMinSupportedFormatVersion = 2;
|
|
91
|
-
|
|
92
90
|
protected:
|
|
93
91
|
const void* GetOptionsPtr(const std::string& name) const override;
|
|
94
92
|
Status ParseOption(const ConfigOptions& config_options,
|