@nxtedition/rocksdb 15.4.0 → 15.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +24 -19
- package/cache.js +1 -1
- package/chained-batch.js +12 -3
- 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 +11 -2
- package/iterator.js +15 -7
- 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
|
@@ -105,7 +105,7 @@ class TestCompactionListener : public EventListener {
|
|
|
105
105
|
ASSERT_EQ(ci.output_files.size(), ci.output_file_infos.size());
|
|
106
106
|
|
|
107
107
|
ASSERT_TRUE(test_);
|
|
108
|
-
ASSERT_EQ(test_->db_, db);
|
|
108
|
+
ASSERT_EQ(test_->db_.get(), db);
|
|
109
109
|
|
|
110
110
|
std::vector<std::vector<FileMetaData>> files_by_level;
|
|
111
111
|
test_->dbfull()->TEST_GetFilesMetaData(test_->handles_[ci.cf_id],
|
|
@@ -197,7 +197,7 @@ TEST_F(EventListenerTest, OnSingleDBCompactionTest) {
|
|
|
197
197
|
|
|
198
198
|
ASSERT_EQ(listener->compacted_dbs_.size(), cf_names.size());
|
|
199
199
|
for (size_t i = 0; i < cf_names.size(); ++i) {
|
|
200
|
-
ASSERT_EQ(listener->compacted_dbs_[i], db_);
|
|
200
|
+
ASSERT_EQ(listener->compacted_dbs_[i], db_.get());
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
|
|
@@ -268,7 +268,7 @@ class TestFlushListener : public EventListener {
|
|
|
268
268
|
// that assumption does not hold (see the test case MultiDBMultiListeners
|
|
269
269
|
// below).
|
|
270
270
|
ASSERT_TRUE(test_);
|
|
271
|
-
if (db == test_->db_) {
|
|
271
|
+
if (db == test_->db_.get()) {
|
|
272
272
|
std::vector<std::vector<FileMetaData>> files_by_level;
|
|
273
273
|
ASSERT_LT(info.cf_id, test_->handles_.size());
|
|
274
274
|
ASSERT_GE(info.cf_id, 0u);
|
|
@@ -343,7 +343,7 @@ TEST_F(EventListenerTest, OnSingleDBFlushTest) {
|
|
|
343
343
|
|
|
344
344
|
// make sure callback functions are called in the right order
|
|
345
345
|
for (size_t i = 0; i < cf_names.size(); ++i) {
|
|
346
|
-
ASSERT_EQ(listener->flushed_dbs_[i], db_);
|
|
346
|
+
ASSERT_EQ(listener->flushed_dbs_[i], db_.get());
|
|
347
347
|
ASSERT_EQ(listener->flushed_column_family_names_[i], cf_names[i]);
|
|
348
348
|
}
|
|
349
349
|
}
|
|
@@ -387,7 +387,7 @@ TEST_F(EventListenerTest, MultiCF) {
|
|
|
387
387
|
// make sure callback functions are called in the right order
|
|
388
388
|
if (i == 7) {
|
|
389
389
|
for (size_t j = 0; j < cf_names.size(); j++) {
|
|
390
|
-
ASSERT_EQ(listener->flushed_dbs_[j], db_);
|
|
390
|
+
ASSERT_EQ(listener->flushed_dbs_[j], db_.get());
|
|
391
391
|
ASSERT_EQ(listener->flushed_column_family_names_[j], cf_names[j]);
|
|
392
392
|
}
|
|
393
393
|
}
|
|
@@ -422,22 +422,21 @@ TEST_F(EventListenerTest, MultiDBMultiListeners) {
|
|
|
422
422
|
DBOptions db_opts(options);
|
|
423
423
|
ColumnFamilyOptions cf_opts(options);
|
|
424
424
|
|
|
425
|
-
std::vector<DB
|
|
425
|
+
std::vector<std::unique_ptr<DB>> dbs;
|
|
426
426
|
std::vector<std::vector<ColumnFamilyHandle*>> vec_handles;
|
|
427
427
|
|
|
428
428
|
for (int d = 0; d < kNumDBs; ++d) {
|
|
429
429
|
ASSERT_OK(DestroyDB(dbname_ + std::to_string(d), options));
|
|
430
|
-
|
|
430
|
+
ASSERT_OK(
|
|
431
|
+
DB::Open(options, dbname_ + std::to_string(d), &dbs.emplace_back()));
|
|
431
432
|
std::vector<ColumnFamilyHandle*> handles;
|
|
432
|
-
ASSERT_OK(DB::Open(options, dbname_ + std::to_string(d), &db));
|
|
433
433
|
for (size_t c = 0; c < cf_names.size(); ++c) {
|
|
434
434
|
ColumnFamilyHandle* handle;
|
|
435
|
-
ASSERT_OK(
|
|
435
|
+
ASSERT_OK(dbs.back()->CreateColumnFamily(cf_opts, cf_names[c], &handle));
|
|
436
436
|
handles.push_back(handle);
|
|
437
437
|
}
|
|
438
438
|
|
|
439
439
|
vec_handles.push_back(std::move(handles));
|
|
440
|
-
dbs.push_back(db);
|
|
441
440
|
}
|
|
442
441
|
|
|
443
442
|
for (int d = 0; d < kNumDBs; ++d) {
|
|
@@ -450,23 +449,23 @@ TEST_F(EventListenerTest, MultiDBMultiListeners) {
|
|
|
450
449
|
for (size_t c = 0; c < cf_names.size(); ++c) {
|
|
451
450
|
for (int d = 0; d < kNumDBs; ++d) {
|
|
452
451
|
ASSERT_OK(dbs[d]->Flush(FlushOptions(), vec_handles[d][c]));
|
|
453
|
-
ASSERT_OK(
|
|
454
|
-
|
|
452
|
+
ASSERT_OK(static_cast_with_check<DBImpl>(dbs[d].get())
|
|
453
|
+
->TEST_WaitForFlushMemTable());
|
|
455
454
|
}
|
|
456
455
|
}
|
|
457
456
|
|
|
458
457
|
for (int d = 0; d < kNumDBs; ++d) {
|
|
459
458
|
// Ensure background work is fully finished including listener callbacks
|
|
460
459
|
// before accessing listener state.
|
|
461
|
-
ASSERT_OK(
|
|
462
|
-
|
|
460
|
+
ASSERT_OK(static_cast_with_check<DBImpl>(dbs[d].get())
|
|
461
|
+
->TEST_WaitForBackgroundWork());
|
|
463
462
|
}
|
|
464
463
|
|
|
465
464
|
for (auto* listener : listeners) {
|
|
466
465
|
int pos = 0;
|
|
467
466
|
for (size_t c = 0; c < cf_names.size(); ++c) {
|
|
468
467
|
for (int d = 0; d < kNumDBs; ++d) {
|
|
469
|
-
ASSERT_EQ(listener->flushed_dbs_[pos], dbs[d]);
|
|
468
|
+
ASSERT_EQ(listener->flushed_dbs_[pos], dbs[d].get());
|
|
470
469
|
ASSERT_EQ(listener->flushed_column_family_names_[pos], cf_names[c]);
|
|
471
470
|
pos++;
|
|
472
471
|
}
|
|
@@ -481,8 +480,8 @@ TEST_F(EventListenerTest, MultiDBMultiListeners) {
|
|
|
481
480
|
}
|
|
482
481
|
vec_handles.clear();
|
|
483
482
|
|
|
484
|
-
for (auto db : dbs) {
|
|
485
|
-
|
|
483
|
+
for (auto& db : dbs) {
|
|
484
|
+
db.reset();
|
|
486
485
|
}
|
|
487
486
|
}
|
|
488
487
|
|
|
@@ -1309,16 +1308,21 @@ class BlobDBJobLevelEventListenerTest : public EventListener {
|
|
|
1309
1308
|
explicit BlobDBJobLevelEventListenerTest(EventListenerTest* test)
|
|
1310
1309
|
: test_(test), call_count_(0) {}
|
|
1311
1310
|
|
|
1312
|
-
|
|
1313
|
-
|
|
1311
|
+
// NOTE: it's not safe to rely on test_->db_ for these functions because
|
|
1312
|
+
// the DB may be in the process of closing when these are called, and the
|
|
1313
|
+
// unique_ptr is set to nullptr before invoking ~DB()
|
|
1314
|
+
|
|
1315
|
+
const VersionStorageInfo* GetVersionStorageInfo(DB* db) const {
|
|
1316
|
+
DBImpl* db_impl = static_cast_with_check<DBImpl>(db);
|
|
1317
|
+
VersionSet* const versions = db_impl->GetVersionSet();
|
|
1314
1318
|
assert(versions);
|
|
1315
1319
|
|
|
1316
1320
|
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
1317
1321
|
EXPECT_NE(cfd, nullptr);
|
|
1318
1322
|
|
|
1319
|
-
|
|
1323
|
+
db_impl->TEST_LockMutex();
|
|
1320
1324
|
Version* const current = cfd->current();
|
|
1321
|
-
|
|
1325
|
+
db_impl->TEST_UnlockMutex();
|
|
1322
1326
|
EXPECT_NE(current, nullptr);
|
|
1323
1327
|
|
|
1324
1328
|
const VersionStorageInfo* const storage_info = current->storage_info();
|
|
@@ -1328,8 +1332,9 @@ class BlobDBJobLevelEventListenerTest : public EventListener {
|
|
|
1328
1332
|
}
|
|
1329
1333
|
|
|
1330
1334
|
void CheckBlobFileAdditions(
|
|
1335
|
+
DB* db,
|
|
1331
1336
|
const std::vector<BlobFileAdditionInfo>& blob_file_addition_infos) const {
|
|
1332
|
-
const auto* vstorage = GetVersionStorageInfo();
|
|
1337
|
+
const auto* vstorage = GetVersionStorageInfo(db);
|
|
1333
1338
|
|
|
1334
1339
|
EXPECT_FALSE(blob_file_addition_infos.empty());
|
|
1335
1340
|
|
|
@@ -1357,7 +1362,7 @@ class BlobDBJobLevelEventListenerTest : public EventListener {
|
|
|
1357
1362
|
return result;
|
|
1358
1363
|
}
|
|
1359
1364
|
|
|
1360
|
-
void OnFlushCompleted(DB*
|
|
1365
|
+
void OnFlushCompleted(DB* db, const FlushJobInfo& info) override {
|
|
1361
1366
|
{
|
|
1362
1367
|
std::lock_guard<std::mutex> lock(mutex_);
|
|
1363
1368
|
IncreaseCallCount(/*mutex_locked*/ true);
|
|
@@ -1366,16 +1371,15 @@ class BlobDBJobLevelEventListenerTest : public EventListener {
|
|
|
1366
1371
|
|
|
1367
1372
|
EXPECT_EQ(info.blob_compression_type, kNoCompression);
|
|
1368
1373
|
|
|
1369
|
-
CheckBlobFileAdditions(info.blob_file_addition_infos);
|
|
1374
|
+
CheckBlobFileAdditions(db, info.blob_file_addition_infos);
|
|
1370
1375
|
}
|
|
1371
1376
|
|
|
1372
|
-
void OnCompactionCompleted(DB*
|
|
1373
|
-
const CompactionJobInfo& info) override {
|
|
1377
|
+
void OnCompactionCompleted(DB* db, const CompactionJobInfo& info) override {
|
|
1374
1378
|
IncreaseCallCount(/*mutex_locked*/ false);
|
|
1375
1379
|
|
|
1376
1380
|
EXPECT_EQ(info.blob_compression_type, kNoCompression);
|
|
1377
1381
|
|
|
1378
|
-
CheckBlobFileAdditions(info.blob_file_addition_infos);
|
|
1382
|
+
CheckBlobFileAdditions(db, info.blob_file_addition_infos);
|
|
1379
1383
|
|
|
1380
1384
|
EXPECT_FALSE(info.blob_file_garbage_infos.empty());
|
|
1381
1385
|
|
|
@@ -1639,6 +1643,129 @@ TEST_F(EventListenerTest, BlobDBFileTest) {
|
|
|
1639
1643
|
blob_event_listener->CheckCounters();
|
|
1640
1644
|
}
|
|
1641
1645
|
|
|
1646
|
+
class BackgroundJobPressureTestListener : public EventListener {
|
|
1647
|
+
public:
|
|
1648
|
+
void OnBackgroundJobPressureChanged(
|
|
1649
|
+
DB* /*db*/, const BackgroundJobPressure& snapshot) override {
|
|
1650
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
1651
|
+
snapshots_.push_back(snapshot);
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
std::vector<BackgroundJobPressure> GetSnapshots() {
|
|
1655
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
1656
|
+
return snapshots_;
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1659
|
+
void Reset() {
|
|
1660
|
+
std::lock_guard<std::mutex> lock(mu_);
|
|
1661
|
+
snapshots_.clear();
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
private:
|
|
1665
|
+
std::mutex mu_;
|
|
1666
|
+
std::vector<BackgroundJobPressure> snapshots_;
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1669
|
+
TEST_F(EventListenerTest, BackgroundJobPressure) {
|
|
1670
|
+
auto listener = std::make_shared<BackgroundJobPressureTestListener>();
|
|
1671
|
+
Options options = CurrentOptions();
|
|
1672
|
+
options.create_if_missing = true;
|
|
1673
|
+
options.max_background_jobs = 8;
|
|
1674
|
+
options.disable_auto_compactions = false;
|
|
1675
|
+
options.level0_slowdown_writes_trigger = 4;
|
|
1676
|
+
options.level0_stop_writes_trigger = 100;
|
|
1677
|
+
options.level0_file_num_compaction_trigger = 4;
|
|
1678
|
+
options.listeners.push_back(listener);
|
|
1679
|
+
DestroyAndReopen(options);
|
|
1680
|
+
|
|
1681
|
+
// Structural invariant checked on every snapshot.
|
|
1682
|
+
auto CheckInvariants = [](const std::vector<BackgroundJobPressure>& snaps) {
|
|
1683
|
+
ASSERT_GT(snaps.size(), 0u);
|
|
1684
|
+
for (const auto& s : snaps) {
|
|
1685
|
+
ASSERT_EQ(s.compaction_scheduled,
|
|
1686
|
+
s.compaction_low_scheduled + s.compaction_bottom_scheduled);
|
|
1687
|
+
ASSERT_EQ(s.compaction_running,
|
|
1688
|
+
s.compaction_low_running + s.compaction_bottom_running);
|
|
1689
|
+
}
|
|
1690
|
+
};
|
|
1691
|
+
|
|
1692
|
+
// Block compaction so L0 files accumulate.
|
|
1693
|
+
env_->SetBackgroundThreads(1, Env::Priority::LOW);
|
|
1694
|
+
test::SleepingBackgroundTask sleeping_task;
|
|
1695
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task,
|
|
1696
|
+
Env::Priority::LOW);
|
|
1697
|
+
sleeping_task.WaitUntilSleeping();
|
|
1698
|
+
|
|
1699
|
+
// Phase 1: No pressure — 3 SST files (below slowdown trigger=4).
|
|
1700
|
+
for (int i = 0; i < 3; i++) {
|
|
1701
|
+
ASSERT_OK(Put("k" + std::to_string(i), std::string(100, 'x')));
|
|
1702
|
+
ASSERT_OK(Flush());
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
auto snapshots = listener->GetSnapshots();
|
|
1706
|
+
CheckInvariants(snapshots);
|
|
1707
|
+
for (const auto& s : snapshots) {
|
|
1708
|
+
ASSERT_EQ(s.compaction_running, 0);
|
|
1709
|
+
ASSERT_EQ(s.compaction_scheduled, 0);
|
|
1710
|
+
ASSERT_FALSE(s.compaction_speedup_active);
|
|
1711
|
+
ASSERT_LT(s.write_stall_proximity_pct, 100);
|
|
1712
|
+
}
|
|
1713
|
+
// Note: we don't assert flush_running/flush_scheduled == 0 here because
|
|
1714
|
+
// MaybeScheduleFlushOrCompaction() runs before the pressure callback and
|
|
1715
|
+
// may schedule new flush work, making flush counts non-deterministic.
|
|
1716
|
+
|
|
1717
|
+
// Phase 2: Build pressure — flush past slowdown trigger (4 L0 SST files).
|
|
1718
|
+
// Compaction is blocked, so L0 SST files pile up.
|
|
1719
|
+
listener->Reset();
|
|
1720
|
+
{
|
|
1721
|
+
FlushOptions fo;
|
|
1722
|
+
fo.allow_write_stall = true;
|
|
1723
|
+
for (int i = 3; i < 10; i++) {
|
|
1724
|
+
ASSERT_OK(Put("k" + std::to_string(i), std::string(100, 'x')));
|
|
1725
|
+
ASSERT_OK(db_->Flush(fo));
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1729
|
+
snapshots = listener->GetSnapshots();
|
|
1730
|
+
CheckInvariants(snapshots);
|
|
1731
|
+
for (const auto& s : snapshots) {
|
|
1732
|
+
ASSERT_EQ(s.compaction_running, 0);
|
|
1733
|
+
}
|
|
1734
|
+
// Scan history: pressure indicators appear as L0 SST files accumulate
|
|
1735
|
+
bool found_speedup = false;
|
|
1736
|
+
bool found_compaction_scheduled = false;
|
|
1737
|
+
bool found_high_proximity = false;
|
|
1738
|
+
for (const auto& s : snapshots) {
|
|
1739
|
+
if (s.compaction_speedup_active) {
|
|
1740
|
+
found_speedup = true;
|
|
1741
|
+
}
|
|
1742
|
+
if (s.compaction_scheduled > 0) {
|
|
1743
|
+
found_compaction_scheduled = true;
|
|
1744
|
+
}
|
|
1745
|
+
if (s.write_stall_proximity_pct >= 100) {
|
|
1746
|
+
found_high_proximity = true;
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
ASSERT_TRUE(found_speedup);
|
|
1750
|
+
ASSERT_TRUE(found_compaction_scheduled);
|
|
1751
|
+
ASSERT_TRUE(found_high_proximity);
|
|
1752
|
+
|
|
1753
|
+
// Phase 3: Relieve pressure — unblock compaction, wait for completion.
|
|
1754
|
+
listener->Reset();
|
|
1755
|
+
sleeping_task.WakeUp();
|
|
1756
|
+
sleeping_task.WaitUntilDone();
|
|
1757
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1758
|
+
|
|
1759
|
+
snapshots = listener->GetSnapshots();
|
|
1760
|
+
CheckInvariants(snapshots);
|
|
1761
|
+
// Latest: all compactions finished, healthy
|
|
1762
|
+
const auto& latest3 = snapshots.back();
|
|
1763
|
+
ASSERT_EQ(latest3.compaction_running, 0);
|
|
1764
|
+
ASSERT_EQ(latest3.compaction_scheduled, 0);
|
|
1765
|
+
ASSERT_FALSE(latest3.compaction_speedup_active);
|
|
1766
|
+
ASSERT_LT(latest3.write_stall_proximity_pct, 100);
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1642
1769
|
} // namespace ROCKSDB_NAMESPACE
|
|
1643
1770
|
|
|
1644
1771
|
int main(int argc, char** argv) {
|
|
@@ -98,7 +98,7 @@ class LogCompactionFilter : public CompactionFilter {
|
|
|
98
98
|
|
|
99
99
|
TEST_F(ManualCompactionTest, CompactTouchesAllKeys) {
|
|
100
100
|
for (int iter = 0; iter < 2; ++iter) {
|
|
101
|
-
DB
|
|
101
|
+
std::unique_ptr<DB> db;
|
|
102
102
|
Options options;
|
|
103
103
|
if (iter == 0) { // level compaction
|
|
104
104
|
options.num_levels = 3;
|
|
@@ -128,7 +128,7 @@ TEST_F(ManualCompactionTest, CompactTouchesAllKeys) {
|
|
|
128
128
|
delete itr;
|
|
129
129
|
|
|
130
130
|
delete options.compaction_filter;
|
|
131
|
-
|
|
131
|
+
db.reset();
|
|
132
132
|
ASSERT_OK(DestroyDB(dbname_, options));
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -137,7 +137,7 @@ TEST_F(ManualCompactionTest, Test) {
|
|
|
137
137
|
// Open database. Disable compression since it affects the creation
|
|
138
138
|
// of layers and the code below is trying to test against a very
|
|
139
139
|
// specific scenario.
|
|
140
|
-
DB
|
|
140
|
+
std::unique_ptr<DB> db;
|
|
141
141
|
Options db_options;
|
|
142
142
|
db_options.write_buffer_size = 1024;
|
|
143
143
|
db_options.create_if_missing = true;
|
|
@@ -185,12 +185,12 @@ TEST_F(ManualCompactionTest, Test) {
|
|
|
185
185
|
ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys";
|
|
186
186
|
|
|
187
187
|
// close database
|
|
188
|
-
|
|
188
|
+
db.reset();
|
|
189
189
|
ASSERT_OK(DestroyDB(dbname_, Options()));
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
TEST_F(ManualCompactionTest, SkipLevel) {
|
|
193
|
-
DB
|
|
193
|
+
std::unique_ptr<DB> db;
|
|
194
194
|
Options options;
|
|
195
195
|
options.level_compaction_dynamic_level_bytes = false;
|
|
196
196
|
options.num_levels = 3;
|
|
@@ -298,7 +298,7 @@ TEST_F(ManualCompactionTest, SkipLevel) {
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
delete filter;
|
|
301
|
-
|
|
301
|
+
db.reset();
|
|
302
302
|
ASSERT_OK(DestroyDB(dbname_, options));
|
|
303
303
|
}
|
|
304
304
|
|
|
@@ -72,7 +72,9 @@ ImmutableMemTableOptions::ImmutableMemTableOptions(
|
|
|
72
72
|
allow_data_in_errors(ioptions.allow_data_in_errors),
|
|
73
73
|
paranoid_memory_checks(mutable_cf_options.paranoid_memory_checks),
|
|
74
74
|
memtable_veirfy_per_key_checksum_on_seek(
|
|
75
|
-
mutable_cf_options.memtable_veirfy_per_key_checksum_on_seek)
|
|
75
|
+
mutable_cf_options.memtable_veirfy_per_key_checksum_on_seek),
|
|
76
|
+
memtable_batch_lookup_optimization(
|
|
77
|
+
ioptions.memtable_batch_lookup_optimization) {}
|
|
76
78
|
|
|
77
79
|
MemTable::MemTable(const InternalKeyComparator& cmp,
|
|
78
80
|
const ImmutableOptions& ioptions,
|
|
@@ -1575,65 +1577,179 @@ void MemTable::MultiGet(const ReadOptions& read_options, MultiGetRange* range,
|
|
|
1575
1577
|
}
|
|
1576
1578
|
}
|
|
1577
1579
|
}
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1580
|
+
|
|
1581
|
+
// Use batch lookup optimization when enabled
|
|
1582
|
+
bool use_batch_optimization = moptions_.memtable_batch_lookup_optimization;
|
|
1583
|
+
bool validate = moptions_.paranoid_memory_checks ||
|
|
1584
|
+
moptions_.memtable_veirfy_per_key_checksum_on_seek;
|
|
1585
|
+
|
|
1586
|
+
if (use_batch_optimization) {
|
|
1587
|
+
// Phase 1: Handle range tombstones and set up Savers for batched lookup
|
|
1588
|
+
std::array<Saver, MultiGetContext::MAX_BATCH_SIZE> savers{};
|
|
1589
|
+
std::array<const char*, MultiGetContext::MAX_BATCH_SIZE> memtable_keys{};
|
|
1590
|
+
std::array<void*, MultiGetContext::MAX_BATCH_SIZE> callback_args{};
|
|
1591
|
+
std::array<bool, MultiGetContext::MAX_BATCH_SIZE> found_final_values{};
|
|
1592
|
+
std::array<bool, MultiGetContext::MAX_BATCH_SIZE> merge_in_progresses{};
|
|
1593
|
+
size_t num_keys = 0;
|
|
1594
|
+
|
|
1595
|
+
for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) {
|
|
1596
|
+
if (!no_range_del) {
|
|
1597
|
+
std::unique_ptr<FragmentedRangeTombstoneIterator> range_del_iter(
|
|
1598
|
+
NewRangeTombstoneIteratorInternal(
|
|
1599
|
+
read_options, GetInternalKeySeqno(iter->lkey->internal_key()),
|
|
1600
|
+
immutable_memtable));
|
|
1601
|
+
SequenceNumber covering_seq =
|
|
1602
|
+
range_del_iter->MaxCoveringTombstoneSeqnum(iter->lkey->user_key());
|
|
1603
|
+
if (covering_seq > iter->max_covering_tombstone_seq) {
|
|
1604
|
+
iter->max_covering_tombstone_seq = covering_seq;
|
|
1605
|
+
if (iter->timestamp) {
|
|
1606
|
+
iter->timestamp->assign(range_del_iter->timestamp().data(),
|
|
1607
|
+
range_del_iter->timestamp().size());
|
|
1608
|
+
}
|
|
1595
1609
|
}
|
|
1596
1610
|
}
|
|
1611
|
+
|
|
1612
|
+
found_final_values[num_keys] = false;
|
|
1613
|
+
merge_in_progresses[num_keys] = iter->s->IsMergeInProgress();
|
|
1614
|
+
Saver& saver = savers[num_keys];
|
|
1615
|
+
saver.status = iter->s;
|
|
1616
|
+
saver.found_final_value = &found_final_values[num_keys];
|
|
1617
|
+
saver.merge_in_progress = &merge_in_progresses[num_keys];
|
|
1618
|
+
saver.key = iter->lkey;
|
|
1619
|
+
saver.value = iter->value ? iter->value->GetSelf() : nullptr;
|
|
1620
|
+
saver.columns = iter->columns;
|
|
1621
|
+
saver.timestamp = iter->timestamp;
|
|
1622
|
+
saver.seq = kMaxSequenceNumber;
|
|
1623
|
+
saver.mem = this;
|
|
1624
|
+
saver.merge_context = &(iter->merge_context);
|
|
1625
|
+
saver.max_covering_tombstone_seq = iter->max_covering_tombstone_seq;
|
|
1626
|
+
saver.merge_operator = moptions_.merge_operator;
|
|
1627
|
+
saver.logger = moptions_.info_log;
|
|
1628
|
+
saver.inplace_update_support = moptions_.inplace_update_support;
|
|
1629
|
+
saver.statistics = moptions_.statistics;
|
|
1630
|
+
saver.clock = clock_;
|
|
1631
|
+
saver.callback_ = callback;
|
|
1632
|
+
saver.is_blob_index = &iter->is_blob_index;
|
|
1633
|
+
saver.do_merge = true;
|
|
1634
|
+
saver.allow_data_in_errors = moptions_.allow_data_in_errors;
|
|
1635
|
+
saver.protection_bytes_per_key = moptions_.protection_bytes_per_key;
|
|
1636
|
+
|
|
1637
|
+
memtable_keys[num_keys] = iter->lkey->memtable_key().data();
|
|
1638
|
+
callback_args[num_keys] = &savers[num_keys];
|
|
1639
|
+
num_keys++;
|
|
1597
1640
|
}
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
if (
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1641
|
+
|
|
1642
|
+
// Phase 2: Batched lookup
|
|
1643
|
+
if (num_keys > 0) {
|
|
1644
|
+
Status check_s =
|
|
1645
|
+
table_->MultiGet(num_keys, memtable_keys.data(), callback_args.data(),
|
|
1646
|
+
SaveValue, moptions_.allow_data_in_errors,
|
|
1647
|
+
validate ? moptions_.paranoid_memory_checks : false,
|
|
1648
|
+
validate ? key_validation_callback_ : nullptr);
|
|
1649
|
+
if (check_s.IsCorruption()) {
|
|
1650
|
+
// Mark all remaining keys as corruption
|
|
1651
|
+
for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) {
|
|
1652
|
+
*(iter->s) = check_s;
|
|
1653
|
+
range->MarkKeyDone(iter);
|
|
1654
|
+
}
|
|
1655
|
+
return;
|
|
1610
1656
|
}
|
|
1611
1657
|
}
|
|
1612
1658
|
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1659
|
+
// Phase 3: Process results
|
|
1660
|
+
size_t result_idx = 0;
|
|
1661
|
+
for (auto iter = temp_range.begin(); iter != temp_range.end();
|
|
1662
|
+
++iter, ++result_idx) {
|
|
1663
|
+
bool found_final_value = found_final_values[result_idx];
|
|
1664
|
+
bool merge_in_progress = merge_in_progresses[result_idx];
|
|
1665
|
+
|
|
1666
|
+
if (!found_final_value && merge_in_progress) {
|
|
1667
|
+
if (iter->s->ok()) {
|
|
1668
|
+
*(iter->s) = Status::MergeInProgress();
|
|
1669
|
+
} else {
|
|
1670
|
+
assert(iter->s->IsMergeInProgress());
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1674
|
+
if (found_final_value ||
|
|
1675
|
+
(!iter->s->ok() && !iter->s->IsMergeInProgress())) {
|
|
1676
|
+
assert(found_final_value);
|
|
1677
|
+
if (iter->value) {
|
|
1678
|
+
iter->value->PinSelf();
|
|
1679
|
+
range->AddValueSize(iter->value->size());
|
|
1680
|
+
} else {
|
|
1681
|
+
assert(iter->columns);
|
|
1682
|
+
range->AddValueSize(iter->columns->serialized_size());
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
range->MarkKeyDone(iter);
|
|
1686
|
+
RecordTick(moptions_.statistics, MEMTABLE_HIT);
|
|
1687
|
+
if (range->GetValueSize() > read_options.value_size_soft_limit) {
|
|
1688
|
+
for (auto range_iter = range->begin(); range_iter != range->end();
|
|
1689
|
+
++range_iter) {
|
|
1690
|
+
range->MarkKeyDone(range_iter);
|
|
1691
|
+
*(range_iter->s) = Status::Aborted();
|
|
1692
|
+
}
|
|
1693
|
+
break;
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
} else {
|
|
1698
|
+
// Per-key lookup path
|
|
1699
|
+
for (auto iter = temp_range.begin(); iter != temp_range.end(); ++iter) {
|
|
1700
|
+
bool found_final_value{false};
|
|
1701
|
+
bool merge_in_progress = iter->s->IsMergeInProgress();
|
|
1702
|
+
if (!no_range_del) {
|
|
1703
|
+
std::unique_ptr<FragmentedRangeTombstoneIterator> range_del_iter(
|
|
1704
|
+
NewRangeTombstoneIteratorInternal(
|
|
1705
|
+
read_options, GetInternalKeySeqno(iter->lkey->internal_key()),
|
|
1706
|
+
immutable_memtable));
|
|
1707
|
+
SequenceNumber covering_seq =
|
|
1708
|
+
range_del_iter->MaxCoveringTombstoneSeqnum(iter->lkey->user_key());
|
|
1709
|
+
if (covering_seq > iter->max_covering_tombstone_seq) {
|
|
1710
|
+
iter->max_covering_tombstone_seq = covering_seq;
|
|
1711
|
+
if (iter->timestamp) {
|
|
1712
|
+
iter->timestamp->assign(range_del_iter->timestamp().data(),
|
|
1713
|
+
range_del_iter->timestamp().size());
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
SequenceNumber dummy_seq;
|
|
1718
|
+
GetFromTable(
|
|
1719
|
+
*(iter->lkey), iter->max_covering_tombstone_seq, true, callback,
|
|
1720
|
+
&iter->is_blob_index, iter->value ? iter->value->GetSelf() : nullptr,
|
|
1721
|
+
iter->columns, iter->timestamp, iter->s, &(iter->merge_context),
|
|
1722
|
+
&dummy_seq, &found_final_value, &merge_in_progress);
|
|
1723
|
+
|
|
1724
|
+
if (!found_final_value && merge_in_progress) {
|
|
1725
|
+
if (iter->s->ok()) {
|
|
1726
|
+
*(iter->s) = Status::MergeInProgress();
|
|
1727
|
+
} else {
|
|
1728
|
+
assert(iter->s->IsMergeInProgress());
|
|
1729
|
+
}
|
|
1625
1730
|
}
|
|
1626
1731
|
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1732
|
+
if (found_final_value ||
|
|
1733
|
+
(!iter->s->ok() && !iter->s->IsMergeInProgress())) {
|
|
1734
|
+
assert(found_final_value);
|
|
1735
|
+
if (iter->value) {
|
|
1736
|
+
iter->value->PinSelf();
|
|
1737
|
+
range->AddValueSize(iter->value->size());
|
|
1738
|
+
} else {
|
|
1739
|
+
assert(iter->columns);
|
|
1740
|
+
range->AddValueSize(iter->columns->serialized_size());
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
range->MarkKeyDone(iter);
|
|
1744
|
+
RecordTick(moptions_.statistics, MEMTABLE_HIT);
|
|
1745
|
+
if (range->GetValueSize() > read_options.value_size_soft_limit) {
|
|
1746
|
+
for (auto range_iter = range->begin(); range_iter != range->end();
|
|
1747
|
+
++range_iter) {
|
|
1748
|
+
range->MarkKeyDone(range_iter);
|
|
1749
|
+
*(range_iter->s) = Status::Aborted();
|
|
1750
|
+
}
|
|
1751
|
+
break;
|
|
1635
1752
|
}
|
|
1636
|
-
break;
|
|
1637
1753
|
}
|
|
1638
1754
|
}
|
|
1639
1755
|
}
|
|
@@ -1841,6 +1957,36 @@ void MemTableRep::Get(const LookupKey& k, void* callback_args,
|
|
|
1841
1957
|
}
|
|
1842
1958
|
}
|
|
1843
1959
|
|
|
1960
|
+
Status MemTableRep::MultiGet(
|
|
1961
|
+
size_t num_keys, const char* const* keys, void** callback_args,
|
|
1962
|
+
bool (*callback_func)(void* arg, const char* entry),
|
|
1963
|
+
bool allow_data_in_errors, bool detect_key_out_of_order,
|
|
1964
|
+
const std::function<Status(const char*, bool)>& key_validation_callback) {
|
|
1965
|
+
bool validate = detect_key_out_of_order || key_validation_callback != nullptr;
|
|
1966
|
+
std::unique_ptr<Iterator> iter(GetIterator());
|
|
1967
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
1968
|
+
Slice dummy;
|
|
1969
|
+
if (validate) {
|
|
1970
|
+
Status s = iter->SeekAndValidate(dummy, keys[i], allow_data_in_errors,
|
|
1971
|
+
detect_key_out_of_order,
|
|
1972
|
+
key_validation_callback);
|
|
1973
|
+
for (; iter->Valid() && s.ok() &&
|
|
1974
|
+
callback_func(callback_args[i], iter->key());
|
|
1975
|
+
s = iter->NextAndValidate(allow_data_in_errors)) {
|
|
1976
|
+
}
|
|
1977
|
+
if (!s.ok()) {
|
|
1978
|
+
return s;
|
|
1979
|
+
}
|
|
1980
|
+
} else {
|
|
1981
|
+
iter->Seek(dummy, keys[i]);
|
|
1982
|
+
for (; iter->Valid() && callback_func(callback_args[i], iter->key());
|
|
1983
|
+
iter->Next()) {
|
|
1984
|
+
}
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
return Status::OK();
|
|
1988
|
+
}
|
|
1989
|
+
|
|
1844
1990
|
void MemTable::RefLogContainingPrepSection(uint64_t log) {
|
|
1845
1991
|
assert(log > 0);
|
|
1846
1992
|
auto cur = min_prep_log_referenced_.load();
|
|
@@ -65,6 +65,7 @@ struct ImmutableMemTableOptions {
|
|
|
65
65
|
bool allow_data_in_errors;
|
|
66
66
|
bool paranoid_memory_checks;
|
|
67
67
|
bool memtable_veirfy_per_key_checksum_on_seek;
|
|
68
|
+
bool memtable_batch_lookup_optimization;
|
|
68
69
|
};
|
|
69
70
|
|
|
70
71
|
// Batched counters to updated when inserting keys in one write batch.
|
|
@@ -599,6 +600,11 @@ class MemTable final : public ReadOnlyMemTable {
|
|
|
599
600
|
std::memory_order_relaxed);
|
|
600
601
|
}
|
|
601
602
|
|
|
603
|
+
// Returns true if a flush has already been scheduled for this memtable
|
|
604
|
+
bool HasFlushScheduled() const {
|
|
605
|
+
return flush_state_.load(std::memory_order_relaxed) == FLUSH_SCHEDULED;
|
|
606
|
+
}
|
|
607
|
+
|
|
602
608
|
InternalIterator* NewIterator(
|
|
603
609
|
const ReadOptions& read_options,
|
|
604
610
|
UnownedPtr<const SeqnoToTimeMapping> seqno_to_time_mapping, Arena* arena,
|
|
@@ -33,12 +33,12 @@ std::string ValueWithWriteTime(std::string value, uint64_t write_time) {
|
|
|
33
33
|
class MemTableListTest : public testing::Test {
|
|
34
34
|
public:
|
|
35
35
|
std::string dbname;
|
|
36
|
-
DB
|
|
36
|
+
std::unique_ptr<DB> db;
|
|
37
37
|
Options options;
|
|
38
38
|
std::vector<ColumnFamilyHandle*> handles;
|
|
39
39
|
std::atomic<uint64_t> file_number;
|
|
40
40
|
|
|
41
|
-
MemTableListTest() :
|
|
41
|
+
MemTableListTest() : file_number(1) {
|
|
42
42
|
dbname = test::PerThreadDBPath("memtable_list_test");
|
|
43
43
|
options.create_if_missing = true;
|
|
44
44
|
EXPECT_OK(DestroyDB(dbname, options));
|
|
@@ -88,8 +88,7 @@ class MemTableListTest : public testing::Test {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
handles.clear();
|
|
91
|
-
|
|
92
|
-
db = nullptr;
|
|
91
|
+
db.reset();
|
|
93
92
|
EXPECT_OK(DestroyDB(dbname, options, cf_descs));
|
|
94
93
|
}
|
|
95
94
|
}
|