@nxtedition/rocksdb 6.0.1 → 7.0.0-alpha.1
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/BUILDING.md +12 -4
- package/binding.cc +421 -40
- package/deps/rocksdb/build_version.cc +4 -10
- package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
- package/deps/rocksdb/rocksdb/Makefile +73 -91
- package/deps/rocksdb/rocksdb/TARGETS +27 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
- package/deps/rocksdb/rocksdb/common.mk +30 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
- package/deps/rocksdb/rocksdb/db/c.cc +71 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
- package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
- package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
- package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
- package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
- package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
- package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
- package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
- package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
- package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
- package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
- package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
- package/deps/rocksdb/rocksdb/env/env.cc +0 -60
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
- package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
- package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
- package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
- package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
- package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
- package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
- package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
- package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
- package/deps/rocksdb/rocksdb/src.mk +6 -1
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +22 -20
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
- package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
- package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
- package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
- package/deps/rocksdb/rocksdb/util/compression.h +56 -7
- package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
- package/deps/rocksdb/rocksdb/util/heap.h +5 -3
- package/deps/rocksdb/rocksdb/util/random.cc +1 -5
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
- package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
- package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +20 -13
- package/index.js +187 -3
- package/iterator.js +1 -0
- package/package-lock.json +23687 -0
- package/package.json +2 -30
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/snapshot.js +23 -0
- package/deps/liburing/liburing/README +0 -46
- package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
- package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
- package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
- package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
- package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
- package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
- package/deps/liburing/liburing/test/Makefile +0 -312
- package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
- package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
- package/deps/liburing/liburing/test/accept-link.c +0 -251
- package/deps/liburing/liburing/test/accept-reuse.c +0 -164
- package/deps/liburing/liburing/test/accept-test.c +0 -79
- package/deps/liburing/liburing/test/accept.c +0 -476
- package/deps/liburing/liburing/test/across-fork.c +0 -283
- package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
- package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
- package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
- package/deps/liburing/liburing/test/close-opath.c +0 -122
- package/deps/liburing/liburing/test/config +0 -10
- package/deps/liburing/liburing/test/connect.c +0 -398
- package/deps/liburing/liburing/test/cq-full.c +0 -96
- package/deps/liburing/liburing/test/cq-overflow.c +0 -294
- package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
- package/deps/liburing/liburing/test/cq-ready.c +0 -94
- package/deps/liburing/liburing/test/cq-size.c +0 -58
- package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
- package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
- package/deps/liburing/liburing/test/defer.c +0 -307
- package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
- package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
- package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
- package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
- package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
- package/deps/liburing/liburing/test/eventfd.c +0 -112
- package/deps/liburing/liburing/test/fadvise.c +0 -202
- package/deps/liburing/liburing/test/fallocate.c +0 -249
- package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
- package/deps/liburing/liburing/test/file-register.c +0 -843
- package/deps/liburing/liburing/test/file-update.c +0 -173
- package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
- package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
- package/deps/liburing/liburing/test/fixed-link.c +0 -90
- package/deps/liburing/liburing/test/fsync.c +0 -224
- package/deps/liburing/liburing/test/hardlink.c +0 -136
- package/deps/liburing/liburing/test/helpers.c +0 -135
- package/deps/liburing/liburing/test/helpers.h +0 -67
- package/deps/liburing/liburing/test/io-cancel.c +0 -537
- package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
- package/deps/liburing/liburing/test/io_uring_register.c +0 -664
- package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
- package/deps/liburing/liburing/test/iopoll.c +0 -366
- package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
- package/deps/liburing/liburing/test/lfs-openat.c +0 -273
- package/deps/liburing/liburing/test/link-timeout.c +0 -1107
- package/deps/liburing/liburing/test/link.c +0 -496
- package/deps/liburing/liburing/test/link_drain.c +0 -229
- package/deps/liburing/liburing/test/madvise.c +0 -195
- package/deps/liburing/liburing/test/mkdir.c +0 -108
- package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
- package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
- package/deps/liburing/liburing/test/nop.c +0 -115
- package/deps/liburing/liburing/test/open-close.c +0 -146
- package/deps/liburing/liburing/test/openat2.c +0 -240
- package/deps/liburing/liburing/test/personality.c +0 -204
- package/deps/liburing/liburing/test/pipe-eof.c +0 -81
- package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
- package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
- package/deps/liburing/liburing/test/poll-cancel.c +0 -135
- package/deps/liburing/liburing/test/poll-link.c +0 -227
- package/deps/liburing/liburing/test/poll-many.c +0 -208
- package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
- package/deps/liburing/liburing/test/poll-ring.c +0 -48
- package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
- package/deps/liburing/liburing/test/poll.c +0 -109
- package/deps/liburing/liburing/test/probe.c +0 -137
- package/deps/liburing/liburing/test/read-write.c +0 -876
- package/deps/liburing/liburing/test/register-restrictions.c +0 -633
- package/deps/liburing/liburing/test/rename.c +0 -134
- package/deps/liburing/liburing/test/ring-leak.c +0 -173
- package/deps/liburing/liburing/test/ring-leak2.c +0 -249
- package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
- package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
- package/deps/liburing/liburing/test/runtests.sh +0 -170
- package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
- package/deps/liburing/liburing/test/self.c +0 -91
- package/deps/liburing/liburing/test/send_recv.c +0 -291
- package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
- package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
- package/deps/liburing/liburing/test/shared-wq.c +0 -84
- package/deps/liburing/liburing/test/short-read.c +0 -75
- package/deps/liburing/liburing/test/shutdown.c +0 -163
- package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
- package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
- package/deps/liburing/liburing/test/socket-rw.c +0 -147
- package/deps/liburing/liburing/test/splice.c +0 -511
- package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
- package/deps/liburing/liburing/test/sq-full.c +0 -45
- package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
- package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
- package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
- package/deps/liburing/liburing/test/sq-space_left.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
- package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
- package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
- package/deps/liburing/liburing/test/statx.c +0 -172
- package/deps/liburing/liburing/test/stdout.c +0 -232
- package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
- package/deps/liburing/liburing/test/submit-reuse.c +0 -239
- package/deps/liburing/liburing/test/symlink.c +0 -116
- package/deps/liburing/liburing/test/teardowns.c +0 -58
- package/deps/liburing/liburing/test/thread-exit.c +0 -131
- package/deps/liburing/liburing/test/timeout-new.c +0 -246
- package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
- package/deps/liburing/liburing/test/timeout.c +0 -1354
- package/deps/liburing/liburing/test/unlink.c +0 -111
- package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
- package/deps/rocksdb/rocksdb/README.md +0 -32
- package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
- package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
- package/deps/rocksdb/rocksdb/port/README +0 -10
- package/deps/rocksdb/rocksdb/python.mk +0 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#include "db/db_test_util.h"
|
|
13
13
|
#include "options/options_helper.h"
|
|
14
14
|
#include "port/stack_trace.h"
|
|
15
|
+
#include "rocksdb/filter_policy.h"
|
|
15
16
|
#include "rocksdb/flush_block_policy.h"
|
|
16
17
|
#include "rocksdb/merge_operator.h"
|
|
17
18
|
#include "rocksdb/perf_context.h"
|
|
@@ -1180,10 +1181,17 @@ TEST_F(DBBasicTest, DBCloseFlushError) {
|
|
|
1180
1181
|
Destroy(options);
|
|
1181
1182
|
}
|
|
1182
1183
|
|
|
1183
|
-
class DBMultiGetTestWithParam
|
|
1184
|
-
|
|
1184
|
+
class DBMultiGetTestWithParam
|
|
1185
|
+
: public DBBasicTest,
|
|
1186
|
+
public testing::WithParamInterface<std::tuple<bool, bool>> {};
|
|
1185
1187
|
|
|
1186
1188
|
TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
1189
|
+
#ifndef USE_COROUTINES
|
|
1190
|
+
if (std::get<1>(GetParam())) {
|
|
1191
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1192
|
+
return;
|
|
1193
|
+
}
|
|
1194
|
+
#endif // USE_COROUTINES
|
|
1187
1195
|
Options options = CurrentOptions();
|
|
1188
1196
|
CreateAndReopenWithCF({"pikachu", "ilya", "muromec", "dobrynia", "nikitich",
|
|
1189
1197
|
"alyosha", "popovich"},
|
|
@@ -1240,7 +1248,8 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1240
1248
|
keys.push_back(std::get<1>(cf_kv_vec[i]));
|
|
1241
1249
|
}
|
|
1242
1250
|
|
|
1243
|
-
values = MultiGet(cfs, keys, nullptr, GetParam())
|
|
1251
|
+
values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
|
|
1252
|
+
std::get<1>(GetParam()));
|
|
1244
1253
|
ASSERT_EQ(values.size(), num_keys);
|
|
1245
1254
|
for (unsigned int j = 0; j < values.size(); ++j) {
|
|
1246
1255
|
ASSERT_EQ(values[j], std::get<2>(cf_kv_vec[j]) + "_2");
|
|
@@ -1254,7 +1263,8 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1254
1263
|
keys.push_back(std::get<1>(cf_kv_vec[3]));
|
|
1255
1264
|
cfs.push_back(std::get<0>(cf_kv_vec[4]));
|
|
1256
1265
|
keys.push_back(std::get<1>(cf_kv_vec[4]));
|
|
1257
|
-
values = MultiGet(cfs, keys, nullptr, GetParam())
|
|
1266
|
+
values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
|
|
1267
|
+
std::get<1>(GetParam()));
|
|
1258
1268
|
ASSERT_EQ(values[0], std::get<2>(cf_kv_vec[0]) + "_2");
|
|
1259
1269
|
ASSERT_EQ(values[1], std::get<2>(cf_kv_vec[3]) + "_2");
|
|
1260
1270
|
ASSERT_EQ(values[2], std::get<2>(cf_kv_vec[4]) + "_2");
|
|
@@ -1267,7 +1277,8 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1267
1277
|
keys.push_back(std::get<1>(cf_kv_vec[6]));
|
|
1268
1278
|
cfs.push_back(std::get<0>(cf_kv_vec[1]));
|
|
1269
1279
|
keys.push_back(std::get<1>(cf_kv_vec[1]));
|
|
1270
|
-
values = MultiGet(cfs, keys, nullptr, GetParam())
|
|
1280
|
+
values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
|
|
1281
|
+
std::get<1>(GetParam()));
|
|
1271
1282
|
ASSERT_EQ(values[0], std::get<2>(cf_kv_vec[7]) + "_2");
|
|
1272
1283
|
ASSERT_EQ(values[1], std::get<2>(cf_kv_vec[6]) + "_2");
|
|
1273
1284
|
ASSERT_EQ(values[2], std::get<2>(cf_kv_vec[1]) + "_2");
|
|
@@ -1283,6 +1294,12 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCF) {
|
|
|
1283
1294
|
}
|
|
1284
1295
|
|
|
1285
1296
|
TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
1297
|
+
#ifndef USE_COROUTINES
|
|
1298
|
+
if (std::get<1>(GetParam())) {
|
|
1299
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1300
|
+
return;
|
|
1301
|
+
}
|
|
1302
|
+
#endif // USE_COROUTINES
|
|
1286
1303
|
Options options = CurrentOptions();
|
|
1287
1304
|
CreateAndReopenWithCF({"pikachu", "ilya", "muromec", "dobrynia", "nikitich",
|
|
1288
1305
|
"alyosha", "popovich"},
|
|
@@ -1328,7 +1345,8 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1328
1345
|
keys.push_back("cf" + std::to_string(i) + "_key");
|
|
1329
1346
|
}
|
|
1330
1347
|
|
|
1331
|
-
values = MultiGet(cfs, keys, nullptr, GetParam())
|
|
1348
|
+
values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
|
|
1349
|
+
std::get<1>(GetParam()));
|
|
1332
1350
|
ASSERT_TRUE(last_try);
|
|
1333
1351
|
ASSERT_EQ(values.size(), 8);
|
|
1334
1352
|
for (unsigned int j = 0; j < values.size(); ++j) {
|
|
@@ -1345,6 +1363,12 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1345
1363
|
}
|
|
1346
1364
|
|
|
1347
1365
|
TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
1366
|
+
#ifndef USE_COROUTINES
|
|
1367
|
+
if (std::get<1>(GetParam())) {
|
|
1368
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1369
|
+
return;
|
|
1370
|
+
}
|
|
1371
|
+
#endif // USE_COROUTINES
|
|
1348
1372
|
Options options = CurrentOptions();
|
|
1349
1373
|
CreateAndReopenWithCF({"pikachu", "ilya", "muromec", "dobrynia", "nikitich",
|
|
1350
1374
|
"alyosha", "popovich"},
|
|
@@ -1389,7 +1413,8 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
|
1389
1413
|
}
|
|
1390
1414
|
|
|
1391
1415
|
const Snapshot* snapshot = db_->GetSnapshot();
|
|
1392
|
-
values = MultiGet(cfs, keys, snapshot, GetParam())
|
|
1416
|
+
values = MultiGet(cfs, keys, snapshot, std::get<0>(GetParam()),
|
|
1417
|
+
std::get<1>(GetParam()));
|
|
1393
1418
|
db_->ReleaseSnapshot(snapshot);
|
|
1394
1419
|
ASSERT_EQ(values.size(), 8);
|
|
1395
1420
|
for (unsigned int j = 0; j < values.size(); ++j) {
|
|
@@ -1405,6 +1430,12 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
|
1405
1430
|
}
|
|
1406
1431
|
|
|
1407
1432
|
TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFUnsorted) {
|
|
1433
|
+
#ifndef USE_COROUTINES
|
|
1434
|
+
if (std::get<1>(GetParam())) {
|
|
1435
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
#endif // USE_COROUTINES
|
|
1408
1439
|
Options options = CurrentOptions();
|
|
1409
1440
|
CreateAndReopenWithCF({"one", "two"}, options);
|
|
1410
1441
|
|
|
@@ -1417,8 +1448,9 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFUnsorted) {
|
|
|
1417
1448
|
std::vector<std::string> keys{"foo", "baz", "abc"};
|
|
1418
1449
|
std::vector<std::string> values;
|
|
1419
1450
|
|
|
1420
|
-
values =
|
|
1421
|
-
|
|
1451
|
+
values = MultiGet(cfs, keys, /* snapshot */ nullptr,
|
|
1452
|
+
/* batched */ std::get<0>(GetParam()),
|
|
1453
|
+
/* async */ std::get<1>(GetParam()));
|
|
1422
1454
|
|
|
1423
1455
|
ASSERT_EQ(values.size(), 3);
|
|
1424
1456
|
ASSERT_EQ(values[0], "bar");
|
|
@@ -1426,10 +1458,18 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFUnsorted) {
|
|
|
1426
1458
|
ASSERT_EQ(values[2], "def");
|
|
1427
1459
|
}
|
|
1428
1460
|
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1461
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedSimpleUnsorted) {
|
|
1462
|
+
#ifndef USE_COROUTINES
|
|
1463
|
+
if (std::get<1>(GetParam())) {
|
|
1464
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1465
|
+
return;
|
|
1466
|
+
}
|
|
1467
|
+
#endif // USE_COROUTINES
|
|
1468
|
+
// Skip for unbatched MultiGet
|
|
1469
|
+
if (!std::get<0>(GetParam())) {
|
|
1470
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1433
1473
|
do {
|
|
1434
1474
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
1435
1475
|
SetPerfLevel(kEnableCount);
|
|
@@ -1448,8 +1488,10 @@ TEST_F(DBBasicTest, MultiGetBatchedSimpleUnsorted) {
|
|
|
1448
1488
|
std::vector<ColumnFamilyHandle*> cfs(keys.size(), handles_[1]);
|
|
1449
1489
|
std::vector<Status> s(keys.size());
|
|
1450
1490
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1491
|
+
ReadOptions ro;
|
|
1492
|
+
ro.async_io = std::get<1>(GetParam());
|
|
1493
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
1494
|
+
s.data(), false);
|
|
1453
1495
|
|
|
1454
1496
|
ASSERT_EQ(values.size(), keys.size());
|
|
1455
1497
|
ASSERT_EQ(std::string(values[5].data(), values[5].size()), "v1");
|
|
@@ -1470,7 +1512,18 @@ TEST_F(DBBasicTest, MultiGetBatchedSimpleUnsorted) {
|
|
|
1470
1512
|
} while (ChangeCompactOptions());
|
|
1471
1513
|
}
|
|
1472
1514
|
|
|
1473
|
-
|
|
1515
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedSortedMultiFile) {
|
|
1516
|
+
#ifndef USE_COROUTINES
|
|
1517
|
+
if (std::get<1>(GetParam())) {
|
|
1518
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
#endif // USE_COROUTINES
|
|
1522
|
+
// Skip for unbatched MultiGet
|
|
1523
|
+
if (!std::get<0>(GetParam())) {
|
|
1524
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1525
|
+
return;
|
|
1526
|
+
}
|
|
1474
1527
|
do {
|
|
1475
1528
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
1476
1529
|
SetPerfLevel(kEnableCount);
|
|
@@ -1493,8 +1546,10 @@ TEST_F(DBBasicTest, MultiGetBatchedSortedMultiFile) {
|
|
|
1493
1546
|
std::vector<ColumnFamilyHandle*> cfs(keys.size(), handles_[1]);
|
|
1494
1547
|
std::vector<Status> s(keys.size());
|
|
1495
1548
|
|
|
1496
|
-
|
|
1497
|
-
|
|
1549
|
+
ReadOptions ro;
|
|
1550
|
+
ro.async_io = std::get<1>(GetParam());
|
|
1551
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
1552
|
+
s.data(), true);
|
|
1498
1553
|
|
|
1499
1554
|
ASSERT_EQ(values.size(), keys.size());
|
|
1500
1555
|
ASSERT_EQ(std::string(values[0].data(), values[0].size()), "v1");
|
|
@@ -1515,7 +1570,18 @@ TEST_F(DBBasicTest, MultiGetBatchedSortedMultiFile) {
|
|
|
1515
1570
|
} while (ChangeOptions());
|
|
1516
1571
|
}
|
|
1517
1572
|
|
|
1518
|
-
|
|
1573
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedDuplicateKeys) {
|
|
1574
|
+
#ifndef USE_COROUTINES
|
|
1575
|
+
if (std::get<1>(GetParam())) {
|
|
1576
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1577
|
+
return;
|
|
1578
|
+
}
|
|
1579
|
+
#endif // USE_COROUTINES
|
|
1580
|
+
// Skip for unbatched MultiGet
|
|
1581
|
+
if (!std::get<0>(GetParam())) {
|
|
1582
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1583
|
+
return;
|
|
1584
|
+
}
|
|
1519
1585
|
Options opts = CurrentOptions();
|
|
1520
1586
|
opts.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
1521
1587
|
CreateAndReopenWithCF({"pikachu"}, opts);
|
|
@@ -1546,8 +1612,10 @@ TEST_F(DBBasicTest, MultiGetBatchedDuplicateKeys) {
|
|
|
1546
1612
|
std::vector<ColumnFamilyHandle*> cfs(keys.size(), handles_[1]);
|
|
1547
1613
|
std::vector<Status> s(keys.size());
|
|
1548
1614
|
|
|
1549
|
-
|
|
1550
|
-
|
|
1615
|
+
ReadOptions ro;
|
|
1616
|
+
ro.async_io = std::get<1>(GetParam());
|
|
1617
|
+
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
1618
|
+
s.data(), false);
|
|
1551
1619
|
|
|
1552
1620
|
ASSERT_EQ(values.size(), keys.size());
|
|
1553
1621
|
ASSERT_EQ(std::string(values[0].data(), values[0].size()), "v8");
|
|
@@ -1566,7 +1634,18 @@ TEST_F(DBBasicTest, MultiGetBatchedDuplicateKeys) {
|
|
|
1566
1634
|
SetPerfLevel(kDisable);
|
|
1567
1635
|
}
|
|
1568
1636
|
|
|
1569
|
-
|
|
1637
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedMultiLevel) {
|
|
1638
|
+
#ifndef USE_COROUTINES
|
|
1639
|
+
if (std::get<1>(GetParam())) {
|
|
1640
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1641
|
+
return;
|
|
1642
|
+
}
|
|
1643
|
+
#endif // USE_COROUTINES
|
|
1644
|
+
// Skip for unbatched MultiGet
|
|
1645
|
+
if (!std::get<0>(GetParam())) {
|
|
1646
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1647
|
+
return;
|
|
1648
|
+
}
|
|
1570
1649
|
Options options = CurrentOptions();
|
|
1571
1650
|
options.disable_auto_compactions = true;
|
|
1572
1651
|
Reopen(options);
|
|
@@ -1625,7 +1704,7 @@ TEST_F(DBBasicTest, MultiGetBatchedMultiLevel) {
|
|
|
1625
1704
|
keys.push_back("key_" + std::to_string(i));
|
|
1626
1705
|
}
|
|
1627
1706
|
|
|
1628
|
-
values = MultiGet(keys, nullptr);
|
|
1707
|
+
values = MultiGet(keys, nullptr, std::get<1>(GetParam()));
|
|
1629
1708
|
ASSERT_EQ(values.size(), 16);
|
|
1630
1709
|
for (unsigned int j = 0; j < values.size(); ++j) {
|
|
1631
1710
|
int key = j + 64;
|
|
@@ -1641,7 +1720,18 @@ TEST_F(DBBasicTest, MultiGetBatchedMultiLevel) {
|
|
|
1641
1720
|
}
|
|
1642
1721
|
}
|
|
1643
1722
|
|
|
1644
|
-
|
|
1723
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedMultiLevelMerge) {
|
|
1724
|
+
#ifndef USE_COROUTINES
|
|
1725
|
+
if (std::get<1>(GetParam())) {
|
|
1726
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1727
|
+
return;
|
|
1728
|
+
}
|
|
1729
|
+
#endif // USE_COROUTINES
|
|
1730
|
+
// Skip for unbatched MultiGet
|
|
1731
|
+
if (!std::get<0>(GetParam())) {
|
|
1732
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1733
|
+
return;
|
|
1734
|
+
}
|
|
1645
1735
|
Options options = CurrentOptions();
|
|
1646
1736
|
options.disable_auto_compactions = true;
|
|
1647
1737
|
options.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
@@ -1705,7 +1795,7 @@ TEST_F(DBBasicTest, MultiGetBatchedMultiLevelMerge) {
|
|
|
1705
1795
|
keys.push_back("key_" + std::to_string(i));
|
|
1706
1796
|
}
|
|
1707
1797
|
|
|
1708
|
-
values = MultiGet(keys, nullptr);
|
|
1798
|
+
values = MultiGet(keys, nullptr, std::get<1>(GetParam()));
|
|
1709
1799
|
ASSERT_EQ(values.size(), keys.size());
|
|
1710
1800
|
for (unsigned int j = 0; j < 48; ++j) {
|
|
1711
1801
|
int key = j + 32;
|
|
@@ -1727,7 +1817,18 @@ TEST_F(DBBasicTest, MultiGetBatchedMultiLevelMerge) {
|
|
|
1727
1817
|
}
|
|
1728
1818
|
}
|
|
1729
1819
|
|
|
1730
|
-
|
|
1820
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedValueSizeInMemory) {
|
|
1821
|
+
#ifndef USE_COROUTINES
|
|
1822
|
+
if (std::get<1>(GetParam())) {
|
|
1823
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1824
|
+
return;
|
|
1825
|
+
}
|
|
1826
|
+
#endif // USE_COROUTINES
|
|
1827
|
+
// Skip for unbatched MultiGet
|
|
1828
|
+
if (!std::get<0>(GetParam())) {
|
|
1829
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1830
|
+
return;
|
|
1831
|
+
}
|
|
1731
1832
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
1732
1833
|
SetPerfLevel(kEnableCount);
|
|
1733
1834
|
ASSERT_OK(Put(1, "k1", "v_1"));
|
|
@@ -1744,6 +1845,7 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSizeInMemory) {
|
|
|
1744
1845
|
get_perf_context()->Reset();
|
|
1745
1846
|
ReadOptions ro;
|
|
1746
1847
|
ro.value_size_soft_limit = 11;
|
|
1848
|
+
ro.async_io = std::get<1>(GetParam());
|
|
1747
1849
|
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
1748
1850
|
s.data(), false);
|
|
1749
1851
|
|
|
@@ -1761,7 +1863,17 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSizeInMemory) {
|
|
|
1761
1863
|
SetPerfLevel(kDisable);
|
|
1762
1864
|
}
|
|
1763
1865
|
|
|
1764
|
-
|
|
1866
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedValueSize) {
|
|
1867
|
+
#ifndef USE_COROUTINES
|
|
1868
|
+
if (std::get<1>(GetParam())) {
|
|
1869
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1870
|
+
return;
|
|
1871
|
+
}
|
|
1872
|
+
#endif // USE_COROUTINES
|
|
1873
|
+
// Skip for unbatched MultiGet
|
|
1874
|
+
if (!std::get<0>(GetParam())) {
|
|
1875
|
+
return;
|
|
1876
|
+
}
|
|
1765
1877
|
do {
|
|
1766
1878
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
1767
1879
|
SetPerfLevel(kEnableCount);
|
|
@@ -1801,6 +1913,7 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSize) {
|
|
|
1801
1913
|
|
|
1802
1914
|
ReadOptions ro;
|
|
1803
1915
|
ro.value_size_soft_limit = 20;
|
|
1916
|
+
ro.async_io = std::get<1>(GetParam());
|
|
1804
1917
|
db_->MultiGet(ro, handles_[1], keys.size(), keys.data(), values.data(),
|
|
1805
1918
|
s.data(), false);
|
|
1806
1919
|
|
|
@@ -1836,7 +1949,18 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSize) {
|
|
|
1836
1949
|
} while (ChangeCompactOptions());
|
|
1837
1950
|
}
|
|
1838
1951
|
|
|
1839
|
-
|
|
1952
|
+
TEST_P(DBMultiGetTestWithParam, MultiGetBatchedValueSizeMultiLevelMerge) {
|
|
1953
|
+
#ifndef USE_COROUTINES
|
|
1954
|
+
if (std::get<1>(GetParam())) {
|
|
1955
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
1956
|
+
return;
|
|
1957
|
+
}
|
|
1958
|
+
#endif // USE_COROUTINES
|
|
1959
|
+
// Skip for unbatched MultiGet
|
|
1960
|
+
if (!std::get<0>(GetParam())) {
|
|
1961
|
+
ROCKSDB_GTEST_SKIP("This test is only for batched MultiGet");
|
|
1962
|
+
return;
|
|
1963
|
+
}
|
|
1840
1964
|
Options options = CurrentOptions();
|
|
1841
1965
|
options.disable_auto_compactions = true;
|
|
1842
1966
|
options.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
@@ -1908,6 +2032,7 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSizeMultiLevelMerge) {
|
|
|
1908
2032
|
ReadOptions read_options;
|
|
1909
2033
|
read_options.verify_checksums = true;
|
|
1910
2034
|
read_options.value_size_soft_limit = 380;
|
|
2035
|
+
read_options.async_io = std::get<1>(GetParam());
|
|
1911
2036
|
db_->MultiGet(read_options, dbfull()->DefaultColumnFamily(), keys.size(),
|
|
1912
2037
|
keys.data(), values.data(), statuses.data());
|
|
1913
2038
|
|
|
@@ -1939,6 +2064,217 @@ TEST_F(DBBasicTest, MultiGetBatchedValueSizeMultiLevelMerge) {
|
|
|
1939
2064
|
}
|
|
1940
2065
|
}
|
|
1941
2066
|
|
|
2067
|
+
INSTANTIATE_TEST_CASE_P(DBMultiGetTestWithParam, DBMultiGetTestWithParam,
|
|
2068
|
+
testing::Combine(testing::Bool(), testing::Bool()));
|
|
2069
|
+
|
|
2070
|
+
#if USE_COROUTINES
|
|
2071
|
+
class DBMultiGetAsyncIOTest : public DBBasicTest {
|
|
2072
|
+
public:
|
|
2073
|
+
DBMultiGetAsyncIOTest()
|
|
2074
|
+
: DBBasicTest(), statistics_(ROCKSDB_NAMESPACE::CreateDBStatistics()) {
|
|
2075
|
+
BlockBasedTableOptions bbto;
|
|
2076
|
+
bbto.filter_policy.reset(NewBloomFilterPolicy(10));
|
|
2077
|
+
Options options = CurrentOptions();
|
|
2078
|
+
options.disable_auto_compactions = true;
|
|
2079
|
+
options.statistics = statistics_;
|
|
2080
|
+
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
2081
|
+
Reopen(options);
|
|
2082
|
+
int num_keys = 0;
|
|
2083
|
+
|
|
2084
|
+
// Put all keys in the bottommost level, and overwrite some keys
|
|
2085
|
+
// in L0 and L1
|
|
2086
|
+
for (int i = 0; i < 128; ++i) {
|
|
2087
|
+
EXPECT_OK(Put(Key(i), "val_l2_" + std::to_string(i)));
|
|
2088
|
+
num_keys++;
|
|
2089
|
+
if (num_keys == 8) {
|
|
2090
|
+
EXPECT_OK(Flush());
|
|
2091
|
+
num_keys = 0;
|
|
2092
|
+
}
|
|
2093
|
+
}
|
|
2094
|
+
if (num_keys > 0) {
|
|
2095
|
+
EXPECT_OK(Flush());
|
|
2096
|
+
num_keys = 0;
|
|
2097
|
+
}
|
|
2098
|
+
MoveFilesToLevel(2);
|
|
2099
|
+
|
|
2100
|
+
for (int i = 0; i < 128; i += 3) {
|
|
2101
|
+
EXPECT_OK(Put(Key(i), "val_l1_" + std::to_string(i)));
|
|
2102
|
+
num_keys++;
|
|
2103
|
+
if (num_keys == 8) {
|
|
2104
|
+
EXPECT_OK(Flush());
|
|
2105
|
+
num_keys = 0;
|
|
2106
|
+
}
|
|
2107
|
+
}
|
|
2108
|
+
if (num_keys > 0) {
|
|
2109
|
+
EXPECT_OK(Flush());
|
|
2110
|
+
num_keys = 0;
|
|
2111
|
+
}
|
|
2112
|
+
MoveFilesToLevel(1);
|
|
2113
|
+
|
|
2114
|
+
for (int i = 0; i < 128; i += 5) {
|
|
2115
|
+
EXPECT_OK(Put(Key(i), "val_l0_" + std::to_string(i)));
|
|
2116
|
+
num_keys++;
|
|
2117
|
+
if (num_keys == 8) {
|
|
2118
|
+
EXPECT_OK(Flush());
|
|
2119
|
+
num_keys = 0;
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
if (num_keys > 0) {
|
|
2123
|
+
EXPECT_OK(Flush());
|
|
2124
|
+
num_keys = 0;
|
|
2125
|
+
}
|
|
2126
|
+
EXPECT_EQ(0, num_keys);
|
|
2127
|
+
}
|
|
2128
|
+
|
|
2129
|
+
const std::shared_ptr<Statistics>& statistics() { return statistics_; }
|
|
2130
|
+
|
|
2131
|
+
private:
|
|
2132
|
+
std::shared_ptr<Statistics> statistics_;
|
|
2133
|
+
};
|
|
2134
|
+
|
|
2135
|
+
TEST_F(DBMultiGetAsyncIOTest, GetFromL0) {
|
|
2136
|
+
// All 3 keys in L0. The L0 files should be read serially.
|
|
2137
|
+
std::vector<std::string> key_strs{Key(0), Key(40), Key(80)};
|
|
2138
|
+
std::vector<Slice> keys{key_strs[0], key_strs[1], key_strs[2]};
|
|
2139
|
+
std::vector<PinnableSlice> values(key_strs.size());
|
|
2140
|
+
std::vector<Status> statuses(key_strs.size());
|
|
2141
|
+
|
|
2142
|
+
ReadOptions ro;
|
|
2143
|
+
ro.async_io = true;
|
|
2144
|
+
dbfull()->MultiGet(ro, dbfull()->DefaultColumnFamily(), keys.size(),
|
|
2145
|
+
keys.data(), values.data(), statuses.data());
|
|
2146
|
+
ASSERT_EQ(values.size(), 3);
|
|
2147
|
+
ASSERT_OK(statuses[0]);
|
|
2148
|
+
ASSERT_OK(statuses[1]);
|
|
2149
|
+
ASSERT_OK(statuses[2]);
|
|
2150
|
+
ASSERT_EQ(values[0], "val_l0_" + std::to_string(0));
|
|
2151
|
+
ASSERT_EQ(values[1], "val_l0_" + std::to_string(40));
|
|
2152
|
+
ASSERT_EQ(values[2], "val_l0_" + std::to_string(80));
|
|
2153
|
+
|
|
2154
|
+
HistogramData multiget_io_batch_size;
|
|
2155
|
+
|
|
2156
|
+
statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
|
|
2157
|
+
|
|
2158
|
+
// No async IO in this case since we don't do parallel lookup in L0
|
|
2159
|
+
ASSERT_EQ(multiget_io_batch_size.count, 0);
|
|
2160
|
+
ASSERT_EQ(multiget_io_batch_size.max, 0);
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
TEST_F(DBMultiGetAsyncIOTest, GetFromL1) {
|
|
2164
|
+
std::vector<std::string> key_strs;
|
|
2165
|
+
std::vector<Slice> keys;
|
|
2166
|
+
std::vector<PinnableSlice> values;
|
|
2167
|
+
std::vector<Status> statuses;
|
|
2168
|
+
|
|
2169
|
+
key_strs.push_back(Key(33));
|
|
2170
|
+
key_strs.push_back(Key(54));
|
|
2171
|
+
key_strs.push_back(Key(102));
|
|
2172
|
+
keys.push_back(key_strs[0]);
|
|
2173
|
+
keys.push_back(key_strs[1]);
|
|
2174
|
+
keys.push_back(key_strs[2]);
|
|
2175
|
+
values.resize(keys.size());
|
|
2176
|
+
statuses.resize(keys.size());
|
|
2177
|
+
|
|
2178
|
+
ReadOptions ro;
|
|
2179
|
+
ro.async_io = true;
|
|
2180
|
+
dbfull()->MultiGet(ro, dbfull()->DefaultColumnFamily(), keys.size(),
|
|
2181
|
+
keys.data(), values.data(), statuses.data());
|
|
2182
|
+
ASSERT_EQ(values.size(), 3);
|
|
2183
|
+
ASSERT_EQ(statuses[0], Status::OK());
|
|
2184
|
+
ASSERT_EQ(statuses[1], Status::OK());
|
|
2185
|
+
ASSERT_EQ(statuses[2], Status::OK());
|
|
2186
|
+
ASSERT_EQ(values[0], "val_l1_" + std::to_string(33));
|
|
2187
|
+
ASSERT_EQ(values[1], "val_l1_" + std::to_string(54));
|
|
2188
|
+
ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
|
|
2189
|
+
|
|
2190
|
+
HistogramData multiget_io_batch_size;
|
|
2191
|
+
|
|
2192
|
+
statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
|
|
2193
|
+
|
|
2194
|
+
// A batch of 3 async IOs is expected, one for each overlapping file in L1
|
|
2195
|
+
ASSERT_EQ(multiget_io_batch_size.count, 1);
|
|
2196
|
+
ASSERT_EQ(multiget_io_batch_size.max, 3);
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
TEST_F(DBMultiGetAsyncIOTest, LastKeyInFile) {
|
|
2200
|
+
std::vector<std::string> key_strs;
|
|
2201
|
+
std::vector<Slice> keys;
|
|
2202
|
+
std::vector<PinnableSlice> values;
|
|
2203
|
+
std::vector<Status> statuses;
|
|
2204
|
+
|
|
2205
|
+
// 21 is the last key in the first L1 file
|
|
2206
|
+
key_strs.push_back(Key(21));
|
|
2207
|
+
key_strs.push_back(Key(54));
|
|
2208
|
+
key_strs.push_back(Key(102));
|
|
2209
|
+
keys.push_back(key_strs[0]);
|
|
2210
|
+
keys.push_back(key_strs[1]);
|
|
2211
|
+
keys.push_back(key_strs[2]);
|
|
2212
|
+
values.resize(keys.size());
|
|
2213
|
+
statuses.resize(keys.size());
|
|
2214
|
+
|
|
2215
|
+
ReadOptions ro;
|
|
2216
|
+
ro.async_io = true;
|
|
2217
|
+
dbfull()->MultiGet(ro, dbfull()->DefaultColumnFamily(), keys.size(),
|
|
2218
|
+
keys.data(), values.data(), statuses.data());
|
|
2219
|
+
ASSERT_EQ(values.size(), 3);
|
|
2220
|
+
ASSERT_EQ(statuses[0], Status::OK());
|
|
2221
|
+
ASSERT_EQ(statuses[1], Status::OK());
|
|
2222
|
+
ASSERT_EQ(statuses[2], Status::OK());
|
|
2223
|
+
ASSERT_EQ(values[0], "val_l1_" + std::to_string(21));
|
|
2224
|
+
ASSERT_EQ(values[1], "val_l1_" + std::to_string(54));
|
|
2225
|
+
ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
|
|
2226
|
+
|
|
2227
|
+
HistogramData multiget_io_batch_size;
|
|
2228
|
+
|
|
2229
|
+
statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
|
|
2230
|
+
|
|
2231
|
+
// Since the first MultiGet key is the last key in a file, the MultiGet is
|
|
2232
|
+
// expected to lookup in that file first, before moving on to other files.
|
|
2233
|
+
// So the first file lookup will issue one async read, and the next lookup
|
|
2234
|
+
// will lookup 2 files in parallel and issue 2 async reads
|
|
2235
|
+
ASSERT_EQ(multiget_io_batch_size.count, 2);
|
|
2236
|
+
ASSERT_EQ(multiget_io_batch_size.max, 2);
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
TEST_F(DBMultiGetAsyncIOTest, GetFromL1AndL2) {
|
|
2240
|
+
std::vector<std::string> key_strs;
|
|
2241
|
+
std::vector<Slice> keys;
|
|
2242
|
+
std::vector<PinnableSlice> values;
|
|
2243
|
+
std::vector<Status> statuses;
|
|
2244
|
+
|
|
2245
|
+
// 33 and 102 are in L1, and 56 is in L2
|
|
2246
|
+
key_strs.push_back(Key(33));
|
|
2247
|
+
key_strs.push_back(Key(56));
|
|
2248
|
+
key_strs.push_back(Key(102));
|
|
2249
|
+
keys.push_back(key_strs[0]);
|
|
2250
|
+
keys.push_back(key_strs[1]);
|
|
2251
|
+
keys.push_back(key_strs[2]);
|
|
2252
|
+
values.resize(keys.size());
|
|
2253
|
+
statuses.resize(keys.size());
|
|
2254
|
+
|
|
2255
|
+
ReadOptions ro;
|
|
2256
|
+
ro.async_io = true;
|
|
2257
|
+
dbfull()->MultiGet(ro, dbfull()->DefaultColumnFamily(), keys.size(),
|
|
2258
|
+
keys.data(), values.data(), statuses.data());
|
|
2259
|
+
ASSERT_EQ(values.size(), 3);
|
|
2260
|
+
ASSERT_EQ(statuses[0], Status::OK());
|
|
2261
|
+
ASSERT_EQ(statuses[1], Status::OK());
|
|
2262
|
+
ASSERT_EQ(statuses[2], Status::OK());
|
|
2263
|
+
ASSERT_EQ(values[0], "val_l1_" + std::to_string(33));
|
|
2264
|
+
ASSERT_EQ(values[1], "val_l2_" + std::to_string(56));
|
|
2265
|
+
ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
|
|
2266
|
+
|
|
2267
|
+
HistogramData multiget_io_batch_size;
|
|
2268
|
+
|
|
2269
|
+
statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
|
|
2270
|
+
|
|
2271
|
+
// There is only one MultiGet key in the bottommost level - 56. Thus
|
|
2272
|
+
// the bottommost level will not use async IO.
|
|
2273
|
+
ASSERT_EQ(multiget_io_batch_size.count, 1);
|
|
2274
|
+
ASSERT_EQ(multiget_io_batch_size.max, 2);
|
|
2275
|
+
}
|
|
2276
|
+
#endif // USE_COROUTINES
|
|
2277
|
+
|
|
1942
2278
|
TEST_F(DBBasicTest, MultiGetStats) {
|
|
1943
2279
|
Options options;
|
|
1944
2280
|
options.create_if_missing = true;
|
|
@@ -3308,6 +3644,11 @@ class DeadlineRandomAccessFile : public FSRandomAccessFileOwnerWrapper {
|
|
|
3308
3644
|
IOStatus MultiRead(FSReadRequest* reqs, size_t num_reqs,
|
|
3309
3645
|
const IOOptions& options, IODebugContext* dbg) override;
|
|
3310
3646
|
|
|
3647
|
+
IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts,
|
|
3648
|
+
std::function<void(const FSReadRequest&, void*)> cb,
|
|
3649
|
+
void* cb_arg, void** io_handle, IOHandleDeleter* del_fn,
|
|
3650
|
+
IODebugContext* dbg) override;
|
|
3651
|
+
|
|
3311
3652
|
private:
|
|
3312
3653
|
DeadlineFS& fs_;
|
|
3313
3654
|
std::unique_ptr<FSRandomAccessFile> file_;
|
|
@@ -3448,6 +3789,26 @@ IOStatus DeadlineRandomAccessFile::Read(uint64_t offset, size_t len,
|
|
|
3448
3789
|
return s;
|
|
3449
3790
|
}
|
|
3450
3791
|
|
|
3792
|
+
IOStatus DeadlineRandomAccessFile::ReadAsync(
|
|
3793
|
+
FSReadRequest& req, const IOOptions& opts,
|
|
3794
|
+
std::function<void(const FSReadRequest&, void*)> cb, void* cb_arg,
|
|
3795
|
+
void** io_handle, IOHandleDeleter* del_fn, IODebugContext* dbg) {
|
|
3796
|
+
const std::chrono::microseconds deadline = fs_.GetDeadline();
|
|
3797
|
+
const std::chrono::microseconds io_timeout = fs_.GetIOTimeout();
|
|
3798
|
+
IOStatus s;
|
|
3799
|
+
if (deadline.count() || io_timeout.count()) {
|
|
3800
|
+
fs_.AssertDeadline(deadline, io_timeout, opts);
|
|
3801
|
+
}
|
|
3802
|
+
if (s.ok()) {
|
|
3803
|
+
s = FSRandomAccessFileWrapper::ReadAsync(req, opts, cb, cb_arg, io_handle,
|
|
3804
|
+
del_fn, dbg);
|
|
3805
|
+
}
|
|
3806
|
+
if (s.ok()) {
|
|
3807
|
+
s = fs_.ShouldDelay(opts);
|
|
3808
|
+
}
|
|
3809
|
+
return s;
|
|
3810
|
+
}
|
|
3811
|
+
|
|
3451
3812
|
IOStatus DeadlineRandomAccessFile::MultiRead(FSReadRequest* reqs,
|
|
3452
3813
|
size_t num_reqs,
|
|
3453
3814
|
const IOOptions& options,
|
|
@@ -3469,7 +3830,8 @@ IOStatus DeadlineRandomAccessFile::MultiRead(FSReadRequest* reqs,
|
|
|
3469
3830
|
|
|
3470
3831
|
// A test class for intercepting random reads and injecting artificial
|
|
3471
3832
|
// delays. Used for testing the MultiGet deadline feature
|
|
3472
|
-
class DBBasicTestMultiGetDeadline : public DBBasicTestMultiGet
|
|
3833
|
+
class DBBasicTestMultiGetDeadline : public DBBasicTestMultiGet,
|
|
3834
|
+
public testing::WithParamInterface<bool> {
|
|
3473
3835
|
public:
|
|
3474
3836
|
DBBasicTestMultiGetDeadline()
|
|
3475
3837
|
: DBBasicTestMultiGet(
|
|
@@ -3492,7 +3854,13 @@ class DBBasicTestMultiGetDeadline : public DBBasicTestMultiGet {
|
|
|
3492
3854
|
}
|
|
3493
3855
|
};
|
|
3494
3856
|
|
|
3495
|
-
|
|
3857
|
+
TEST_P(DBBasicTestMultiGetDeadline, MultiGetDeadlineExceeded) {
|
|
3858
|
+
#ifndef USE_COROUTINES
|
|
3859
|
+
if (GetParam()) {
|
|
3860
|
+
ROCKSDB_GTEST_SKIP("This test requires coroutine support");
|
|
3861
|
+
return;
|
|
3862
|
+
}
|
|
3863
|
+
#endif // USE_COROUTINES
|
|
3496
3864
|
std::shared_ptr<DeadlineFS> fs = std::make_shared<DeadlineFS>(env_, false);
|
|
3497
3865
|
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
3498
3866
|
Options options = CurrentOptions();
|
|
@@ -3523,6 +3891,7 @@ TEST_F(DBBasicTestMultiGetDeadline, MultiGetDeadlineExceeded) {
|
|
|
3523
3891
|
|
|
3524
3892
|
ReadOptions ro;
|
|
3525
3893
|
ro.deadline = std::chrono::microseconds{env->NowMicros() + 10000};
|
|
3894
|
+
ro.async_io = GetParam();
|
|
3526
3895
|
// Delay the first IO
|
|
3527
3896
|
fs->SetDelayTrigger(ro.deadline, ro.io_timeout, 0);
|
|
3528
3897
|
|
|
@@ -3625,6 +3994,9 @@ TEST_F(DBBasicTestMultiGetDeadline, MultiGetDeadlineExceeded) {
|
|
|
3625
3994
|
Close();
|
|
3626
3995
|
}
|
|
3627
3996
|
|
|
3997
|
+
INSTANTIATE_TEST_CASE_P(DeadlineIO, DBBasicTestMultiGetDeadline,
|
|
3998
|
+
::testing::Bool());
|
|
3999
|
+
|
|
3628
4000
|
TEST_F(DBBasicTest, ManifestWriteFailure) {
|
|
3629
4001
|
Options options = GetDefaultOptions();
|
|
3630
4002
|
options.create_if_missing = true;
|
|
@@ -3783,7 +4155,7 @@ TEST_P(DBBasicTestDeadline, PointLookupDeadline) {
|
|
|
3783
4155
|
|
|
3784
4156
|
Random rnd(301);
|
|
3785
4157
|
for (int i = 0; i < 400; ++i) {
|
|
3786
|
-
std::string key = "k" +
|
|
4158
|
+
std::string key = "k" + std::to_string(i);
|
|
3787
4159
|
ASSERT_OK(Put(key, rnd.RandomString(100)));
|
|
3788
4160
|
}
|
|
3789
4161
|
ASSERT_OK(Flush());
|
|
@@ -3866,7 +4238,7 @@ TEST_P(DBBasicTestDeadline, IteratorDeadline) {
|
|
|
3866
4238
|
|
|
3867
4239
|
Random rnd(301);
|
|
3868
4240
|
for (int i = 0; i < 400; ++i) {
|
|
3869
|
-
std::string key = "k" +
|
|
4241
|
+
std::string key = "k" + std::to_string(i);
|
|
3870
4242
|
ASSERT_OK(Put(key, rnd.RandomString(100)));
|
|
3871
4243
|
}
|
|
3872
4244
|
ASSERT_OK(Flush());
|