@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
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
#include "rocksdb/file_system.h"
|
|
18
18
|
#include "rocksdb/slice.h"
|
|
19
19
|
#include "rocksdb/status.h"
|
|
20
|
+
#include "table/format.h"
|
|
20
21
|
#include "table/multiget_context.h"
|
|
21
22
|
#include "test_util/sync_point.h"
|
|
22
23
|
#include "util/compression.h"
|
|
23
|
-
#include "util/crc32c.h"
|
|
24
24
|
#include "util/stop_watch.h"
|
|
25
25
|
|
|
26
26
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -69,9 +69,16 @@ Status BlobFileReader::Create(
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
std::shared_ptr<Decompressor> decompressor;
|
|
73
|
+
if (compression_type != kNoCompression) {
|
|
74
|
+
// The blob format has always used compression format 2
|
|
75
|
+
decompressor = GetBuiltinV2CompressionManager()->GetDecompressorOptimizeFor(
|
|
76
|
+
compression_type);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
blob_file_reader->reset(new BlobFileReader(
|
|
80
|
+
std::move(file_reader), file_size, compression_type,
|
|
81
|
+
std::move(decompressor), immutable_options.clock, statistics));
|
|
75
82
|
|
|
76
83
|
return Status::OK();
|
|
77
84
|
}
|
|
@@ -282,11 +289,13 @@ Status BlobFileReader::ReadFromFile(const RandomAccessFileReader* file_reader,
|
|
|
282
289
|
|
|
283
290
|
BlobFileReader::BlobFileReader(
|
|
284
291
|
std::unique_ptr<RandomAccessFileReader>&& file_reader, uint64_t file_size,
|
|
285
|
-
CompressionType compression_type,
|
|
292
|
+
CompressionType compression_type,
|
|
293
|
+
std::shared_ptr<Decompressor> decompressor, SystemClock* clock,
|
|
286
294
|
Statistics* statistics)
|
|
287
295
|
: file_reader_(std::move(file_reader)),
|
|
288
296
|
file_size_(file_size),
|
|
289
297
|
compression_type_(compression_type),
|
|
298
|
+
decompressor_(std::move(decompressor)),
|
|
290
299
|
clock_(clock),
|
|
291
300
|
statistics_(statistics) {
|
|
292
301
|
assert(file_reader_);
|
|
@@ -375,8 +384,9 @@ Status BlobFileReader::GetBlob(
|
|
|
375
384
|
const Slice value_slice(record_slice.data() + adjustment, value_size);
|
|
376
385
|
|
|
377
386
|
{
|
|
378
|
-
const Status s = UncompressBlobIfNeeded(
|
|
379
|
-
|
|
387
|
+
const Status s = UncompressBlobIfNeeded(value_slice, compression_type,
|
|
388
|
+
decompressor_.get(), allocator,
|
|
389
|
+
clock_, statistics_, result);
|
|
380
390
|
if (!s.ok()) {
|
|
381
391
|
return s;
|
|
382
392
|
}
|
|
@@ -523,10 +533,10 @@ void BlobFileReader::MultiGetBlob(
|
|
|
523
533
|
}
|
|
524
534
|
|
|
525
535
|
// Uncompress blob if needed
|
|
526
|
-
Slice value_slice(record_slice.data() + adjustments[
|
|
527
|
-
*req->status =
|
|
528
|
-
|
|
529
|
-
|
|
536
|
+
Slice value_slice(record_slice.data() + adjustments[j - 1], req->len);
|
|
537
|
+
*req->status = UncompressBlobIfNeeded(
|
|
538
|
+
value_slice, compression_type_, decompressor_.get(), allocator, clock_,
|
|
539
|
+
statistics_, &blob_reqs[i].second);
|
|
530
540
|
if (req->status->ok()) {
|
|
531
541
|
total_bytes += record_slice.size();
|
|
532
542
|
}
|
|
@@ -583,8 +593,8 @@ Status BlobFileReader::VerifyBlob(const Slice& record_slice,
|
|
|
583
593
|
|
|
584
594
|
Status BlobFileReader::UncompressBlobIfNeeded(
|
|
585
595
|
const Slice& value_slice, CompressionType compression_type,
|
|
586
|
-
MemoryAllocator* allocator, SystemClock* clock,
|
|
587
|
-
std::unique_ptr<BlobContents>* result) {
|
|
596
|
+
Decompressor* decompressor, MemoryAllocator* allocator, SystemClock* clock,
|
|
597
|
+
Statistics* statistics, std::unique_ptr<BlobContents>* result) {
|
|
588
598
|
assert(result);
|
|
589
599
|
|
|
590
600
|
if (compression_type == kNoCompression) {
|
|
@@ -593,31 +603,33 @@ Status BlobFileReader::UncompressBlobIfNeeded(
|
|
|
593
603
|
return Status::OK();
|
|
594
604
|
}
|
|
595
605
|
|
|
596
|
-
|
|
597
|
-
UncompressionInfo info(context, UncompressionDict::GetEmptyDict(),
|
|
598
|
-
compression_type);
|
|
606
|
+
assert(decompressor);
|
|
599
607
|
|
|
600
|
-
|
|
601
|
-
|
|
608
|
+
Decompressor::Args args;
|
|
609
|
+
args.compression_type = compression_type;
|
|
610
|
+
args.compressed_data = value_slice;
|
|
602
611
|
|
|
603
|
-
|
|
612
|
+
Status s = decompressor->ExtractUncompressedSize(args);
|
|
613
|
+
if (!s.ok()) {
|
|
614
|
+
return Status::Corruption(s.ToString());
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
CacheAllocationPtr output = AllocateBlock(args.uncompressed_size, allocator);
|
|
604
618
|
|
|
605
619
|
{
|
|
606
620
|
PERF_TIMER_GUARD(blob_decompress_time);
|
|
607
621
|
StopWatch stop_watch(clock, statistics, BLOB_DB_DECOMPRESSION_MICROS);
|
|
608
|
-
|
|
609
|
-
&uncompressed_size, compression_format_version,
|
|
610
|
-
allocator);
|
|
622
|
+
s = decompressor->DecompressBlock(args, output.get());
|
|
611
623
|
}
|
|
612
624
|
|
|
613
625
|
TEST_SYNC_POINT_CALLBACK(
|
|
614
|
-
"BlobFileReader::UncompressBlobIfNeeded:TamperWithResult", &
|
|
626
|
+
"BlobFileReader::UncompressBlobIfNeeded:TamperWithResult", &s);
|
|
615
627
|
|
|
616
|
-
if (!
|
|
617
|
-
return Status::Corruption(
|
|
628
|
+
if (!s.ok()) {
|
|
629
|
+
return Status::Corruption(s.ToString());
|
|
618
630
|
}
|
|
619
631
|
|
|
620
|
-
result->reset(new BlobContents(std::move(output), uncompressed_size));
|
|
632
|
+
result->reset(new BlobContents(std::move(output), args.uncompressed_size));
|
|
621
633
|
|
|
622
634
|
return Status::OK();
|
|
623
635
|
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#include "db/blob/blob_read_request.h"
|
|
12
12
|
#include "file/random_access_file_reader.h"
|
|
13
|
+
#include "rocksdb/advanced_compression.h"
|
|
13
14
|
#include "rocksdb/compression_type.h"
|
|
14
15
|
#include "rocksdb/rocksdb_namespace.h"
|
|
15
16
|
#include "util/autovector.h"
|
|
@@ -64,7 +65,8 @@ class BlobFileReader {
|
|
|
64
65
|
private:
|
|
65
66
|
BlobFileReader(std::unique_ptr<RandomAccessFileReader>&& file_reader,
|
|
66
67
|
uint64_t file_size, CompressionType compression_type,
|
|
67
|
-
SystemClock* clock,
|
|
68
|
+
std::shared_ptr<Decompressor> decompressor, SystemClock* clock,
|
|
69
|
+
Statistics* statistics);
|
|
68
70
|
|
|
69
71
|
static Status OpenFile(const ImmutableOptions& immutable_options,
|
|
70
72
|
const FileOptions& file_opts,
|
|
@@ -96,6 +98,7 @@ class BlobFileReader {
|
|
|
96
98
|
|
|
97
99
|
static Status UncompressBlobIfNeeded(const Slice& value_slice,
|
|
98
100
|
CompressionType compression_type,
|
|
101
|
+
Decompressor* decompressor,
|
|
99
102
|
MemoryAllocator* allocator,
|
|
100
103
|
SystemClock* clock,
|
|
101
104
|
Statistics* statistics,
|
|
@@ -104,6 +107,7 @@ class BlobFileReader {
|
|
|
104
107
|
std::unique_ptr<RandomAccessFileReader> file_reader_;
|
|
105
108
|
uint64_t file_size_;
|
|
106
109
|
CompressionType compression_type_;
|
|
110
|
+
std::shared_ptr<Decompressor> decompressor_;
|
|
107
111
|
SystemClock* clock_;
|
|
108
112
|
Statistics* statistics_;
|
|
109
113
|
};
|
|
@@ -65,7 +65,7 @@ void WriteBlobFile(const ImmutableOptions& immutable_options,
|
|
|
65
65
|
|
|
66
66
|
ASSERT_OK(blob_log_writer.WriteHeader(WriteOptions(), header));
|
|
67
67
|
|
|
68
|
-
std::vector<
|
|
68
|
+
std::vector<GrowableBuffer> compressed_blobs(num);
|
|
69
69
|
std::vector<Slice> blobs_to_write(num);
|
|
70
70
|
if (kNoCompression == compression) {
|
|
71
71
|
for (size_t i = 0; i < num; ++i) {
|
|
@@ -73,16 +73,13 @@ void WriteBlobFile(const ImmutableOptions& immutable_options,
|
|
|
73
73
|
blob_sizes[i] = blobs[i].size();
|
|
74
74
|
}
|
|
75
75
|
} else {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
|
|
79
|
-
compression);
|
|
80
|
-
|
|
81
|
-
constexpr uint32_t compression_format_version = 2;
|
|
76
|
+
auto compressor =
|
|
77
|
+
GetBuiltinV2CompressionManager()->GetCompressor({}, compression);
|
|
82
78
|
|
|
83
79
|
for (size_t i = 0; i < num; ++i) {
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
ASSERT_OK(LegacyForceBuiltinCompression(*compressor,
|
|
81
|
+
/*working_area=*/nullptr,
|
|
82
|
+
blobs[i], &compressed_blobs[i]));
|
|
86
83
|
blobs_to_write[i] = compressed_blobs[i];
|
|
87
84
|
blob_sizes[i] = compressed_blobs[i].size();
|
|
88
85
|
}
|
|
@@ -809,11 +806,10 @@ TEST_F(BlobFileReaderTest, UncompressionError) {
|
|
|
809
806
|
|
|
810
807
|
SyncPoint::GetInstance()->SetCallBack(
|
|
811
808
|
"BlobFileReader::UncompressBlobIfNeeded:TamperWithResult", [](void* arg) {
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
assert(output);
|
|
809
|
+
auto* result = static_cast<Status*>(arg);
|
|
810
|
+
assert(result);
|
|
815
811
|
|
|
816
|
-
|
|
812
|
+
*result = Status::Corruption("Injected result");
|
|
817
813
|
});
|
|
818
814
|
|
|
819
815
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
@@ -824,11 +820,12 @@ TEST_F(BlobFileReaderTest, UncompressionError) {
|
|
|
824
820
|
std::unique_ptr<BlobContents> value;
|
|
825
821
|
uint64_t bytes_read = 0;
|
|
826
822
|
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
823
|
+
ASSERT_EQ(reader
|
|
824
|
+
->GetBlob(ReadOptions(), key, blob_offset, blob_size,
|
|
825
|
+
kSnappyCompression, prefetch_buffer, allocator,
|
|
826
|
+
&value, &bytes_read)
|
|
827
|
+
.code(),
|
|
828
|
+
Status::Code::kCorruption);
|
|
832
829
|
ASSERT_EQ(value, nullptr);
|
|
833
830
|
ASSERT_EQ(bytes_read, 0);
|
|
834
831
|
|
|
@@ -1014,6 +1011,92 @@ TEST_P(BlobFileReaderDecodingErrorTest, DecodingError) {
|
|
|
1014
1011
|
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1015
1012
|
}
|
|
1016
1013
|
|
|
1014
|
+
TEST_F(BlobFileReaderTest, MultiGetBlobWithFailedValidation) {
|
|
1015
|
+
// Test that MultiGetBlob correctly handles the case where some requests
|
|
1016
|
+
// fail validation. The adjustments vector is only populated for requests
|
|
1017
|
+
// that pass validation, so the indices must track correctly.
|
|
1018
|
+
Options options;
|
|
1019
|
+
options.env = mock_env_.get();
|
|
1020
|
+
options.cf_paths.emplace_back(
|
|
1021
|
+
test::PerThreadDBPath(
|
|
1022
|
+
mock_env_.get(),
|
|
1023
|
+
"BlobFileReaderTest_MultiGetBlobWithFailedValidation"),
|
|
1024
|
+
0);
|
|
1025
|
+
options.enable_blob_files = true;
|
|
1026
|
+
|
|
1027
|
+
ImmutableOptions immutable_options(options);
|
|
1028
|
+
|
|
1029
|
+
constexpr uint32_t column_family_id = 1;
|
|
1030
|
+
constexpr bool has_ttl = false;
|
|
1031
|
+
constexpr ExpirationRange expiration_range;
|
|
1032
|
+
constexpr uint64_t blob_file_number = 1;
|
|
1033
|
+
constexpr size_t num_blobs = 3;
|
|
1034
|
+
const std::vector<std::string> key_strs = {"key1", "key2", "key3"};
|
|
1035
|
+
const std::vector<std::string> blob_strs = {"blob1", "blob2", "blob3"};
|
|
1036
|
+
|
|
1037
|
+
const std::vector<Slice> keys = {key_strs[0], key_strs[1], key_strs[2]};
|
|
1038
|
+
const std::vector<Slice> blobs = {blob_strs[0], blob_strs[1], blob_strs[2]};
|
|
1039
|
+
|
|
1040
|
+
std::vector<uint64_t> blob_offsets(keys.size());
|
|
1041
|
+
std::vector<uint64_t> blob_sizes(keys.size());
|
|
1042
|
+
|
|
1043
|
+
WriteBlobFile(immutable_options, column_family_id, has_ttl, expiration_range,
|
|
1044
|
+
expiration_range, blob_file_number, keys, blobs, kNoCompression,
|
|
1045
|
+
blob_offsets, blob_sizes);
|
|
1046
|
+
|
|
1047
|
+
constexpr HistogramImpl* blob_file_read_hist = nullptr;
|
|
1048
|
+
|
|
1049
|
+
std::unique_ptr<BlobFileReader> reader;
|
|
1050
|
+
|
|
1051
|
+
ReadOptions read_options;
|
|
1052
|
+
ASSERT_OK(BlobFileReader::Create(
|
|
1053
|
+
immutable_options, read_options, FileOptions(), column_family_id,
|
|
1054
|
+
blob_file_read_hist, blob_file_number, nullptr /*IOTracer*/, &reader));
|
|
1055
|
+
|
|
1056
|
+
// Enable checksum verification so adjustments are non-zero
|
|
1057
|
+
read_options.verify_checksums = true;
|
|
1058
|
+
constexpr MemoryAllocator* allocator = nullptr;
|
|
1059
|
+
|
|
1060
|
+
// Fail the first request by giving it an invalid offset (too small).
|
|
1061
|
+
// This causes the first request to be skipped in the adjustments vector,
|
|
1062
|
+
// so adjustments has only 2 entries (for blobs 1 and 2), while blob_reqs
|
|
1063
|
+
// has 3 entries. Without the fix, adjustments[i] would use the wrong
|
|
1064
|
+
// index for the remaining valid requests.
|
|
1065
|
+
std::array<Status, num_blobs> statuses_buf;
|
|
1066
|
+
std::array<BlobReadRequest, num_blobs> requests_buf;
|
|
1067
|
+
autovector<std::pair<BlobReadRequest*, std::unique_ptr<BlobContents>>>
|
|
1068
|
+
blob_reqs;
|
|
1069
|
+
|
|
1070
|
+
// First request: invalid offset (too small, will fail validation)
|
|
1071
|
+
requests_buf[0] = BlobReadRequest(keys[0], /*offset=*/0, blob_sizes[0],
|
|
1072
|
+
kNoCompression, nullptr, &statuses_buf[0]);
|
|
1073
|
+
// Second and third requests: valid
|
|
1074
|
+
requests_buf[1] = BlobReadRequest(keys[1], blob_offsets[1], blob_sizes[1],
|
|
1075
|
+
kNoCompression, nullptr, &statuses_buf[1]);
|
|
1076
|
+
requests_buf[2] = BlobReadRequest(keys[2], blob_offsets[2], blob_sizes[2],
|
|
1077
|
+
kNoCompression, nullptr, &statuses_buf[2]);
|
|
1078
|
+
|
|
1079
|
+
for (size_t i = 0; i < num_blobs; ++i) {
|
|
1080
|
+
blob_reqs.emplace_back(&requests_buf[i], std::unique_ptr<BlobContents>());
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
uint64_t bytes_read = 0;
|
|
1084
|
+
reader->MultiGetBlob(read_options, allocator, blob_reqs, &bytes_read);
|
|
1085
|
+
|
|
1086
|
+
// First request should fail validation
|
|
1087
|
+
ASSERT_TRUE(statuses_buf[0].IsCorruption());
|
|
1088
|
+
ASSERT_EQ(blob_reqs[0].second, nullptr);
|
|
1089
|
+
|
|
1090
|
+
// Second and third requests should succeed with correct data
|
|
1091
|
+
ASSERT_OK(statuses_buf[1]);
|
|
1092
|
+
ASSERT_NE(blob_reqs[1].second, nullptr);
|
|
1093
|
+
ASSERT_EQ(blob_reqs[1].second->data(), blobs[1]);
|
|
1094
|
+
|
|
1095
|
+
ASSERT_OK(statuses_buf[2]);
|
|
1096
|
+
ASSERT_NE(blob_reqs[2].second, nullptr);
|
|
1097
|
+
ASSERT_EQ(blob_reqs[2].second->data(), blobs[2]);
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1017
1100
|
} // namespace ROCKSDB_NAMESPACE
|
|
1018
1101
|
|
|
1019
1102
|
int main(int argc, char** argv) {
|
|
@@ -137,6 +137,18 @@ class BlobIndex {
|
|
|
137
137
|
return oss.str();
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
// Encode this blob index into dst based on its type.
|
|
141
|
+
void EncodeTo(std::string* dst) const {
|
|
142
|
+
if (IsInlined()) {
|
|
143
|
+
EncodeInlinedTTL(dst, expiration_, value_);
|
|
144
|
+
} else if (HasTTL()) {
|
|
145
|
+
EncodeBlobTTL(dst, expiration_, file_number_, offset_, size_,
|
|
146
|
+
compression_);
|
|
147
|
+
} else {
|
|
148
|
+
EncodeBlob(dst, file_number_, offset_, size_, compression_);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
140
152
|
static void EncodeInlinedTTL(std::string* dst, uint64_t expiration,
|
|
141
153
|
const Slice& value) {
|
|
142
154
|
assert(dst != nullptr);
|
|
@@ -67,7 +67,7 @@ void WriteBlobFile(const ImmutableOptions& immutable_options,
|
|
|
67
67
|
|
|
68
68
|
ASSERT_OK(blob_log_writer.WriteHeader(WriteOptions(), header));
|
|
69
69
|
|
|
70
|
-
std::vector<
|
|
70
|
+
std::vector<GrowableBuffer> compressed_blobs(num);
|
|
71
71
|
std::vector<Slice> blobs_to_write(num);
|
|
72
72
|
if (kNoCompression == compression) {
|
|
73
73
|
for (size_t i = 0; i < num; ++i) {
|
|
@@ -75,16 +75,13 @@ void WriteBlobFile(const ImmutableOptions& immutable_options,
|
|
|
75
75
|
blob_sizes[i] = blobs[i].size();
|
|
76
76
|
}
|
|
77
77
|
} else {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
|
|
81
|
-
compression);
|
|
82
|
-
|
|
83
|
-
constexpr uint32_t compression_format_version = 2;
|
|
78
|
+
auto compressor =
|
|
79
|
+
GetBuiltinV2CompressionManager()->GetCompressor({}, compression);
|
|
84
80
|
|
|
85
81
|
for (size_t i = 0; i < num; ++i) {
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
ASSERT_OK(LegacyForceBuiltinCompression(*compressor,
|
|
83
|
+
/*working_area=*/nullptr,
|
|
84
|
+
blobs[i], &compressed_blobs[i]));
|
|
88
85
|
blobs_to_write[i] = compressed_blobs[i];
|
|
89
86
|
blob_sizes[i] = compressed_blobs[i].size();
|
|
90
87
|
}
|
|
@@ -56,6 +56,18 @@ TableBuilder* NewTableBuilder(const TableBuilderOptions& tboptions,
|
|
|
56
56
|
return tboptions.moptions.table_factory->NewTableBuilder(tboptions, file);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
void ExtractTimestampFromTableProperties(const TableProperties& tp,
|
|
60
|
+
FileMetaData* meta) {
|
|
61
|
+
auto min_ts_iter = tp.user_collected_properties.find("rocksdb.timestamp_min");
|
|
62
|
+
if (min_ts_iter != tp.user_collected_properties.end()) {
|
|
63
|
+
meta->min_timestamp = min_ts_iter->second;
|
|
64
|
+
}
|
|
65
|
+
auto max_ts_iter = tp.user_collected_properties.find("rocksdb.timestamp_max");
|
|
66
|
+
if (max_ts_iter != tp.user_collected_properties.end()) {
|
|
67
|
+
meta->max_timestamp = max_ts_iter->second;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
59
71
|
Status BuildTable(
|
|
60
72
|
const std::string& dbname, VersionSet* versions,
|
|
61
73
|
const ImmutableDBOptions& db_options, const TableBuilderOptions& tboptions,
|
|
@@ -310,6 +322,8 @@ Status BuildTable(
|
|
|
310
322
|
}
|
|
311
323
|
|
|
312
324
|
TEST_SYNC_POINT("BuildTable:BeforeFinishBuildTable");
|
|
325
|
+
TEST_SYNC_POINT_CALLBACK("BuildTable:BeforeCheckEmpty",
|
|
326
|
+
static_cast<TableBuilder*>(builder));
|
|
313
327
|
const bool empty = builder->IsEmpty();
|
|
314
328
|
if (flush_stats) {
|
|
315
329
|
assert(c_iter.HasNumInputEntryScanned());
|
|
@@ -318,6 +332,14 @@ Status BuildTable(
|
|
|
318
332
|
}
|
|
319
333
|
if (!s.ok() || empty) {
|
|
320
334
|
builder->Abandon();
|
|
335
|
+
// Propagate the builder's error when the builder is empty due to an
|
|
336
|
+
// internal error (e.g., write fault injection causing all Add() calls to
|
|
337
|
+
// return early). Without this, `s` would remain OK and the downstream
|
|
338
|
+
// key count validation in flush_job.cc would produce a misleading
|
|
339
|
+
// Corruption error instead of the actual builder error.
|
|
340
|
+
if (s.ok() && !builder->status().ok()) {
|
|
341
|
+
s = builder->status();
|
|
342
|
+
}
|
|
321
343
|
} else {
|
|
322
344
|
SeqnoToTimeMapping relevant_mapping;
|
|
323
345
|
if (seqno_to_time_mapping) {
|
|
@@ -355,6 +377,7 @@ Status BuildTable(
|
|
|
355
377
|
assert(meta->fd.GetFileSize() > 0);
|
|
356
378
|
tp = builder
|
|
357
379
|
->GetTableProperties(); // refresh now that builder is finished
|
|
380
|
+
ExtractTimestampFromTableProperties(tp, meta);
|
|
358
381
|
if (memtable_payload_bytes != nullptr &&
|
|
359
382
|
memtable_garbage_bytes != nullptr) {
|
|
360
383
|
const CompactionIterationStats& ci_stats = c_iter.iter_stats();
|
|
@@ -41,6 +41,13 @@ class BlobFileCompletionCallback;
|
|
|
41
41
|
TableBuilder* NewTableBuilder(const TableBuilderOptions& tboptions,
|
|
42
42
|
WritableFileWriter* file);
|
|
43
43
|
|
|
44
|
+
// Extract min/max timestamps from table properties and populate FileMetaData.
|
|
45
|
+
// This is used by both flush (BuildTable) and compaction (CompactionOutputs)
|
|
46
|
+
// to populate timestamp range in FileMetaData from the TimestampTableProperties
|
|
47
|
+
// collector output.
|
|
48
|
+
void ExtractTimestampFromTableProperties(const TableProperties& tp,
|
|
49
|
+
FileMetaData* meta);
|
|
50
|
+
|
|
44
51
|
// Build a Table file from the contents of *iter. The generated file
|
|
45
52
|
// will be named according to number specified in meta. On success, the rest of
|
|
46
53
|
// *meta will be filled with metadata about the generated table.
|