@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
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
#include <deque>
|
|
11
11
|
|
|
12
12
|
#include "db/seqno_to_time_mapping.h"
|
|
13
|
+
#include "rocksdb/io_dispatcher.h"
|
|
13
14
|
#include "table/block_based/block_based_table_reader.h"
|
|
14
15
|
#include "table/block_based/block_based_table_reader_impl.h"
|
|
15
16
|
#include "table/block_based/block_prefetcher.h"
|
|
17
|
+
#include "table/block_based/multi_scan_index_iterator.h"
|
|
16
18
|
#include "table/block_based/reader_common.h"
|
|
17
19
|
|
|
18
20
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -71,7 +73,7 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
71
73
|
Slice key() const override {
|
|
72
74
|
assert(Valid());
|
|
73
75
|
if (is_at_first_key_from_index_) {
|
|
74
|
-
assert(!
|
|
76
|
+
assert(!multi_scan_read_set_);
|
|
75
77
|
return index_iter_->value().first_internal_key;
|
|
76
78
|
} else {
|
|
77
79
|
return block_iter_.key();
|
|
@@ -147,16 +149,13 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
147
149
|
// Prefix index set status to NotFound when the prefix does not exist.
|
|
148
150
|
if (IsIndexAtCurr() && !index_iter_->status().ok() &&
|
|
149
151
|
!index_iter_->status().IsNotFound()) {
|
|
150
|
-
assert(!multi_scan_);
|
|
151
152
|
return index_iter_->status();
|
|
152
153
|
} else if (block_iter_points_to_real_block_) {
|
|
153
154
|
// This is the common case.
|
|
154
155
|
return block_iter_.status();
|
|
155
156
|
} else if (async_read_in_progress_) {
|
|
156
|
-
assert(!
|
|
157
|
+
assert(!multi_scan_read_set_);
|
|
157
158
|
return Status::TryAgain("Async read in progress");
|
|
158
|
-
} else if (multi_scan_) {
|
|
159
|
-
return multi_scan_status_;
|
|
160
159
|
} else {
|
|
161
160
|
return Status::OK();
|
|
162
161
|
}
|
|
@@ -168,8 +167,6 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
168
167
|
} else if (block_upper_bound_check_ ==
|
|
169
168
|
BlockUpperBound::kUpperBoundBeyondCurBlock) {
|
|
170
169
|
assert(!is_out_of_bound_);
|
|
171
|
-
// MultiScan does not do block level upper bound check yet.
|
|
172
|
-
assert(!multi_scan_);
|
|
173
170
|
return IterBoundCheck::kInbound;
|
|
174
171
|
} else {
|
|
175
172
|
return IterBoundCheck::kUnknown;
|
|
@@ -244,13 +241,10 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
244
241
|
std::unique_ptr<InternalIteratorBase<IndexValue>> index_iter_;
|
|
245
242
|
|
|
246
243
|
bool TEST_IsBlockPinnedByMultiScan(size_t block_idx) {
|
|
247
|
-
if (!
|
|
248
|
-
return false;
|
|
249
|
-
}
|
|
250
|
-
if (block_idx >= multi_scan_->pinned_data_blocks.size()) {
|
|
244
|
+
if (!multi_scan_read_set_) {
|
|
251
245
|
return false;
|
|
252
246
|
}
|
|
253
|
-
return
|
|
247
|
+
return multi_scan_read_set_->IsBlockAvailable(block_idx);
|
|
254
248
|
}
|
|
255
249
|
|
|
256
250
|
private:
|
|
@@ -382,26 +376,6 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
382
376
|
// See InternalIteratorBase::IsOutOfBound().
|
|
383
377
|
bool is_out_of_bound_ = false;
|
|
384
378
|
|
|
385
|
-
// Mark prepared ranges as exhausted for multiscan.
|
|
386
|
-
void MarkPreparedRangeExhausted() {
|
|
387
|
-
assert(multi_scan_ != nullptr);
|
|
388
|
-
if (multi_scan_->next_scan_idx <
|
|
389
|
-
multi_scan_->block_index_ranges_per_scan.size()) {
|
|
390
|
-
// If there are more prepared ranges, we don't ResetDataIter() here,
|
|
391
|
-
// because next scan might be reading from the same block. ResetDataIter()
|
|
392
|
-
// will free the underlying block cache handle and we don't want the
|
|
393
|
-
// block to be unpinned.
|
|
394
|
-
// Set out of bound to mark the current prepared range as exhausted.
|
|
395
|
-
is_out_of_bound_ = true;
|
|
396
|
-
} else {
|
|
397
|
-
// This is the last prepared range of this file, there might be more
|
|
398
|
-
// data on next file. Reset data iterator to indicate the iterator is
|
|
399
|
-
// no longer valid on this file. Let LevelIter advance to the next file
|
|
400
|
-
// instead of ending the scan.
|
|
401
|
-
ResetDataIter();
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
379
|
// During cache lookup to find readahead size, index_iter_ is iterated and it
|
|
406
380
|
// can point to a different block.
|
|
407
381
|
// If Prepare() is called, index_iter_ is used to prefetch data blocks for the
|
|
@@ -412,109 +386,31 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
412
386
|
// *** END States used by both regular scan and multiscan
|
|
413
387
|
|
|
414
388
|
// *** BEGIN MultiScan related states ***
|
|
415
|
-
struct AsyncReadState {
|
|
416
|
-
std::unique_ptr<char[]> buf{nullptr};
|
|
417
|
-
// Indices into pinned_data_blocks that this request reads.
|
|
418
|
-
std::vector<size_t> block_indices;
|
|
419
|
-
// BlockHandle for each block in block_indices.
|
|
420
|
-
std::vector<BlockHandle> blocks;
|
|
421
|
-
void* io_handle{nullptr};
|
|
422
|
-
IOHandleDeleter del_fn{nullptr};
|
|
423
|
-
// offset for this async read request.
|
|
424
|
-
uint64_t offset{0};
|
|
425
|
-
|
|
426
|
-
// These two states are populated from the FSReadRequest
|
|
427
|
-
// by ReadAsync callback
|
|
428
|
-
Status status;
|
|
429
|
-
Slice result;
|
|
430
|
-
|
|
431
|
-
// For direct I/O support
|
|
432
|
-
AlignedBuf aligned_buf{nullptr};
|
|
433
|
-
|
|
434
|
-
bool finished{false};
|
|
435
|
-
|
|
436
|
-
AsyncReadState() = default;
|
|
437
|
-
DECLARE_DEFAULT_MOVES(AsyncReadState);
|
|
438
|
-
// Delete copy operations
|
|
439
|
-
AsyncReadState(const AsyncReadState&) = delete;
|
|
440
|
-
AsyncReadState& operator=(const AsyncReadState&) = delete;
|
|
441
|
-
|
|
442
|
-
void CleanUpIOHandle() {
|
|
443
|
-
if (io_handle != nullptr) {
|
|
444
|
-
assert(del_fn);
|
|
445
|
-
del_fn(io_handle);
|
|
446
|
-
io_handle = nullptr;
|
|
447
|
-
}
|
|
448
|
-
finished = true;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
~AsyncReadState() {
|
|
452
|
-
// Should be cleaned up before destruction.
|
|
453
|
-
assert(io_handle == nullptr);
|
|
454
|
-
}
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
struct MultiScanState {
|
|
458
|
-
// For Aborting async I/Os in destructor.
|
|
459
|
-
const std::shared_ptr<FileSystem> fs;
|
|
460
|
-
const MultiScanArgs* scan_opts;
|
|
461
|
-
std::vector<CachableEntry<Block>> pinned_data_blocks;
|
|
462
|
-
// The separator of each data block in above pinned_data_blocks vector.
|
|
463
|
-
// Its size is same as pinned_data_blocks.
|
|
464
|
-
// The value of separator is larger than or equal to the last key in the
|
|
465
|
-
// corresponding data block.
|
|
466
|
-
std::vector<std::string> data_block_separators;
|
|
467
|
-
// Track previously seeked key in multi-scan.
|
|
468
|
-
// This is used to ensure that the seek key is keep moving forward, as
|
|
469
|
-
// blocks that are smaller than the seek key are unpinned from memory.
|
|
470
|
-
std::string prev_seek_key_;
|
|
471
|
-
|
|
472
|
-
// Indicies into pinned_data_blocks for data blocks for each scan range.
|
|
473
|
-
// inclusive start, exclusive end
|
|
474
|
-
std::vector<std::tuple<size_t, size_t>> block_index_ranges_per_scan;
|
|
475
|
-
size_t next_scan_idx;
|
|
476
|
-
size_t cur_data_block_idx;
|
|
477
|
-
|
|
478
|
-
// States for async reads.
|
|
479
|
-
//
|
|
480
|
-
// Each async state correspond to an async read request.
|
|
481
|
-
// Each async read request may read content for multiple blocks
|
|
482
|
-
// (potentially coalesced). In PollForBlock(idx), we will poll for the
|
|
483
|
-
// completion of the async read request responsible for
|
|
484
|
-
// pinned_data_blocks[idx], and populate `pinned_data_blocks` with all the
|
|
485
|
-
// blocks read. To find out the async read request responsible for
|
|
486
|
-
// pinned_data_blocks[idx], we store the mapping in
|
|
487
|
-
// block_idx_to_readreq_idx. Index i is in block_idx_to_readreq_idx and
|
|
488
|
-
// block_idx_to_readreq_idx[i] = j iff pinned_data_blocks[i] is read by
|
|
489
|
-
// async_states[j].
|
|
490
|
-
std::vector<AsyncReadState> async_states;
|
|
491
|
-
UnorderedMap<size_t, size_t> block_idx_to_readreq_idx;
|
|
492
|
-
size_t prefetch_max_idx;
|
|
493
|
-
|
|
494
|
-
MultiScanState(
|
|
495
|
-
const std::shared_ptr<FileSystem>& _fs, const MultiScanArgs* _scan_opts,
|
|
496
|
-
std::vector<CachableEntry<Block>>&& _pinned_data_blocks,
|
|
497
|
-
std::vector<std::string>&& _data_block_separators,
|
|
498
|
-
std::vector<std::tuple<size_t, size_t>>&& _block_index_ranges_per_scan,
|
|
499
|
-
UnorderedMap<size_t, size_t>&& _block_idx_to_readreq_idx,
|
|
500
|
-
std::vector<AsyncReadState>&& _async_states, size_t _prefetch_max_idx)
|
|
501
|
-
: fs(_fs),
|
|
502
|
-
scan_opts(_scan_opts),
|
|
503
|
-
pinned_data_blocks(std::move(_pinned_data_blocks)),
|
|
504
|
-
data_block_separators(std::move(_data_block_separators)),
|
|
505
|
-
block_index_ranges_per_scan(std::move(_block_index_ranges_per_scan)),
|
|
506
|
-
next_scan_idx(0),
|
|
507
|
-
cur_data_block_idx(0),
|
|
508
|
-
async_states(std::move(_async_states)),
|
|
509
|
-
block_idx_to_readreq_idx(std::move(_block_idx_to_readreq_idx)),
|
|
510
|
-
prefetch_max_idx(_prefetch_max_idx) {}
|
|
511
|
-
|
|
512
|
-
~MultiScanState();
|
|
513
|
-
};
|
|
514
|
-
|
|
515
389
|
Status multi_scan_status_;
|
|
516
|
-
|
|
517
|
-
//
|
|
390
|
+
// ReadSet from IODispatcher, set during Prepare(). When non-null, MultiScan
|
|
391
|
+
// is active and index_iter_ points to a MultiScanIndexIterator.
|
|
392
|
+
std::shared_ptr<ReadSet> multi_scan_read_set_;
|
|
393
|
+
// Raw pointer into index_iter_ when it's a MultiScanIndexIterator.
|
|
394
|
+
MultiScanIndexIterator* multi_scan_index_iter_ = nullptr;
|
|
395
|
+
// Original index iterator saved during Prepare(), restored on backward ops.
|
|
396
|
+
std::unique_ptr<InternalIteratorBase<IndexValue>> original_index_iter_;
|
|
397
|
+
// Maximum prefetchable block index.
|
|
398
|
+
size_t prefetch_max_idx_ = 0;
|
|
399
|
+
// *** END MultiScan related states ***
|
|
400
|
+
|
|
401
|
+
// Reset MultiScan state and restore the original index iterator.
|
|
402
|
+
void ResetMultiScan() {
|
|
403
|
+
multi_scan_read_set_.reset();
|
|
404
|
+
multi_scan_index_iter_ = nullptr;
|
|
405
|
+
prefetch_max_idx_ = 0;
|
|
406
|
+
// Discard any MultiScan error (e.g. PrefetchLimitReached) since we're
|
|
407
|
+
// falling back to regular iteration.
|
|
408
|
+
multi_scan_status_.PermitUncheckedError();
|
|
409
|
+
multi_scan_status_ = Status::OK();
|
|
410
|
+
if (original_index_iter_) {
|
|
411
|
+
index_iter_ = std::move(original_index_iter_);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
518
414
|
|
|
519
415
|
void SeekSecondPass(const Slice* target);
|
|
520
416
|
|
|
@@ -633,111 +529,12 @@ class BlockBasedTableIterator : public InternalIteratorBase<Slice> {
|
|
|
633
529
|
|
|
634
530
|
// *** BEGIN APIs relevant to multiscan ***
|
|
635
531
|
|
|
636
|
-
void SeekMultiScan(const Slice* target);
|
|
637
|
-
|
|
638
|
-
void FindBlockForwardInMultiScan();
|
|
639
|
-
|
|
640
|
-
void PrepareReadAsyncCallBack(FSReadRequest& req, void* cb_arg) {
|
|
641
|
-
// Record status, result and sanity check offset from `req`.
|
|
642
|
-
AsyncReadState* async_state = static_cast<AsyncReadState*>(cb_arg);
|
|
643
|
-
|
|
644
|
-
async_state->status = req.status;
|
|
645
|
-
async_state->result = req.result;
|
|
646
|
-
|
|
647
|
-
if (async_state->status.ok()) {
|
|
648
|
-
assert(async_state->offset == req.offset);
|
|
649
|
-
if (async_state->offset != req.offset) {
|
|
650
|
-
async_state->status = Status::InvalidArgument(
|
|
651
|
-
"offset mismatch between async read request " +
|
|
652
|
-
std::to_string(async_state->offset) + " and async callback " +
|
|
653
|
-
std::to_string(req.offset));
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
void MultiScanSeekTargetFromBlock(const Slice* seek_target, size_t block_idx);
|
|
659
|
-
void MultiScanUnexpectedSeekTarget(const Slice* seek_target,
|
|
660
|
-
const Slice* user_seek_target);
|
|
661
|
-
|
|
662
|
-
// Return true, if there is an error, or end of file
|
|
663
|
-
bool MultiScanLoadDataBlock(size_t idx) {
|
|
664
|
-
if (idx >= multi_scan_->prefetch_max_idx) {
|
|
665
|
-
// TODO: Fix the max_prefetch_size support for multiple files.
|
|
666
|
-
// The goal is to limit the memory usage, prefetch could be done
|
|
667
|
-
// incrementally.
|
|
668
|
-
if (multi_scan_->scan_opts->max_prefetch_size == 0) {
|
|
669
|
-
// If max_prefetch_size is not set, treat this as end of file.
|
|
670
|
-
ResetDataIter();
|
|
671
|
-
assert(!is_out_of_bound_);
|
|
672
|
-
assert(!Valid());
|
|
673
|
-
} else {
|
|
674
|
-
// If max_prefetch_size is set, treat this as error.
|
|
675
|
-
multi_scan_status_ = Status::PrefetchLimitReached();
|
|
676
|
-
}
|
|
677
|
-
return true;
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
if (!multi_scan_->async_states.empty()) {
|
|
681
|
-
multi_scan_status_ = PollForBlock(idx);
|
|
682
|
-
if (!multi_scan_status_.ok()) {
|
|
683
|
-
return true;
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
// This block should have been initialized
|
|
687
|
-
assert(multi_scan_->pinned_data_blocks[idx].GetValue());
|
|
688
|
-
// Note that the block_iter_ takes ownership of the pinned data block
|
|
689
|
-
// TODO: we can delegate the clean up like with pinned_iters_mgr_ if
|
|
690
|
-
// need to pin blocks longer.
|
|
691
|
-
table_->NewDataBlockIterator<DataBlockIter>(
|
|
692
|
-
read_options_, multi_scan_->pinned_data_blocks[idx], &block_iter_,
|
|
693
|
-
Status::OK());
|
|
694
|
-
return false;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
// After PollForBlock(idx), the async request that contains
|
|
698
|
-
// pinned_data_blocks[idx] should be done, and all blocks contained in this
|
|
699
|
-
// read request will be initialzed in pinned_data_blocks and pinned in block
|
|
700
|
-
// cache.
|
|
701
|
-
Status PollForBlock(size_t idx);
|
|
702
|
-
|
|
703
|
-
// Helper function to create and pin a block in cache from buffer data
|
|
704
|
-
// Handles decompressor setup with dictionary loading and block
|
|
705
|
-
// creation/pinning. The buffer_start_offset is the file offset where
|
|
706
|
-
// buffer_data starts.
|
|
707
|
-
Status CreateAndPinBlockFromBuffer(const BlockHandle& block,
|
|
708
|
-
uint64_t buffer_start_offset,
|
|
709
|
-
const Slice& buffer_data,
|
|
710
|
-
CachableEntry<Block>& pinned_block_entry);
|
|
711
|
-
|
|
712
532
|
Status CollectBlockHandles(
|
|
713
533
|
const std::vector<ScanOptions>& scan_opts,
|
|
714
534
|
std::vector<BlockHandle>* scan_block_handles,
|
|
715
535
|
std::vector<std::tuple<size_t, size_t>>* block_index_ranges_per_scan,
|
|
716
536
|
std::vector<std::string>* data_block_boundary_keys);
|
|
717
537
|
|
|
718
|
-
Status FilterAndPinCachedBlocks(
|
|
719
|
-
const std::vector<BlockHandle>& scan_block_handles,
|
|
720
|
-
const MultiScanArgs* multiscan_opts,
|
|
721
|
-
std::vector<size_t>* block_indices_to_read,
|
|
722
|
-
std::vector<CachableEntry<Block>>* pinned_data_blocks_guard,
|
|
723
|
-
size_t* prefetched_max_idx);
|
|
724
|
-
|
|
725
|
-
void PrepareIORequests(
|
|
726
|
-
const std::vector<size_t>& block_indices_to_read,
|
|
727
|
-
const std::vector<BlockHandle>& scan_block_handles,
|
|
728
|
-
const MultiScanArgs* multiscan_opts,
|
|
729
|
-
std::vector<FSReadRequest>* read_reqs,
|
|
730
|
-
UnorderedMap<size_t, size_t>* block_idx_to_readreq_idx,
|
|
731
|
-
std::vector<std::vector<size_t>>* coalesced_block_indices);
|
|
732
|
-
|
|
733
|
-
Status ExecuteIO(
|
|
734
|
-
const std::vector<BlockHandle>& scan_block_handles,
|
|
735
|
-
const MultiScanArgs* multiscan_opts,
|
|
736
|
-
const std::vector<std::vector<size_t>>& coalesced_block_indices,
|
|
737
|
-
std::vector<FSReadRequest>* read_reqs,
|
|
738
|
-
std::vector<AsyncReadState>* async_states,
|
|
739
|
-
std::vector<CachableEntry<Block>>* pinned_data_blocks_guard);
|
|
740
|
-
|
|
741
538
|
// *** END APIs relevant to multiscan ***
|
|
742
539
|
};
|
|
743
540
|
} // namespace ROCKSDB_NAMESPACE
|