@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
|
@@ -56,7 +56,8 @@ class GenerateLevelFilesBriefTest : public testing::Test {
|
|
|
56
56
|
kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
|
|
57
57
|
kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
|
|
58
58
|
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
|
|
59
|
-
/* user_defined_timestamps_persisted */ true
|
|
59
|
+
/* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
|
|
60
|
+
/* max timestamp */ "");
|
|
60
61
|
files_.push_back(f);
|
|
61
62
|
}
|
|
62
63
|
|
|
@@ -172,7 +173,8 @@ class VersionStorageInfoTestBase : public testing::Test {
|
|
|
172
173
|
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
173
174
|
kUnknownEpochNumber, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
174
175
|
kNullUniqueId64x2, compensated_range_deletion_size, 0,
|
|
175
|
-
/* user_defined_timestamps_persisted */ true
|
|
176
|
+
/* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
|
|
177
|
+
/* max timestamp */ "");
|
|
176
178
|
vstorage_.AddFile(level, f);
|
|
177
179
|
}
|
|
178
180
|
|
|
@@ -391,7 +393,8 @@ TEST_F(VersionStorageInfoTest, MaxBytesForLevelDynamicWithLargeL0_1) {
|
|
|
391
393
|
ASSERT_EQ(51450U, vstorage_.MaxBytesForLevel(3));
|
|
392
394
|
ASSERT_EQ(257250U, vstorage_.MaxBytesForLevel(4));
|
|
393
395
|
|
|
394
|
-
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_
|
|
396
|
+
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_,
|
|
397
|
+
/*full_history_ts_low=*/"");
|
|
395
398
|
// Only L0 hits compaction.
|
|
396
399
|
ASSERT_EQ(vstorage_.CompactionScoreLevel(0), 0);
|
|
397
400
|
}
|
|
@@ -421,7 +424,8 @@ TEST_F(VersionStorageInfoTest, MaxBytesForLevelDynamicWithLargeL0_2) {
|
|
|
421
424
|
ASSERT_EQ(51450U, vstorage_.MaxBytesForLevel(3));
|
|
422
425
|
ASSERT_EQ(257250U, vstorage_.MaxBytesForLevel(4));
|
|
423
426
|
|
|
424
|
-
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_
|
|
427
|
+
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_,
|
|
428
|
+
/*full_history_ts_low=*/"");
|
|
425
429
|
// Although L2 and l3 have higher unadjusted compaction score, considering
|
|
426
430
|
// a relatively large L0 being compacted down soon, L4 is picked up for
|
|
427
431
|
// compaction.
|
|
@@ -453,7 +457,8 @@ TEST_F(VersionStorageInfoTest, MaxBytesForLevelDynamicWithLargeL0_3) {
|
|
|
453
457
|
ASSERT_EQ(2, vstorage_.base_level());
|
|
454
458
|
ASSERT_EQ(20000U, vstorage_.MaxBytesForLevel(2));
|
|
455
459
|
|
|
456
|
-
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_
|
|
460
|
+
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_,
|
|
461
|
+
/*full_history_ts_low=*/"");
|
|
457
462
|
// Although L2 has higher unadjusted compaction score, considering
|
|
458
463
|
// a relatively large L0 being compacted down soon, L3 is picked up for
|
|
459
464
|
// compaction.
|
|
@@ -483,7 +488,8 @@ TEST_F(VersionStorageInfoTest, DrainUnnecessaryLevel) {
|
|
|
483
488
|
ASSERT_EQ(1, vstorage_.base_level());
|
|
484
489
|
ASSERT_EQ(1000, vstorage_.MaxBytesForLevel(1));
|
|
485
490
|
ASSERT_EQ(10100, vstorage_.MaxBytesForLevel(3));
|
|
486
|
-
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_
|
|
491
|
+
vstorage_.ComputeCompactionScore(ioptions_, mutable_cf_options_,
|
|
492
|
+
/*full_history_ts_low=*/"");
|
|
487
493
|
|
|
488
494
|
// Tests that levels 1 and 3 are eligible for compaction.
|
|
489
495
|
// Levels 1 and 3 are much smaller than target size,
|
|
@@ -1222,11 +1228,12 @@ class VersionSetTestBase {
|
|
|
1222
1228
|
SetIdentityFile(WriteOptions(), env_, dbname_, Temperature::kUnknown));
|
|
1223
1229
|
VersionEdit new_db;
|
|
1224
1230
|
if (imm_db_options_.write_dbid_to_manifest) {
|
|
1225
|
-
DBOptions tmp_db_options;
|
|
1226
|
-
tmp_db_options.env = env_;
|
|
1227
|
-
std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
|
|
1228
1231
|
std::string db_id;
|
|
1229
|
-
ASSERT_OK(
|
|
1232
|
+
ASSERT_OK(ReadFileToString(env_, IdentityFileName(dbname_), &db_id));
|
|
1233
|
+
// Strip trailing newline if present (old GenerateUniqueId format)
|
|
1234
|
+
if (!db_id.empty() && db_id.back() == '\n') {
|
|
1235
|
+
db_id.pop_back();
|
|
1236
|
+
}
|
|
1230
1237
|
new_db.SetDBId(db_id);
|
|
1231
1238
|
}
|
|
1232
1239
|
new_db.SetLogNumber(0);
|
|
@@ -1346,7 +1353,8 @@ class VersionSetTestBase {
|
|
|
1346
1353
|
Temperature::kUnknown, info.oldest_blob_file_number, 0, 0,
|
|
1347
1354
|
info.epoch_number, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1348
1355
|
kNullUniqueId64x2, 0, 0,
|
|
1349
|
-
/* user_defined_timestamps_persisted */ true
|
|
1356
|
+
/* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
|
|
1357
|
+
/* max timestamp */ "");
|
|
1350
1358
|
if (info.file_missing) {
|
|
1351
1359
|
ASSERT_OK(fs_->DeleteFile(fname, IOOptions(), nullptr));
|
|
1352
1360
|
}
|
|
@@ -2400,6 +2408,267 @@ TEST_F(VersionSetTest, ManifestTruncateAfterClose) {
|
|
|
2400
2408
|
ReopenDB();
|
|
2401
2409
|
}
|
|
2402
2410
|
|
|
2411
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseClean) {
|
|
2412
|
+
// Enable content validation, perform normal operations, close.
|
|
2413
|
+
// Verify no manifest rotation (file number unchanged).
|
|
2414
|
+
NewDB();
|
|
2415
|
+
mutable_db_options_.verify_manifest_content_on_close = true;
|
|
2416
|
+
mutex_.Lock();
|
|
2417
|
+
versions_->UpdatedMutableDbOptions(mutable_db_options_, &mutex_);
|
|
2418
|
+
mutex_.Unlock();
|
|
2419
|
+
|
|
2420
|
+
VersionEdit edit;
|
|
2421
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2422
|
+
|
|
2423
|
+
std::string manifest_path_before;
|
|
2424
|
+
GetManifestPath(&manifest_path_before);
|
|
2425
|
+
|
|
2426
|
+
bool content_validation_ran = false;
|
|
2427
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2428
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2429
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2430
|
+
"VersionSet::Close:BeforeContentValidation",
|
|
2431
|
+
[&](void*) { content_validation_ran = true; });
|
|
2432
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2433
|
+
CloseDB();
|
|
2434
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2435
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2436
|
+
|
|
2437
|
+
// Verify content validation actually ran
|
|
2438
|
+
ASSERT_TRUE(content_validation_ran);
|
|
2439
|
+
|
|
2440
|
+
// Manifest path should be unchanged (no rotation)
|
|
2441
|
+
std::string manifest_path_after;
|
|
2442
|
+
uint64_t manifest_file_number = 0;
|
|
2443
|
+
ASSERT_OK(GetCurrentManifestPath(dbname_, fs_.get(), /*is_retry=*/false,
|
|
2444
|
+
&manifest_path_after,
|
|
2445
|
+
&manifest_file_number));
|
|
2446
|
+
ASSERT_EQ(manifest_path_before, manifest_path_after);
|
|
2447
|
+
|
|
2448
|
+
ReopenDB();
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseCorruptRecord) {
|
|
2452
|
+
// Enable content validation, corrupt the manifest after closing the writer,
|
|
2453
|
+
// verify manifest rotation occurs and DB reopens cleanly.
|
|
2454
|
+
NewDB();
|
|
2455
|
+
mutable_db_options_.verify_manifest_content_on_close = true;
|
|
2456
|
+
mutex_.Lock();
|
|
2457
|
+
versions_->UpdatedMutableDbOptions(mutable_db_options_, &mutex_);
|
|
2458
|
+
mutex_.Unlock();
|
|
2459
|
+
|
|
2460
|
+
VersionEdit edit;
|
|
2461
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2462
|
+
|
|
2463
|
+
std::string manifest_path_before;
|
|
2464
|
+
GetManifestPath(&manifest_path_before);
|
|
2465
|
+
|
|
2466
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2467
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2468
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2469
|
+
"VersionSet::Close:BeforeContentValidation", [&](void*) {
|
|
2470
|
+
// Corrupt bytes in the middle of the manifest
|
|
2471
|
+
std::string manifest_path;
|
|
2472
|
+
GetManifestPath(&manifest_path);
|
|
2473
|
+
std::string content;
|
|
2474
|
+
Status s = ReadFileToString(env_, manifest_path, &content);
|
|
2475
|
+
EXPECT_OK(s);
|
|
2476
|
+
if (!s.ok()) {
|
|
2477
|
+
return;
|
|
2478
|
+
}
|
|
2479
|
+
ASSERT_GT(content.size(), 20u);
|
|
2480
|
+
// Corrupt several bytes in the middle to break CRC
|
|
2481
|
+
for (size_t i = content.size() / 2; i < content.size() / 2 + 8; i++) {
|
|
2482
|
+
content[i] ^= 0xFF;
|
|
2483
|
+
}
|
|
2484
|
+
s = WriteStringToFile(env_, content, manifest_path);
|
|
2485
|
+
EXPECT_OK(s);
|
|
2486
|
+
});
|
|
2487
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2488
|
+
CloseDB();
|
|
2489
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2490
|
+
|
|
2491
|
+
// Manifest should have been rotated (new file number)
|
|
2492
|
+
std::string manifest_path_after;
|
|
2493
|
+
uint64_t manifest_file_number = 0;
|
|
2494
|
+
ASSERT_OK(GetCurrentManifestPath(dbname_, fs_.get(), /*is_retry=*/false,
|
|
2495
|
+
&manifest_path_after,
|
|
2496
|
+
&manifest_file_number));
|
|
2497
|
+
ASSERT_NE(manifest_path_before, manifest_path_after);
|
|
2498
|
+
|
|
2499
|
+
// DB should reopen cleanly with the fresh manifest
|
|
2500
|
+
ReopenDB();
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseDisabled) {
|
|
2504
|
+
// Default (option disabled), corrupt manifest after writer close,
|
|
2505
|
+
// verify no rotation occurred — corrupt manifest persists.
|
|
2506
|
+
NewDB();
|
|
2507
|
+
// verify_manifest_content_on_close defaults to false
|
|
2508
|
+
|
|
2509
|
+
VersionEdit edit;
|
|
2510
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2511
|
+
|
|
2512
|
+
std::string manifest_path_before;
|
|
2513
|
+
GetManifestPath(&manifest_path_before);
|
|
2514
|
+
|
|
2515
|
+
bool content_validation_ran = false;
|
|
2516
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2517
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2518
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2519
|
+
"VersionSet::Close:BeforeContentValidation",
|
|
2520
|
+
[&](void*) { content_validation_ran = true; });
|
|
2521
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2522
|
+
CloseDB();
|
|
2523
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2524
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2525
|
+
|
|
2526
|
+
ASSERT_FALSE(content_validation_ran);
|
|
2527
|
+
|
|
2528
|
+
// Manifest path should be unchanged (no rotation since validation is off)
|
|
2529
|
+
std::string manifest_path_after;
|
|
2530
|
+
uint64_t manifest_file_number = 0;
|
|
2531
|
+
ASSERT_OK(GetCurrentManifestPath(dbname_, fs_.get(), /*is_retry=*/false,
|
|
2532
|
+
&manifest_path_after,
|
|
2533
|
+
&manifest_file_number));
|
|
2534
|
+
ASSERT_EQ(manifest_path_before, manifest_path_after);
|
|
2535
|
+
}
|
|
2536
|
+
|
|
2537
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseSizeCheckFails) {
|
|
2538
|
+
// Truncate manifest so size check fails first.
|
|
2539
|
+
// Verify recovery happens via size-check path. Content validation still
|
|
2540
|
+
// runs afterward on the freshly rewritten manifest.
|
|
2541
|
+
NewDB();
|
|
2542
|
+
mutable_db_options_.verify_manifest_content_on_close = true;
|
|
2543
|
+
mutex_.Lock();
|
|
2544
|
+
versions_->UpdatedMutableDbOptions(mutable_db_options_, &mutex_);
|
|
2545
|
+
mutex_.Unlock();
|
|
2546
|
+
|
|
2547
|
+
VersionEdit edit;
|
|
2548
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2549
|
+
|
|
2550
|
+
std::string manifest_path_before;
|
|
2551
|
+
GetManifestPath(&manifest_path_before);
|
|
2552
|
+
|
|
2553
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2554
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2555
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2556
|
+
"VersionSet::Close:AfterClose", [&](void*) {
|
|
2557
|
+
std::string manifest_path;
|
|
2558
|
+
GetManifestPath(&manifest_path);
|
|
2559
|
+
std::unique_ptr<WritableFile> manifest_file;
|
|
2560
|
+
ASSERT_OK(env_->ReopenWritableFile(manifest_path, &manifest_file,
|
|
2561
|
+
EnvOptions()));
|
|
2562
|
+
ASSERT_OK(manifest_file->Truncate(0));
|
|
2563
|
+
ASSERT_OK(manifest_file->Close());
|
|
2564
|
+
});
|
|
2565
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2566
|
+
ASSERT_NO_FATAL_FAILURE(CloseDB());
|
|
2567
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2568
|
+
|
|
2569
|
+
// Size check should have triggered rotation
|
|
2570
|
+
std::string manifest_path_after;
|
|
2571
|
+
uint64_t manifest_file_number = 0;
|
|
2572
|
+
ASSERT_OK(GetCurrentManifestPath(dbname_, fs_.get(), /*is_retry=*/false,
|
|
2573
|
+
&manifest_path_after,
|
|
2574
|
+
&manifest_file_number));
|
|
2575
|
+
ASSERT_NE(manifest_path_before, manifest_path_after);
|
|
2576
|
+
|
|
2577
|
+
// DB should reopen cleanly
|
|
2578
|
+
ReopenDB();
|
|
2579
|
+
}
|
|
2580
|
+
|
|
2581
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseCorruptAfterRewrite) {
|
|
2582
|
+
// Corrupt the manifest before content validation AND after the rewrite.
|
|
2583
|
+
// The loop should detect corruption twice: once triggering a rewrite, and
|
|
2584
|
+
// once reporting that the rewritten manifest is also corrupt.
|
|
2585
|
+
NewDB();
|
|
2586
|
+
mutable_db_options_.verify_manifest_content_on_close = true;
|
|
2587
|
+
mutex_.Lock();
|
|
2588
|
+
versions_->UpdatedMutableDbOptions(mutable_db_options_, &mutex_);
|
|
2589
|
+
mutex_.Unlock();
|
|
2590
|
+
|
|
2591
|
+
VersionEdit edit;
|
|
2592
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2593
|
+
|
|
2594
|
+
int io_error_count = 0;
|
|
2595
|
+
class IOErrorCountListener : public EventListener {
|
|
2596
|
+
public:
|
|
2597
|
+
int* count;
|
|
2598
|
+
explicit IOErrorCountListener(int* c) : count(c) {}
|
|
2599
|
+
void OnIOError(const IOErrorInfo& /*info*/) override { ++(*count); }
|
|
2600
|
+
};
|
|
2601
|
+
imm_db_options_.listeners.push_back(
|
|
2602
|
+
std::make_shared<IOErrorCountListener>(&io_error_count));
|
|
2603
|
+
|
|
2604
|
+
auto corrupt_current_manifest = [&]() {
|
|
2605
|
+
std::string manifest_path;
|
|
2606
|
+
GetManifestPath(&manifest_path);
|
|
2607
|
+
std::string content;
|
|
2608
|
+
ASSERT_OK(ReadFileToString(env_, manifest_path, &content));
|
|
2609
|
+
ASSERT_GT(content.size(), 20u);
|
|
2610
|
+
for (size_t i = content.size() / 2; i < content.size() / 2 + 8; i++) {
|
|
2611
|
+
content[i] ^= 0xFF;
|
|
2612
|
+
}
|
|
2613
|
+
ASSERT_OK(WriteStringToFile(env_, content, manifest_path));
|
|
2614
|
+
};
|
|
2615
|
+
|
|
2616
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2617
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2618
|
+
// Corrupt before the first content check
|
|
2619
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2620
|
+
"VersionSet::Close:BeforeContentValidation",
|
|
2621
|
+
[&](void*) { corrupt_current_manifest(); });
|
|
2622
|
+
// Corrupt again after the rewrite completes
|
|
2623
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2624
|
+
"VersionSet::LogAndApply:WriteManifestDone",
|
|
2625
|
+
[&](void*) { corrupt_current_manifest(); });
|
|
2626
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2627
|
+
mutex_.Lock();
|
|
2628
|
+
Status close_s = versions_->Close(nullptr, &mutex_);
|
|
2629
|
+
versions_.reset();
|
|
2630
|
+
mutex_.Unlock();
|
|
2631
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2632
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2633
|
+
|
|
2634
|
+
// Close should report the persistent corruption
|
|
2635
|
+
ASSERT_TRUE(close_s.IsCorruption()) << close_s.ToString();
|
|
2636
|
+
|
|
2637
|
+
// OnIOError should have fired twice (once per corrupt detection)
|
|
2638
|
+
ASSERT_EQ(io_error_count, 2);
|
|
2639
|
+
}
|
|
2640
|
+
|
|
2641
|
+
TEST_F(VersionSetTest, ManifestContentValidationOnCloseOpenFails) {
|
|
2642
|
+
// Delete the manifest before content validation so it can't be opened.
|
|
2643
|
+
// Close() should surface the I/O error to the caller.
|
|
2644
|
+
NewDB();
|
|
2645
|
+
mutable_db_options_.verify_manifest_content_on_close = true;
|
|
2646
|
+
mutex_.Lock();
|
|
2647
|
+
versions_->UpdatedMutableDbOptions(mutable_db_options_, &mutex_);
|
|
2648
|
+
mutex_.Unlock();
|
|
2649
|
+
|
|
2650
|
+
VersionEdit edit;
|
|
2651
|
+
ASSERT_OK(LogAndApplyToDefaultCF(edit));
|
|
2652
|
+
|
|
2653
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2654
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2655
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2656
|
+
"VersionSet::Close:BeforeContentValidation", [&](void*) {
|
|
2657
|
+
std::string manifest_path;
|
|
2658
|
+
GetManifestPath(&manifest_path);
|
|
2659
|
+
ASSERT_OK(env_->DeleteFile(manifest_path));
|
|
2660
|
+
});
|
|
2661
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2662
|
+
mutex_.Lock();
|
|
2663
|
+
Status close_s = versions_->Close(nullptr, &mutex_);
|
|
2664
|
+
versions_.reset();
|
|
2665
|
+
mutex_.Unlock();
|
|
2666
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2667
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2668
|
+
|
|
2669
|
+
ASSERT_TRUE(close_s.IsIOError()) << close_s.ToString();
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2403
2672
|
TEST_F(VersionStorageInfoTest, AddRangeDeletionCompensatedFileSize) {
|
|
2404
2673
|
// Tests that compensated range deletion size is added to compensated file
|
|
2405
2674
|
// size.
|
|
@@ -3505,11 +3774,12 @@ class VersionSetTestEmptyDb
|
|
|
3505
3774
|
if (imm_db_options_.write_dbid_to_manifest) {
|
|
3506
3775
|
ASSERT_OK(SetIdentityFile(WriteOptions(), env_, dbname_,
|
|
3507
3776
|
Temperature::kUnknown));
|
|
3508
|
-
DBOptions tmp_db_options;
|
|
3509
|
-
tmp_db_options.env = env_;
|
|
3510
|
-
std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
|
|
3511
3777
|
std::string db_id;
|
|
3512
|
-
ASSERT_OK(
|
|
3778
|
+
ASSERT_OK(ReadFileToString(env_, IdentityFileName(dbname_), &db_id));
|
|
3779
|
+
// Strip trailing newline if present (old GenerateUniqueId format)
|
|
3780
|
+
if (!db_id.empty() && db_id.back() == '\n') {
|
|
3781
|
+
db_id.pop_back();
|
|
3782
|
+
}
|
|
3513
3783
|
new_db.SetDBId(db_id);
|
|
3514
3784
|
}
|
|
3515
3785
|
const std::string manifest_path = DescriptorFileName(dbname_, 1);
|
|
@@ -3831,11 +4101,12 @@ class VersionSetTestMissingFiles : public VersionSetTestBase,
|
|
|
3831
4101
|
log_writer->reset(new log::Writer(std::move(file_writer), 0, false));
|
|
3832
4102
|
VersionEdit new_db;
|
|
3833
4103
|
if (imm_db_options_.write_dbid_to_manifest) {
|
|
3834
|
-
DBOptions tmp_db_options;
|
|
3835
|
-
tmp_db_options.env = env_;
|
|
3836
|
-
std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
|
|
3837
4104
|
std::string db_id;
|
|
3838
|
-
ASSERT_OK(
|
|
4105
|
+
ASSERT_OK(ReadFileToString(env_, IdentityFileName(dbname_), &db_id));
|
|
4106
|
+
// Strip trailing newline if present (old GenerateUniqueId format)
|
|
4107
|
+
if (!db_id.empty() && db_id.back() == '\n') {
|
|
4108
|
+
db_id.pop_back();
|
|
4109
|
+
}
|
|
3839
4110
|
new_db.SetDBId(db_id);
|
|
3840
4111
|
}
|
|
3841
4112
|
{
|
|
@@ -3940,7 +4211,8 @@ TEST_F(VersionSetTestMissingFiles, ManifestFarBehindSst) {
|
|
|
3940
4211
|
largest_ikey, 0, 0, false, Temperature::kUnknown, 0, 0, 0,
|
|
3941
4212
|
file_num /* epoch_number */, kUnknownFileChecksum,
|
|
3942
4213
|
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
|
|
3943
|
-
/* user_defined_timestamps_persisted */ true
|
|
4214
|
+
/* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
|
|
4215
|
+
/* max timestamp */ "");
|
|
3944
4216
|
added_files.emplace_back(0, meta);
|
|
3945
4217
|
}
|
|
3946
4218
|
WriteFileAdditionAndDeletionToManifest(
|
|
@@ -4001,7 +4273,8 @@ TEST_F(VersionSetTestMissingFiles, ManifestAheadofSst) {
|
|
|
4001
4273
|
largest_ikey, 0, 0, false, Temperature::kUnknown, 0, 0, 0,
|
|
4002
4274
|
file_num /* epoch_number */, kUnknownFileChecksum,
|
|
4003
4275
|
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
|
|
4004
|
-
/* user_defined_timestamps_persisted */ true
|
|
4276
|
+
/* user_defined_timestamps_persisted */ true, /* min timestamp */ "",
|
|
4277
|
+
/* max timestamp */ "");
|
|
4005
4278
|
added_files.emplace_back(0, meta);
|
|
4006
4279
|
}
|
|
4007
4280
|
WriteFileAdditionAndDeletionToManifest(
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#include "db/version_util.h"
|
|
7
|
+
|
|
8
|
+
#include <atomic>
|
|
9
|
+
#include <functional>
|
|
10
|
+
#include <thread>
|
|
11
|
+
#include <utility>
|
|
12
|
+
#include <vector>
|
|
13
|
+
|
|
14
|
+
#include "db/internal_stats.h"
|
|
15
|
+
#include "db/table_cache.h"
|
|
16
|
+
#include "port/port.h"
|
|
17
|
+
#include "test_util/sync_point.h"
|
|
18
|
+
|
|
19
|
+
namespace ROCKSDB_NAMESPACE {
|
|
20
|
+
|
|
21
|
+
Status LoadTableHandlersHelper(
|
|
22
|
+
const std::vector<std::pair<FileMetaData*, int>>& files_meta,
|
|
23
|
+
TableCache* table_cache, const FileOptions& file_options,
|
|
24
|
+
const InternalKeyComparator& internal_comparator,
|
|
25
|
+
InternalStats* internal_stats, int max_threads,
|
|
26
|
+
bool prefetch_index_and_filter_in_cache,
|
|
27
|
+
const MutableCFOptions& mutable_cf_options,
|
|
28
|
+
size_t max_file_size_for_l0_meta_pin, const ReadOptions& read_options,
|
|
29
|
+
std::atomic<bool>* stop) {
|
|
30
|
+
assert(table_cache != nullptr);
|
|
31
|
+
|
|
32
|
+
std::atomic<size_t> next_file_meta_idx(0);
|
|
33
|
+
std::atomic<bool> has_error(false);
|
|
34
|
+
Status ret;
|
|
35
|
+
std::function<void()> load_handlers_func([&]() {
|
|
36
|
+
while (true) {
|
|
37
|
+
size_t file_idx = next_file_meta_idx.fetch_add(1);
|
|
38
|
+
|
|
39
|
+
if (has_error.load(std::memory_order_relaxed)) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (file_idx >= files_meta.size()) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (stop != nullptr && stop->load()) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
auto* cache = table_cache->get_cache().get();
|
|
52
|
+
if (cache->GetCapacity() < TableCache::kInfiniteCapacity &&
|
|
53
|
+
cache->GetUsage() >= cache->GetCapacity()) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
auto* file_meta = files_meta[file_idx].first;
|
|
58
|
+
int level = files_meta[file_idx].second;
|
|
59
|
+
|
|
60
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
61
|
+
"VersionBuilder::Rep::LoadTableHandlers::BeforeFindTable", file_meta);
|
|
62
|
+
|
|
63
|
+
TableCache::TypedHandle* handle = nullptr;
|
|
64
|
+
TableReader* table_reader = nullptr;
|
|
65
|
+
auto status = table_cache->FindTable(
|
|
66
|
+
read_options, file_options, internal_comparator, *file_meta, &handle,
|
|
67
|
+
mutable_cf_options, &table_reader, false /* no_io */,
|
|
68
|
+
internal_stats->GetFileReadHist(level), false /* skip_filters */,
|
|
69
|
+
level, prefetch_index_and_filter_in_cache,
|
|
70
|
+
max_file_size_for_l0_meta_pin, file_meta->temperature,
|
|
71
|
+
true /* pin_table_handle */);
|
|
72
|
+
|
|
73
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
74
|
+
"VersionBuilder::Rep::LoadTableHandlers::AfterFindTable", &status);
|
|
75
|
+
|
|
76
|
+
if (!status.ok()) {
|
|
77
|
+
bool expected = false;
|
|
78
|
+
if (has_error.compare_exchange_strong(expected, true)) {
|
|
79
|
+
ret = status;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
std::vector<port::Thread> threads;
|
|
86
|
+
for (int i = 1; i < max_threads; i++) {
|
|
87
|
+
threads.emplace_back(load_handlers_func);
|
|
88
|
+
}
|
|
89
|
+
load_handlers_func();
|
|
90
|
+
for (auto& t : threads) {
|
|
91
|
+
t.join();
|
|
92
|
+
}
|
|
93
|
+
return ret;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -5,10 +5,34 @@
|
|
|
5
5
|
|
|
6
6
|
#pragma once
|
|
7
7
|
|
|
8
|
+
#include <atomic>
|
|
9
|
+
#include <utility>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
8
12
|
#include "db/version_set.h"
|
|
13
|
+
#include "rocksdb/file_system.h"
|
|
14
|
+
#include "rocksdb/options.h"
|
|
15
|
+
#include "rocksdb/status.h"
|
|
9
16
|
|
|
10
17
|
namespace ROCKSDB_NAMESPACE {
|
|
11
18
|
|
|
19
|
+
class TableCache;
|
|
20
|
+
struct FileMetaData;
|
|
21
|
+
class InternalKeyComparator;
|
|
22
|
+
class InternalStats;
|
|
23
|
+
|
|
24
|
+
// Load table handlers (i.e., open SST files and populate the table cache) for
|
|
25
|
+
// the given set of files. Used during DB open to eagerly warm the table cache.
|
|
26
|
+
Status LoadTableHandlersHelper(
|
|
27
|
+
const std::vector<std::pair<FileMetaData*, int>>& files_meta,
|
|
28
|
+
TableCache* table_cache, const FileOptions& file_options,
|
|
29
|
+
const InternalKeyComparator& internal_comparator,
|
|
30
|
+
InternalStats* internal_stats, int max_threads,
|
|
31
|
+
bool prefetch_index_and_filter_in_cache,
|
|
32
|
+
const MutableCFOptions& mutable_cf_options,
|
|
33
|
+
size_t max_file_size_for_l0_meta_pin, const ReadOptions& read_options,
|
|
34
|
+
std::atomic<bool>* stop = nullptr);
|
|
35
|
+
|
|
12
36
|
// Instead of opening a `DB` to perform certain manifest updates, this
|
|
13
37
|
// uses the underlying `VersionSet` API to read and modify the MANIFEST. This
|
|
14
38
|
// allows us to use the user's real options, while not having to worry about
|
|
@@ -714,7 +714,7 @@ TEST_F(DBWideBasicTest, MergePlainKeyValue) {
|
|
|
714
714
|
// snapshot in between to make sure they do not get reconciled during the
|
|
715
715
|
// subsequent flush)
|
|
716
716
|
write_base();
|
|
717
|
-
ManagedSnapshot snapshot(db_);
|
|
717
|
+
ManagedSnapshot snapshot(db_.get());
|
|
718
718
|
write_merge();
|
|
719
719
|
verify();
|
|
720
720
|
|
|
@@ -958,7 +958,7 @@ TEST_F(DBWideBasicTest, MergeEntity) {
|
|
|
958
958
|
// between to make sure they do not get reconciled during the subsequent
|
|
959
959
|
// flush)
|
|
960
960
|
write_base();
|
|
961
|
-
ManagedSnapshot snapshot(db_);
|
|
961
|
+
ManagedSnapshot snapshot(db_.get());
|
|
962
962
|
write_merge();
|
|
963
963
|
verify_basic();
|
|
964
964
|
verify_merge_ops_pre_compaction();
|
|
@@ -1033,7 +1033,7 @@ class DBWideMergeV3Test : public DBWideBasicTest {
|
|
|
1033
1033
|
third_key,
|
|
1034
1034
|
third_columns)); // wide-column base value
|
|
1035
1035
|
|
|
1036
|
-
snapshots_.emplace_back(db_);
|
|
1036
|
+
snapshots_.emplace_back(db_.get());
|
|
1037
1037
|
|
|
1038
1038
|
// First round of merge operands
|
|
1039
1039
|
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), first_key,
|
|
@@ -1043,7 +1043,7 @@ class DBWideMergeV3Test : public DBWideBasicTest {
|
|
|
1043
1043
|
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), third_key,
|
|
1044
1044
|
third_merge_op1));
|
|
1045
1045
|
|
|
1046
|
-
snapshots_.emplace_back(db_);
|
|
1046
|
+
snapshots_.emplace_back(db_.get());
|
|
1047
1047
|
|
|
1048
1048
|
// Second round of merge operands
|
|
1049
1049
|
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), first_key,
|
|
@@ -1053,7 +1053,7 @@ class DBWideMergeV3Test : public DBWideBasicTest {
|
|
|
1053
1053
|
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), third_key,
|
|
1054
1054
|
third_merge_op2));
|
|
1055
1055
|
|
|
1056
|
-
snapshots_.emplace_back(db_);
|
|
1056
|
+
snapshots_.emplace_back(db_.get());
|
|
1057
1057
|
}
|
|
1058
1058
|
|
|
1059
1059
|
void VerifyKeyValues(const WideColumns& first_expected,
|