@nxtedition/rocksdb 15.4.1 → 16.0.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 +70 -23
- 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/index.js +70 -10
- package/iterator.js +25 -3
- package/max_rev_operator.h +9 -5
- 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
|
@@ -91,17 +91,15 @@ class DBBasicTest : public DBTestBase {
|
|
|
91
91
|
TEST_F(DBBasicTest, OpenWhenOpen) {
|
|
92
92
|
Options options = CurrentOptions();
|
|
93
93
|
options.env = env_;
|
|
94
|
-
DB
|
|
94
|
+
std::unique_ptr<DB> db2;
|
|
95
95
|
Status s = DB::Open(options, dbname_, &db2);
|
|
96
|
-
ASSERT_NOK(s) << [db2]() {
|
|
97
|
-
|
|
96
|
+
ASSERT_NOK(s) << [&db2]() {
|
|
97
|
+
db2.reset();
|
|
98
98
|
return "db2 open: ok";
|
|
99
99
|
}();
|
|
100
100
|
ASSERT_EQ(Status::Code::kIOError, s.code());
|
|
101
101
|
ASSERT_EQ(Status::SubCode::kNone, s.subcode());
|
|
102
102
|
ASSERT_TRUE(strstr(s.getState(), "lock ") != nullptr);
|
|
103
|
-
|
|
104
|
-
delete db2;
|
|
105
103
|
}
|
|
106
104
|
|
|
107
105
|
TEST_F(DBBasicTest, EnableDirectIOWithZeroBuf) {
|
|
@@ -242,6 +240,43 @@ TEST_F(DBBasicTest, ReadOnlyDB) {
|
|
|
242
240
|
Status::Code::kNotSupported);
|
|
243
241
|
}
|
|
244
242
|
|
|
243
|
+
TEST_F(DBBasicTest, ReadOnlyDBFlushWAL) {
|
|
244
|
+
// Test that FlushWAL returns NotSupported on read-only DB, and that
|
|
245
|
+
// GetLiveFilesStorageInfo works correctly even with manual_wal_flush=true.
|
|
246
|
+
// This is a regression test for a bug where GetLiveFilesStorageInfo would
|
|
247
|
+
// crash on read-only DBs with manual_wal_flush=true because FlushWAL
|
|
248
|
+
// accessed logs_.back() on an empty deque.
|
|
249
|
+
auto options = CurrentOptions();
|
|
250
|
+
options.manual_wal_flush = true;
|
|
251
|
+
DestroyAndReopen(options);
|
|
252
|
+
ASSERT_OK(Put("foo", "v1"));
|
|
253
|
+
ASSERT_OK(Put("bar", "v2"));
|
|
254
|
+
ASSERT_OK(Flush());
|
|
255
|
+
ASSERT_OK(Put("baz", "v3")); // Unflushed data in WAL
|
|
256
|
+
Close();
|
|
257
|
+
|
|
258
|
+
// Reopen as read-only
|
|
259
|
+
ASSERT_OK(ReadOnlyReopen(options));
|
|
260
|
+
ASSERT_EQ("v1", Get("foo"));
|
|
261
|
+
ASSERT_EQ("v2", Get("bar"));
|
|
262
|
+
ASSERT_EQ("v3", Get("baz"));
|
|
263
|
+
|
|
264
|
+
// FlushWAL should return NotSupported (not crash)
|
|
265
|
+
ASSERT_EQ(db_->FlushWAL(/*sync=*/false).code(), Status::Code::kNotSupported);
|
|
266
|
+
ASSERT_EQ(db_->FlushWAL(/*sync=*/true).code(), Status::Code::kNotSupported);
|
|
267
|
+
|
|
268
|
+
// GetLiveFilesStorageInfo should succeed (previously crashed with
|
|
269
|
+
// manual_wal_flush=true because it called FlushWAL which accessed
|
|
270
|
+
// logs_.back() on empty deque)
|
|
271
|
+
LiveFilesStorageInfoOptions lfsi_opts;
|
|
272
|
+
lfsi_opts.wal_size_for_flush = 0;
|
|
273
|
+
std::vector<LiveFileStorageInfo> files;
|
|
274
|
+
ASSERT_OK(db_->GetLiveFilesStorageInfo(lfsi_opts, &files));
|
|
275
|
+
ASSERT_GT(files.size(), 0);
|
|
276
|
+
|
|
277
|
+
Close();
|
|
278
|
+
}
|
|
279
|
+
|
|
245
280
|
TEST_F(DBBasicTest, ReadOnlyDBWithWriteDBIdToManifestSet) {
|
|
246
281
|
auto options = CurrentOptions();
|
|
247
282
|
options.write_dbid_to_manifest = false;
|
|
@@ -549,14 +584,14 @@ TEST_F(DBBasicTest, GetSnapshot) {
|
|
|
549
584
|
|
|
550
585
|
TEST_F(DBBasicTest, CheckLock) {
|
|
551
586
|
do {
|
|
552
|
-
DB
|
|
587
|
+
std::unique_ptr<DB> localdb;
|
|
553
588
|
Options options = CurrentOptions();
|
|
554
589
|
ASSERT_OK(TryReopen(options));
|
|
555
590
|
|
|
556
591
|
// second open should fail
|
|
557
592
|
Status s = DB::Open(options, dbname_, &localdb);
|
|
558
|
-
ASSERT_NOK(s) << [localdb]() {
|
|
559
|
-
|
|
593
|
+
ASSERT_NOK(s) << [&localdb]() {
|
|
594
|
+
localdb.reset();
|
|
560
595
|
return "localdb open: ok";
|
|
561
596
|
}();
|
|
562
597
|
#ifdef OS_LINUX
|
|
@@ -825,7 +860,7 @@ TEST_F(DBBasicTest, Snapshot) {
|
|
|
825
860
|
ASSERT_OK(Put(1, "foo", "1v3"));
|
|
826
861
|
|
|
827
862
|
{
|
|
828
|
-
ManagedSnapshot s3(db_);
|
|
863
|
+
ManagedSnapshot s3(db_.get());
|
|
829
864
|
ASSERT_EQ(3U, GetNumSnapshots());
|
|
830
865
|
ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
|
|
831
866
|
ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
|
|
@@ -948,7 +983,7 @@ TEST_F(DBBasicTest, DBOpen_Options) {
|
|
|
948
983
|
Destroy(options);
|
|
949
984
|
|
|
950
985
|
// Does not exist, and create_if_missing == false: error
|
|
951
|
-
DB
|
|
986
|
+
std::unique_ptr<DB> db;
|
|
952
987
|
options.create_if_missing = false;
|
|
953
988
|
Status s = DB::Open(options, dbname_, &db);
|
|
954
989
|
ASSERT_TRUE(strstr(s.ToString().c_str(), "does not exist") != nullptr);
|
|
@@ -960,8 +995,7 @@ TEST_F(DBBasicTest, DBOpen_Options) {
|
|
|
960
995
|
ASSERT_OK(s);
|
|
961
996
|
ASSERT_TRUE(db != nullptr);
|
|
962
997
|
|
|
963
|
-
|
|
964
|
-
db = nullptr;
|
|
998
|
+
db.reset();
|
|
965
999
|
|
|
966
1000
|
// Does exist, and error_if_exists == true: error
|
|
967
1001
|
options.create_if_missing = false;
|
|
@@ -977,8 +1011,7 @@ TEST_F(DBBasicTest, DBOpen_Options) {
|
|
|
977
1011
|
ASSERT_OK(s);
|
|
978
1012
|
ASSERT_TRUE(db != nullptr);
|
|
979
1013
|
|
|
980
|
-
|
|
981
|
-
db = nullptr;
|
|
1014
|
+
db.reset();
|
|
982
1015
|
}
|
|
983
1016
|
|
|
984
1017
|
TEST_F(DBBasicTest, CompactOnFlush) {
|
|
@@ -1283,7 +1316,7 @@ TEST_F(DBBasicTest, DBClose) {
|
|
|
1283
1316
|
std::string dbname = test::PerThreadDBPath("db_close_test");
|
|
1284
1317
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
1285
1318
|
|
|
1286
|
-
DB
|
|
1319
|
+
std::unique_ptr<DB> db;
|
|
1287
1320
|
TestEnv* env = new TestEnv(env_);
|
|
1288
1321
|
std::unique_ptr<TestEnv> local_env_guard(env);
|
|
1289
1322
|
options.create_if_missing = true;
|
|
@@ -1296,14 +1329,14 @@ TEST_F(DBBasicTest, DBClose) {
|
|
|
1296
1329
|
ASSERT_EQ(env->GetCloseCount(), 1);
|
|
1297
1330
|
ASSERT_EQ(s, Status::IOError());
|
|
1298
1331
|
|
|
1299
|
-
|
|
1332
|
+
db.reset();
|
|
1300
1333
|
ASSERT_EQ(env->GetCloseCount(), 1);
|
|
1301
1334
|
|
|
1302
1335
|
// Do not call DB::Close() and ensure our logger Close() still gets called
|
|
1303
1336
|
s = DB::Open(options, dbname, &db);
|
|
1304
1337
|
ASSERT_OK(s);
|
|
1305
1338
|
ASSERT_TRUE(db != nullptr);
|
|
1306
|
-
|
|
1339
|
+
db.reset();
|
|
1307
1340
|
ASSERT_EQ(env->GetCloseCount(), 2);
|
|
1308
1341
|
|
|
1309
1342
|
// close by WaitForCompact() with close_db option
|
|
@@ -1318,7 +1351,7 @@ TEST_F(DBBasicTest, DBClose) {
|
|
|
1318
1351
|
// see TestLogger::CloseHelper()
|
|
1319
1352
|
ASSERT_EQ(s, Status::IOError());
|
|
1320
1353
|
|
|
1321
|
-
|
|
1354
|
+
db.reset();
|
|
1322
1355
|
ASSERT_EQ(env->GetCloseCount(), 3);
|
|
1323
1356
|
|
|
1324
1357
|
// Provide our own logger and ensure DB::Close() does not close it
|
|
@@ -1329,7 +1362,7 @@ TEST_F(DBBasicTest, DBClose) {
|
|
|
1329
1362
|
|
|
1330
1363
|
s = db->Close();
|
|
1331
1364
|
ASSERT_EQ(s, Status::OK());
|
|
1332
|
-
|
|
1365
|
+
db.reset();
|
|
1333
1366
|
ASSERT_EQ(env->GetCloseCount(), 3);
|
|
1334
1367
|
options.info_log.reset();
|
|
1335
1368
|
ASSERT_EQ(env->GetCloseCount(), 4);
|
|
@@ -1347,7 +1380,7 @@ TEST_F(DBBasicTest, DBCloseAllDirectoryFDs) {
|
|
|
1347
1380
|
|
|
1348
1381
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
1349
1382
|
|
|
1350
|
-
DB
|
|
1383
|
+
std::unique_ptr<DB> db;
|
|
1351
1384
|
std::unique_ptr<Env> env = NewCompositeEnv(
|
|
1352
1385
|
std::make_shared<CountedFileSystem>(FileSystem::Default()));
|
|
1353
1386
|
options.create_if_missing = true;
|
|
@@ -1365,7 +1398,7 @@ TEST_F(DBBasicTest, DBCloseAllDirectoryFDs) {
|
|
|
1365
1398
|
ASSERT_EQ(counted_fs->counters()->dir_opens,
|
|
1366
1399
|
counted_fs->counters()->dir_closes);
|
|
1367
1400
|
ASSERT_OK(s);
|
|
1368
|
-
|
|
1401
|
+
db.reset();
|
|
1369
1402
|
}
|
|
1370
1403
|
|
|
1371
1404
|
TEST_F(DBBasicTest, DBCloseFlushError) {
|
|
@@ -1427,7 +1460,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1427
1460
|
}
|
|
1428
1461
|
|
|
1429
1462
|
int get_sv_count = 0;
|
|
1430
|
-
ROCKSDB_NAMESPACE::DBImpl* db =
|
|
1463
|
+
ROCKSDB_NAMESPACE::DBImpl* db = dbfull();
|
|
1431
1464
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
1432
1465
|
"DBImpl::MultiCFSnapshot::AfterRefSV", [&](void* /*arg*/) {
|
|
1433
1466
|
if (++get_sv_count == 2) {
|
|
@@ -1499,10 +1532,9 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1499
1532
|
ASSERT_EQ(values[2], std::get<2>(cf_kv_vec[1]) + "_2");
|
|
1500
1533
|
|
|
1501
1534
|
for (int cf = 0; cf < 8; ++cf) {
|
|
1502
|
-
auto* cfd =
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
->cfd();
|
|
1535
|
+
auto* cfd = static_cast_with_check<ColumnFamilyHandleImpl>(
|
|
1536
|
+
dbfull()->GetColumnFamilyHandle(cf))
|
|
1537
|
+
->cfd();
|
|
1506
1538
|
ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVInUse);
|
|
1507
1539
|
ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVObsolete);
|
|
1508
1540
|
}
|
|
@@ -1588,10 +1620,9 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1588
1620
|
"cf" + std::to_string(j) + "_val" + std::to_string(retries));
|
|
1589
1621
|
}
|
|
1590
1622
|
for (int i = 0; i < 8; ++i) {
|
|
1591
|
-
auto* cfd =
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
->cfd();
|
|
1623
|
+
auto* cfd = static_cast_with_check<ColumnFamilyHandleImpl>(
|
|
1624
|
+
dbfull()->GetColumnFamilyHandle(i))
|
|
1625
|
+
->cfd();
|
|
1595
1626
|
ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVInUse);
|
|
1596
1627
|
}
|
|
1597
1628
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
@@ -1615,7 +1646,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
|
1615
1646
|
}
|
|
1616
1647
|
|
|
1617
1648
|
int get_sv_count = 0;
|
|
1618
|
-
ROCKSDB_NAMESPACE::DBImpl* db =
|
|
1649
|
+
ROCKSDB_NAMESPACE::DBImpl* db = dbfull();
|
|
1619
1650
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
1620
1651
|
"DBImpl::MultiCFSnapshot::AfterRefSV", [&](void* /*arg*/) {
|
|
1621
1652
|
if (++get_sv_count == 2) {
|
|
@@ -1656,10 +1687,9 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
|
1656
1687
|
ASSERT_EQ(values[j], "cf" + std::to_string(j) + "_val");
|
|
1657
1688
|
}
|
|
1658
1689
|
for (int i = 0; i < 8; ++i) {
|
|
1659
|
-
auto* cfd =
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
->cfd();
|
|
1690
|
+
auto* cfd = static_cast_with_check<ColumnFamilyHandleImpl>(
|
|
1691
|
+
dbfull()->GetColumnFamilyHandle(i))
|
|
1692
|
+
->cfd();
|
|
1663
1693
|
ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVInUse);
|
|
1664
1694
|
}
|
|
1665
1695
|
}
|
|
@@ -2505,6 +2535,319 @@ TEST_P(DBMultiGetTestWithParam, MultiGetBatchedValueSizeMultiLevelMerge) {
|
|
|
2505
2535
|
}
|
|
2506
2536
|
}
|
|
2507
2537
|
|
|
2538
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetMemtableBatchLookup) {
|
|
2539
|
+
#ifndef USE_COROUTINES
|
|
2540
|
+
if (std::get<1>(GetParam())) {
|
|
2541
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2542
|
+
return;
|
|
2543
|
+
}
|
|
2544
|
+
#endif // USE_COROUTINES
|
|
2545
|
+
// Skip for unbatched MultiGet
|
|
2546
|
+
if (!std::get<0>(GetParam())) {
|
|
2547
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2548
|
+
return;
|
|
2549
|
+
}
|
|
2550
|
+
Options options = CurrentOptions();
|
|
2551
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2552
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2553
|
+
|
|
2554
|
+
// Insert sorted keys into memtable
|
|
2555
|
+
for (int i = 0; i < 100; i++) {
|
|
2556
|
+
ASSERT_OK(Put(1, Key(i), "val" + std::to_string(i)));
|
|
2557
|
+
}
|
|
2558
|
+
// Delete some keys
|
|
2559
|
+
ASSERT_OK(Delete(1, Key(25)));
|
|
2560
|
+
ASSERT_OK(Delete(1, Key(75)));
|
|
2561
|
+
|
|
2562
|
+
// MultiGet a batch of keys - mix of existing, deleted, and missing
|
|
2563
|
+
// Store key strings to keep Slice data alive
|
|
2564
|
+
std::vector<std::string> key_strs = {Key(0), Key(10), Key(25), Key(50),
|
|
2565
|
+
Key(75), Key(99), Key(200)};
|
|
2566
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2567
|
+
|
|
2568
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2569
|
+
std::vector<Status> statuses(keys.size());
|
|
2570
|
+
|
|
2571
|
+
ReadOptions ro;
|
|
2572
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2573
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2574
|
+
statuses.data(), true);
|
|
2575
|
+
|
|
2576
|
+
ASSERT_OK(statuses[0]);
|
|
2577
|
+
ASSERT_EQ(values[0].ToString(), "val0");
|
|
2578
|
+
ASSERT_OK(statuses[1]);
|
|
2579
|
+
ASSERT_EQ(values[1].ToString(), "val10");
|
|
2580
|
+
ASSERT_TRUE(statuses[2].IsNotFound()); // deleted
|
|
2581
|
+
ASSERT_OK(statuses[3]);
|
|
2582
|
+
ASSERT_EQ(values[3].ToString(), "val50");
|
|
2583
|
+
ASSERT_TRUE(statuses[4].IsNotFound()); // deleted
|
|
2584
|
+
ASSERT_OK(statuses[5]);
|
|
2585
|
+
ASSERT_EQ(values[5].ToString(), "val99");
|
|
2586
|
+
ASSERT_TRUE(statuses[6].IsNotFound()); // never inserted
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchLookupOverwrite) {
|
|
2590
|
+
#ifndef USE_COROUTINES
|
|
2591
|
+
if (std::get<1>(GetParam())) {
|
|
2592
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2593
|
+
return;
|
|
2594
|
+
}
|
|
2595
|
+
#endif // USE_COROUTINES
|
|
2596
|
+
if (!std::get<0>(GetParam())) {
|
|
2597
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2598
|
+
return;
|
|
2599
|
+
}
|
|
2600
|
+
Options options = CurrentOptions();
|
|
2601
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2602
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2603
|
+
|
|
2604
|
+
// Insert, then overwrite some keys
|
|
2605
|
+
for (int i = 0; i < 50; i++) {
|
|
2606
|
+
ASSERT_OK(Put(1, Key(i), "old" + std::to_string(i)));
|
|
2607
|
+
}
|
|
2608
|
+
for (int i = 0; i < 50; i += 5) {
|
|
2609
|
+
ASSERT_OK(Put(1, Key(i), "new" + std::to_string(i)));
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
std::vector<std::string> key_strs;
|
|
2613
|
+
for (int i = 0; i < 50; i += 5) {
|
|
2614
|
+
key_strs.push_back(Key(i));
|
|
2615
|
+
}
|
|
2616
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2617
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2618
|
+
std::vector<Status> statuses(keys.size());
|
|
2619
|
+
|
|
2620
|
+
ReadOptions ro;
|
|
2621
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2622
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2623
|
+
statuses.data(), true);
|
|
2624
|
+
|
|
2625
|
+
for (size_t i = 0; i < keys.size(); i++) {
|
|
2626
|
+
ASSERT_OK(statuses[i]);
|
|
2627
|
+
ASSERT_EQ(values[i].ToString(), "new" + std::to_string(i * 5));
|
|
2628
|
+
}
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2631
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchLookupWithFlush) {
|
|
2632
|
+
#ifndef USE_COROUTINES
|
|
2633
|
+
if (std::get<1>(GetParam())) {
|
|
2634
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2635
|
+
return;
|
|
2636
|
+
}
|
|
2637
|
+
#endif // USE_COROUTINES
|
|
2638
|
+
if (!std::get<0>(GetParam())) {
|
|
2639
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2640
|
+
return;
|
|
2641
|
+
}
|
|
2642
|
+
Options options = CurrentOptions();
|
|
2643
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2644
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2645
|
+
|
|
2646
|
+
// Put data into SST
|
|
2647
|
+
for (int i = 0; i < 50; i++) {
|
|
2648
|
+
ASSERT_OK(Put(1, Key(i), "sst" + std::to_string(i)));
|
|
2649
|
+
}
|
|
2650
|
+
ASSERT_OK(Flush(1));
|
|
2651
|
+
|
|
2652
|
+
// Put different data into memtable (overlapping some keys)
|
|
2653
|
+
for (int i = 25; i < 75; i++) {
|
|
2654
|
+
ASSERT_OK(Put(1, Key(i), "mem" + std::to_string(i)));
|
|
2655
|
+
}
|
|
2656
|
+
|
|
2657
|
+
// MultiGet keys spanning both SST and memtable
|
|
2658
|
+
std::vector<std::string> key_strs = {Key(10), Key(30), Key(60), Key(80)};
|
|
2659
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2660
|
+
|
|
2661
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2662
|
+
std::vector<Status> statuses(keys.size());
|
|
2663
|
+
|
|
2664
|
+
ReadOptions ro;
|
|
2665
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2666
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2667
|
+
statuses.data(), true);
|
|
2668
|
+
|
|
2669
|
+
ASSERT_OK(statuses[0]);
|
|
2670
|
+
ASSERT_EQ(values[0].ToString(), "sst10");
|
|
2671
|
+
ASSERT_OK(statuses[1]);
|
|
2672
|
+
ASSERT_EQ(values[1].ToString(), "mem30");
|
|
2673
|
+
ASSERT_OK(statuses[2]);
|
|
2674
|
+
ASSERT_EQ(values[2].ToString(), "mem60");
|
|
2675
|
+
ASSERT_TRUE(statuses[3].IsNotFound());
|
|
2676
|
+
}
|
|
2677
|
+
|
|
2678
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchLookupWithMerge) {
|
|
2679
|
+
#ifndef USE_COROUTINES
|
|
2680
|
+
if (std::get<1>(GetParam())) {
|
|
2681
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2682
|
+
return;
|
|
2683
|
+
}
|
|
2684
|
+
#endif // USE_COROUTINES
|
|
2685
|
+
if (!std::get<0>(GetParam())) {
|
|
2686
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2687
|
+
return;
|
|
2688
|
+
}
|
|
2689
|
+
Options options = CurrentOptions();
|
|
2690
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2691
|
+
options.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
2692
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2693
|
+
|
|
2694
|
+
// Put base values
|
|
2695
|
+
ASSERT_OK(Put(1, Key(1), "a"));
|
|
2696
|
+
ASSERT_OK(Put(1, Key(2), "x"));
|
|
2697
|
+
// Merge on top
|
|
2698
|
+
ASSERT_OK(Merge(1, Key(1), "b"));
|
|
2699
|
+
ASSERT_OK(Merge(1, Key(1), "c"));
|
|
2700
|
+
ASSERT_OK(Merge(1, Key(2), "y"));
|
|
2701
|
+
|
|
2702
|
+
std::vector<std::string> key_strs = {Key(1), Key(2), Key(3)};
|
|
2703
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2704
|
+
|
|
2705
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2706
|
+
std::vector<Status> statuses(keys.size());
|
|
2707
|
+
|
|
2708
|
+
ReadOptions ro;
|
|
2709
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2710
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2711
|
+
statuses.data(), true);
|
|
2712
|
+
|
|
2713
|
+
ASSERT_OK(statuses[0]);
|
|
2714
|
+
ASSERT_EQ(values[0].ToString(), "a,b,c");
|
|
2715
|
+
ASSERT_OK(statuses[1]);
|
|
2716
|
+
ASSERT_EQ(values[1].ToString(), "x,y");
|
|
2717
|
+
ASSERT_TRUE(statuses[2].IsNotFound());
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
TEST_F(DBBasicTest, MultiGetBatchLookupDisabledByDefault) {
|
|
2721
|
+
// Verify that finger search is off by default and MultiGet still works
|
|
2722
|
+
Options options = CurrentOptions();
|
|
2723
|
+
ASSERT_FALSE(options.memtable_batch_lookup_optimization);
|
|
2724
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2725
|
+
|
|
2726
|
+
ASSERT_OK(Put(1, "k1", "v1"));
|
|
2727
|
+
ASSERT_OK(Put(1, "k2", "v2"));
|
|
2728
|
+
|
|
2729
|
+
std::vector<Slice> keys = {"k1", "k2", "k3"};
|
|
2730
|
+
std::vector<PinnableSlice> values(3);
|
|
2731
|
+
std::vector<Status> statuses(3);
|
|
2732
|
+
|
|
2733
|
+
db_->MultiGet(ReadOptions(), handles_[1], 3, keys.data(), values.data(),
|
|
2734
|
+
statuses.data(), true);
|
|
2735
|
+
|
|
2736
|
+
ASSERT_OK(statuses[0]);
|
|
2737
|
+
ASSERT_EQ(values[0].ToString(), "v1");
|
|
2738
|
+
ASSERT_OK(statuses[1]);
|
|
2739
|
+
ASSERT_EQ(values[1].ToString(), "v2");
|
|
2740
|
+
ASSERT_TRUE(statuses[2].IsNotFound());
|
|
2741
|
+
}
|
|
2742
|
+
|
|
2743
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchLookupWithParanoid) {
|
|
2744
|
+
#ifndef USE_COROUTINES
|
|
2745
|
+
if (std::get<1>(GetParam())) {
|
|
2746
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2747
|
+
return;
|
|
2748
|
+
}
|
|
2749
|
+
#endif // USE_COROUTINES
|
|
2750
|
+
if (!std::get<0>(GetParam())) {
|
|
2751
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2752
|
+
return;
|
|
2753
|
+
}
|
|
2754
|
+
Options options = CurrentOptions();
|
|
2755
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2756
|
+
options.paranoid_memory_checks = true;
|
|
2757
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2758
|
+
|
|
2759
|
+
// Insert sorted keys into memtable
|
|
2760
|
+
for (int i = 0; i < 100; i++) {
|
|
2761
|
+
ASSERT_OK(Put(1, Key(i), "val" + std::to_string(i)));
|
|
2762
|
+
}
|
|
2763
|
+
ASSERT_OK(Delete(1, Key(25)));
|
|
2764
|
+
|
|
2765
|
+
// MultiGet with both batch optimization and paranoid checks enabled
|
|
2766
|
+
std::vector<std::string> key_strs = {Key(0), Key(10), Key(25),
|
|
2767
|
+
Key(50), Key(99), Key(200)};
|
|
2768
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2769
|
+
|
|
2770
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2771
|
+
std::vector<Status> statuses(keys.size());
|
|
2772
|
+
|
|
2773
|
+
ReadOptions ro;
|
|
2774
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2775
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2776
|
+
statuses.data(), true);
|
|
2777
|
+
|
|
2778
|
+
ASSERT_OK(statuses[0]);
|
|
2779
|
+
ASSERT_EQ(values[0].ToString(), "val0");
|
|
2780
|
+
ASSERT_OK(statuses[1]);
|
|
2781
|
+
ASSERT_EQ(values[1].ToString(), "val10");
|
|
2782
|
+
ASSERT_TRUE(statuses[2].IsNotFound()); // deleted
|
|
2783
|
+
ASSERT_OK(statuses[3]);
|
|
2784
|
+
ASSERT_EQ(values[3].ToString(), "val50");
|
|
2785
|
+
ASSERT_OK(statuses[4]);
|
|
2786
|
+
ASSERT_EQ(values[4].ToString(), "val99");
|
|
2787
|
+
ASSERT_TRUE(statuses[5].IsNotFound()); // never inserted
|
|
2788
|
+
}
|
|
2789
|
+
|
|
2790
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchLookupSnapshot) {
|
|
2791
|
+
#ifndef USE_COROUTINES
|
|
2792
|
+
if (std::get<1>(GetParam())) {
|
|
2793
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
2794
|
+
return;
|
|
2795
|
+
}
|
|
2796
|
+
#endif // USE_COROUTINES
|
|
2797
|
+
if (!std::get<0>(GetParam())) {
|
|
2798
|
+
ROCKSDB_GTEST_BYPASS("This test is only for batched MultiGet");
|
|
2799
|
+
return;
|
|
2800
|
+
}
|
|
2801
|
+
Options options = CurrentOptions();
|
|
2802
|
+
options.memtable_batch_lookup_optimization = true;
|
|
2803
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
2804
|
+
|
|
2805
|
+
ASSERT_OK(Put(1, Key(1), "v1_old"));
|
|
2806
|
+
ASSERT_OK(Put(1, Key(2), "v2_old"));
|
|
2807
|
+
|
|
2808
|
+
const Snapshot* snap = db_->GetSnapshot();
|
|
2809
|
+
|
|
2810
|
+
// Write new values after snapshot
|
|
2811
|
+
ASSERT_OK(Put(1, Key(1), "v1_new"));
|
|
2812
|
+
ASSERT_OK(Put(1, Key(2), "v2_new"));
|
|
2813
|
+
ASSERT_OK(Put(1, Key(3), "v3_new"));
|
|
2814
|
+
|
|
2815
|
+
// MultiGet with snapshot should see old values
|
|
2816
|
+
std::vector<std::string> key_strs = {Key(1), Key(2), Key(3)};
|
|
2817
|
+
std::vector<Slice> keys(key_strs.begin(), key_strs.end());
|
|
2818
|
+
|
|
2819
|
+
std::vector<PinnableSlice> values(keys.size());
|
|
2820
|
+
std::vector<Status> statuses(keys.size());
|
|
2821
|
+
|
|
2822
|
+
ReadOptions ro;
|
|
2823
|
+
ro.snapshot = snap;
|
|
2824
|
+
ro.async_io = std::get<1>(GetParam());
|
|
2825
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
2826
|
+
statuses.data(), true);
|
|
2827
|
+
|
|
2828
|
+
ASSERT_OK(statuses[0]);
|
|
2829
|
+
ASSERT_EQ(values[0].ToString(), "v1_old");
|
|
2830
|
+
ASSERT_OK(statuses[1]);
|
|
2831
|
+
ASSERT_EQ(values[1].ToString(), "v2_old");
|
|
2832
|
+
ASSERT_TRUE(statuses[2].IsNotFound()); // didn't exist at snapshot
|
|
2833
|
+
|
|
2834
|
+
db_->ReleaseSnapshot(snap);
|
|
2835
|
+
|
|
2836
|
+
// MultiGet without snapshot should see new values
|
|
2837
|
+
for (auto& v : values) {
|
|
2838
|
+
v.Reset();
|
|
2839
|
+
}
|
|
2840
|
+
db_->MultiGet(ReadOptions(), handles_[1], keys.size(), keys.data(),
|
|
2841
|
+
values.data(), statuses.data(), true);
|
|
2842
|
+
|
|
2843
|
+
ASSERT_OK(statuses[0]);
|
|
2844
|
+
ASSERT_EQ(values[0].ToString(), "v1_new");
|
|
2845
|
+
ASSERT_OK(statuses[1]);
|
|
2846
|
+
ASSERT_EQ(values[1].ToString(), "v2_new");
|
|
2847
|
+
ASSERT_OK(statuses[2]);
|
|
2848
|
+
ASSERT_EQ(values[2].ToString(), "v3_new");
|
|
2849
|
+
}
|
|
2850
|
+
|
|
2508
2851
|
INSTANTIATE_TEST_CASE_P(DBMultiGetTestWithParam, DBMultiGetTestWithParam,
|
|
2509
2852
|
testing::Combine(testing::Bool(), testing::Bool()));
|
|
2510
2853
|
|
|
@@ -3264,8 +3607,8 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
|
|
|
3264
3607
|
ASSERT_OK(Delete(std::to_string(i)));
|
|
3265
3608
|
}
|
|
3266
3609
|
std::vector<KeyVersion> key_versions;
|
|
3267
|
-
ASSERT_OK(GetAllKeyVersions(
|
|
3268
|
-
|
|
3610
|
+
ASSERT_OK(GetAllKeyVersions(
|
|
3611
|
+
db_.get(), {}, {}, std::numeric_limits<size_t>::max(), &key_versions));
|
|
3269
3612
|
ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates, key_versions.size());
|
|
3270
3613
|
for (size_t i = 0; i < kNumInserts + kNumDeletes + kNumUpdates; i++) {
|
|
3271
3614
|
if (i % 3 == 0) {
|
|
@@ -3274,7 +3617,7 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
|
|
|
3274
3617
|
ASSERT_EQ(key_versions[i].GetTypeName(), "TypeValue");
|
|
3275
3618
|
}
|
|
3276
3619
|
}
|
|
3277
|
-
ASSERT_OK(GetAllKeyVersions(db_, handles_[0], {}, {},
|
|
3620
|
+
ASSERT_OK(GetAllKeyVersions(db_.get(), handles_[0], {}, {},
|
|
3278
3621
|
std::numeric_limits<size_t>::max(),
|
|
3279
3622
|
&key_versions));
|
|
3280
3623
|
ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates, key_versions.size());
|
|
@@ -3289,14 +3632,14 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
|
|
|
3289
3632
|
for (size_t i = 0; i + 1 != kNumDeletes; ++i) {
|
|
3290
3633
|
ASSERT_OK(Delete(1, std::to_string(i)));
|
|
3291
3634
|
}
|
|
3292
|
-
ASSERT_OK(GetAllKeyVersions(db_, handles_[1], {}, {},
|
|
3635
|
+
ASSERT_OK(GetAllKeyVersions(db_.get(), handles_[1], {}, {},
|
|
3293
3636
|
std::numeric_limits<size_t>::max(),
|
|
3294
3637
|
&key_versions));
|
|
3295
3638
|
ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates - 3, key_versions.size());
|
|
3296
3639
|
|
|
3297
3640
|
// Change from historical behavior: empty key is now interpreted literally as
|
|
3298
3641
|
// a legal key (rather than as a "not present" key)
|
|
3299
|
-
ASSERT_OK(GetAllKeyVersions(db_, handles_[1], Slice(), Slice(),
|
|
3642
|
+
ASSERT_OK(GetAllKeyVersions(db_.get(), handles_[1], Slice(), Slice(),
|
|
3300
3643
|
std::numeric_limits<size_t>::max(),
|
|
3301
3644
|
&key_versions));
|
|
3302
3645
|
ASSERT_EQ(key_versions.size(), 0);
|
|
@@ -5437,6 +5780,94 @@ INSTANTIATE_TEST_CASE_P(DBBasicTestDeadline, DBBasicTestDeadline,
|
|
|
5437
5780
|
::testing::Values(std::make_tuple(true, false),
|
|
5438
5781
|
std::make_tuple(false, true),
|
|
5439
5782
|
std::make_tuple(true, true)));
|
|
5783
|
+
|
|
5784
|
+
// FileSystemWrapper that captures FileOptions passed to NewRandomAccessFile
|
|
5785
|
+
// for .sst files, so we can verify file_checksum fields are populated.
|
|
5786
|
+
class ChecksumCapturingFS : public FileSystemWrapper {
|
|
5787
|
+
public:
|
|
5788
|
+
explicit ChecksumCapturingFS(const std::shared_ptr<FileSystem>& base)
|
|
5789
|
+
: FileSystemWrapper(base) {}
|
|
5790
|
+
|
|
5791
|
+
static const char* kClassName() { return "ChecksumCapturingFS"; }
|
|
5792
|
+
const char* Name() const override { return kClassName(); }
|
|
5793
|
+
|
|
5794
|
+
IOStatus NewRandomAccessFile(const std::string& fname,
|
|
5795
|
+
const FileOptions& opts,
|
|
5796
|
+
std::unique_ptr<FSRandomAccessFile>* result,
|
|
5797
|
+
IODebugContext* dbg) override {
|
|
5798
|
+
if (fname.find(".sst") != std::string::npos) {
|
|
5799
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
5800
|
+
captured_file_checksum_ = opts.file_checksum;
|
|
5801
|
+
captured_file_checksum_func_name_ = opts.file_checksum_func_name;
|
|
5802
|
+
capture_count_++;
|
|
5803
|
+
}
|
|
5804
|
+
return target()->NewRandomAccessFile(fname, opts, result, dbg);
|
|
5805
|
+
}
|
|
5806
|
+
|
|
5807
|
+
std::string GetCapturedFileChecksum() {
|
|
5808
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
5809
|
+
return captured_file_checksum_;
|
|
5810
|
+
}
|
|
5811
|
+
|
|
5812
|
+
std::string GetCapturedFileChecksumFuncName() {
|
|
5813
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
5814
|
+
return captured_file_checksum_func_name_;
|
|
5815
|
+
}
|
|
5816
|
+
|
|
5817
|
+
int GetCaptureCount() {
|
|
5818
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
5819
|
+
return capture_count_;
|
|
5820
|
+
}
|
|
5821
|
+
|
|
5822
|
+
void Reset() {
|
|
5823
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
5824
|
+
captured_file_checksum_.clear();
|
|
5825
|
+
captured_file_checksum_func_name_.clear();
|
|
5826
|
+
capture_count_ = 0;
|
|
5827
|
+
}
|
|
5828
|
+
|
|
5829
|
+
private:
|
|
5830
|
+
std::mutex mu_;
|
|
5831
|
+
std::string captured_file_checksum_;
|
|
5832
|
+
std::string captured_file_checksum_func_name_;
|
|
5833
|
+
int capture_count_ = 0;
|
|
5834
|
+
};
|
|
5835
|
+
|
|
5836
|
+
TEST_F(DBBasicTest, FileChecksumInFileOptions) {
|
|
5837
|
+
// Verify that file_checksum and file_checksum_func_name from FileMetaData
|
|
5838
|
+
// are propagated through FileOptions when opening SST files.
|
|
5839
|
+
auto capturing_fs =
|
|
5840
|
+
std::make_shared<ChecksumCapturingFS>(env_->GetFileSystem());
|
|
5841
|
+
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, capturing_fs));
|
|
5842
|
+
|
|
5843
|
+
Options options = GetDefaultOptions();
|
|
5844
|
+
options.create_if_missing = true;
|
|
5845
|
+
options.env = env.get();
|
|
5846
|
+
options.file_checksum_gen_factory = GetFileChecksumGenCrc32cFactory();
|
|
5847
|
+
DestroyAndReopen(options);
|
|
5848
|
+
|
|
5849
|
+
// Write data and flush to create an SST with a file checksum.
|
|
5850
|
+
ASSERT_OK(Put("key1", "value1"));
|
|
5851
|
+
ASSERT_OK(Flush());
|
|
5852
|
+
|
|
5853
|
+
// Reset captures, then reopen to trigger TableCache SST open.
|
|
5854
|
+
capturing_fs->Reset();
|
|
5855
|
+
Reopen(options);
|
|
5856
|
+
|
|
5857
|
+
// Read to trigger SST open through TableCache::GetTableReader.
|
|
5858
|
+
ASSERT_EQ("value1", Get("key1"));
|
|
5859
|
+
|
|
5860
|
+
// Verify that checksum fields were populated.
|
|
5861
|
+
ASSERT_GT(capturing_fs->GetCaptureCount(), 0);
|
|
5862
|
+
ASSERT_FALSE(capturing_fs->GetCapturedFileChecksum().empty());
|
|
5863
|
+
ASSERT_NE(capturing_fs->GetCapturedFileChecksumFuncName(),
|
|
5864
|
+
capturing_fs->GetCapturedFileChecksum());
|
|
5865
|
+
ASSERT_EQ(capturing_fs->GetCapturedFileChecksumFuncName(),
|
|
5866
|
+
"FileChecksumCrc32c");
|
|
5867
|
+
|
|
5868
|
+
Close();
|
|
5869
|
+
}
|
|
5870
|
+
|
|
5440
5871
|
} // namespace ROCKSDB_NAMESPACE
|
|
5441
5872
|
|
|
5442
5873
|
int main(int argc, char** argv) {
|