@nxtedition/rocksdb 10.0.13 → 10.0.15
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/.tap/coverage/213879bb-47ae-470e-bb54-f4157d9f60e2.json +162898 -0
- package/.tap/processinfo/{4c642b53-6895-4ef0-9391-7c6b8d484262.json → 213879bb-47ae-470e-bb54-f4157d9f60e2.json} +117 -121
- package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
- package/.tap/test-results/test/abstract-level-test.js.tap +1705 -0
- package/.tap/test-results/test/batch-test.js.tap +12 -0
- package/.tap/test-results/test/chained-batch-gc-test.js.tap +11 -0
- package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +58 -0
- package/.tap/test-results/test/clear-gc-test.js.tap +13 -0
- package/.tap/test-results/test/column-test.js.tap +55 -0
- package/.tap/test-results/test/common.js.tap +0 -0
- package/.tap/test-results/test/compression-test.js.tap +30 -0
- package/.tap/test-results/test/db-identity.js.tap +12 -0
- package/.tap/test-results/test/electron.js.tap +0 -0
- package/.tap/test-results/test/env-cleanup-hook-test.js.tap +2 -0
- package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
- package/.tap/test-results/test/gc.js.tap +0 -0
- package/.tap/test-results/test/getproperty-test.js.tap +29 -0
- package/.tap/test-results/test/iterator-gc-test.js.tap +4 -0
- package/.tap/test-results/test/iterator-hwm-test.js.tap +24 -0
- package/.tap/test-results/test/iterator-recursion-test.js.tap +12 -0
- package/.tap/test-results/test/iterator-starvation-test.js.tap +2 -0
- package/.tap/test-results/test/iterator-test.js.tap +0 -0
- package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
- package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
- package/.tap/test-results/test/leak-tester.js.tap +0 -0
- package/.tap/test-results/test/lock-test.js.tap +0 -0
- package/.tap/test-results/test/lock.js.tap +0 -0
- package/.tap/test-results/test/make.js.tap +0 -0
- package/.tap/test-results/test/max-rev-merge.js.tap +0 -12
- package/.tap/test-results/test/merge-operator-test.js.tap +0 -0
- package/.tap/test-results/test/mkdir-test.js.tap +0 -0
- package/.tap/test-results/test/segfault-test.js.tap +0 -0
- package/.tap/test-results/test/stack-blower.js.tap +0 -0
- package/binding.cc +42 -34
- package/deps/rocksdb/rocksdb/CMakeLists.txt +44 -14
- package/deps/rocksdb/rocksdb/Makefile +34 -17
- package/deps/rocksdb/rocksdb/TARGETS +27 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +95 -42
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +381 -393
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +88 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +14 -7
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +21 -19
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +8 -7
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +89 -13
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +16 -8
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +6 -6
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +15 -9
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +16 -13
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +306 -23
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +3 -4
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +30 -27
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +8 -10
- package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.cc +20 -0
- package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +83 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +19 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +18 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +56 -27
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +11 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +20 -19
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +106 -31
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +5 -8
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +4 -2
- package/deps/rocksdb/rocksdb/db/builder.cc +89 -44
- package/deps/rocksdb/rocksdb/db/builder.h +4 -6
- package/deps/rocksdb/rocksdb/db/c.cc +205 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -20
- package/deps/rocksdb/rocksdb/db/coalescing_iterator.cc +47 -0
- package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +79 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +100 -36
- package/deps/rocksdb/rocksdb/db/column_family.h +46 -28
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +168 -46
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +51 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +72 -24
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +7 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +87 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +310 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +78 -62
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +33 -96
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +18 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +42 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +20 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +18 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +95 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +213 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +16 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +75 -142
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +577 -34
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +7 -38
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +366 -136
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +9 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +282 -6
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +551 -150
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +41 -13
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +54 -17
- package/deps/rocksdb/rocksdb/db/db_follower_test.cc +527 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -58
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +34 -45
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +699 -580
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +308 -230
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +180 -107
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +10 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +36 -61
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +347 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.h +54 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +206 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +5 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +41 -39
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +26 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +14 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +126 -46
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +21 -9
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +294 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +116 -78
- package/deps/rocksdb/rocksdb/db/db_iter.h +31 -7
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +34 -14
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +69 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +153 -18
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +9 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +6 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +105 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +97 -111
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -3
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +82 -30
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -22
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +74 -0
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +175 -47
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/db_test.cc +133 -109
- package/deps/rocksdb/rocksdb/db/db_test2.cc +227 -139
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -19
- package/deps/rocksdb/rocksdb/db/db_test_util.h +67 -24
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +140 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -19
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +332 -87
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +250 -30
- package/deps/rocksdb/rocksdb/db/dbformat.cc +41 -8
- package/deps/rocksdb/rocksdb/db/dbformat.h +100 -17
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +48 -8
- package/deps/rocksdb/rocksdb/db/error_handler.cc +102 -116
- package/deps/rocksdb/rocksdb/db/error_handler.h +28 -6
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +263 -99
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +3 -1
- package/deps/rocksdb/rocksdb/db/experimental.cc +1073 -7
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +261 -111
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +263 -183
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +31 -12
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +698 -7
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +41 -41
- package/deps/rocksdb/rocksdb/db/flush_job.h +11 -8
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -13
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +19 -6
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +12 -12
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +83 -52
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +169 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
- package/deps/rocksdb/rocksdb/db/job_context.h +17 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +44 -20
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +81 -17
- package/deps/rocksdb/rocksdb/db/log_writer.cc +135 -92
- package/deps/rocksdb/rocksdb/db/log_writer.h +11 -10
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -3
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable.cc +82 -62
- package/deps/rocksdb/rocksdb/db/memtable.h +17 -9
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +19 -13
- package/deps/rocksdb/rocksdb/db/memtable_list.h +3 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +38 -5
- package/deps/rocksdb/rocksdb/db/merge_context.h +3 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +34 -156
- package/deps/rocksdb/rocksdb/db/merge_helper.h +52 -46
- package/deps/rocksdb/rocksdb/db/merge_test.cc +16 -11
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +289 -0
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +918 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/output_validator.cc +8 -12
- package/deps/rocksdb/rocksdb/db/output_validator.h +1 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +23 -4
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +2 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +2 -2
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -6
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +0 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +0 -1
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +17 -4
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +6 -3
- package/deps/rocksdb/rocksdb/db/repair.cc +35 -29
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +428 -156
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +393 -227
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +154 -82
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +2 -2
- package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
- package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +8 -3
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +27 -26
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +23 -23
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +5 -5
- package/deps/rocksdb/rocksdb/db/version_builder.cc +6 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +62 -29
- package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +30 -11
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +291 -116
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -11
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/version_set.cc +301 -141
- package/deps/rocksdb/rocksdb/db/version_set.h +90 -33
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +817 -193
- package/deps/rocksdb/rocksdb/db/version_util.h +10 -5
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +15 -11
- package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +10 -9
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +403 -28
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +2 -2
- package/deps/rocksdb/rocksdb/db/write_batch.cc +204 -18
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +149 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/write_stall_stats.h +7 -7
- package/deps/rocksdb/rocksdb/db/write_thread.cc +86 -47
- package/deps/rocksdb/rocksdb/db/write_thread.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +176 -68
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +337 -125
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +38 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +126 -34
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +161 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +267 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +13 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +9 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +535 -86
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +27 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +8 -15
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +46 -21
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +74 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +28 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +426 -151
- package/deps/rocksdb/rocksdb/env/composite_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +6 -6
- package/deps/rocksdb/rocksdb/env/env.cc +21 -11
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +9 -9
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +3 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +3 -3
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -2
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -10
- package/deps/rocksdb/rocksdb/env/env_test.cc +24 -18
- package/deps/rocksdb/rocksdb/env/file_system.cc +7 -6
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +3 -3
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +3 -3
- package/deps/rocksdb/rocksdb/env/fs_on_demand.cc +331 -0
- package/deps/rocksdb/rocksdb/env/fs_on_demand.h +139 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -15
- package/deps/rocksdb/rocksdb/env/io_posix.cc +15 -10
- package/deps/rocksdb/rocksdb/env/io_posix.h +86 -92
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +6 -6
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +8 -6
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +599 -592
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +312 -200
- package/deps/rocksdb/rocksdb/file/file_util.cc +19 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +34 -24
- package/deps/rocksdb/rocksdb/file/filename.cc +32 -17
- package/deps/rocksdb/rocksdb/file/filename.h +51 -53
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +82 -441
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +7 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -5
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +9 -3
- package/deps/rocksdb/rocksdb/file/read_write_util.h +3 -3
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +6 -2
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +9 -4
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +8 -4
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -89
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +34 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +39 -189
- package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +114 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +91 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +52 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +146 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +254 -151
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +39 -36
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +431 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +57 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +27 -57
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +74 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +146 -71
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +7 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +17 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +10 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +18 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +12 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +118 -116
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +26 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +18 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +8 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +5 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +159 -167
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +52 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +3 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/types_util.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +118 -20
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +87 -45
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +26 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +22 -1
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +7 -9
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +5 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +2 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -1
- package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -3
- package/deps/rocksdb/rocksdb/memory/arena.h +11 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +17 -2
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +11 -10
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +8 -7
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +3 -3
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +2 -2
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +20 -10
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +15 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +7 -3
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +14 -14
- package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +4 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +8 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +5 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +64 -58
- package/deps/rocksdb/rocksdb/monitoring/statistics_impl.h +11 -12
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +7 -1
- package/deps/rocksdb/rocksdb/options/cf_options.cc +20 -28
- package/deps/rocksdb/rocksdb/options/cf_options.h +7 -14
- package/deps/rocksdb/rocksdb/options/configurable.cc +20 -12
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +4 -6
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +1 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +3 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +22 -48
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -3
- package/deps/rocksdb/rocksdb/options/offpeak_time_info.cc +59 -0
- package/deps/rocksdb/rocksdb/options/offpeak_time_info.h +37 -0
- package/deps/rocksdb/rocksdb/options/options.cc +14 -6
- package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -13
- package/deps/rocksdb/rocksdb/options/options_helper.h +2 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +35 -26
- package/deps/rocksdb/rocksdb/options/options_parser.h +4 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +30 -23
- package/deps/rocksdb/rocksdb/port/lang.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_example.h +7 -7
- package/deps/rocksdb/rocksdb/port/port_posix.cc +7 -7
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -7
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +85 -24
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -2
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +4 -4
- package/deps/rocksdb/rocksdb/port/win/io_win.h +13 -17
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.h +4 -4
- package/deps/rocksdb/rocksdb/src.mk +16 -1
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -7
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +39 -15
- package/deps/rocksdb/rocksdb/table/block_based/block.h +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +80 -40
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +20 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +228 -122
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +50 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +82 -25
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +17 -20
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +47 -13
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +163 -50
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +23 -23
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +32 -27
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +7 -10
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +25 -7
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -5
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -5
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -5
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +138 -86
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +22 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +26 -13
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +11 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +11 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +10 -5
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +6 -7
- package/deps/rocksdb/rocksdb/table/format.cc +15 -21
- package/deps/rocksdb/rocksdb/table/format.h +8 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +121 -78
- package/deps/rocksdb/rocksdb/table/get_context.h +11 -6
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +12 -5
- package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -1
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +5 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +4 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +15 -11
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +8 -4
- package/deps/rocksdb/rocksdb/table/mock_table.cc +12 -8
- package/deps/rocksdb/rocksdb/table/mock_table.h +1 -3
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -21
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +4 -14
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +7 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +7 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +15 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +75 -30
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +7 -2
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +76 -11
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +358 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +93 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +12 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +12 -6
- package/deps/rocksdb/rocksdb/table/table_iterator.h +69 -0
- package/deps/rocksdb/rocksdb/table/table_properties.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/table/table_test.cc +732 -121
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +3 -1
- package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
- package/deps/rocksdb/rocksdb/table/unique_id.cc +2 -2
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +2 -2
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +5 -5
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +2 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +56 -32
- package/deps/rocksdb/rocksdb/test_util/testutil.h +57 -34
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +18 -1
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +210 -112
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +22 -27
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +10 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +328 -59
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +34 -2
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +64 -17
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +8 -1
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +3 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +136 -10
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +50 -8
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +51 -45
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +10 -10
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +14 -4
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +2 -1
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +2 -2
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -4
- package/deps/rocksdb/rocksdb/util/atomic.h +111 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +5 -1
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +12 -2
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/coding.h +34 -38
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/comparator.cc +18 -5
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +4 -4
- package/deps/rocksdb/rocksdb/util/crc32c.cc +3 -6
- package/deps/rocksdb/rocksdb/util/crc32c.h +3 -3
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +3 -4
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -2
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +2 -4
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -4
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -2
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +3 -3
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +83 -59
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/hash.h +4 -4
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +3 -3
- package/deps/rocksdb/rocksdb/util/murmurhash.cc +1 -1
- package/deps/rocksdb/rocksdb/util/random.cc +3 -4
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +23 -43
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +21 -16
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +44 -24
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +2 -3
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +2 -10
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/slice.cc +4 -5
- package/deps/rocksdb/rocksdb/util/slice_test.cc +70 -4
- package/deps/rocksdb/rocksdb/util/status.cc +1 -1
- package/deps/rocksdb/rocksdb/util/stderr_logger.cc +39 -7
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +12 -2
- package/deps/rocksdb/rocksdb/util/string_util.cc +31 -18
- package/deps/rocksdb/rocksdb/util/string_util.h +9 -9
- package/deps/rocksdb/rocksdb/util/string_util_test.cc +36 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +5 -5
- package/deps/rocksdb/rocksdb/util/thread_local.cc +1 -1
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +3 -4
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +1 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +4 -4
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +12 -16
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +116 -116
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -31
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -22
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +9 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +3 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +22 -55
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +113 -74
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +36 -24
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +27 -11
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +68 -54
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +16 -16
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +29 -9
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +27 -14
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +8 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +9 -7
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +7 -10
- package/deps/rocksdb/rocksdb/utilities/debug.cc +6 -2
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +18 -11
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +18 -25
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +32 -23
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +51 -48
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +7 -7
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +10 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +5 -6
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +5 -6
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -8
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +29 -21
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +14 -15
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -5
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +8 -8
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +6 -9
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +6 -6
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +12 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +17 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +442 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +27 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +28 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +70 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +50 -22
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +64 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +76 -17
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +573 -77
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +65 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +13 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +14 -16
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +37 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +23 -29
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +31 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +8 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +34 -18
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +21 -25
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/types_util.cc +88 -0
- package/deps/rocksdb/rocksdb/utilities/types_util_test.cc +98 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +463 -90
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +259 -76
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +70 -14
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +609 -10
- package/deps/rocksdb/rocksdb.gyp +8 -4
- package/index.js +18 -4
- package/max_rev_operator.h +2 -0
- package/package.json +2 -2
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/util.h +29 -5
- package/.tap/coverage/4c642b53-6895-4ef0-9391-7c6b8d484262.json +0 -14334
- package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +0 -57
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
#include <algorithm>
|
|
13
13
|
#include <atomic>
|
|
14
|
+
#include <deque>
|
|
14
15
|
#include <sstream>
|
|
15
16
|
#include <string>
|
|
16
17
|
|
|
@@ -31,7 +32,39 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
31
32
|
struct IOOptions;
|
|
32
33
|
class RandomAccessFileReader;
|
|
33
34
|
|
|
35
|
+
struct ReadaheadParams {
|
|
36
|
+
ReadaheadParams() {}
|
|
37
|
+
|
|
38
|
+
// The initial readahead size.
|
|
39
|
+
size_t initial_readahead_size = 0;
|
|
40
|
+
|
|
41
|
+
// The maximum readahead size.
|
|
42
|
+
// If max_readahead_size > readahead_size, then readahead size will be doubled
|
|
43
|
+
// on every IO until max_readahead_size is hit. Typically this is set as a
|
|
44
|
+
// multiple of initial_readahead_size. initial_readahead_size should be
|
|
45
|
+
// greater than equal to initial_readahead_size.
|
|
46
|
+
size_t max_readahead_size = 0;
|
|
47
|
+
|
|
48
|
+
// If true, Readahead is enabled implicitly by rocksdb
|
|
49
|
+
// after doing sequential scans for num_file_reads_for_auto_readahead.
|
|
50
|
+
bool implicit_auto_readahead = false;
|
|
51
|
+
|
|
52
|
+
// TODO akanksha - Remove num_file_reads when BlockPrefetcher is refactored.
|
|
53
|
+
uint64_t num_file_reads = 0;
|
|
54
|
+
uint64_t num_file_reads_for_auto_readahead = 0;
|
|
55
|
+
|
|
56
|
+
// Number of buffers to maintain that contains prefetched data. If num_buffers
|
|
57
|
+
// > 1 then buffers will be filled asynchronously whenever they get emptied.
|
|
58
|
+
size_t num_buffers = 1;
|
|
59
|
+
};
|
|
60
|
+
|
|
34
61
|
struct BufferInfo {
|
|
62
|
+
void ClearBuffer() {
|
|
63
|
+
buffer_.Clear();
|
|
64
|
+
initial_end_offset_ = 0;
|
|
65
|
+
async_req_len_ = 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
35
68
|
AlignedBuffer buffer_;
|
|
36
69
|
|
|
37
70
|
uint64_t offset_ = 0;
|
|
@@ -50,8 +83,50 @@ struct BufferInfo {
|
|
|
50
83
|
|
|
51
84
|
IOHandleDeleter del_fn_ = nullptr;
|
|
52
85
|
|
|
53
|
-
//
|
|
54
|
-
|
|
86
|
+
// initial_end_offset is used to keep track of the end offset of the buffer
|
|
87
|
+
// that was originally called. It's helpful in case of autotuning of readahead
|
|
88
|
+
// size when callback is made to BlockBasedTableIterator.
|
|
89
|
+
// initial end offset of this buffer which will be the starting
|
|
90
|
+
// offset of next prefetch.
|
|
91
|
+
//
|
|
92
|
+
// For example - if end offset of previous buffer was 100 and because of
|
|
93
|
+
// readahead_size optimization, end_offset was trimmed to 60. Then for next
|
|
94
|
+
// prefetch call, start_offset should be intialized to 100 i.e start_offset =
|
|
95
|
+
// buf->initial_end_offset_.
|
|
96
|
+
uint64_t initial_end_offset_ = 0;
|
|
97
|
+
|
|
98
|
+
bool IsDataBlockInBuffer(uint64_t offset, size_t length) {
|
|
99
|
+
assert(async_read_in_progress_ == false);
|
|
100
|
+
return (offset >= offset_ &&
|
|
101
|
+
offset + length <= offset_ + buffer_.CurrentSize());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
bool IsOffsetInBuffer(uint64_t offset) {
|
|
105
|
+
assert(async_read_in_progress_ == false);
|
|
106
|
+
return (offset >= offset_ && offset < offset_ + buffer_.CurrentSize());
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
bool DoesBufferContainData() {
|
|
110
|
+
assert(async_read_in_progress_ == false);
|
|
111
|
+
return buffer_.CurrentSize() > 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
bool IsBufferOutdated(uint64_t offset) {
|
|
115
|
+
return (!async_read_in_progress_ && DoesBufferContainData() &&
|
|
116
|
+
offset >= offset_ + buffer_.CurrentSize());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
bool IsBufferOutdatedWithAsyncProgress(uint64_t offset) {
|
|
120
|
+
return (async_read_in_progress_ && io_handle_ != nullptr &&
|
|
121
|
+
offset >= offset_ + async_req_len_);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
bool IsOffsetInBufferWithAsyncProgress(uint64_t offset) {
|
|
125
|
+
return (async_read_in_progress_ && offset >= offset_ &&
|
|
126
|
+
offset < offset_ + async_req_len_);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
size_t CurrentSize() { return buffer_.CurrentSize(); }
|
|
55
130
|
};
|
|
56
131
|
|
|
57
132
|
enum class FilePrefetchBufferUsage {
|
|
@@ -60,66 +135,87 @@ enum class FilePrefetchBufferUsage {
|
|
|
60
135
|
kUnknown,
|
|
61
136
|
};
|
|
62
137
|
|
|
138
|
+
// Implementation:
|
|
139
|
+
// FilePrefetchBuffer maintains a dequeu of free buffers (free_bufs_) with no
|
|
140
|
+
// data and bufs_ which contains the prefetched data. Whenever a buffer is
|
|
141
|
+
// consumed or is outdated (w.r.t. to requested offset), that buffer is cleared
|
|
142
|
+
// and returned to free_bufs_.
|
|
143
|
+
//
|
|
144
|
+
// If a buffer is available in free_bufs_, it's moved to bufs_ and is sent for
|
|
145
|
+
// prefetching.
|
|
146
|
+
// num_buffers_ defines how many buffers FilePrefetchBuffer can maintain at a
|
|
147
|
+
// time that contains prefetched data with num_buffers_ == bufs_.size() +
|
|
148
|
+
// free_bufs_.size().
|
|
149
|
+
//
|
|
150
|
+
// If num_buffers_ == 1, it's a sequential read flow. Read API will be called on
|
|
151
|
+
// that one buffer whenever the data is requested and is not in the buffer.
|
|
152
|
+
// If num_buffers_ > 1, then the data is prefetched asynchronosuly in the
|
|
153
|
+
// buffers whenever the data is consumed from the buffers and that buffer is
|
|
154
|
+
// freed.
|
|
155
|
+
// If num_buffers > 1, then requested data can be overlapping between 2 buffers.
|
|
156
|
+
// To return the continuous buffer, overlap_buf_ is used. The requested data is
|
|
157
|
+
// copied from 2 buffers to the overlap_buf_ and overlap_buf_ is returned to
|
|
158
|
+
// the caller.
|
|
159
|
+
|
|
63
160
|
// FilePrefetchBuffer is a smart buffer to store and read data from a file.
|
|
64
161
|
class FilePrefetchBuffer {
|
|
65
162
|
public:
|
|
66
163
|
// Constructor.
|
|
67
164
|
//
|
|
68
165
|
// All arguments are optional.
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
// enable : controls whether reading from the buffer is enabled.
|
|
76
|
-
// If false, TryReadFromCache() always return false, and we only take stats
|
|
77
|
-
// for the minimum offset if track_min_offset = true.
|
|
166
|
+
// ReadaheadParams : Parameters to control the readahead behavior.
|
|
167
|
+
// enable : controls whether reading from the buffer is enabled.
|
|
168
|
+
// If false, TryReadFromCache() always return false, and we
|
|
169
|
+
// only take stats for the minimum offset if
|
|
170
|
+
// track_min_offset = true.
|
|
171
|
+
// See below NOTE about mmap reads.
|
|
78
172
|
// track_min_offset : Track the minimum offset ever read and collect stats on
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
// doing sequential scans for two times.
|
|
173
|
+
// it. Used for adaptable readahead of the file
|
|
174
|
+
// footer/metadata.
|
|
82
175
|
//
|
|
83
|
-
// Automatic readhead is enabled for a file if readahead_size
|
|
84
|
-
// and max_readahead_size are passed in.
|
|
85
176
|
// A user can construct a FilePrefetchBuffer without any arguments, but use
|
|
86
177
|
// `Prefetch` to load data into the buffer.
|
|
178
|
+
// NOTE: FilePrefetchBuffer is incompatible with prefetching from
|
|
179
|
+
// RandomAccessFileReaders using mmap reads, so it is common to use
|
|
180
|
+
// `!use_mmap_reads` for the `enable` parameter.
|
|
87
181
|
FilePrefetchBuffer(
|
|
88
|
-
|
|
89
|
-
bool
|
|
90
|
-
bool implicit_auto_readahead = false, uint64_t num_file_reads = 0,
|
|
91
|
-
uint64_t num_file_reads_for_auto_readahead = 0,
|
|
92
|
-
uint64_t upper_bound_offset = 0, FileSystem* fs = nullptr,
|
|
182
|
+
const ReadaheadParams& readahead_params = {}, bool enable = true,
|
|
183
|
+
bool track_min_offset = false, FileSystem* fs = nullptr,
|
|
93
184
|
SystemClock* clock = nullptr, Statistics* stats = nullptr,
|
|
94
|
-
const std::function<void(
|
|
185
|
+
const std::function<void(bool, uint64_t&, uint64_t&)>& cb = nullptr,
|
|
95
186
|
FilePrefetchBufferUsage usage = FilePrefetchBufferUsage::kUnknown)
|
|
96
|
-
:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
max_readahead_size_(max_readahead_size),
|
|
187
|
+
: readahead_size_(readahead_params.initial_readahead_size),
|
|
188
|
+
initial_auto_readahead_size_(readahead_params.initial_readahead_size),
|
|
189
|
+
max_readahead_size_(readahead_params.max_readahead_size),
|
|
100
190
|
min_offset_read_(std::numeric_limits<size_t>::max()),
|
|
101
191
|
enable_(enable),
|
|
102
192
|
track_min_offset_(track_min_offset),
|
|
103
|
-
implicit_auto_readahead_(implicit_auto_readahead),
|
|
193
|
+
implicit_auto_readahead_(readahead_params.implicit_auto_readahead),
|
|
104
194
|
prev_offset_(0),
|
|
105
195
|
prev_len_(0),
|
|
106
|
-
num_file_reads_for_auto_readahead_(
|
|
107
|
-
|
|
196
|
+
num_file_reads_for_auto_readahead_(
|
|
197
|
+
readahead_params.num_file_reads_for_auto_readahead),
|
|
198
|
+
num_file_reads_(readahead_params.num_file_reads),
|
|
108
199
|
explicit_prefetch_submitted_(false),
|
|
109
200
|
fs_(fs),
|
|
110
201
|
clock_(clock),
|
|
111
202
|
stats_(stats),
|
|
112
203
|
usage_(usage),
|
|
113
|
-
|
|
114
|
-
|
|
204
|
+
readaheadsize_cb_(cb),
|
|
205
|
+
num_buffers_(readahead_params.num_buffers) {
|
|
115
206
|
assert((num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) ||
|
|
116
207
|
(num_file_reads_ == 0));
|
|
117
|
-
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
208
|
+
|
|
209
|
+
// If num_buffers_ > 1, data is asynchronously filled in the
|
|
210
|
+
// queue. As result, data can be overlapping in two buffers. It copies the
|
|
211
|
+
// data to overlap_buf_ in order to to return continuous buffer.
|
|
212
|
+
if (num_buffers_ > 1) {
|
|
213
|
+
overlap_buf_ = new BufferInfo();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
free_bufs_.resize(num_buffers_);
|
|
217
|
+
for (uint32_t i = 0; i < num_buffers_; i++) {
|
|
218
|
+
free_bufs_[i] = new BufferInfo();
|
|
123
219
|
}
|
|
124
220
|
}
|
|
125
221
|
|
|
@@ -127,10 +223,9 @@ class FilePrefetchBuffer {
|
|
|
127
223
|
// Abort any pending async read request before destroying the class object.
|
|
128
224
|
if (fs_ != nullptr) {
|
|
129
225
|
std::vector<void*> handles;
|
|
130
|
-
for (
|
|
131
|
-
if (
|
|
132
|
-
|
|
133
|
-
handles.emplace_back(bufs_[i].io_handle_);
|
|
226
|
+
for (auto& buf : bufs_) {
|
|
227
|
+
if (buf->async_read_in_progress_ && buf->io_handle_ != nullptr) {
|
|
228
|
+
handles.emplace_back(buf->io_handle_);
|
|
134
229
|
}
|
|
135
230
|
}
|
|
136
231
|
if (!handles.empty()) {
|
|
@@ -138,60 +233,63 @@ class FilePrefetchBuffer {
|
|
|
138
233
|
Status s = fs_->AbortIO(handles);
|
|
139
234
|
assert(s.ok());
|
|
140
235
|
}
|
|
236
|
+
|
|
237
|
+
for (auto& buf : bufs_) {
|
|
238
|
+
if (buf->io_handle_ != nullptr) {
|
|
239
|
+
DestroyAndClearIOHandle(buf);
|
|
240
|
+
buf->ClearBuffer();
|
|
241
|
+
}
|
|
242
|
+
buf->async_read_in_progress_ = false;
|
|
243
|
+
}
|
|
141
244
|
}
|
|
142
245
|
|
|
143
246
|
// Prefetch buffer bytes discarded.
|
|
144
247
|
uint64_t bytes_discarded = 0;
|
|
145
|
-
// Iterated over
|
|
146
|
-
for (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (prev_offset_ >= bufs_[first].offset_ &&
|
|
154
|
-
prev_offset_ + prev_len_ <
|
|
155
|
-
bufs_[first].offset_ + bufs_[first].buffer_.CurrentSize()) {
|
|
156
|
-
bytes_discarded += bufs_[first].buffer_.CurrentSize() -
|
|
157
|
-
(prev_offset_ + prev_len_ - bufs_[first].offset_);
|
|
248
|
+
// Iterated over buffers.
|
|
249
|
+
for (auto& buf : bufs_) {
|
|
250
|
+
if (buf->DoesBufferContainData()) {
|
|
251
|
+
// If last read was from this block and some bytes are still unconsumed.
|
|
252
|
+
if (prev_offset_ >= buf->offset_ &&
|
|
253
|
+
prev_offset_ + prev_len_ < buf->offset_ + buf->CurrentSize()) {
|
|
254
|
+
bytes_discarded +=
|
|
255
|
+
buf->CurrentSize() - (prev_offset_ + prev_len_ - buf->offset_);
|
|
158
256
|
}
|
|
159
|
-
// If
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
// If last block read was completely from different buffer, this
|
|
164
|
-
// buffer is unconsumed.
|
|
165
|
-
if (prev_offset_ + prev_len_ <= bufs_[first].offset_) {
|
|
166
|
-
bytes_discarded += bufs_[first].buffer_.CurrentSize();
|
|
167
|
-
}
|
|
168
|
-
// If last block read overlaps with this buffer and some data is
|
|
169
|
-
// still unconsumed and previous buffer (second) is not cleared.
|
|
170
|
-
else if (prev_offset_ + prev_len_ > bufs_[first].offset_ &&
|
|
171
|
-
bufs_[first].offset_ + bufs_[first].buffer_.CurrentSize() ==
|
|
172
|
-
bufs_[second].offset_) {
|
|
173
|
-
bytes_discarded += bufs_[first].buffer_.CurrentSize() -
|
|
174
|
-
(/*bytes read from this buffer=*/prev_len_ -
|
|
175
|
-
(bufs_[first].offset_ - prev_offset_));
|
|
176
|
-
}
|
|
257
|
+
// If last read was from previous blocks and this block is unconsumed.
|
|
258
|
+
else if (prev_offset_ < buf->offset_ &&
|
|
259
|
+
prev_offset_ + prev_len_ <= buf->offset_) {
|
|
260
|
+
bytes_discarded += buf->CurrentSize();
|
|
177
261
|
}
|
|
178
262
|
}
|
|
179
263
|
}
|
|
180
264
|
|
|
181
|
-
for (uint32_t i = 0; i < 2; i++) {
|
|
182
|
-
// Release io_handle.
|
|
183
|
-
DestroyAndClearIOHandle(i);
|
|
184
|
-
}
|
|
185
265
|
RecordInHistogram(stats_, PREFETCHED_BYTES_DISCARDED, bytes_discarded);
|
|
266
|
+
|
|
267
|
+
for (auto& buf : bufs_) {
|
|
268
|
+
delete buf;
|
|
269
|
+
buf = nullptr;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
for (auto& buf : free_bufs_) {
|
|
273
|
+
delete buf;
|
|
274
|
+
buf = nullptr;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (overlap_buf_ != nullptr) {
|
|
278
|
+
delete overlap_buf_;
|
|
279
|
+
overlap_buf_ = nullptr;
|
|
280
|
+
}
|
|
186
281
|
}
|
|
187
282
|
|
|
188
283
|
bool Enabled() const { return enable_; }
|
|
189
284
|
|
|
190
|
-
//
|
|
285
|
+
// Called externally by user to only load data into the buffer from a file
|
|
286
|
+
// with num_buffers_ should be set to default(1).
|
|
287
|
+
//
|
|
191
288
|
// opts : the IO options to use.
|
|
192
289
|
// reader : the file reader.
|
|
193
290
|
// offset : the file offset to start reading from.
|
|
194
291
|
// n : the number of bytes to read.
|
|
292
|
+
//
|
|
195
293
|
Status Prefetch(const IOOptions& opts, RandomAccessFileReader* reader,
|
|
196
294
|
uint64_t offset, size_t n);
|
|
197
295
|
|
|
@@ -225,23 +323,16 @@ class FilePrefetchBuffer {
|
|
|
225
323
|
uint64_t offset, size_t n, Slice* result, Status* s,
|
|
226
324
|
bool for_compaction = false);
|
|
227
325
|
|
|
228
|
-
bool TryReadFromCacheAsync(const IOOptions& opts,
|
|
229
|
-
RandomAccessFileReader* reader, uint64_t offset,
|
|
230
|
-
size_t n, Slice* result, Status* status);
|
|
231
|
-
|
|
232
326
|
// The minimum `offset` ever passed to TryReadFromCache(). This will nly be
|
|
233
327
|
// tracked if track_min_offset = true.
|
|
234
328
|
size_t min_offset_read() const { return min_offset_read_; }
|
|
235
329
|
|
|
236
|
-
size_t GetPrefetchOffset() const { return bufs_
|
|
330
|
+
size_t GetPrefetchOffset() const { return bufs_.front()->offset_; }
|
|
237
331
|
|
|
238
332
|
// Called in case of implicit auto prefetching.
|
|
239
333
|
void UpdateReadPattern(const uint64_t& offset, const size_t& len,
|
|
240
334
|
bool decrease_readaheadsize) {
|
|
241
335
|
if (decrease_readaheadsize) {
|
|
242
|
-
// Since this block was eligible for prefetch but it was found in
|
|
243
|
-
// cache, so check and decrease the readahead_size by 8KB (default)
|
|
244
|
-
// if eligible.
|
|
245
336
|
DecreaseReadAheadIfEligible(offset, len);
|
|
246
337
|
}
|
|
247
338
|
prev_offset_ = offset;
|
|
@@ -256,6 +347,10 @@ class FilePrefetchBuffer {
|
|
|
256
347
|
|
|
257
348
|
void DecreaseReadAheadIfEligible(uint64_t offset, size_t size,
|
|
258
349
|
size_t value = DEFAULT_DECREMENT) {
|
|
350
|
+
if (bufs_.empty()) {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
|
|
259
354
|
// Decrease the readahead_size if
|
|
260
355
|
// - its enabled internally by RocksDB (implicit_auto_readahead_) and,
|
|
261
356
|
// - readahead_size is greater than 0 and,
|
|
@@ -265,11 +360,12 @@ class FilePrefetchBuffer {
|
|
|
265
360
|
// - block is sequential with the previous read and,
|
|
266
361
|
// - num_file_reads_ + 1 (including this read) >
|
|
267
362
|
// num_file_reads_for_auto_readahead_
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
363
|
+
|
|
364
|
+
size_t curr_size = bufs_.front()->async_read_in_progress_
|
|
365
|
+
? bufs_.front()->async_req_len_
|
|
366
|
+
: bufs_.front()->CurrentSize();
|
|
271
367
|
if (implicit_auto_readahead_ && readahead_size_ > 0) {
|
|
272
|
-
if ((offset + size > bufs_
|
|
368
|
+
if ((offset + size > bufs_.front()->offset_ + curr_size) &&
|
|
273
369
|
IsBlockSequential(offset) &&
|
|
274
370
|
(num_file_reads_ + 1 > num_file_reads_for_auto_readahead_)) {
|
|
275
371
|
readahead_size_ =
|
|
@@ -280,46 +376,49 @@ class FilePrefetchBuffer {
|
|
|
280
376
|
}
|
|
281
377
|
|
|
282
378
|
// Callback function passed to underlying FS in case of asynchronous reads.
|
|
283
|
-
void PrefetchAsyncCallback(
|
|
284
|
-
|
|
285
|
-
void
|
|
286
|
-
|
|
287
|
-
|
|
379
|
+
void PrefetchAsyncCallback(FSReadRequest& req, void* cb_arg);
|
|
380
|
+
|
|
381
|
+
void TEST_GetBufferOffsetandSize(
|
|
382
|
+
std::vector<std::pair<uint64_t, size_t>>& buffer_info) {
|
|
383
|
+
for (size_t i = 0; i < bufs_.size(); i++) {
|
|
384
|
+
buffer_info[i].first = bufs_[i]->offset_;
|
|
385
|
+
buffer_info[i].second = bufs_[i]->async_read_in_progress_
|
|
386
|
+
? bufs_[i]->async_req_len_
|
|
387
|
+
: bufs_[i]->CurrentSize();
|
|
388
|
+
}
|
|
288
389
|
}
|
|
289
390
|
|
|
290
391
|
private:
|
|
291
392
|
// Calculates roundoff offset and length to be prefetched based on alignment
|
|
292
393
|
// and data present in buffer_. It also allocates new buffer or refit tail if
|
|
293
394
|
// required.
|
|
294
|
-
void
|
|
295
|
-
|
|
296
|
-
|
|
395
|
+
void PrepareBufferForRead(BufferInfo* buf, size_t alignment, uint64_t offset,
|
|
396
|
+
size_t roundup_len, bool refit_tail,
|
|
397
|
+
uint64_t& aligned_useful_len);
|
|
297
398
|
|
|
298
|
-
void
|
|
399
|
+
void AbortOutdatedIO(uint64_t offset);
|
|
299
400
|
|
|
300
401
|
void AbortAllIOs();
|
|
301
402
|
|
|
302
|
-
void
|
|
403
|
+
void ClearOutdatedData(uint64_t offset, size_t len);
|
|
303
404
|
|
|
304
|
-
// It calls Poll API
|
|
305
|
-
|
|
306
|
-
// buffers if required.
|
|
307
|
-
void PollAndUpdateBuffersIfNeeded(uint64_t offset);
|
|
405
|
+
// It calls Poll API to check for any pending asynchronous request.
|
|
406
|
+
void PollIfNeeded(uint64_t offset, size_t len);
|
|
308
407
|
|
|
309
|
-
Status
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
bool& copy_to_third_buffer);
|
|
408
|
+
Status PrefetchInternal(const IOOptions& opts, RandomAccessFileReader* reader,
|
|
409
|
+
uint64_t offset, size_t length, size_t readahead_size,
|
|
410
|
+
bool& copy_to_third_buffer);
|
|
313
411
|
|
|
314
|
-
Status Read(const IOOptions& opts,
|
|
315
|
-
|
|
316
|
-
|
|
412
|
+
Status Read(BufferInfo* buf, const IOOptions& opts,
|
|
413
|
+
RandomAccessFileReader* reader, uint64_t read_len,
|
|
414
|
+
uint64_t aligned_useful_len, uint64_t start_offset);
|
|
317
415
|
|
|
318
|
-
Status ReadAsync(const IOOptions& opts,
|
|
319
|
-
|
|
416
|
+
Status ReadAsync(BufferInfo* buf, const IOOptions& opts,
|
|
417
|
+
RandomAccessFileReader* reader, uint64_t read_len,
|
|
418
|
+
uint64_t start_offset);
|
|
320
419
|
|
|
321
|
-
// Copy the data from src to
|
|
322
|
-
void CopyDataToBuffer(
|
|
420
|
+
// Copy the data from src to overlap_buf_.
|
|
421
|
+
void CopyDataToBuffer(BufferInfo* src, uint64_t& offset, size_t& length);
|
|
323
422
|
|
|
324
423
|
bool IsBlockSequential(const size_t& offset) {
|
|
325
424
|
return (prev_len_ == 0 || (prev_offset_ + prev_len_ == offset));
|
|
@@ -355,64 +454,24 @@ class FilePrefetchBuffer {
|
|
|
355
454
|
return true;
|
|
356
455
|
}
|
|
357
456
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
return (offset >= bufs_[index].offset_ &&
|
|
361
|
-
offset + length <=
|
|
362
|
-
bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
|
|
363
|
-
}
|
|
364
|
-
bool IsOffsetInBuffer(uint64_t offset, uint32_t index) {
|
|
365
|
-
return (offset >= bufs_[index].offset_ &&
|
|
366
|
-
offset < bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
|
|
367
|
-
}
|
|
368
|
-
bool DoesBufferContainData(uint32_t index) {
|
|
369
|
-
return bufs_[index].buffer_.CurrentSize() > 0;
|
|
370
|
-
}
|
|
371
|
-
bool IsBufferOutdated(uint64_t offset, uint32_t index) {
|
|
372
|
-
return (
|
|
373
|
-
!bufs_[index].async_read_in_progress_ && DoesBufferContainData(index) &&
|
|
374
|
-
offset >= bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
|
|
375
|
-
}
|
|
376
|
-
bool IsBufferOutdatedWithAsyncProgress(uint64_t offset, uint32_t index) {
|
|
377
|
-
return (bufs_[index].async_read_in_progress_ &&
|
|
378
|
-
bufs_[index].io_handle_ != nullptr &&
|
|
379
|
-
offset >= bufs_[index].offset_ + bufs_[index].async_req_len_);
|
|
380
|
-
}
|
|
381
|
-
bool IsOffsetInBufferWithAsyncProgress(uint64_t offset, uint32_t index) {
|
|
382
|
-
return (bufs_[index].async_read_in_progress_ &&
|
|
383
|
-
offset >= bufs_[index].offset_ &&
|
|
384
|
-
offset < bufs_[index].offset_ + bufs_[index].async_req_len_);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
bool IsSecondBuffEligibleForPrefetching() {
|
|
388
|
-
uint32_t second = curr_ ^ 1;
|
|
389
|
-
if (bufs_[second].async_read_in_progress_) {
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
assert(!bufs_[curr_].async_read_in_progress_);
|
|
393
|
-
|
|
394
|
-
if (DoesBufferContainData(curr_) && DoesBufferContainData(second) &&
|
|
395
|
-
(bufs_[curr_].offset_ + bufs_[curr_].buffer_.CurrentSize() ==
|
|
396
|
-
bufs_[second].offset_)) {
|
|
457
|
+
bool IsEligibleForFurtherPrefetching() {
|
|
458
|
+
if (free_bufs_.empty()) {
|
|
397
459
|
return false;
|
|
398
460
|
}
|
|
399
|
-
|
|
400
461
|
// Readahead size can be 0 because of trimming.
|
|
401
462
|
if (readahead_size_ == 0) {
|
|
402
463
|
return false;
|
|
403
464
|
}
|
|
404
|
-
|
|
405
|
-
bufs_[second].buffer_.Clear();
|
|
406
465
|
return true;
|
|
407
466
|
}
|
|
408
467
|
|
|
409
|
-
void DestroyAndClearIOHandle(
|
|
410
|
-
if (
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
468
|
+
void DestroyAndClearIOHandle(BufferInfo* buf) {
|
|
469
|
+
if (buf->io_handle_ != nullptr && buf->del_fn_ != nullptr) {
|
|
470
|
+
buf->del_fn_(buf->io_handle_);
|
|
471
|
+
buf->io_handle_ = nullptr;
|
|
472
|
+
buf->del_fn_ = nullptr;
|
|
414
473
|
}
|
|
415
|
-
|
|
474
|
+
buf->async_read_in_progress_ = false;
|
|
416
475
|
}
|
|
417
476
|
|
|
418
477
|
Status HandleOverlappingData(const IOOptions& opts,
|
|
@@ -427,49 +486,102 @@ class FilePrefetchBuffer {
|
|
|
427
486
|
Status* s,
|
|
428
487
|
bool for_compaction = false);
|
|
429
488
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
if (
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
}
|
|
489
|
+
void ReadAheadSizeTuning(BufferInfo* buf, bool read_curr_block,
|
|
490
|
+
bool refit_tail, uint64_t prev_buf_end_offset,
|
|
491
|
+
size_t alignment, size_t length,
|
|
492
|
+
size_t readahead_size, uint64_t& offset,
|
|
493
|
+
uint64_t& end_offset, size_t& read_len,
|
|
494
|
+
uint64_t& aligned_useful_len);
|
|
495
|
+
|
|
496
|
+
void UpdateStats(bool found_in_buffer, size_t length_found) {
|
|
497
|
+
if (found_in_buffer) {
|
|
498
|
+
RecordTick(stats_, PREFETCH_HITS);
|
|
499
|
+
}
|
|
500
|
+
if (length_found > 0) {
|
|
501
|
+
RecordTick(stats_, PREFETCH_BYTES_USEFUL, length_found);
|
|
444
502
|
}
|
|
445
503
|
}
|
|
446
504
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
505
|
+
void UpdateReadAheadTrimmedStat(size_t initial_length,
|
|
506
|
+
size_t updated_length) {
|
|
507
|
+
if (initial_length != updated_length) {
|
|
508
|
+
RecordTick(stats_, READAHEAD_TRIMMED);
|
|
450
509
|
}
|
|
451
|
-
return false;
|
|
452
510
|
}
|
|
453
511
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
512
|
+
Status PrefetchRemBuffers(const IOOptions& opts,
|
|
513
|
+
RandomAccessFileReader* reader,
|
|
514
|
+
uint64_t end_offset1, size_t alignment,
|
|
515
|
+
size_t readahead_size);
|
|
516
|
+
|
|
517
|
+
// *** BEGIN APIs related to allocating and freeing buffers ***
|
|
518
|
+
bool IsBufferQueueEmpty() { return bufs_.empty(); }
|
|
519
|
+
|
|
520
|
+
BufferInfo* GetFirstBuffer() { return bufs_.front(); }
|
|
457
521
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
522
|
+
BufferInfo* GetLastBuffer() { return bufs_.back(); }
|
|
523
|
+
|
|
524
|
+
size_t NumBuffersAllocated() { return bufs_.size(); }
|
|
525
|
+
|
|
526
|
+
void AllocateBuffer() {
|
|
527
|
+
assert(!free_bufs_.empty());
|
|
528
|
+
BufferInfo* buf = free_bufs_.front();
|
|
529
|
+
free_bufs_.pop_front();
|
|
530
|
+
bufs_.emplace_back(buf);
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
void AllocateBufferIfEmpty() {
|
|
534
|
+
if (bufs_.empty()) {
|
|
535
|
+
AllocateBuffer();
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
void FreeFrontBuffer() {
|
|
540
|
+
BufferInfo* buf = bufs_.front();
|
|
541
|
+
buf->ClearBuffer();
|
|
542
|
+
bufs_.pop_front();
|
|
543
|
+
free_bufs_.emplace_back(buf);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
void FreeLastBuffer() {
|
|
547
|
+
BufferInfo* buf = bufs_.back();
|
|
548
|
+
buf->ClearBuffer();
|
|
549
|
+
bufs_.pop_back();
|
|
550
|
+
free_bufs_.emplace_back(buf);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
void FreeAllBuffers() {
|
|
554
|
+
while (!bufs_.empty()) {
|
|
555
|
+
BufferInfo* buf = bufs_.front();
|
|
556
|
+
buf->ClearBuffer();
|
|
557
|
+
bufs_.pop_front();
|
|
558
|
+
free_bufs_.emplace_back(buf);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
void FreeEmptyBuffers() {
|
|
563
|
+
if (bufs_.empty()) {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
std::deque<BufferInfo*> tmp_buf;
|
|
568
|
+
while (!bufs_.empty()) {
|
|
569
|
+
BufferInfo* buf = bufs_.front();
|
|
570
|
+
bufs_.pop_front();
|
|
571
|
+
if (buf->async_read_in_progress_ || buf->DoesBufferContainData()) {
|
|
572
|
+
tmp_buf.emplace_back(buf);
|
|
573
|
+
} else {
|
|
574
|
+
free_bufs_.emplace_back(buf);
|
|
463
575
|
}
|
|
464
|
-
return updated_readahead_size;
|
|
465
576
|
}
|
|
466
|
-
|
|
577
|
+
bufs_ = tmp_buf;
|
|
467
578
|
}
|
|
468
579
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
580
|
+
// *** END APIs related to allocating and freeing buffers ***
|
|
581
|
+
|
|
582
|
+
std::deque<BufferInfo*> bufs_;
|
|
583
|
+
std::deque<BufferInfo*> free_bufs_;
|
|
584
|
+
BufferInfo* overlap_buf_ = nullptr;
|
|
473
585
|
|
|
474
586
|
size_t readahead_size_;
|
|
475
587
|
size_t initial_auto_readahead_size_;
|
|
@@ -497,7 +609,7 @@ class FilePrefetchBuffer {
|
|
|
497
609
|
uint64_t num_file_reads_;
|
|
498
610
|
|
|
499
611
|
// If explicit_prefetch_submitted_ is set then it indicates RocksDB called
|
|
500
|
-
// PrefetchAsync to submit request. It needs to call
|
|
612
|
+
// PrefetchAsync to submit request. It needs to call TryReadFromCache to
|
|
501
613
|
// poll the submitted request without checking if data is sequential and
|
|
502
614
|
// num_file_reads_.
|
|
503
615
|
bool explicit_prefetch_submitted_;
|
|
@@ -508,10 +620,10 @@ class FilePrefetchBuffer {
|
|
|
508
620
|
|
|
509
621
|
FilePrefetchBufferUsage usage_;
|
|
510
622
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
//
|
|
514
|
-
|
|
515
|
-
|
|
623
|
+
std::function<void(bool, uint64_t&, uint64_t&)> readaheadsize_cb_;
|
|
624
|
+
|
|
625
|
+
// num_buffers_ is the number of buffers maintained by FilePrefetchBuffer to
|
|
626
|
+
// prefetch the data at a time.
|
|
627
|
+
size_t num_buffers_;
|
|
516
628
|
};
|
|
517
629
|
} // namespace ROCKSDB_NAMESPACE
|