@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
|
@@ -183,11 +183,11 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferAcrossCFs2) {
|
|
|
183
183
|
// is waiting to be finished but DBs tries to write meanwhile.
|
|
184
184
|
TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
|
|
185
185
|
std::vector<std::string> dbnames;
|
|
186
|
-
std::vector<DB
|
|
186
|
+
std::vector<std::unique_ptr<DB>> dbs;
|
|
187
187
|
int num_dbs = 3;
|
|
188
188
|
|
|
189
189
|
for (int i = 0; i < num_dbs; i++) {
|
|
190
|
-
dbs.
|
|
190
|
+
dbs.emplace_back();
|
|
191
191
|
dbnames.push_back(
|
|
192
192
|
test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
|
|
193
193
|
}
|
|
@@ -266,7 +266,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
|
|
|
266
266
|
// Last writer will write and when its blocked it will signal Flush to
|
|
267
267
|
// continue to clear the stall.
|
|
268
268
|
|
|
269
|
-
threads.emplace_back(write_db, db_);
|
|
269
|
+
threads.emplace_back(write_db, db_.get());
|
|
270
270
|
// Wait untill first DB is blocked and then create the multiple writers for
|
|
271
271
|
// different DBs which will be blocked from getting added to the queue because
|
|
272
272
|
// stall is in effect.
|
|
@@ -277,7 +277,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
|
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
for (int i = 0; i < num_dbs; i++) {
|
|
280
|
-
threads.emplace_back(write_db, dbs[i]);
|
|
280
|
+
threads.emplace_back(write_db, dbs[i].get());
|
|
281
281
|
}
|
|
282
282
|
for (auto& t : threads) {
|
|
283
283
|
t.join();
|
|
@@ -289,7 +289,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
|
|
|
289
289
|
for (int i = 0; i < num_dbs; i++) {
|
|
290
290
|
ASSERT_OK(dbs[i]->Close());
|
|
291
291
|
ASSERT_OK(DestroyDB(dbnames[i], options));
|
|
292
|
-
|
|
292
|
+
dbs[i].reset();
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
@@ -300,11 +300,11 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
|
|
|
300
300
|
// blocked when stall by WriteBufferManager is in effect.
|
|
301
301
|
TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
|
|
302
302
|
std::vector<std::string> dbnames;
|
|
303
|
-
std::vector<DB
|
|
303
|
+
std::vector<std::unique_ptr<DB>> dbs;
|
|
304
304
|
int num_dbs = 3;
|
|
305
305
|
|
|
306
306
|
for (int i = 0; i < num_dbs; i++) {
|
|
307
|
-
dbs.
|
|
307
|
+
dbs.emplace_back();
|
|
308
308
|
dbnames.push_back(
|
|
309
309
|
test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
|
|
310
310
|
}
|
|
@@ -407,7 +407,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
|
|
|
407
407
|
// |
|
|
408
408
|
// Last writer thread will write and when its blocked it will signal Flush to
|
|
409
409
|
// continue to clear the stall.
|
|
410
|
-
threads.emplace_back(write_db, db_);
|
|
410
|
+
threads.emplace_back(write_db, db_.get());
|
|
411
411
|
// Wait untill first thread is blocked and then create the multiple writer
|
|
412
412
|
// threads.
|
|
413
413
|
{
|
|
@@ -421,7 +421,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
|
|
|
421
421
|
// Write to multiple columns of db_.
|
|
422
422
|
writer_threads.emplace_back(write_cf, i % 3);
|
|
423
423
|
// Write to different dbs.
|
|
424
|
-
threads.emplace_back(write_db, dbs[i]);
|
|
424
|
+
threads.emplace_back(write_db, dbs[i].get());
|
|
425
425
|
}
|
|
426
426
|
for (auto& t : threads) {
|
|
427
427
|
t.join();
|
|
@@ -441,7 +441,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
|
|
|
441
441
|
for (int i = 0; i < num_dbs; i++) {
|
|
442
442
|
ASSERT_OK(dbs[i]->Close());
|
|
443
443
|
ASSERT_OK(DestroyDB(dbnames[i], options));
|
|
444
|
-
|
|
444
|
+
dbs[i].reset();
|
|
445
445
|
}
|
|
446
446
|
|
|
447
447
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
@@ -604,11 +604,11 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsSingleDB) {
|
|
|
604
604
|
// dbs by passing different values to WriteOption.no_slown_down.
|
|
605
605
|
TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
|
|
606
606
|
std::vector<std::string> dbnames;
|
|
607
|
-
std::vector<DB
|
|
607
|
+
std::vector<std::unique_ptr<DB>> dbs;
|
|
608
608
|
int num_dbs = 4;
|
|
609
609
|
|
|
610
610
|
for (int i = 0; i < num_dbs; i++) {
|
|
611
|
-
dbs.
|
|
611
|
+
dbs.emplace_back();
|
|
612
612
|
dbnames.push_back(
|
|
613
613
|
test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
|
|
614
614
|
}
|
|
@@ -732,7 +732,7 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
|
|
|
732
732
|
// |
|
|
733
733
|
// Last writer thread will write and when its blocked/return it will signal
|
|
734
734
|
// Flush to continue to clear the stall.
|
|
735
|
-
threads.emplace_back(write_slow_down, db_);
|
|
735
|
+
threads.emplace_back(write_slow_down, db_.get());
|
|
736
736
|
// Wait untill first thread writing to DB is blocked and then
|
|
737
737
|
// create the multiple writers.
|
|
738
738
|
{
|
|
@@ -744,11 +744,11 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
|
|
|
744
744
|
|
|
745
745
|
for (int i = 0; i < num_dbs; i += 2) {
|
|
746
746
|
// Write to multiple columns of db_.
|
|
747
|
-
writer_threads.emplace_back(write_slow_down, db_);
|
|
748
|
-
writer_threads.emplace_back(write_no_slow_down, db_);
|
|
747
|
+
writer_threads.emplace_back(write_slow_down, db_.get());
|
|
748
|
+
writer_threads.emplace_back(write_no_slow_down, db_.get());
|
|
749
749
|
// Write to different DBs.
|
|
750
|
-
threads.emplace_back(write_slow_down, dbs[i]);
|
|
751
|
-
threads.emplace_back(write_no_slow_down, dbs[i + 1]);
|
|
750
|
+
threads.emplace_back(write_slow_down, dbs[i].get());
|
|
751
|
+
threads.emplace_back(write_no_slow_down, dbs[i + 1].get());
|
|
752
752
|
}
|
|
753
753
|
|
|
754
754
|
for (auto& t : threads) {
|
|
@@ -773,7 +773,7 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
|
|
|
773
773
|
for (int i = 0; i < num_dbs; i++) {
|
|
774
774
|
ASSERT_OK(dbs[i]->Close());
|
|
775
775
|
ASSERT_OK(DestroyDB(dbnames[i], options));
|
|
776
|
-
|
|
776
|
+
dbs[i].reset();
|
|
777
777
|
}
|
|
778
778
|
|
|
779
779
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
@@ -809,7 +809,7 @@ TEST_P(DBWriteBufferManagerTest, StopSwitchingMemTablesOnceFlushing) {
|
|
|
809
809
|
|
|
810
810
|
Reopen(options);
|
|
811
811
|
std::string dbname = test::PerThreadDBPath("db_shared_wbm_db");
|
|
812
|
-
DB
|
|
812
|
+
std::unique_ptr<DB> shared_wbm_db;
|
|
813
813
|
|
|
814
814
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
815
815
|
ASSERT_OK(DB::Open(options, dbname, &shared_wbm_db));
|
|
@@ -842,7 +842,7 @@ TEST_P(DBWriteBufferManagerTest, StopSwitchingMemTablesOnceFlushing) {
|
|
|
842
842
|
sleeping_task_high.WaitUntilDone();
|
|
843
843
|
ASSERT_OK(shared_wbm_db->Close());
|
|
844
844
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
845
|
-
|
|
845
|
+
shared_wbm_db.reset();
|
|
846
846
|
}
|
|
847
847
|
|
|
848
848
|
TEST_F(DBWriteBufferManagerTest, RuntimeChangeableAllowStall) {
|
|
@@ -913,6 +913,270 @@ TEST_F(DBWriteBufferManagerTest, RuntimeChangeableAllowStall) {
|
|
|
913
913
|
sleeping_task->WakeUp();
|
|
914
914
|
}
|
|
915
915
|
|
|
916
|
+
// Test that enforce_write_buffer_manager_during_recovery option controls
|
|
917
|
+
// whether WriteBufferManager limits are respected during WAL recovery.
|
|
918
|
+
// When enabled, flushes are triggered to keep memory bounded.
|
|
919
|
+
// When disabled (default), memory can grow beyond the configured limit.
|
|
920
|
+
TEST_F(DBWriteBufferManagerTest,
|
|
921
|
+
WriteBufferManagerLimitDuringWALRecoverySingleDB) {
|
|
922
|
+
const size_t kWbmLimit = 1 * 1024 * 1024; // 1 MB
|
|
923
|
+
const size_t kWbmLimitForWrites = 100 * 1024 * 1024; // 100 MB (no flush)
|
|
924
|
+
|
|
925
|
+
Options options = CurrentOptions();
|
|
926
|
+
options.arena_block_size = 4096;
|
|
927
|
+
options.write_buffer_size = 10 * 1024 * 1024; // 10MB per CF, never hit
|
|
928
|
+
options.max_write_buffer_number = 10; // Allow many memtables
|
|
929
|
+
options.disable_auto_compactions = true;
|
|
930
|
+
|
|
931
|
+
// Use avoid_flush_during_recovery = true to prevent any flushes triggered
|
|
932
|
+
// during the recovery
|
|
933
|
+
options.avoid_flush_during_recovery = true;
|
|
934
|
+
|
|
935
|
+
const int kNumKeys = 50;
|
|
936
|
+
const int kValueSize = 50 * 1024; // 50 KB each, total ~2.5 MB > 1MB limit
|
|
937
|
+
|
|
938
|
+
// ========== Part 1: Test with enforcement DISABLED (default behavior) =====
|
|
939
|
+
// WBM limits are not enforced during recovery
|
|
940
|
+
options.enforce_write_buffer_manager_during_recovery = false;
|
|
941
|
+
|
|
942
|
+
// Use large WBM limit during writes to avoid triggering flushes
|
|
943
|
+
options.write_buffer_manager =
|
|
944
|
+
std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
|
|
945
|
+
DestroyAndReopen(options);
|
|
946
|
+
|
|
947
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
948
|
+
ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
// Check to make sure there's no L0 file
|
|
952
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
953
|
+
Close();
|
|
954
|
+
|
|
955
|
+
// Use smaller WBM limit for recovery
|
|
956
|
+
options.write_buffer_manager =
|
|
957
|
+
std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
|
|
958
|
+
|
|
959
|
+
// Recovery without enforcement - memory should exceed the limit
|
|
960
|
+
Reopen(options);
|
|
961
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
962
|
+
size_t memory_without_enforcement =
|
|
963
|
+
options.write_buffer_manager->mutable_memtable_memory_usage();
|
|
964
|
+
|
|
965
|
+
ASSERT_GT(memory_without_enforcement, kWbmLimit)
|
|
966
|
+
<< "Without enforcement, memory (" << memory_without_enforcement
|
|
967
|
+
<< ") should exceed the WBM limit (" << kWbmLimit << ")";
|
|
968
|
+
|
|
969
|
+
// Still no L0 file since avoid_flush_during_recovery is true
|
|
970
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
971
|
+
|
|
972
|
+
// ========== Part 2: Test with enforcement ENABLED ==========================
|
|
973
|
+
options.enforce_write_buffer_manager_during_recovery = true;
|
|
974
|
+
|
|
975
|
+
// Use large WBM limit during writes to avoid triggering flushes
|
|
976
|
+
options.write_buffer_manager =
|
|
977
|
+
std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
|
|
978
|
+
DestroyAndReopen(options);
|
|
979
|
+
|
|
980
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
981
|
+
ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
|
|
982
|
+
}
|
|
983
|
+
// Check to make sure there's no L0 file
|
|
984
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
985
|
+
Close();
|
|
986
|
+
|
|
987
|
+
// Use smaller WBM limit for recovery
|
|
988
|
+
options.write_buffer_manager =
|
|
989
|
+
std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
|
|
990
|
+
|
|
991
|
+
// Recovery with enforcement - memory should be bounded
|
|
992
|
+
Reopen(options);
|
|
993
|
+
|
|
994
|
+
// Wait for flush to finish
|
|
995
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
996
|
+
|
|
997
|
+
// WBM's ShouldFlush() compares active memtable mem usage against
|
|
998
|
+
// mutable_limit_ which is 7/8 of buffer_size.
|
|
999
|
+
size_t expected_num_l0_files =
|
|
1000
|
+
memory_without_enforcement / (kWbmLimit * 7 / 8) + 1;
|
|
1001
|
+
ASSERT_EQ(expected_num_l0_files, TotalTableFiles());
|
|
1002
|
+
|
|
1003
|
+
size_t memory_with_enforcement =
|
|
1004
|
+
options.write_buffer_manager->mutable_memtable_memory_usage();
|
|
1005
|
+
|
|
1006
|
+
ASSERT_LT(memory_with_enforcement, kWbmLimit)
|
|
1007
|
+
<< "With enforcement, memory (" << memory_with_enforcement
|
|
1008
|
+
<< ") should be less than the limit " << kWbmLimit << ")";
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
TEST_F(DBWriteBufferManagerTest,
|
|
1012
|
+
WriteBufferManagerLimitDuringWALRecoveryMultipleDBs) {
|
|
1013
|
+
// Two DBs with 4MB WBM limit.
|
|
1014
|
+
// First DB writes 2.5MB and closes, no flush (mem usage goes back to 0)
|
|
1015
|
+
// Second DB writes 2.5MB then first DB reopens.
|
|
1016
|
+
const size_t kWbmLimitForTwoDbs = 4 * 1024 * 1024;
|
|
1017
|
+
|
|
1018
|
+
Options options = CurrentOptions();
|
|
1019
|
+
options.arena_block_size = 2048;
|
|
1020
|
+
options.write_buffer_size = 10 * 1024 * 1024; // 10MB per CF, never hit
|
|
1021
|
+
options.max_write_buffer_number = 10; // Allow many memtables
|
|
1022
|
+
options.disable_auto_compactions = true;
|
|
1023
|
+
|
|
1024
|
+
// Use avoid_flush_during_recovery = true to prevent any flushes triggered
|
|
1025
|
+
// during the recovery
|
|
1026
|
+
options.avoid_flush_during_recovery = true;
|
|
1027
|
+
|
|
1028
|
+
const int kNumKeys = 50;
|
|
1029
|
+
const int kValueSize = 50 * 1024;
|
|
1030
|
+
|
|
1031
|
+
// ========== Part 1: Test with enforcement DISABLED (default behavior) =====
|
|
1032
|
+
// WBM limits are not enforced during recovery
|
|
1033
|
+
options.enforce_write_buffer_manager_during_recovery = false;
|
|
1034
|
+
|
|
1035
|
+
options.write_buffer_manager =
|
|
1036
|
+
std::make_shared<WriteBufferManager>(kWbmLimitForTwoDbs, nullptr, true);
|
|
1037
|
+
DestroyAndReopen(options);
|
|
1038
|
+
|
|
1039
|
+
// Use of 2.5MB shouldn't trigger flush
|
|
1040
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
1041
|
+
ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
|
|
1042
|
+
}
|
|
1043
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
1044
|
+
|
|
1045
|
+
size_t mem_usage_first_db_only =
|
|
1046
|
+
options.write_buffer_manager->mutable_memtable_memory_usage();
|
|
1047
|
+
|
|
1048
|
+
ASSERT_LT(mem_usage_first_db_only, kWbmLimitForTwoDbs)
|
|
1049
|
+
<< "Memory (" << mem_usage_first_db_only
|
|
1050
|
+
<< ") should be less than the limit " << kWbmLimitForTwoDbs << ")";
|
|
1051
|
+
|
|
1052
|
+
Close();
|
|
1053
|
+
ASSERT_EQ(0, options.write_buffer_manager->mutable_memtable_memory_usage());
|
|
1054
|
+
|
|
1055
|
+
// Open a second DB sharing the same WBM, write data to consume memory
|
|
1056
|
+
std::string second_dbname = test::PerThreadDBPath("db_shared_wbm_recovery");
|
|
1057
|
+
std::unique_ptr<DB> second_db;
|
|
1058
|
+
ASSERT_OK(DestroyDB(second_dbname, options));
|
|
1059
|
+
ASSERT_OK(DB::Open(options, second_dbname, &second_db));
|
|
1060
|
+
|
|
1061
|
+
WriteOptions wo;
|
|
1062
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
1063
|
+
ASSERT_OK(second_db->Put(wo, Key(i), DummyString(kValueSize)));
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
// First DB reopens without enforcement
|
|
1067
|
+
Reopen(options);
|
|
1068
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
1069
|
+
|
|
1070
|
+
// No flush
|
|
1071
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
1072
|
+
|
|
1073
|
+
size_t memory_usage_for_both =
|
|
1074
|
+
options.write_buffer_manager->mutable_memtable_memory_usage();
|
|
1075
|
+
ASSERT_GT(memory_usage_for_both, kWbmLimitForTwoDbs)
|
|
1076
|
+
<< "Without enforcement + shared WBM, memory (" << memory_usage_for_both
|
|
1077
|
+
<< ") should be greater than the limit (" << kWbmLimitForTwoDbs << ")";
|
|
1078
|
+
|
|
1079
|
+
// Close the first DB
|
|
1080
|
+
Close();
|
|
1081
|
+
|
|
1082
|
+
// ========== Part 2: Test with enforcement ENABLED =====
|
|
1083
|
+
// WBM limits enforced during recovery
|
|
1084
|
+
options.enforce_write_buffer_manager_during_recovery = true;
|
|
1085
|
+
|
|
1086
|
+
// Reopen the first DB with enforcement option enabled.
|
|
1087
|
+
Reopen(options);
|
|
1088
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
1089
|
+
|
|
1090
|
+
// With enforcement enabled, there were flushes
|
|
1091
|
+
ASSERT_GT(TotalTableFiles(), 0);
|
|
1092
|
+
|
|
1093
|
+
memory_usage_for_both =
|
|
1094
|
+
options.write_buffer_manager->mutable_memtable_memory_usage();
|
|
1095
|
+
ASSERT_LT(memory_usage_for_both, kWbmLimitForTwoDbs)
|
|
1096
|
+
<< "With enforcement + shared WBM, memory (" << memory_usage_for_both
|
|
1097
|
+
<< ") should be less than the limit (" << kWbmLimitForTwoDbs << ")";
|
|
1098
|
+
|
|
1099
|
+
Close();
|
|
1100
|
+
|
|
1101
|
+
// Clean up second DB
|
|
1102
|
+
ASSERT_OK(second_db->Close());
|
|
1103
|
+
ASSERT_OK(DestroyDB(second_dbname, options));
|
|
1104
|
+
second_db.reset();
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
// Regression test: a WriteBatch that exceeds both per-CF memtable limit and
|
|
1108
|
+
// WBM global limit during WAL recovery should not double-schedule a CF on
|
|
1109
|
+
// flush_scheduler_ (which crashes debug builds via assert).
|
|
1110
|
+
TEST_F(DBWriteBufferManagerTest, DoubleSchedulingBugDuringWALRecovery) {
|
|
1111
|
+
Options options = CurrentOptions();
|
|
1112
|
+
options.arena_block_size = 4096;
|
|
1113
|
+
// Small per-CF limit so memtable triggers CheckMemtableFull during recovery
|
|
1114
|
+
options.write_buffer_size = 64 * 1024; // 64KB
|
|
1115
|
+
options.max_write_buffer_number = 10;
|
|
1116
|
+
options.disable_auto_compactions = true;
|
|
1117
|
+
options.avoid_flush_during_recovery = true;
|
|
1118
|
+
options.enforce_write_buffer_manager_during_recovery = true;
|
|
1119
|
+
|
|
1120
|
+
// WBM limit also small so the WBM loop in InsertLogRecordToMemtable fires
|
|
1121
|
+
options.write_buffer_manager =
|
|
1122
|
+
std::make_shared<WriteBufferManager>(128 * 1024, nullptr, true);
|
|
1123
|
+
|
|
1124
|
+
DestroyAndReopen(options);
|
|
1125
|
+
|
|
1126
|
+
// Write enough data to exceed both limits during recovery replay
|
|
1127
|
+
for (int i = 0; i < 50; i++) {
|
|
1128
|
+
ASSERT_OK(Put(Key(i), DummyString(4096))); // ~200KB total > both limits
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
Close();
|
|
1132
|
+
|
|
1133
|
+
// Reopen triggers WAL recovery. Without the fix, this crashes in debug
|
|
1134
|
+
// builds with assert(checking_set_.count(cfd) == 0) in ScheduleWork().
|
|
1135
|
+
ASSERT_OK(TryReopen(options));
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
// Read-only WAL recovery with enforce_write_buffer_manager_during_recovery
|
|
1139
|
+
// should not crash due to duplicate ScheduleWork() calls on the
|
|
1140
|
+
// flush_scheduler_. The flush scheduler was not drained in read-only mode,
|
|
1141
|
+
// causing the same CFD to be scheduled twice on successive WAL records,
|
|
1142
|
+
// triggering assert(checking_set_.count(cfd) == 0).
|
|
1143
|
+
TEST_F(DBWriteBufferManagerTest, ReadOnlyRecoveryWithEnforceWBMDoesNotAssert) {
|
|
1144
|
+
Options options = CurrentOptions();
|
|
1145
|
+
options.arena_block_size = 4096;
|
|
1146
|
+
options.write_buffer_size = 10 * 1024 * 1024; // 10MB, never hit
|
|
1147
|
+
options.max_write_buffer_number = 10;
|
|
1148
|
+
options.disable_auto_compactions = true;
|
|
1149
|
+
options.avoid_flush_during_recovery = true;
|
|
1150
|
+
options.enforce_write_buffer_manager_during_recovery = true;
|
|
1151
|
+
|
|
1152
|
+
const size_t kWbmLimitForWrites = 100 * 1024 * 1024; // 100MB (no flush)
|
|
1153
|
+
options.write_buffer_manager =
|
|
1154
|
+
std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
|
|
1155
|
+
|
|
1156
|
+
DestroyAndReopen(options);
|
|
1157
|
+
|
|
1158
|
+
// Write enough data so that WAL recovery will trigger
|
|
1159
|
+
// WriteBufferManager::ShouldFlush() multiple times with a small WBM limit.
|
|
1160
|
+
for (int i = 0; i < 50; i++) {
|
|
1161
|
+
ASSERT_OK(Put(Key(i), DummyString(50 * 1024))); // ~2.5MB total
|
|
1162
|
+
}
|
|
1163
|
+
ASSERT_EQ(0, TotalTableFiles());
|
|
1164
|
+
Close();
|
|
1165
|
+
|
|
1166
|
+
// Reopen read-only with a small WBM limit that will trigger ShouldFlush()
|
|
1167
|
+
// during WAL recovery. Without the fix, this crashes in debug builds with
|
|
1168
|
+
// assert(checking_set_.count(cfd) == 0) in FlushScheduler::ScheduleWork().
|
|
1169
|
+
const size_t kWbmLimit = 1 * 1024 * 1024; // 1MB
|
|
1170
|
+
options.write_buffer_manager =
|
|
1171
|
+
std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
|
|
1172
|
+
ASSERT_OK(ReadOnlyReopen(options));
|
|
1173
|
+
|
|
1174
|
+
// Verify data is readable
|
|
1175
|
+
for (int i = 0; i < 50; i++) {
|
|
1176
|
+
ASSERT_EQ(DummyString(50 * 1024), Get(Key(i)));
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
|
|
916
1180
|
INSTANTIATE_TEST_CASE_P(DBWriteBufferManagerTest, DBWriteBufferManagerTest,
|
|
917
1181
|
testing::Bool());
|
|
918
1182
|
|
|
@@ -741,7 +741,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
|
|
|
741
741
|
ExternalSstFileInfo external_info;
|
|
742
742
|
ASSERT_OK(sst_file_writer.Finish(&external_info));
|
|
743
743
|
}
|
|
744
|
-
|
|
744
|
+
Atomic<bool> parallel_ingest_completed{false};
|
|
745
745
|
port::Thread parallel_ingest{[&]() {
|
|
746
746
|
IngestExternalFileOptions ingest_opts;
|
|
747
747
|
ingest_opts.move_files = true; // faster than copy
|
|
@@ -750,7 +750,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
|
|
|
750
750
|
parallel_ingest_completed.Store(true);
|
|
751
751
|
}};
|
|
752
752
|
|
|
753
|
-
|
|
753
|
+
Atomic<bool> flush_completed{false};
|
|
754
754
|
port::Thread parallel_flush{[&]() {
|
|
755
755
|
FlushOptions flush_opts;
|
|
756
756
|
// NB: Flush with wait=false case is tested above in LockWALInEffect
|
|
@@ -762,7 +762,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
|
|
|
762
762
|
flush_completed.Store(true);
|
|
763
763
|
}};
|
|
764
764
|
|
|
765
|
-
|
|
765
|
+
Atomic<bool> parallel_put_completed{false};
|
|
766
766
|
port::Thread parallel_put{[&]() {
|
|
767
767
|
// This can make certain failure scenarios more likely:
|
|
768
768
|
// sleep(1);
|
|
@@ -980,11 +980,6 @@ class InternalKeySliceTransform : public SliceTransform {
|
|
|
980
980
|
return transform_->InDomain(user_key);
|
|
981
981
|
}
|
|
982
982
|
|
|
983
|
-
bool InRange(const Slice& dst) const override {
|
|
984
|
-
auto user_key = ExtractUserKey(dst);
|
|
985
|
-
return transform_->InRange(user_key);
|
|
986
|
-
}
|
|
987
|
-
|
|
988
983
|
const SliceTransform* user_prefix_extractor() const { return transform_; }
|
|
989
984
|
|
|
990
985
|
private:
|
|
@@ -201,6 +201,25 @@ std::map<std::tuple<BackgroundErrorReason, Status::Code, bool>,
|
|
|
201
201
|
{std::make_tuple(BackgroundErrorReason::kManifestWriteNoWAL,
|
|
202
202
|
Status::Code::kIOError, false),
|
|
203
203
|
Status::Severity::kFatalError},
|
|
204
|
+
// Errors during BG async file open
|
|
205
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
206
|
+
Status::Code::kCorruption, true),
|
|
207
|
+
Status::Severity::kUnrecoverableError},
|
|
208
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
209
|
+
Status::Code::kCorruption, false),
|
|
210
|
+
Status::Severity::kNoError},
|
|
211
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
212
|
+
Status::Code::kIncomplete, true),
|
|
213
|
+
Status::Severity::kFatalError},
|
|
214
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
215
|
+
Status::Code::kIncomplete, false),
|
|
216
|
+
Status::Severity::kNoError},
|
|
217
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
218
|
+
Status::Code::kNotSupported, true),
|
|
219
|
+
Status::Severity::kFatalError},
|
|
220
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
|
|
221
|
+
Status::Code::kNotSupported, false),
|
|
222
|
+
Status::Severity::kNoError},
|
|
204
223
|
};
|
|
205
224
|
|
|
206
225
|
std::map<std::tuple<BackgroundErrorReason, bool>, Status::Severity>
|
|
@@ -225,6 +244,11 @@ std::map<std::tuple<BackgroundErrorReason, bool>, Status::Severity>
|
|
|
225
244
|
Status::Severity::kFatalError},
|
|
226
245
|
{std::make_tuple(BackgroundErrorReason::kMemTable, false),
|
|
227
246
|
Status::Severity::kFatalError},
|
|
247
|
+
// Errors during BG async file open
|
|
248
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen, true),
|
|
249
|
+
Status::Severity::kSoftError},
|
|
250
|
+
{std::make_tuple(BackgroundErrorReason::kAsyncFileOpen, false),
|
|
251
|
+
Status::Severity::kNoError},
|
|
228
252
|
};
|
|
229
253
|
|
|
230
254
|
void ErrorHandler::CancelErrorRecoveryForShutDown() {
|
|
@@ -1550,7 +1550,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1550
1550
|
std::vector<FaultInjectionTestFS*> fault_fs;
|
|
1551
1551
|
std::vector<Options> options;
|
|
1552
1552
|
std::vector<std::shared_ptr<ErrorHandlerFSListener>> listener;
|
|
1553
|
-
std::vector<DB
|
|
1553
|
+
std::vector<std::unique_ptr<DB>> db;
|
|
1554
1554
|
std::shared_ptr<SstFileManager> sfm(NewSstFileManager(def_env));
|
|
1555
1555
|
int kNumDbInstances = 3;
|
|
1556
1556
|
Random rnd(301);
|
|
@@ -1567,7 +1567,6 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1567
1567
|
options[i].writable_file_max_buffer_size = 32768;
|
|
1568
1568
|
options[i].listeners.emplace_back(listener[i]);
|
|
1569
1569
|
options[i].sst_file_manager = sfm;
|
|
1570
|
-
DB* dbptr;
|
|
1571
1570
|
char buf[16];
|
|
1572
1571
|
|
|
1573
1572
|
listener[i]->EnableAutoRecovery();
|
|
@@ -1576,8 +1575,8 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1576
1575
|
IOStatus::NoSpace("Out of space"));
|
|
1577
1576
|
snprintf(buf, sizeof(buf), "_%d", i);
|
|
1578
1577
|
ASSERT_OK(DestroyDB(dbname_ + std::string(buf), options[i]));
|
|
1579
|
-
ASSERT_OK(
|
|
1580
|
-
|
|
1578
|
+
ASSERT_OK(
|
|
1579
|
+
DB::Open(options[i], dbname_ + std::string(buf), &db.emplace_back()));
|
|
1581
1580
|
}
|
|
1582
1581
|
|
|
1583
1582
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
@@ -1609,7 +1608,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1609
1608
|
}
|
|
1610
1609
|
|
|
1611
1610
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
1612
|
-
Status s = static_cast<DBImpl*>(db[i])->TEST_WaitForCompact();
|
|
1611
|
+
Status s = static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact();
|
|
1613
1612
|
ASSERT_EQ(s.severity(), Status::Severity::kSoftError);
|
|
1614
1613
|
fault_fs[i]->SetFilesystemActive(true);
|
|
1615
1614
|
}
|
|
@@ -1618,7 +1617,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1618
1617
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
1619
1618
|
std::string prop;
|
|
1620
1619
|
ASSERT_EQ(listener[i]->WaitForRecovery(5000000), true);
|
|
1621
|
-
ASSERT_OK(static_cast<DBImpl*>(db[i])->TEST_WaitForCompact());
|
|
1620
|
+
ASSERT_OK(static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact());
|
|
1622
1621
|
EXPECT_TRUE(db[i]->GetProperty(
|
|
1623
1622
|
"rocksdb.num-files-at-level" + std::to_string(0), &prop));
|
|
1624
1623
|
EXPECT_EQ(atoi(prop.c_str()), 0);
|
|
@@ -1634,7 +1633,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
|
|
|
1634
1633
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
1635
1634
|
char buf[16];
|
|
1636
1635
|
snprintf(buf, sizeof(buf), "_%d", i);
|
|
1637
|
-
|
|
1636
|
+
db[i].reset();
|
|
1638
1637
|
fault_fs[i]->SetFilesystemActive(true);
|
|
1639
1638
|
if (getenv("KEEP_DB")) {
|
|
1640
1639
|
printf("DB is still at %s%s\n", dbname_.c_str(), buf);
|
|
@@ -1657,7 +1656,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1657
1656
|
std::vector<FaultInjectionTestFS*> fault_fs;
|
|
1658
1657
|
std::vector<Options> options;
|
|
1659
1658
|
std::vector<std::shared_ptr<ErrorHandlerFSListener>> listener;
|
|
1660
|
-
std::vector<DB
|
|
1659
|
+
std::vector<std::unique_ptr<DB>> db;
|
|
1661
1660
|
std::shared_ptr<SstFileManager> sfm(NewSstFileManager(def_env));
|
|
1662
1661
|
int kNumDbInstances = 3;
|
|
1663
1662
|
Random rnd(301);
|
|
@@ -1674,7 +1673,6 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1674
1673
|
options[i].writable_file_max_buffer_size = 32768;
|
|
1675
1674
|
options[i].listeners.emplace_back(listener[i]);
|
|
1676
1675
|
options[i].sst_file_manager = sfm;
|
|
1677
|
-
DB* dbptr;
|
|
1678
1676
|
char buf[16];
|
|
1679
1677
|
|
|
1680
1678
|
listener[i]->EnableAutoRecovery();
|
|
@@ -1695,8 +1693,8 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1695
1693
|
}
|
|
1696
1694
|
snprintf(buf, sizeof(buf), "_%d", i);
|
|
1697
1695
|
ASSERT_OK(DestroyDB(dbname_ + std::string(buf), options[i]));
|
|
1698
|
-
ASSERT_OK(
|
|
1699
|
-
|
|
1696
|
+
ASSERT_OK(
|
|
1697
|
+
DB::Open(options[i], dbname_ + std::string(buf), &db.emplace_back()));
|
|
1700
1698
|
}
|
|
1701
1699
|
|
|
1702
1700
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
@@ -1732,7 +1730,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1732
1730
|
}
|
|
1733
1731
|
|
|
1734
1732
|
for (auto i = 0; i < kNumDbInstances; ++i) {
|
|
1735
|
-
Status s = static_cast<DBImpl*>(db[i])->TEST_WaitForCompact();
|
|
1733
|
+
Status s = static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact();
|
|
1736
1734
|
switch (i) {
|
|
1737
1735
|
case 0:
|
|
1738
1736
|
ASSERT_EQ(s.severity(), Status::Severity::kSoftError);
|
|
@@ -1754,7 +1752,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1754
1752
|
ASSERT_EQ(listener[i]->WaitForRecovery(5000000), true);
|
|
1755
1753
|
}
|
|
1756
1754
|
if (i == 1) {
|
|
1757
|
-
ASSERT_OK(static_cast<DBImpl*>(db[i])->TEST_WaitForCompact());
|
|
1755
|
+
ASSERT_OK(static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact());
|
|
1758
1756
|
}
|
|
1759
1757
|
EXPECT_TRUE(db[i]->GetProperty(
|
|
1760
1758
|
"rocksdb.num-files-at-level" + std::to_string(0), &prop));
|
|
@@ -1772,7 +1770,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
|
|
|
1772
1770
|
char buf[16];
|
|
1773
1771
|
snprintf(buf, sizeof(buf), "_%d", i);
|
|
1774
1772
|
fault_fs[i]->SetFilesystemActive(true);
|
|
1775
|
-
|
|
1773
|
+
db[i].reset();
|
|
1776
1774
|
if (getenv("KEEP_DB")) {
|
|
1777
1775
|
printf("DB is still at %s%s\n", dbname_.c_str(), buf);
|
|
1778
1776
|
} else {
|
|
@@ -158,15 +158,17 @@ Status UpdateManifestForFilesState(
|
|
|
158
158
|
// Current state inconsistent with manifest
|
|
159
159
|
++files_updated;
|
|
160
160
|
edit.DeleteFile(level, number);
|
|
161
|
-
edit.AddFile(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
161
|
+
edit.AddFile(level, lf->fd.GetNumber(), lf->fd.GetPathId(),
|
|
162
|
+
lf->fd.GetFileSize(), lf->smallest, lf->largest,
|
|
163
|
+
lf->fd.smallest_seqno, lf->fd.largest_seqno,
|
|
164
|
+
lf->marked_for_compaction, temp,
|
|
165
|
+
lf->oldest_blob_file_number,
|
|
166
|
+
lf->oldest_ancester_time, lf->file_creation_time,
|
|
167
|
+
lf->epoch_number, lf->file_checksum,
|
|
168
|
+
lf->file_checksum_func_name, lf->unique_id,
|
|
169
|
+
lf->compensated_range_deletion_size, lf->tail_size,
|
|
170
|
+
lf->user_defined_timestamps_persisted,
|
|
171
|
+
lf->min_timestamp, lf->max_timestamp);
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
} else {
|
|
@@ -1186,7 +1188,8 @@ class SstQueryFilterConfigsManagerImpl : public SstQueryFilterConfigsManager {
|
|
|
1186
1188
|
break;
|
|
1187
1189
|
default:
|
|
1188
1190
|
// TODO? Report problem
|
|
1189
|
-
{
|
|
1191
|
+
{
|
|
1192
|
+
}
|
|
1190
1193
|
// Unknown filter type
|
|
1191
1194
|
}
|
|
1192
1195
|
if (!may_match) {
|
|
@@ -2816,7 +2816,7 @@ TEST_F(ExternalSSTFileBasicTest, FailIfNotBottommostLevelAndDisallowMemtable) {
|
|
|
2816
2816
|
|
|
2817
2817
|
{
|
|
2818
2818
|
const Snapshot* snapshot = db_->GetSnapshot();
|
|
2819
|
-
ManagedSnapshot snapshot_guard(db_, snapshot);
|
|
2819
|
+
ManagedSnapshot snapshot_guard(db_.get(), snapshot);
|
|
2820
2820
|
IngestExternalFileOptions ifo;
|
|
2821
2821
|
ifo.fail_if_not_bottommost_level = true;
|
|
2822
2822
|
ifo.snapshot_consistency = true;
|