@nxtedition/rocksdb 13.5.8 → 13.5.9
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 +209 -2
- package/deps/rocksdb/rocksdb/BUCK +12 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
- package/deps/rocksdb/rocksdb/Makefile +28 -23
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
- package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
- package/deps/rocksdb/rocksdb/db/builder.h +5 -4
- package/deps/rocksdb/rocksdb/db/c.cc +556 -15
- package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
- package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
- package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
- package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
- package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
- package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
- package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
- package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
- package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
- package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
- package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
- package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
- package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
- package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
- package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
- package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
- package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
- package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
- package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
- package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
- package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
- package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
- package/deps/rocksdb/rocksdb/env/env.cc +32 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
- package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
- package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
- package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
- package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
- package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
- package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
- package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
- package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
- package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
- package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
- package/deps/rocksdb/rocksdb/options/options.cc +296 -305
- package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
- package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
- package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
- package/deps/rocksdb/rocksdb/port/lang.h +2 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
- package/deps/rocksdb/rocksdb/src.mk +17 -11
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
- package/deps/rocksdb/rocksdb/table/format.cc +62 -44
- package/deps/rocksdb/rocksdb/table/format.h +35 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
- package/deps/rocksdb/rocksdb/util/compression.h +348 -232
- package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
- package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
- package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
- package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
- 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 +1 -1
- 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/util/dbt.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
- package/deps/rocksdb/rocksdb.gyp +5 -0
- package/index.js +47 -2
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -299,9 +299,18 @@ TEST_P(PrefetchTest, Basic) {
|
|
|
299
299
|
const uint64_t prev_table_open_prefetch_tail_hit =
|
|
300
300
|
options.statistics->getTickerCount(TABLE_OPEN_PREFETCH_TAIL_HIT);
|
|
301
301
|
|
|
302
|
+
HistogramData pre_compaction_prefetch_bytes;
|
|
303
|
+
options.statistics->histogramData(COMPACTION_PREFETCH_BYTES,
|
|
304
|
+
&pre_compaction_prefetch_bytes);
|
|
305
|
+
ASSERT_EQ(pre_compaction_prefetch_bytes.count, 0);
|
|
306
|
+
|
|
302
307
|
// commenting out the line below causes the example to work correctly
|
|
303
308
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), &least, &greatest));
|
|
304
309
|
|
|
310
|
+
HistogramData post_compaction_prefetch_bytes;
|
|
311
|
+
options.statistics->histogramData(COMPACTION_PREFETCH_BYTES,
|
|
312
|
+
&post_compaction_prefetch_bytes);
|
|
313
|
+
|
|
305
314
|
HistogramData cur_table_open_prefetch_tail_read;
|
|
306
315
|
options.statistics->histogramData(TABLE_OPEN_PREFETCH_TAIL_READ_BYTES,
|
|
307
316
|
&cur_table_open_prefetch_tail_read);
|
|
@@ -318,6 +327,7 @@ TEST_P(PrefetchTest, Basic) {
|
|
|
318
327
|
ASSERT_GT(fs->GetPrefetchCount(), 1);
|
|
319
328
|
ASSERT_EQ(0, buff_prefetch_count);
|
|
320
329
|
fs->ClearPrefetchCount();
|
|
330
|
+
ASSERT_EQ(post_compaction_prefetch_bytes.count, 0);
|
|
321
331
|
} else {
|
|
322
332
|
ASSERT_FALSE(fs->IsPrefetchCalled());
|
|
323
333
|
// To rule out false positive by the SST file tail prefetch during
|
|
@@ -331,6 +341,20 @@ TEST_P(PrefetchTest, Basic) {
|
|
|
331
341
|
prev_table_open_prefetch_tail_hit);
|
|
332
342
|
ASSERT_GE(cur_table_open_prefetch_tail_miss,
|
|
333
343
|
prev_table_open_prefetch_tail_miss);
|
|
344
|
+
|
|
345
|
+
ASSERT_GT(post_compaction_prefetch_bytes.count, 0);
|
|
346
|
+
|
|
347
|
+
// Not an exact match due to potential roundup/down for alignment
|
|
348
|
+
auto expected_compaction_readahead_size =
|
|
349
|
+
Options().compaction_readahead_size;
|
|
350
|
+
ASSERT_LE(post_compaction_prefetch_bytes.max,
|
|
351
|
+
expected_compaction_readahead_size * 1.1);
|
|
352
|
+
ASSERT_GE(post_compaction_prefetch_bytes.max,
|
|
353
|
+
expected_compaction_readahead_size * 0.9);
|
|
354
|
+
ASSERT_LE(post_compaction_prefetch_bytes.average,
|
|
355
|
+
expected_compaction_readahead_size * 1.1);
|
|
356
|
+
ASSERT_GE(post_compaction_prefetch_bytes.average,
|
|
357
|
+
expected_compaction_readahead_size * 0.9);
|
|
334
358
|
}
|
|
335
359
|
|
|
336
360
|
for (bool disable_io : {false, true}) {
|
|
@@ -3251,8 +3275,9 @@ TEST_F(FilePrefetchBufferTest, SyncReadaheadStats) {
|
|
|
3251
3275
|
ReadaheadParams readahead_params;
|
|
3252
3276
|
readahead_params.initial_readahead_size = 8192;
|
|
3253
3277
|
readahead_params.max_readahead_size = 8192;
|
|
3254
|
-
FilePrefetchBuffer fpb(
|
|
3255
|
-
|
|
3278
|
+
FilePrefetchBuffer fpb(
|
|
3279
|
+
readahead_params, true, false, fs(), nullptr, stats.get(),
|
|
3280
|
+
nullptr /* cb */, FilePrefetchBufferUsage::kUserScanPrefetch /* usage */);
|
|
3256
3281
|
Slice result;
|
|
3257
3282
|
// Simulate a seek of 4096 bytes at offset 0. Due to the readahead settings,
|
|
3258
3283
|
// it will do a read of offset 0 and length - (4096 + 8192) 12288.
|
|
@@ -3290,8 +3315,71 @@ TEST_F(FilePrefetchBufferTest, SyncReadaheadStats) {
|
|
|
3290
3315
|
/* 24576(end offset of the buffer) - 16000(requested offset) =*/8576);
|
|
3291
3316
|
}
|
|
3292
3317
|
|
|
3293
|
-
|
|
3294
|
-
|
|
3318
|
+
TEST_F(FilePrefetchBufferTest, ForCompaction) {
|
|
3319
|
+
// Make sure TryReadWithCache with for_compaction=true works without file
|
|
3320
|
+
// system buffer reuse optimization
|
|
3321
|
+
std::string fname = "fs-prefetch-buffer-for-compaction";
|
|
3322
|
+
Random rand(0);
|
|
3323
|
+
std::string content = rand.RandomString(64 * 1024);
|
|
3324
|
+
Write(fname, content);
|
|
3325
|
+
|
|
3326
|
+
FileOptions opts;
|
|
3327
|
+
std::unique_ptr<RandomAccessFileReader> r;
|
|
3328
|
+
Read(fname, opts, &r);
|
|
3329
|
+
|
|
3330
|
+
std::shared_ptr<Statistics> stats = CreateDBStatistics();
|
|
3331
|
+
ReadaheadParams readahead_params;
|
|
3332
|
+
readahead_params.initial_readahead_size = 8192;
|
|
3333
|
+
readahead_params.max_readahead_size = 8192;
|
|
3334
|
+
readahead_params.num_buffers = 1;
|
|
3335
|
+
|
|
3336
|
+
FilePrefetchBuffer fpb(readahead_params, true /* enable */,
|
|
3337
|
+
false /* track_min_offset */, fs(), nullptr,
|
|
3338
|
+
stats.get());
|
|
3339
|
+
|
|
3340
|
+
Slice result;
|
|
3341
|
+
Status s;
|
|
3342
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 0 /* offset */,
|
|
3343
|
+
3000 /* n */, &result, &s, true));
|
|
3344
|
+
ASSERT_EQ(s, Status::OK());
|
|
3345
|
+
ASSERT_EQ(result.size(), 3000);
|
|
3346
|
+
ASSERT_EQ(strncmp(result.data(), content.substr(0, 3000).c_str(), 3000), 0);
|
|
3347
|
+
|
|
3348
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 3000 /* offset */,
|
|
3349
|
+
10000 /* n */, &result, &s, true));
|
|
3350
|
+
ASSERT_EQ(s, Status::OK());
|
|
3351
|
+
ASSERT_EQ(result.size(), 10000);
|
|
3352
|
+
ASSERT_EQ(strncmp(result.data(), content.substr(3000, 10000).c_str(), 10000),
|
|
3353
|
+
0);
|
|
3354
|
+
|
|
3355
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 15000 /* offset */,
|
|
3356
|
+
4096 /* n */, &result, &s, true));
|
|
3357
|
+
ASSERT_EQ(s, Status::OK());
|
|
3358
|
+
ASSERT_EQ(result.size(), 4096);
|
|
3359
|
+
ASSERT_EQ(strncmp(result.data(), content.substr(15000, 4096).c_str(), 4096),
|
|
3360
|
+
0);
|
|
3361
|
+
|
|
3362
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 40000 /* offset */,
|
|
3363
|
+
20000 /* n */, &result, &s, true));
|
|
3364
|
+
ASSERT_EQ(s, Status::OK());
|
|
3365
|
+
ASSERT_EQ(result.size(), 20000);
|
|
3366
|
+
ASSERT_EQ(strncmp(result.data(), content.substr(40000, 20000).c_str(), 20000),
|
|
3367
|
+
0);
|
|
3368
|
+
|
|
3369
|
+
// Try reading past end of file
|
|
3370
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 60000 /* offset */,
|
|
3371
|
+
10000 /* n */, &result, &s, true));
|
|
3372
|
+
ASSERT_EQ(s, Status::OK());
|
|
3373
|
+
ASSERT_EQ(result.size(), 64 * 1024 - 60000);
|
|
3374
|
+
ASSERT_EQ(
|
|
3375
|
+
strncmp(result.data(), content.substr(60000, 64 * 1024 - 60000).c_str(),
|
|
3376
|
+
64 * 1024 - 60000),
|
|
3377
|
+
0);
|
|
3378
|
+
}
|
|
3379
|
+
|
|
3380
|
+
class FSBufferPrefetchTest
|
|
3381
|
+
: public testing::Test,
|
|
3382
|
+
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
|
3295
3383
|
public:
|
|
3296
3384
|
// Mock file system supporting the kFSBuffer buffer reuse operation
|
|
3297
3385
|
class BufferReuseFS : public FileSystemWrapper {
|
|
@@ -3316,12 +3404,24 @@ class FSBufferPrefetchTest : public testing::Test,
|
|
|
3316
3404
|
IODebugContext* dbg) override {
|
|
3317
3405
|
for (size_t i = 0; i < num_reqs; ++i) {
|
|
3318
3406
|
FSReadRequest& req = reqs[i];
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3407
|
+
|
|
3408
|
+
// We cannot assume that fs_scratch points to the start of
|
|
3409
|
+
// the read data. We can have the FSAllocationPtr point to a
|
|
3410
|
+
// wrapper around the result buffer in our test implementation so
|
|
3411
|
+
// that we can catch whenever we incorrectly make this assumption.
|
|
3412
|
+
// See https://github.com/facebook/rocksdb/pull/13189 for more
|
|
3413
|
+
// context.
|
|
3414
|
+
char* internalData = new char[req.len];
|
|
3323
3415
|
req.status = Read(req.offset, req.len, options, &req.result,
|
|
3324
|
-
|
|
3416
|
+
internalData, dbg);
|
|
3417
|
+
|
|
3418
|
+
Slice* internalSlice = new Slice(internalData, req.len);
|
|
3419
|
+
FSAllocationPtr internalPtr(internalSlice, [](void* ptr) {
|
|
3420
|
+
delete[] static_cast<const char*>(
|
|
3421
|
+
static_cast<Slice*>(ptr)->data_);
|
|
3422
|
+
delete static_cast<Slice*>(ptr);
|
|
3423
|
+
});
|
|
3424
|
+
req.fs_scratch = std::move(internalPtr);
|
|
3325
3425
|
}
|
|
3326
3426
|
return IOStatus::OK();
|
|
3327
3427
|
}
|
|
@@ -3343,7 +3443,7 @@ class FSBufferPrefetchTest : public testing::Test,
|
|
|
3343
3443
|
void SetUp() override {
|
|
3344
3444
|
SetupSyncPointsToMockDirectIO();
|
|
3345
3445
|
env_ = Env::Default();
|
|
3346
|
-
bool use_async_prefetch = GetParam();
|
|
3446
|
+
bool use_async_prefetch = std::get<0>(GetParam());
|
|
3347
3447
|
if (use_async_prefetch) {
|
|
3348
3448
|
fs_ = FileSystem::Default();
|
|
3349
3449
|
} else {
|
|
@@ -3387,8 +3487,13 @@ class FSBufferPrefetchTest : public testing::Test,
|
|
|
3387
3487
|
std::string Path(const std::string& fname) { return test_dir_ + "/" + fname; }
|
|
3388
3488
|
};
|
|
3389
3489
|
|
|
3490
|
+
// param 1: whether async IO is enabled (num_buffers_ > 1)
|
|
3491
|
+
// param 2: whether for_compaction is set to true for TryReadFromCache requests
|
|
3492
|
+
// 3 out of these 4 combinations are tested (async IO is not allowed for
|
|
3493
|
+
// compaction reads)
|
|
3390
3494
|
INSTANTIATE_TEST_CASE_P(FSBufferPrefetchTest, FSBufferPrefetchTest,
|
|
3391
|
-
::testing::Bool()
|
|
3495
|
+
::testing::Combine(::testing::Bool(),
|
|
3496
|
+
::testing::Bool()));
|
|
3392
3497
|
|
|
3393
3498
|
TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
3394
3499
|
// Check that the main buffer, the overlap_buf_, and the secondary buffer (in
|
|
@@ -3407,12 +3512,20 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3407
3512
|
ReadaheadParams readahead_params;
|
|
3408
3513
|
readahead_params.initial_readahead_size = 8192;
|
|
3409
3514
|
readahead_params.max_readahead_size = 8192;
|
|
3410
|
-
bool use_async_prefetch = GetParam();
|
|
3515
|
+
bool use_async_prefetch = std::get<0>(GetParam());
|
|
3516
|
+
bool for_compaction = std::get<1>(GetParam());
|
|
3517
|
+
// We disallow async IO for compaction reads since they are background
|
|
3518
|
+
// operations anyways and not as latency sensitive as user-initiated reads
|
|
3519
|
+
if (use_async_prefetch && for_compaction) {
|
|
3520
|
+
return;
|
|
3521
|
+
}
|
|
3411
3522
|
size_t num_buffers = use_async_prefetch ? 2 : 1;
|
|
3412
3523
|
readahead_params.num_buffers = num_buffers;
|
|
3413
3524
|
|
|
3414
|
-
FilePrefetchBuffer fpb(
|
|
3415
|
-
|
|
3525
|
+
FilePrefetchBuffer fpb(
|
|
3526
|
+
readahead_params, true /* enable */, false /* track_min_offset */, fs(),
|
|
3527
|
+
clock(), stats.get(), nullptr /* cb */,
|
|
3528
|
+
FilePrefetchBufferUsage::kUserScanPrefetch /* usage */);
|
|
3416
3529
|
|
|
3417
3530
|
int overlap_buffer_write_ct = 0;
|
|
3418
3531
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
@@ -3426,15 +3539,18 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3426
3539
|
std::vector<std::tuple<uint64_t, size_t, bool>> buffer_info(num_buffers);
|
|
3427
3540
|
std::pair<uint64_t, size_t> overlap_buffer_info;
|
|
3428
3541
|
bool could_read_from_cache =
|
|
3429
|
-
fpb.TryReadFromCache(IOOptions(), r.get(), 0
|
|
3542
|
+
fpb.TryReadFromCache(IOOptions(), r.get(), 0 /* offset */, 4096 /* n */,
|
|
3543
|
+
&result, &s, for_compaction);
|
|
3430
3544
|
// Platforms that don't have IO uring may not support async IO.
|
|
3431
3545
|
if (use_async_prefetch && s.IsNotSupported()) {
|
|
3432
3546
|
return;
|
|
3433
3547
|
}
|
|
3434
3548
|
ASSERT_TRUE(could_read_from_cache);
|
|
3435
3549
|
ASSERT_EQ(s, Status::OK());
|
|
3550
|
+
|
|
3436
3551
|
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
|
|
3437
3552
|
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL), 0);
|
|
3553
|
+
|
|
3438
3554
|
ASSERT_EQ(strncmp(result.data(), content.substr(0, 4096).c_str(), 4096), 0);
|
|
3439
3555
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
3440
3556
|
fpb.TEST_GetBufferOffsetandSize(buffer_info);
|
|
@@ -3460,12 +3576,15 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3460
3576
|
|
|
3461
3577
|
// Simulate a block cache hit
|
|
3462
3578
|
fpb.UpdateReadPattern(4096, 4096, false);
|
|
3463
|
-
ASSERT_TRUE(
|
|
3464
|
-
|
|
3579
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 8192 /* offset */,
|
|
3580
|
+
8192 /* n */, &result, &s, for_compaction));
|
|
3465
3581
|
ASSERT_EQ(s, Status::OK());
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3582
|
+
if (!for_compaction) {
|
|
3583
|
+
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
|
|
3584
|
+
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
|
|
3585
|
+
4096); // 8192-12288
|
|
3586
|
+
}
|
|
3587
|
+
|
|
3469
3588
|
ASSERT_EQ(strncmp(result.data(), content.substr(8192, 8192).c_str(), 8192),
|
|
3470
3589
|
0);
|
|
3471
3590
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3496,12 +3615,16 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3496
3615
|
ASSERT_EQ(std::get<1>(buffer_info[0]), 12288);
|
|
3497
3616
|
}
|
|
3498
3617
|
|
|
3499
|
-
ASSERT_TRUE(
|
|
3500
|
-
|
|
3618
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 12288 /* offset */,
|
|
3619
|
+
4096 /* n */, &result, &s, for_compaction));
|
|
3501
3620
|
ASSERT_EQ(s, Status::OK());
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3621
|
+
|
|
3622
|
+
if (!for_compaction) {
|
|
3623
|
+
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 1);
|
|
3624
|
+
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
|
|
3625
|
+
4096); // 12288-16384
|
|
3626
|
+
}
|
|
3627
|
+
|
|
3505
3628
|
ASSERT_EQ(strncmp(result.data(), content.substr(12288, 4096).c_str(), 4096),
|
|
3506
3629
|
0);
|
|
3507
3630
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3528,13 +3651,17 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3528
3651
|
}
|
|
3529
3652
|
|
|
3530
3653
|
// Read from 16000-26000 (start and end do not meet normal alignment)
|
|
3531
|
-
ASSERT_TRUE(
|
|
3532
|
-
|
|
3654
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16000 /* offset */,
|
|
3655
|
+
10000 /* n */, &result, &s, for_compaction));
|
|
3533
3656
|
ASSERT_EQ(s, Status::OK());
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3657
|
+
|
|
3658
|
+
if (!for_compaction) {
|
|
3659
|
+
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
|
|
3660
|
+
ASSERT_EQ(
|
|
3661
|
+
stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
|
|
3662
|
+
/* 24576(end offset of the buffer) - 16000(requested offset) =*/8576);
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3538
3665
|
ASSERT_EQ(strncmp(result.data(), content.substr(16000, 10000).c_str(), 10000),
|
|
3539
3666
|
0);
|
|
3540
3667
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3583,10 +3710,17 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3583
3710
|
// Readahead size will double each time
|
|
3584
3711
|
readahead_params.initial_readahead_size = 5;
|
|
3585
3712
|
readahead_params.max_readahead_size = 100;
|
|
3586
|
-
bool use_async_prefetch = GetParam();
|
|
3713
|
+
bool use_async_prefetch = std::get<0>(GetParam());
|
|
3714
|
+
bool for_compaction = std::get<1>(GetParam());
|
|
3715
|
+
// We disallow async IO for compaction reads since they are background
|
|
3716
|
+
// operations anyways and their latencies are not visible to the end user
|
|
3717
|
+
if (use_async_prefetch && for_compaction) {
|
|
3718
|
+
return;
|
|
3719
|
+
}
|
|
3587
3720
|
size_t num_buffers = use_async_prefetch ? 2 : 1;
|
|
3588
3721
|
readahead_params.num_buffers = num_buffers;
|
|
3589
|
-
FilePrefetchBuffer fpb(readahead_params, true
|
|
3722
|
+
FilePrefetchBuffer fpb(readahead_params, true /* enable */,
|
|
3723
|
+
false /* track_min_offset */, fs(), clock(),
|
|
3590
3724
|
stats.get());
|
|
3591
3725
|
|
|
3592
3726
|
int overlap_buffer_write_ct = 0;
|
|
@@ -3601,7 +3735,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3601
3735
|
std::vector<std::tuple<uint64_t, size_t, bool>> buffer_info(num_buffers);
|
|
3602
3736
|
std::pair<uint64_t, size_t> overlap_buffer_info;
|
|
3603
3737
|
bool could_read_from_cache =
|
|
3604
|
-
fpb.TryReadFromCache(IOOptions(), r.get(), 5
|
|
3738
|
+
fpb.TryReadFromCache(IOOptions(), r.get(), 5 /* offset */, 3 /* n */,
|
|
3739
|
+
&result, &s, for_compaction);
|
|
3605
3740
|
// Platforms that don't have IO uring may not support async IO.
|
|
3606
3741
|
if (use_async_prefetch && s.IsNotSupported()) {
|
|
3607
3742
|
return;
|
|
@@ -3633,7 +3768,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3633
3768
|
ASSERT_EQ(std::get<1>(buffer_info[0]), 3 + 5);
|
|
3634
3769
|
}
|
|
3635
3770
|
|
|
3636
|
-
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16
|
|
3771
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16 /* offset */,
|
|
3772
|
+
7 /* n */, &result, &s, for_compaction));
|
|
3637
3773
|
ASSERT_EQ(s, Status::OK());
|
|
3638
3774
|
ASSERT_EQ(strncmp(result.data(), content.substr(16, 7).c_str(), 7), 0);
|
|
3639
3775
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3657,16 +3793,18 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3657
3793
|
|
|
3658
3794
|
// Go backwards
|
|
3659
3795
|
if (use_async_prefetch) {
|
|
3660
|
-
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 10
|
|
3796
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 10 /* offset */,
|
|
3797
|
+
8 /* n */, &result, &s, for_compaction));
|
|
3661
3798
|
} else {
|
|
3662
3799
|
// TryReadFromCacheUntracked returns false since the offset
|
|
3663
3800
|
// requested is less than the start of our buffer
|
|
3664
|
-
ASSERT_FALSE(
|
|
3665
|
-
|
|
3801
|
+
ASSERT_FALSE(fpb.TryReadFromCache(IOOptions(), r.get(), 10 /* offset */,
|
|
3802
|
+
8 /* n */, &result, &s, for_compaction));
|
|
3666
3803
|
}
|
|
3667
3804
|
ASSERT_EQ(s, Status::OK());
|
|
3668
3805
|
|
|
3669
|
-
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 27
|
|
3806
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 27 /* offset */,
|
|
3807
|
+
6 /* n */, &result, &s, for_compaction));
|
|
3670
3808
|
ASSERT_EQ(s, Status::OK());
|
|
3671
3809
|
ASSERT_EQ(strncmp(result.data(), content.substr(27, 6).c_str(), 6), 0);
|
|
3672
3810
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3687,7 +3825,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3687
3825
|
ASSERT_EQ(std::get<1>(buffer_info[0]), 7 + 10);
|
|
3688
3826
|
}
|
|
3689
3827
|
|
|
3690
|
-
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 30
|
|
3828
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 30 /* offset */,
|
|
3829
|
+
20 /* n */, &result, &s, for_compaction));
|
|
3691
3830
|
ASSERT_EQ(s, Status::OK());
|
|
3692
3831
|
ASSERT_EQ(strncmp(result.data(), content.substr(30, 20).c_str(), 20), 0);
|
|
3693
3832
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
@@ -3710,13 +3849,13 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3710
3849
|
}
|
|
3711
3850
|
}
|
|
3712
3851
|
|
|
3713
|
-
TEST_P(FSBufferPrefetchTest,
|
|
3714
|
-
//
|
|
3715
|
-
//
|
|
3716
|
-
//
|
|
3717
|
-
std::string fname = "fs-buffer-prefetch-
|
|
3852
|
+
TEST_P(FSBufferPrefetchTest, FSBufferPrefetchRandomized) {
|
|
3853
|
+
// This test is meant to find untested code paths. It does very simple
|
|
3854
|
+
// verifications and relies on debug assertions to catch invariant violations
|
|
3855
|
+
// We scan through a file reading between 0 and 16 KiB at a time
|
|
3856
|
+
std::string fname = "fs-buffer-prefetch-randomized";
|
|
3718
3857
|
Random rand(0);
|
|
3719
|
-
std::string content = rand.RandomString(
|
|
3858
|
+
std::string content = rand.RandomString(16 * 1024 * 1024);
|
|
3720
3859
|
Write(fname, content);
|
|
3721
3860
|
|
|
3722
3861
|
FileOptions opts;
|
|
@@ -3725,45 +3864,59 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchForCompaction) {
|
|
|
3725
3864
|
|
|
3726
3865
|
std::shared_ptr<Statistics> stats = CreateDBStatistics();
|
|
3727
3866
|
ReadaheadParams readahead_params;
|
|
3728
|
-
readahead_params.initial_readahead_size =
|
|
3729
|
-
readahead_params.max_readahead_size =
|
|
3730
|
-
bool use_async_prefetch = GetParam();
|
|
3867
|
+
readahead_params.initial_readahead_size = 512;
|
|
3868
|
+
readahead_params.max_readahead_size = 2048;
|
|
3869
|
+
bool use_async_prefetch = std::get<0>(GetParam());
|
|
3870
|
+
bool for_compaction = std::get<1>(GetParam());
|
|
3731
3871
|
// Async IO is not enabled for compaction prefetching
|
|
3732
|
-
if (use_async_prefetch) {
|
|
3872
|
+
if (use_async_prefetch && for_compaction) {
|
|
3733
3873
|
return;
|
|
3734
3874
|
}
|
|
3735
|
-
|
|
3875
|
+
size_t num_buffers = use_async_prefetch ? 2 : 1;
|
|
3876
|
+
readahead_params.num_buffers = num_buffers;
|
|
3736
3877
|
|
|
3737
|
-
FilePrefetchBuffer fpb(readahead_params, true
|
|
3878
|
+
FilePrefetchBuffer fpb(readahead_params, true /* enable */,
|
|
3879
|
+
false /* track_min_offset */, fs(), clock(),
|
|
3738
3880
|
stats.get());
|
|
3739
3881
|
|
|
3740
3882
|
Slice result;
|
|
3741
3883
|
Status s;
|
|
3742
|
-
ASSERT_TRUE(
|
|
3743
|
-
fpb.TryReadFromCache(IOOptions(), r.get(), 0, 4096, &result, &s, true));
|
|
3744
|
-
ASSERT_EQ(s, Status::OK());
|
|
3745
|
-
ASSERT_EQ(strncmp(result.data(), content.substr(0, 4096).c_str(), 4096), 0);
|
|
3746
3884
|
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3885
|
+
uint64_t offset = 0;
|
|
3886
|
+
Random rnd(987654);
|
|
3887
|
+
for (int i = 0; i < 1000; i++) {
|
|
3888
|
+
size_t len = rnd.Uniform(16 * 1024);
|
|
3889
|
+
if (offset >= content.size()) {
|
|
3890
|
+
std::cout << "Stopped early after " << i << " iterations" << std::endl;
|
|
3891
|
+
break;
|
|
3892
|
+
}
|
|
3893
|
+
bool could_read_from_cache = fpb.TryReadFromCache(
|
|
3894
|
+
IOOptions(), r.get(), offset, len, &result, &s, for_compaction);
|
|
3895
|
+
// Platforms that don't have IO uring may not support async IO.
|
|
3896
|
+
if (use_async_prefetch && s.IsNotSupported()) {
|
|
3897
|
+
return;
|
|
3898
|
+
}
|
|
3899
|
+
ASSERT_TRUE(could_read_from_cache);
|
|
3900
|
+
ASSERT_EQ(s, Status::OK());
|
|
3901
|
+
ASSERT_EQ(result.size(),
|
|
3902
|
+
std::min(len, content.size() - static_cast<size_t>(offset)));
|
|
3903
|
+
ASSERT_EQ(strncmp(result.data(),
|
|
3904
|
+
content.substr(offset, offset + len).c_str(), len),
|
|
3905
|
+
0);
|
|
3906
|
+
if (i % 4 == 0) {
|
|
3907
|
+
// Test reads where we "skip forward" in the file more than we could read
|
|
3908
|
+
// ahead
|
|
3909
|
+
offset += len + 2 * readahead_params.max_readahead_size;
|
|
3910
|
+
} else if (i % 4 == 1) {
|
|
3911
|
+
// Test reads where we "skip forward" in the file but should have some
|
|
3912
|
+
// overlap with the read ahead data
|
|
3913
|
+
offset += len + readahead_params.max_readahead_size / 2;
|
|
3914
|
+
} else {
|
|
3915
|
+
// Test "back to back" reads (next read starts right at end of previous
|
|
3916
|
+
// one)
|
|
3917
|
+
offset += len;
|
|
3918
|
+
}
|
|
3919
|
+
}
|
|
3767
3920
|
}
|
|
3768
3921
|
|
|
3769
3922
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -106,11 +106,14 @@ IOStatus RandomAccessFileReader::Create(
|
|
|
106
106
|
|
|
107
107
|
IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
|
|
108
108
|
size_t n, Slice* result, char* scratch,
|
|
109
|
-
AlignedBuf* aligned_buf
|
|
109
|
+
AlignedBuf* aligned_buf,
|
|
110
|
+
IODebugContext* dbg) const {
|
|
110
111
|
(void)aligned_buf;
|
|
111
112
|
const Env::IOPriority rate_limiter_priority = opts.rate_limiter_priority;
|
|
112
113
|
|
|
113
114
|
TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read", nullptr);
|
|
115
|
+
TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read:IODebugContext",
|
|
116
|
+
const_cast<void*>(static_cast<void*>(dbg)));
|
|
114
117
|
|
|
115
118
|
// To be paranoid: modify scratch a little bit, so in case underlying
|
|
116
119
|
// FileSystem doesn't fill the buffer but return success and `scratch` returns
|
|
@@ -175,7 +178,7 @@ IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
|
|
|
175
178
|
// the opts.timeout before calling file_->Read
|
|
176
179
|
assert(!opts.timeout.count() || allowed == read_size);
|
|
177
180
|
io_s = file_->Read(aligned_offset + buf.CurrentSize(), allowed, opts,
|
|
178
|
-
&tmp, buf.Destination(),
|
|
181
|
+
&tmp, buf.Destination(), dbg);
|
|
179
182
|
}
|
|
180
183
|
if (ShouldNotifyListeners()) {
|
|
181
184
|
auto finish_ts = FileOperationInfo::FinishNow();
|
|
@@ -237,7 +240,7 @@ IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
|
|
|
237
240
|
// the opts.timeout before calling file_->Read
|
|
238
241
|
assert(!opts.timeout.count() || allowed == n);
|
|
239
242
|
io_s = file_->Read(offset + pos, allowed, opts, &tmp_result,
|
|
240
|
-
scratch + pos,
|
|
243
|
+
scratch + pos, dbg);
|
|
241
244
|
}
|
|
242
245
|
if (ShouldNotifyListeners()) {
|
|
243
246
|
auto finish_ts = FileOperationInfo::FinishNow();
|
|
@@ -311,7 +314,8 @@ bool TryMerge(FSReadRequest* dest, const FSReadRequest& src) {
|
|
|
311
314
|
IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
|
|
312
315
|
FSReadRequest* read_reqs,
|
|
313
316
|
size_t num_reqs,
|
|
314
|
-
AlignedBuf* aligned_buf
|
|
317
|
+
AlignedBuf* aligned_buf,
|
|
318
|
+
IODebugContext* dbg) const {
|
|
315
319
|
(void)aligned_buf; // suppress warning of unused variable in LITE mode
|
|
316
320
|
assert(num_reqs > 0);
|
|
317
321
|
|
|
@@ -420,8 +424,10 @@ IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
|
|
|
420
424
|
remaining_bytes -= request_bytes;
|
|
421
425
|
}
|
|
422
426
|
}
|
|
423
|
-
|
|
424
|
-
|
|
427
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
428
|
+
"RandomAccessFileReader::MultiRead:IODebugContext",
|
|
429
|
+
const_cast<void*>(static_cast<void*>(dbg)));
|
|
430
|
+
io_s = file_->MultiRead(fs_reqs, num_fs_reqs, opts, dbg);
|
|
425
431
|
RecordInHistogram(stats_, MULTIGET_IO_BATCH_SIZE, num_fs_reqs);
|
|
426
432
|
}
|
|
427
433
|
|
|
@@ -475,18 +481,21 @@ IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
|
|
|
475
481
|
}
|
|
476
482
|
|
|
477
483
|
IOStatus RandomAccessFileReader::PrepareIOOptions(const ReadOptions& ro,
|
|
478
|
-
IOOptions& opts
|
|
484
|
+
IOOptions& opts,
|
|
485
|
+
IODebugContext* dbg) const {
|
|
479
486
|
if (clock_ != nullptr) {
|
|
480
|
-
return PrepareIOFromReadOptions(ro, clock_, opts);
|
|
487
|
+
return PrepareIOFromReadOptions(ro, clock_, opts, dbg);
|
|
481
488
|
} else {
|
|
482
|
-
return PrepareIOFromReadOptions(ro, SystemClock::Default().get(), opts
|
|
489
|
+
return PrepareIOFromReadOptions(ro, SystemClock::Default().get(), opts,
|
|
490
|
+
dbg);
|
|
483
491
|
}
|
|
484
492
|
}
|
|
485
493
|
|
|
486
494
|
IOStatus RandomAccessFileReader::ReadAsync(
|
|
487
495
|
FSReadRequest& req, const IOOptions& opts,
|
|
488
496
|
std::function<void(FSReadRequest&, void*)> cb, void* cb_arg,
|
|
489
|
-
void** io_handle, IOHandleDeleter* del_fn, AlignedBuf* aligned_buf
|
|
497
|
+
void** io_handle, IOHandleDeleter* del_fn, AlignedBuf* aligned_buf,
|
|
498
|
+
IODebugContext* dbg) {
|
|
490
499
|
IOStatus s;
|
|
491
500
|
// Create a callback and populate info.
|
|
492
501
|
auto read_async_callback =
|
|
@@ -532,14 +541,14 @@ IOStatus RandomAccessFileReader::ReadAsync(
|
|
|
532
541
|
(stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
|
|
533
542
|
true /*delay_enabled*/);
|
|
534
543
|
s = file_->ReadAsync(aligned_req, opts, read_async_callback,
|
|
535
|
-
read_async_info, io_handle, del_fn,
|
|
544
|
+
read_async_info, io_handle, del_fn, dbg);
|
|
536
545
|
} else {
|
|
537
546
|
StopWatch sw(clock_, stats_, hist_type_,
|
|
538
547
|
GetFileReadHistograms(stats_, opts.io_activity),
|
|
539
548
|
(stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
|
|
540
549
|
true /*delay_enabled*/);
|
|
541
550
|
s = file_->ReadAsync(req, opts, read_async_callback, read_async_info,
|
|
542
|
-
io_handle, del_fn,
|
|
551
|
+
io_handle, del_fn, dbg);
|
|
543
552
|
}
|
|
544
553
|
RecordTick(stats_, READ_ASYNC_MICROS, elapsed);
|
|
545
554
|
|
|
@@ -76,7 +76,6 @@ class RandomAccessFileReader {
|
|
|
76
76
|
io_status.PermitUncheckedError();
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
|
|
80
79
|
bool ShouldNotifyListeners() const { return !listeners_.empty(); }
|
|
81
80
|
|
|
82
81
|
FSRandomAccessFilePtr file_;
|
|
@@ -165,7 +164,8 @@ class RandomAccessFileReader {
|
|
|
165
164
|
// the internally allocated buffer on return, and the result refers to a
|
|
166
165
|
// region in aligned_buf.
|
|
167
166
|
IOStatus Read(const IOOptions& opts, uint64_t offset, size_t n, Slice* result,
|
|
168
|
-
char* scratch, AlignedBuf* aligned_buf
|
|
167
|
+
char* scratch, AlignedBuf* aligned_buf,
|
|
168
|
+
IODebugContext* dbg = nullptr) const;
|
|
169
169
|
|
|
170
170
|
// REQUIRES:
|
|
171
171
|
// num_reqs > 0, reqs do not overlap, and offsets in reqs are increasing.
|
|
@@ -173,10 +173,12 @@ class RandomAccessFileReader {
|
|
|
173
173
|
// In direct IO mode, aligned_buf stores the aligned buffer allocated inside
|
|
174
174
|
// MultiRead, the result Slices in reqs refer to aligned_buf.
|
|
175
175
|
IOStatus MultiRead(const IOOptions& opts, FSReadRequest* reqs,
|
|
176
|
-
size_t num_reqs, AlignedBuf* aligned_buf
|
|
176
|
+
size_t num_reqs, AlignedBuf* aligned_buf,
|
|
177
|
+
IODebugContext* dbg = nullptr) const;
|
|
177
178
|
|
|
178
|
-
IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n
|
|
179
|
-
|
|
179
|
+
IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n,
|
|
180
|
+
IODebugContext* dbg = nullptr) const {
|
|
181
|
+
return file_->Prefetch(offset, n, opts, dbg);
|
|
180
182
|
}
|
|
181
183
|
|
|
182
184
|
FSRandomAccessFile* file() { return file_.get(); }
|
|
@@ -185,12 +187,13 @@ class RandomAccessFileReader {
|
|
|
185
187
|
|
|
186
188
|
bool use_direct_io() const { return file_->use_direct_io(); }
|
|
187
189
|
|
|
188
|
-
IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts
|
|
190
|
+
IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts,
|
|
191
|
+
IODebugContext* dbg = nullptr) const;
|
|
189
192
|
|
|
190
193
|
IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts,
|
|
191
194
|
std::function<void(FSReadRequest&, void*)> cb,
|
|
192
195
|
void* cb_arg, void** io_handle, IOHandleDeleter* del_fn,
|
|
193
|
-
AlignedBuf* aligned_buf);
|
|
196
|
+
AlignedBuf* aligned_buf, IODebugContext* dbg = nullptr);
|
|
194
197
|
|
|
195
198
|
void ReadAsyncCallback(FSReadRequest& req, void* cb_arg);
|
|
196
199
|
};
|