@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
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
#include <assert.h>
|
|
45
45
|
#include <stdlib.h>
|
|
46
46
|
|
|
47
|
+
#include <functional>
|
|
47
48
|
#include <type_traits>
|
|
48
49
|
|
|
49
50
|
#include "memory/allocator.h"
|
|
@@ -139,6 +140,25 @@ class InlineSkipList {
|
|
|
139
140
|
// Returns true iff an entry that compares equal to key is in the list.
|
|
140
141
|
bool Contains(const char* key) const;
|
|
141
142
|
|
|
143
|
+
// Batch lookup of sorted keys using finger search. For each key, finds the
|
|
144
|
+
// first entry >= key and calls callback_func with callback_args[i] and the
|
|
145
|
+
// entry. Continues calling for subsequent entries until callback_func returns
|
|
146
|
+
// false. Keys must be in non-decreasing order according to compare_.
|
|
147
|
+
//
|
|
148
|
+
// Uses a "finger" (cached search path from the previous lookup) to reduce
|
|
149
|
+
// per-key cost from O(log N) to O(log d) where d is the distance between
|
|
150
|
+
// consecutive keys in the skip list.
|
|
151
|
+
//
|
|
152
|
+
// When detect_key_out_of_order is true, validates key ordering during
|
|
153
|
+
// traversal and returns Corruption if out-of-order keys are found.
|
|
154
|
+
// When key_validation_callback is non-null, calls it on each visited node.
|
|
155
|
+
Status MultiGet(
|
|
156
|
+
size_t num_keys, const char* const* keys, void** callback_args,
|
|
157
|
+
bool (*callback_func)(void* arg, const char* entry),
|
|
158
|
+
bool allow_data_in_errors = false, bool detect_key_out_of_order = false,
|
|
159
|
+
const std::function<Status(const char*, bool)>& key_validation_callback =
|
|
160
|
+
nullptr) const;
|
|
161
|
+
|
|
142
162
|
// Return estimated number of entries from `start_ikey` to `end_ikey`.
|
|
143
163
|
uint64_t ApproximateNumEntries(const Slice& start_ikey,
|
|
144
164
|
const Slice& end_ikey) const;
|
|
@@ -255,6 +275,22 @@ class InlineSkipList {
|
|
|
255
275
|
const std::function<Status(const char*, bool)>&
|
|
256
276
|
key_validation_callback) const;
|
|
257
277
|
|
|
278
|
+
// Like FindGreaterOrEqual, but uses a Splice as a "finger" to accelerate
|
|
279
|
+
// lookups when keys are searched in sorted order. On the first call
|
|
280
|
+
// (finger->height_ == 0), performs a full top-down search and populates the
|
|
281
|
+
// finger. On subsequent calls, walks up from the finger's cached search
|
|
282
|
+
// path to find the starting level, then descends from there.
|
|
283
|
+
// Cost: O(log d) where d is the distance from the previous lookup position.
|
|
284
|
+
//
|
|
285
|
+
// When detect_key_out_of_order is true, validates key ordering during
|
|
286
|
+
// traversal. When key_validation_callback is non-null, calls it on each
|
|
287
|
+
// visited node.
|
|
288
|
+
Status FindGreaterOrEqualWithFinger(
|
|
289
|
+
const char* key, Node** node, Splice* finger,
|
|
290
|
+
bool allow_data_in_errors = false, bool detect_key_out_of_order = false,
|
|
291
|
+
const std::function<Status(const char*, bool)>& key_validation_callback =
|
|
292
|
+
nullptr) const;
|
|
293
|
+
|
|
258
294
|
// Returns the latest node with a key < key.
|
|
259
295
|
// Returns head_ if there is no such node.
|
|
260
296
|
// Fills prev[level] with pointer to previous node at "level" for every
|
|
@@ -279,12 +315,21 @@ class InlineSkipList {
|
|
|
279
315
|
// node isn't conveniently available.
|
|
280
316
|
template <bool prefetch_before>
|
|
281
317
|
void FindSpliceForLevel(const DecodedKey& key, Node* before, Node* after,
|
|
282
|
-
int level, Node** out_prev, Node** out_next);
|
|
318
|
+
int level, Node** out_prev, Node** out_next) const;
|
|
319
|
+
|
|
320
|
+
// Like FindSpliceForLevel, but validates key ordering and checksums.
|
|
321
|
+
template <bool prefetch_before>
|
|
322
|
+
Status FindSpliceForLevelValidated(
|
|
323
|
+
const DecodedKey& key, Node* before, Node* after, int level,
|
|
324
|
+
Node** out_prev, Node** out_next, bool allow_data_in_errors,
|
|
325
|
+
bool detect_key_out_of_order,
|
|
326
|
+
const std::function<Status(const char*, bool)>& key_validation_callback)
|
|
327
|
+
const;
|
|
283
328
|
|
|
284
329
|
// Recomputes Splice levels from highest_level (inclusive) down to
|
|
285
330
|
// lowest_level (inclusive).
|
|
286
331
|
void RecomputeSpliceLevels(const DecodedKey& key, Splice* splice,
|
|
287
|
-
int recompute_level);
|
|
332
|
+
int recompute_level) const;
|
|
288
333
|
|
|
289
334
|
static Status Corruption(Node* prev, Node* next, bool allow_data_in_errors);
|
|
290
335
|
};
|
|
@@ -372,7 +417,7 @@ struct InlineSkipList<Comparator>::Node {
|
|
|
372
417
|
private:
|
|
373
418
|
// next_[0] is the lowest level link (level 0). Higher levels are
|
|
374
419
|
// stored _earlier_, so level 1 is at next_[-1].
|
|
375
|
-
|
|
420
|
+
Atomic<Node*> next_[1];
|
|
376
421
|
};
|
|
377
422
|
|
|
378
423
|
template <class Comparator>
|
|
@@ -813,7 +858,7 @@ char* InlineSkipList<Comparator>::AllocateKey(size_t key_size) {
|
|
|
813
858
|
template <class Comparator>
|
|
814
859
|
typename InlineSkipList<Comparator>::Node*
|
|
815
860
|
InlineSkipList<Comparator>::AllocateNode(size_t key_size, int height) {
|
|
816
|
-
auto prefix = sizeof(
|
|
861
|
+
auto prefix = sizeof(Atomic<Node*>) * (height - 1);
|
|
817
862
|
|
|
818
863
|
// prefix is space for the height - 1 pointers that we store before
|
|
819
864
|
// the Node instance (next_[-(height - 1) .. -1]). Node starts at
|
|
@@ -902,7 +947,7 @@ template <bool prefetch_before>
|
|
|
902
947
|
void InlineSkipList<Comparator>::FindSpliceForLevel(const DecodedKey& key,
|
|
903
948
|
Node* before, Node* after,
|
|
904
949
|
int level, Node** out_prev,
|
|
905
|
-
Node** out_next) {
|
|
950
|
+
Node** out_next) const {
|
|
906
951
|
while (true) {
|
|
907
952
|
Node* next = before->Next(level);
|
|
908
953
|
if (next != nullptr) {
|
|
@@ -927,9 +972,49 @@ void InlineSkipList<Comparator>::FindSpliceForLevel(const DecodedKey& key,
|
|
|
927
972
|
}
|
|
928
973
|
|
|
929
974
|
template <class Comparator>
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
975
|
+
template <bool prefetch_before>
|
|
976
|
+
Status InlineSkipList<Comparator>::FindSpliceForLevelValidated(
|
|
977
|
+
const DecodedKey& key, Node* before, Node* after, int level,
|
|
978
|
+
Node** out_prev, Node** out_next, bool allow_data_in_errors,
|
|
979
|
+
bool detect_key_out_of_order,
|
|
980
|
+
const std::function<Status(const char*, bool)>& key_validation_callback)
|
|
981
|
+
const {
|
|
982
|
+
while (true) {
|
|
983
|
+
Node* next = before->Next(level);
|
|
984
|
+
if (next != nullptr) {
|
|
985
|
+
PREFETCH(next->Next(level), 0, 1);
|
|
986
|
+
if (detect_key_out_of_order && before != head_ &&
|
|
987
|
+
compare_(before->Key(), next->Key()) >= 0) {
|
|
988
|
+
return Corruption(before, next, allow_data_in_errors);
|
|
989
|
+
}
|
|
990
|
+
if (key_validation_callback != nullptr) {
|
|
991
|
+
Status s = key_validation_callback(next->Key(), allow_data_in_errors);
|
|
992
|
+
if (!s.ok()) {
|
|
993
|
+
return s;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
if (prefetch_before == true) {
|
|
998
|
+
if (next != nullptr && level > 0) {
|
|
999
|
+
PREFETCH(next->Next(level - 1), 0, 1);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
assert(before == head_ || next == nullptr ||
|
|
1003
|
+
KeyIsAfterNode(next->Key(), before));
|
|
1004
|
+
assert(before == head_ || KeyIsAfterNode(key, before));
|
|
1005
|
+
if (next == after || !KeyIsAfterNode(key, next)) {
|
|
1006
|
+
// found it
|
|
1007
|
+
*out_prev = before;
|
|
1008
|
+
*out_next = next;
|
|
1009
|
+
return Status::OK();
|
|
1010
|
+
}
|
|
1011
|
+
before = next;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
template <class Comparator>
|
|
1016
|
+
void InlineSkipList<Comparator>::RecomputeSpliceLevels(
|
|
1017
|
+
const DecodedKey& key, Splice* splice, int recompute_level) const {
|
|
933
1018
|
assert(recompute_level > 0);
|
|
934
1019
|
assert(recompute_level <= splice->height_);
|
|
935
1020
|
for (int i = recompute_level - 1; i >= 0; --i) {
|
|
@@ -1138,6 +1223,139 @@ bool InlineSkipList<Comparator>::Insert(const char* key, Splice* splice,
|
|
|
1138
1223
|
return true;
|
|
1139
1224
|
}
|
|
1140
1225
|
|
|
1226
|
+
template <class Comparator>
|
|
1227
|
+
Status InlineSkipList<Comparator>::FindGreaterOrEqualWithFinger(
|
|
1228
|
+
const char* key, Node** out, Splice* finger, bool allow_data_in_errors,
|
|
1229
|
+
bool detect_key_out_of_order,
|
|
1230
|
+
const std::function<Status(const char*, bool)>& key_validation_callback)
|
|
1231
|
+
const {
|
|
1232
|
+
bool validate = detect_key_out_of_order || key_validation_callback != nullptr;
|
|
1233
|
+
const DecodedKey key_decoded = compare_.decode_key(key);
|
|
1234
|
+
int max_height = GetMaxHeight();
|
|
1235
|
+
|
|
1236
|
+
int start_level;
|
|
1237
|
+
if (finger->height_ == 0) {
|
|
1238
|
+
// First call: start from top and initialize finger
|
|
1239
|
+
start_level = max_height - 1;
|
|
1240
|
+
finger->prev_[start_level] = head_;
|
|
1241
|
+
finger->next_[start_level] = nullptr;
|
|
1242
|
+
finger->height_ = max_height;
|
|
1243
|
+
} else {
|
|
1244
|
+
// Handle skip list height growth since last search
|
|
1245
|
+
while (finger->height_ < max_height) {
|
|
1246
|
+
finger->prev_[finger->height_] = head_;
|
|
1247
|
+
finger->next_[finger->height_] = nullptr;
|
|
1248
|
+
finger->height_++;
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
// Walk up from level 0 to find the lowest level where the key is
|
|
1252
|
+
// still bracketed by the finger (i.e., next_[level] >= key).
|
|
1253
|
+
// KeyIsAfterNode returns true when key > node, false when key <= node
|
|
1254
|
+
// or node is nullptr.
|
|
1255
|
+
start_level = 0;
|
|
1256
|
+
while (start_level < max_height - 1 &&
|
|
1257
|
+
KeyIsAfterNode(key_decoded, finger->next_[start_level])) {
|
|
1258
|
+
start_level++;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
// If we walked all the way to the top and the key is still beyond
|
|
1262
|
+
// the finger's bracket, reset to a full top-down search.
|
|
1263
|
+
if (KeyIsAfterNode(key_decoded, finger->next_[start_level])) {
|
|
1264
|
+
finger->prev_[start_level] = head_;
|
|
1265
|
+
finger->next_[start_level] = nullptr;
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
if (validate) {
|
|
1270
|
+
// Find the bracket at start_level with validation
|
|
1271
|
+
Status s = FindSpliceForLevelValidated<false>(
|
|
1272
|
+
key_decoded, finger->prev_[start_level], finger->next_[start_level],
|
|
1273
|
+
start_level, &finger->prev_[start_level], &finger->next_[start_level],
|
|
1274
|
+
allow_data_in_errors, detect_key_out_of_order, key_validation_callback);
|
|
1275
|
+
if (!s.ok()) {
|
|
1276
|
+
return s;
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
// Descend through remaining levels, using the level above as bounds
|
|
1280
|
+
for (int level = start_level - 1; level >= 0; --level) {
|
|
1281
|
+
s = FindSpliceForLevelValidated<true>(
|
|
1282
|
+
key_decoded, finger->prev_[level + 1], finger->next_[level + 1],
|
|
1283
|
+
level, &finger->prev_[level], &finger->next_[level],
|
|
1284
|
+
allow_data_in_errors, detect_key_out_of_order,
|
|
1285
|
+
key_validation_callback);
|
|
1286
|
+
if (!s.ok()) {
|
|
1287
|
+
return s;
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
} else {
|
|
1291
|
+
// Find the bracket at start_level
|
|
1292
|
+
FindSpliceForLevel<false>(
|
|
1293
|
+
key_decoded, finger->prev_[start_level], finger->next_[start_level],
|
|
1294
|
+
start_level, &finger->prev_[start_level], &finger->next_[start_level]);
|
|
1295
|
+
|
|
1296
|
+
// Descend through remaining levels, using the level above as bounds
|
|
1297
|
+
for (int level = start_level - 1; level >= 0; --level) {
|
|
1298
|
+
FindSpliceForLevel<true>(key_decoded, finger->prev_[level + 1],
|
|
1299
|
+
finger->next_[level + 1], level,
|
|
1300
|
+
&finger->prev_[level], &finger->next_[level]);
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
*out = finger->next_[0];
|
|
1305
|
+
return Status::OK();
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
template <class Comparator>
|
|
1309
|
+
Status InlineSkipList<Comparator>::MultiGet(
|
|
1310
|
+
size_t num_keys, const char* const* keys, void** callback_args,
|
|
1311
|
+
bool (*callback_func)(void* arg, const char* entry),
|
|
1312
|
+
bool allow_data_in_errors, bool detect_key_out_of_order,
|
|
1313
|
+
const std::function<Status(const char*, bool)>& key_validation_callback)
|
|
1314
|
+
const {
|
|
1315
|
+
Node* prev_nodes[kMaxPossibleHeight];
|
|
1316
|
+
Node* next_nodes[kMaxPossibleHeight];
|
|
1317
|
+
Splice finger;
|
|
1318
|
+
finger.prev_ = prev_nodes;
|
|
1319
|
+
finger.next_ = next_nodes;
|
|
1320
|
+
finger.height_ = 0;
|
|
1321
|
+
|
|
1322
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
1323
|
+
Node* node = nullptr;
|
|
1324
|
+
Status s = FindGreaterOrEqualWithFinger(
|
|
1325
|
+
keys[i], &node, &finger, allow_data_in_errors, detect_key_out_of_order,
|
|
1326
|
+
key_validation_callback);
|
|
1327
|
+
if (!s.ok()) {
|
|
1328
|
+
return s;
|
|
1329
|
+
}
|
|
1330
|
+
for (; node != nullptr && callback_func(callback_args[i], node->Key());) {
|
|
1331
|
+
Node* prev_node = node;
|
|
1332
|
+
node = node->Next(0);
|
|
1333
|
+
if (node != nullptr) {
|
|
1334
|
+
if (key_validation_callback != nullptr) {
|
|
1335
|
+
Status vs =
|
|
1336
|
+
key_validation_callback(node->Key(), allow_data_in_errors);
|
|
1337
|
+
if (!vs.ok()) {
|
|
1338
|
+
return vs;
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
if (detect_key_out_of_order && prev_node != head_ &&
|
|
1342
|
+
compare_(prev_node->Key(), node->Key()) >= 0) {
|
|
1343
|
+
return Corruption(prev_node, node, allow_data_in_errors);
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
// Update finger.next_[0] to track walk-forward position so the next
|
|
1347
|
+
// key's walk-up knows where the right bracket moved to. Do NOT update
|
|
1348
|
+
// finger.prev_[0]: the callback walks through entries with the same
|
|
1349
|
+
// user key (e.g., merge operands), and those entries sort AFTER the
|
|
1350
|
+
// lookup key (which has kMaxSequenceNumber). If the next MultiGet key
|
|
1351
|
+
// is a duplicate, its lookup key would sort BEFORE the advanced
|
|
1352
|
+
// prev_[0], violating the FindSpliceForLevel precondition.
|
|
1353
|
+
finger.next_[0] = node;
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
return Status::OK();
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1141
1359
|
template <class Comparator>
|
|
1142
1360
|
bool InlineSkipList<Comparator>::Contains(const char* key) const {
|
|
1143
1361
|
Node* x = nullptr;
|