@nxtedition/rocksdb 15.4.0 → 15.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +24 -19
- package/cache.js +1 -1
- package/chained-batch.js +12 -3
- package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
- package/deps/rocksdb/rocksdb/BUCK +42 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
- package/deps/rocksdb/rocksdb/Makefile +59 -32
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
- package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
- package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
- package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
- package/deps/rocksdb/rocksdb/db/builder.h +7 -0
- package/deps/rocksdb/rocksdb/db/c.cc +373 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
- package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
- package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
- package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
- package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
- package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
- package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
- package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
- package/deps/rocksdb/rocksdb/env/env.cc +1 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
- package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
- package/deps/rocksdb/rocksdb/folly.mk +22 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
- package/deps/rocksdb/rocksdb/options/options.cc +5 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
- package/deps/rocksdb/rocksdb/port/lang.h +4 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
- package/deps/rocksdb/rocksdb/src.mk +12 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
- package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
- package/deps/rocksdb/rocksdb/table/format.cc +27 -15
- package/deps/rocksdb/rocksdb/table/format.h +41 -15
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
- package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
- package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
- package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
- package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
- package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
- package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
- package/deps/rocksdb/rocksdb/util/coding.h +14 -27
- package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
- package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
- package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
- package/deps/rocksdb/rocksdb/util/math.h +3 -1
- package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
- package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
- package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
- package/deps/rocksdb/rocksdb/util/status.cc +3 -1
- package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
- package/deps/rocksdb/rocksdb.gyp +7 -0
- package/index.js +11 -2
- package/iterator.js +15 -7
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
|
@@ -669,7 +669,7 @@ TEST_P(PrefetchTest, ConfigureAutoMaxReadaheadSize) {
|
|
|
669
669
|
MoveFilesToLevel(level);
|
|
670
670
|
}
|
|
671
671
|
Close();
|
|
672
|
-
std::vector<int>
|
|
672
|
+
std::vector<int> buff_prefetch_level_count = {0, 0, 0};
|
|
673
673
|
ASSERT_OK(TryReopen(options));
|
|
674
674
|
{
|
|
675
675
|
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
|
|
@@ -707,7 +707,7 @@ TEST_P(PrefetchTest, ConfigureAutoMaxReadaheadSize) {
|
|
|
707
707
|
iter->Next();
|
|
708
708
|
}
|
|
709
709
|
|
|
710
|
-
|
|
710
|
+
buff_prefetch_level_count[level] = buff_prefetch_count;
|
|
711
711
|
if (support_prefetch && !use_direct_io) {
|
|
712
712
|
if (level == 0) {
|
|
713
713
|
ASSERT_FALSE(fs->IsPrefetchCalled());
|
|
@@ -728,7 +728,7 @@ TEST_P(PrefetchTest, ConfigureAutoMaxReadaheadSize) {
|
|
|
728
728
|
}
|
|
729
729
|
|
|
730
730
|
if (!support_prefetch) {
|
|
731
|
-
ASSERT_GT(
|
|
731
|
+
ASSERT_GT(buff_prefetch_level_count[1], buff_prefetch_level_count[2]);
|
|
732
732
|
}
|
|
733
733
|
|
|
734
734
|
SyncPoint::GetInstance()->DisableProcessing();
|
|
@@ -814,7 +814,7 @@ TEST_P(PrefetchTest, ConfigureInternalAutoReadaheadSize) {
|
|
|
814
814
|
"{initial_auto_readahead_size=0;}"}}));
|
|
815
815
|
break;
|
|
816
816
|
case 1:
|
|
817
|
-
//
|
|
817
|
+
// initial_auto_readahead_size and max_auto_readahead_size are set
|
|
818
818
|
// same so readahead_size remains same.
|
|
819
819
|
ASSERT_OK(db_->SetOptions({{"block_based_table_factory",
|
|
820
820
|
"{initial_auto_readahead_size=4096;max_"
|
|
@@ -1081,7 +1081,7 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
|
|
|
1081
1081
|
}
|
|
1082
1082
|
{
|
|
1083
1083
|
/*
|
|
1084
|
-
*
|
|
1084
|
+
* Reseek keys from Single Data Block.
|
|
1085
1085
|
*/
|
|
1086
1086
|
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
|
|
1087
1087
|
iter->Seek(BuildKey(0));
|
|
@@ -1116,9 +1116,8 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
|
|
|
1116
1116
|
ASSERT_TRUE(iter->Valid());
|
|
1117
1117
|
iter->Seek(BuildKey(1008));
|
|
1118
1118
|
ASSERT_TRUE(iter->Valid());
|
|
1119
|
-
iter->Seek(
|
|
1120
|
-
|
|
1121
|
-
// readahead_size will be initiallized to 8*1024.
|
|
1119
|
+
iter->Seek(BuildKey(996)); // Reseek won't prefetch any data and
|
|
1120
|
+
// readahead_size will be initialized to 8*1024.
|
|
1122
1121
|
ASSERT_TRUE(iter->Valid());
|
|
1123
1122
|
iter->Seek(BuildKey(992));
|
|
1124
1123
|
ASSERT_TRUE(iter->Valid());
|
|
@@ -1590,7 +1589,7 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
1590
1589
|
::testing::Combine(
|
|
1591
1590
|
// Params are as follows -
|
|
1592
1591
|
// Param 0 - TableOptions::index_shortening
|
|
1593
|
-
// Param 2 -
|
|
1592
|
+
// Param 2 - ReadOptions::auto_readahead_size
|
|
1594
1593
|
::testing::Values(
|
|
1595
1594
|
BlockBasedTableOptions::IndexShorteningMode::kNoShortening,
|
|
1596
1595
|
BlockBasedTableOptions::IndexShorteningMode::kShortenSeparators,
|
|
@@ -2518,6 +2517,187 @@ TEST_P(PrefetchTest1, SeekParallelizationTest) {
|
|
|
2518
2517
|
Close();
|
|
2519
2518
|
}
|
|
2520
2519
|
|
|
2520
|
+
TEST_P(PrefetchTest1, PollErrorRecoveryDuringIteration) {
|
|
2521
|
+
// This end-to-end test verifies that Poll() errors during async prefetching
|
|
2522
|
+
// are properly propagated to the iterator. When Poll() fails, the iterator
|
|
2523
|
+
// should stop and return an IOError status.
|
|
2524
|
+
//
|
|
2525
|
+
// With error injection on the 3rd Poll call, the iterator reads ~231 keys
|
|
2526
|
+
// (out of 500) before encountering the error.
|
|
2527
|
+
|
|
2528
|
+
if (mem_env_ || encrypted_env_) {
|
|
2529
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
2530
|
+
return;
|
|
2531
|
+
}
|
|
2532
|
+
|
|
2533
|
+
const int kNumKeys = 500;
|
|
2534
|
+
std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
|
|
2535
|
+
FileSystem::Default(), /*support_prefetch=*/false);
|
|
2536
|
+
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
2537
|
+
|
|
2538
|
+
bool use_direct_io = GetParam();
|
|
2539
|
+
Options options;
|
|
2540
|
+
SetGenericOptions(env.get(), use_direct_io, options);
|
|
2541
|
+
options.statistics = CreateDBStatistics();
|
|
2542
|
+
BlockBasedTableOptions table_options;
|
|
2543
|
+
SetBlockBasedTableOptions(table_options);
|
|
2544
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
2545
|
+
|
|
2546
|
+
Status s = TryReopen(options);
|
|
2547
|
+
if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
|
|
2548
|
+
ROCKSDB_GTEST_SKIP("Direct IO not supported");
|
|
2549
|
+
return;
|
|
2550
|
+
}
|
|
2551
|
+
ASSERT_OK(s);
|
|
2552
|
+
|
|
2553
|
+
// Write keys with known values so we can verify correctness
|
|
2554
|
+
std::map<std::string, std::string> expected_data;
|
|
2555
|
+
{
|
|
2556
|
+
WriteBatch batch;
|
|
2557
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
2558
|
+
std::string key = BuildKey(i);
|
|
2559
|
+
std::string value = "value_" + std::to_string(i) + "_" +
|
|
2560
|
+
std::string(100, 'x'); // Make values ~110 bytes
|
|
2561
|
+
ASSERT_OK(batch.Put(key, value));
|
|
2562
|
+
expected_data[key] = value;
|
|
2563
|
+
}
|
|
2564
|
+
ASSERT_OK(db_->Write(WriteOptions(), &batch));
|
|
2565
|
+
ASSERT_OK(Flush());
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2568
|
+
std::string start_key = BuildKey(0);
|
|
2569
|
+
std::string end_key = BuildKey(kNumKeys - 1);
|
|
2570
|
+
Slice least(start_key.data(), start_key.size());
|
|
2571
|
+
Slice greatest(end_key.data(), end_key.size());
|
|
2572
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), &least, &greatest));
|
|
2573
|
+
|
|
2574
|
+
// Set up callbacks to track async IO and inject Poll errors
|
|
2575
|
+
std::atomic<int> poll_call_count{0};
|
|
2576
|
+
std::atomic<int> poll_error_injected_count{0};
|
|
2577
|
+
bool read_async_called = false;
|
|
2578
|
+
|
|
2579
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2580
|
+
"FilePrefetchBuffer::PollIfNeeded:IOStatus", [&](void* arg) {
|
|
2581
|
+
poll_call_count++;
|
|
2582
|
+
int current_count = poll_call_count.load();
|
|
2583
|
+
|
|
2584
|
+
// Inject error on the third Poll call to allow some keys to be read
|
|
2585
|
+
// first
|
|
2586
|
+
if (current_count == 3) {
|
|
2587
|
+
IOStatus* io_s = static_cast<IOStatus*>(arg);
|
|
2588
|
+
*io_s = IOStatus::IOError("Injected Poll error for e2e testing");
|
|
2589
|
+
poll_error_injected_count++;
|
|
2590
|
+
std::cout << "PollErrorRecoveryDuringIteration: Injected error on "
|
|
2591
|
+
"Poll call #"
|
|
2592
|
+
<< current_count << std::endl;
|
|
2593
|
+
}
|
|
2594
|
+
});
|
|
2595
|
+
|
|
2596
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
2597
|
+
"UpdateResults::io_uring_result",
|
|
2598
|
+
[&](void* /*arg*/) { read_async_called = true; });
|
|
2599
|
+
|
|
2600
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
2601
|
+
|
|
2602
|
+
// Iterate through all keys with async IO enabled
|
|
2603
|
+
ReadOptions ro;
|
|
2604
|
+
ro.async_io = true;
|
|
2605
|
+
ro.adaptive_readahead = true;
|
|
2606
|
+
|
|
2607
|
+
int keys_read = 0;
|
|
2608
|
+
int data_mismatches = 0;
|
|
2609
|
+
Status iter_status;
|
|
2610
|
+
{
|
|
2611
|
+
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
|
|
2612
|
+
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
2613
|
+
std::string key = iter->key().ToString();
|
|
2614
|
+
std::string value = iter->value().ToString();
|
|
2615
|
+
|
|
2616
|
+
auto it = expected_data.find(key);
|
|
2617
|
+
if (it == expected_data.end()) {
|
|
2618
|
+
std::cout << "PollErrorRecoveryDuringIteration: Unexpected key: " << key
|
|
2619
|
+
<< std::endl;
|
|
2620
|
+
data_mismatches++;
|
|
2621
|
+
} else if (it->second != value) {
|
|
2622
|
+
std::cout << "PollErrorRecoveryDuringIteration: Value mismatch for key "
|
|
2623
|
+
<< key << std::endl;
|
|
2624
|
+
data_mismatches++;
|
|
2625
|
+
}
|
|
2626
|
+
keys_read++;
|
|
2627
|
+
}
|
|
2628
|
+
iter_status = iter->status();
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2631
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
2632
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
2633
|
+
|
|
2634
|
+
// Log results
|
|
2635
|
+
std::cout << "PollErrorRecoveryDuringIteration: " << "read_async_called="
|
|
2636
|
+
<< read_async_called << ", poll_calls=" << poll_call_count.load()
|
|
2637
|
+
<< ", poll_errors_injected=" << poll_error_injected_count.load()
|
|
2638
|
+
<< ", keys_read=" << keys_read << ", expected_keys=" << kNumKeys
|
|
2639
|
+
<< ", data_mismatches=" << data_mismatches
|
|
2640
|
+
<< ", iter_status=" << iter_status.ToString() << std::endl;
|
|
2641
|
+
|
|
2642
|
+
// Verify no data mismatches occurred for keys that were read
|
|
2643
|
+
ASSERT_EQ(data_mismatches, 0)
|
|
2644
|
+
<< "Found " << data_mismatches << " data mismatches";
|
|
2645
|
+
|
|
2646
|
+
if (read_async_called) {
|
|
2647
|
+
// Async IO was used - verify Poll error was injected and propagated
|
|
2648
|
+
ASSERT_EQ(poll_call_count.load(), 3)
|
|
2649
|
+
<< "Expected exactly 3 Poll calls when error injected on 3rd call";
|
|
2650
|
+
ASSERT_EQ(poll_error_injected_count.load(), 1)
|
|
2651
|
+
<< "Expected exactly 1 Poll error to be injected";
|
|
2652
|
+
|
|
2653
|
+
// The iterator should have stopped with an error status
|
|
2654
|
+
ASSERT_TRUE(iter_status.IsIOError())
|
|
2655
|
+
<< "Expected iterator to report IOError after Poll failure, got: "
|
|
2656
|
+
<< iter_status.ToString();
|
|
2657
|
+
|
|
2658
|
+
std::cout << "PollErrorRecoveryDuringIteration: Successfully verified "
|
|
2659
|
+
"Poll error was injected and propagated to iterator"
|
|
2660
|
+
<< std::endl;
|
|
2661
|
+
} else {
|
|
2662
|
+
// Async IO not supported - iterator should complete successfully
|
|
2663
|
+
ASSERT_OK(iter_status);
|
|
2664
|
+
ASSERT_EQ(keys_read, kNumKeys);
|
|
2665
|
+
std::cout << "PollErrorRecoveryDuringIteration: Async IO (io_uring) not "
|
|
2666
|
+
"supported on this platform, verified data correctness"
|
|
2667
|
+
<< std::endl;
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
// Retry iteration without error injection - verify all data is still readable
|
|
2671
|
+
// This confirms the Poll error didn't corrupt state
|
|
2672
|
+
{
|
|
2673
|
+
int retry_keys_read = 0;
|
|
2674
|
+
int retry_data_mismatches = 0;
|
|
2675
|
+
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
|
|
2676
|
+
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
2677
|
+
std::string key = iter->key().ToString();
|
|
2678
|
+
std::string value = iter->value().ToString();
|
|
2679
|
+
|
|
2680
|
+
auto it = expected_data.find(key);
|
|
2681
|
+
if (it == expected_data.end()) {
|
|
2682
|
+
retry_data_mismatches++;
|
|
2683
|
+
} else if (it->second != value) {
|
|
2684
|
+
retry_data_mismatches++;
|
|
2685
|
+
}
|
|
2686
|
+
retry_keys_read++;
|
|
2687
|
+
}
|
|
2688
|
+
ASSERT_OK(iter->status())
|
|
2689
|
+
<< "Retry iteration failed: " << iter->status().ToString();
|
|
2690
|
+
ASSERT_EQ(retry_keys_read, kNumKeys)
|
|
2691
|
+
<< "Retry should read all " << kNumKeys << " keys";
|
|
2692
|
+
ASSERT_EQ(retry_data_mismatches, 0)
|
|
2693
|
+
<< "Retry found " << retry_data_mismatches << " data mismatches";
|
|
2694
|
+
std::cout << "PollErrorRecoveryDuringIteration: Retry succeeded, read all "
|
|
2695
|
+
<< retry_keys_read << " keys correctly" << std::endl;
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
Close();
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2521
2701
|
namespace {
|
|
2522
2702
|
#ifdef GFLAGS
|
|
2523
2703
|
const int kMaxArgCount = 100;
|
|
@@ -3041,7 +3221,11 @@ class FilePrefetchBufferTest : public testing::Test {
|
|
|
3041
3221
|
stats_ = CreateDBStatistics();
|
|
3042
3222
|
}
|
|
3043
3223
|
|
|
3044
|
-
void TearDown() override {
|
|
3224
|
+
void TearDown() override {
|
|
3225
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3226
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3227
|
+
EXPECT_OK(DestroyDir(env_, test_dir_));
|
|
3228
|
+
}
|
|
3045
3229
|
|
|
3046
3230
|
void Write(const std::string& fname, const std::string& content) {
|
|
3047
3231
|
std::unique_ptr<FSWritableFile> f;
|
|
@@ -3303,7 +3487,7 @@ TEST_F(FilePrefetchBufferTest, SyncReadaheadStats) {
|
|
|
3303
3487
|
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 1);
|
|
3304
3488
|
ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL), 8192);
|
|
3305
3489
|
|
|
3306
|
-
// Now read some data with length doesn't align with
|
|
3490
|
+
// Now read some data with length doesn't align with alignment and it needs
|
|
3307
3491
|
// prefetching. Read from 16000 with length 10000 (i.e. requested end offset -
|
|
3308
3492
|
// 26000).
|
|
3309
3493
|
ASSERT_TRUE(
|
|
@@ -3377,6 +3561,118 @@ TEST_F(FilePrefetchBufferTest, ForCompaction) {
|
|
|
3377
3561
|
0);
|
|
3378
3562
|
}
|
|
3379
3563
|
|
|
3564
|
+
TEST_F(FilePrefetchBufferTest, PollErrorPropagation) {
|
|
3565
|
+
// This test verifies that Poll() errors in PollIfNeeded are properly
|
|
3566
|
+
// propagated rather than being silently ignored.
|
|
3567
|
+
|
|
3568
|
+
std::string fname = "poll-error-test";
|
|
3569
|
+
Random rand(0);
|
|
3570
|
+
std::string content = rand.RandomString(32768);
|
|
3571
|
+
Write(fname, content);
|
|
3572
|
+
|
|
3573
|
+
FileOptions opts;
|
|
3574
|
+
std::unique_ptr<RandomAccessFileReader> r;
|
|
3575
|
+
Read(fname, opts, &r);
|
|
3576
|
+
|
|
3577
|
+
// Set up readahead params for async prefetching
|
|
3578
|
+
ReadaheadParams readahead_params;
|
|
3579
|
+
readahead_params.initial_readahead_size = 16384;
|
|
3580
|
+
readahead_params.max_readahead_size = 16384;
|
|
3581
|
+
|
|
3582
|
+
FilePrefetchBuffer fpb(readahead_params, /*enable=*/true,
|
|
3583
|
+
/*track_min_offset=*/false, fs());
|
|
3584
|
+
|
|
3585
|
+
Slice result;
|
|
3586
|
+
// Start an async prefetch to set up async_read_in_progress_ state
|
|
3587
|
+
Status s = fpb.PrefetchAsync(IOOptions(), r.get(), 0, 4096, &result);
|
|
3588
|
+
|
|
3589
|
+
// Skip test on platforms that don't support async IO.
|
|
3590
|
+
if (s.IsNotSupported()) {
|
|
3591
|
+
ROCKSDB_GTEST_SKIP("Async IO not supported on this platform");
|
|
3592
|
+
return;
|
|
3593
|
+
}
|
|
3594
|
+
ASSERT_TRUE(s.IsTryAgain());
|
|
3595
|
+
|
|
3596
|
+
// With the ReadAsync sync fallback, PrefetchAsync returns TryAgain even when
|
|
3597
|
+
// async IO is unavailable (data is read synchronously, but data_found was
|
|
3598
|
+
// false at entry). Detect by checking async_read_in_progress_ on the buffer.
|
|
3599
|
+
{
|
|
3600
|
+
std::vector<std::tuple<uint64_t, size_t, bool>> buf_info(1);
|
|
3601
|
+
fpb.TEST_GetBufferOffsetandSize(buf_info);
|
|
3602
|
+
bool async_read_in_progress = std::get<2>(buf_info[0]);
|
|
3603
|
+
if (!async_read_in_progress) {
|
|
3604
|
+
ROCKSDB_GTEST_SKIP("Async IO not available (sync fallback used)");
|
|
3605
|
+
return;
|
|
3606
|
+
}
|
|
3607
|
+
}
|
|
3608
|
+
|
|
3609
|
+
// Set up SyncPoint to inject Poll error
|
|
3610
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3611
|
+
"FilePrefetchBuffer::PollIfNeeded:IOStatus", [&](void* arg) {
|
|
3612
|
+
IOStatus* io_s = static_cast<IOStatus*>(arg);
|
|
3613
|
+
*io_s = IOStatus::IOError("Injected Poll error for testing");
|
|
3614
|
+
});
|
|
3615
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3616
|
+
|
|
3617
|
+
// TryReadFromCache will call PollIfNeeded to complete the async read
|
|
3618
|
+
IOOptions io_opts;
|
|
3619
|
+
io_opts.rate_limiter_priority = Env::IOPriority::IO_LOW;
|
|
3620
|
+
Status read_status;
|
|
3621
|
+
bool found =
|
|
3622
|
+
fpb.TryReadFromCache(io_opts, r.get(), 0, 4096, &result, &read_status);
|
|
3623
|
+
|
|
3624
|
+
// When PollIfNeeded fails:
|
|
3625
|
+
// 1. PrefetchInternal returns the error status
|
|
3626
|
+
// 2. TryReadFromCacheUntracked sets *status to the error and returns false
|
|
3627
|
+
// Therefore: found should be false, and read_status should contain the error
|
|
3628
|
+
ASSERT_FALSE(found) << "Expected TryReadFromCache to return false on Poll "
|
|
3629
|
+
"error, but it returned true";
|
|
3630
|
+
ASSERT_TRUE(read_status.IsIOError())
|
|
3631
|
+
<< "Expected IOError status, got: " << read_status.ToString();
|
|
3632
|
+
ASSERT_TRUE(read_status.ToString().find("Injected Poll error") !=
|
|
3633
|
+
std::string::npos)
|
|
3634
|
+
<< "Expected error message to contain 'Injected Poll error', got: "
|
|
3635
|
+
<< read_status.ToString();
|
|
3636
|
+
|
|
3637
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3638
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3639
|
+
}
|
|
3640
|
+
|
|
3641
|
+
TEST_F(FilePrefetchBufferTest, ReadAsyncSyncFallbackOnNotSupported) {
|
|
3642
|
+
std::string fname = "read-async-sync-fallback";
|
|
3643
|
+
Random rand(0);
|
|
3644
|
+
std::string content = rand.RandomString(32768);
|
|
3645
|
+
Write(fname, content);
|
|
3646
|
+
|
|
3647
|
+
FileOptions opts;
|
|
3648
|
+
std::unique_ptr<RandomAccessFileReader> r;
|
|
3649
|
+
Read(fname, opts, &r);
|
|
3650
|
+
|
|
3651
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3652
|
+
"RandomAccessFileReader::ReadAsync:InjectStatus", [](void* arg) {
|
|
3653
|
+
*static_cast<IOStatus*>(arg) = IOStatus::NotSupported();
|
|
3654
|
+
});
|
|
3655
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3656
|
+
|
|
3657
|
+
ReadaheadParams readahead_params;
|
|
3658
|
+
readahead_params.initial_readahead_size = 16384;
|
|
3659
|
+
readahead_params.max_readahead_size = 16384;
|
|
3660
|
+
readahead_params.num_buffers = 2;
|
|
3661
|
+
|
|
3662
|
+
FilePrefetchBuffer fpb(readahead_params, /*enable=*/true,
|
|
3663
|
+
/*track_min_offset=*/false, fs());
|
|
3664
|
+
|
|
3665
|
+
Slice result;
|
|
3666
|
+
Status s;
|
|
3667
|
+
ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 0, 4096, &result, &s));
|
|
3668
|
+
ASSERT_OK(s);
|
|
3669
|
+
ASSERT_EQ(result.size(), 4096);
|
|
3670
|
+
ASSERT_EQ(memcmp(result.data(), content.data(), 4096), 0);
|
|
3671
|
+
|
|
3672
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3673
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3674
|
+
}
|
|
3675
|
+
|
|
3380
3676
|
class FSBufferPrefetchTest
|
|
3381
3677
|
: public testing::Test,
|
|
3382
3678
|
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
|
@@ -3455,7 +3751,11 @@ class FSBufferPrefetchTest
|
|
|
3455
3751
|
stats_ = CreateDBStatistics();
|
|
3456
3752
|
}
|
|
3457
3753
|
|
|
3458
|
-
void TearDown() override {
|
|
3754
|
+
void TearDown() override {
|
|
3755
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3756
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3757
|
+
EXPECT_OK(DestroyDir(env_, test_dir_));
|
|
3758
|
+
}
|
|
3459
3759
|
|
|
3460
3760
|
void Write(const std::string& fname, const std::string& content) {
|
|
3461
3761
|
std::unique_ptr<FSWritableFile> f;
|
|
@@ -3542,6 +3842,9 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3542
3842
|
fpb.TryReadFromCache(IOOptions(), r.get(), 0 /* offset */, 4096 /* n */,
|
|
3543
3843
|
&result, &s, for_compaction);
|
|
3544
3844
|
// Platforms that don't have IO uring may not support async IO.
|
|
3845
|
+
// With the ReadAsync sync fallback, s will be OK even when async IO is
|
|
3846
|
+
// unavailable — detect by checking if the second buffer has an async read
|
|
3847
|
+
// in progress.
|
|
3545
3848
|
if (use_async_prefetch && s.IsNotSupported()) {
|
|
3546
3849
|
return;
|
|
3547
3850
|
}
|
|
@@ -3555,6 +3858,14 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
|
|
|
3555
3858
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
3556
3859
|
fpb.TEST_GetBufferOffsetandSize(buffer_info);
|
|
3557
3860
|
if (use_async_prefetch) {
|
|
3861
|
+
bool async_read_in_progress = std::get<2>(buffer_info[1]);
|
|
3862
|
+
if (!async_read_in_progress) {
|
|
3863
|
+
// Async IO was requested but not available (e.g., no io_uring).
|
|
3864
|
+
// ReadAsync fell back to sync read. Skip async-specific assertions.
|
|
3865
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3866
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3867
|
+
return;
|
|
3868
|
+
}
|
|
3558
3869
|
// Cut the readahead of 8192 in half.
|
|
3559
3870
|
// Overlap buffer is not used
|
|
3560
3871
|
ASSERT_EQ(overlap_buffer_info.first, 0);
|
|
@@ -3747,6 +4058,14 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
|
|
|
3747
4058
|
fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
|
|
3748
4059
|
fpb.TEST_GetBufferOffsetandSize(buffer_info);
|
|
3749
4060
|
if (use_async_prefetch) {
|
|
4061
|
+
bool async_read_in_progress = std::get<2>(buffer_info[1]);
|
|
4062
|
+
if (!async_read_in_progress) {
|
|
4063
|
+
// Async IO was requested but not available (e.g., no io_uring).
|
|
4064
|
+
// ReadAsync fell back to sync read. Skip async-specific assertions.
|
|
4065
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
4066
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
4067
|
+
return;
|
|
4068
|
+
}
|
|
3750
4069
|
// Overlap buffer is not used
|
|
3751
4070
|
ASSERT_EQ(overlap_buffer_info.first, 0);
|
|
3752
4071
|
ASSERT_EQ(overlap_buffer_info.second, 0);
|
|
@@ -66,41 +66,53 @@ inline void RecordIOStats(Statistics* stats, Temperature file_temperature,
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
// record for temperature file
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
69
|
+
switch (file_temperature) {
|
|
70
|
+
case Temperature::kHot:
|
|
71
|
+
IOSTATS_ADD(file_io_stats_by_temperature.hot_file_bytes_read, size);
|
|
72
|
+
IOSTATS_ADD(file_io_stats_by_temperature.hot_file_read_count, 1);
|
|
73
|
+
RecordTick(stats, HOT_FILE_READ_BYTES, size);
|
|
74
|
+
RecordTick(stats, HOT_FILE_READ_COUNT, 1);
|
|
75
|
+
break;
|
|
76
|
+
case Temperature::kWarm:
|
|
77
|
+
IOSTATS_ADD(file_io_stats_by_temperature.warm_file_bytes_read, size);
|
|
78
|
+
IOSTATS_ADD(file_io_stats_by_temperature.warm_file_read_count, 1);
|
|
79
|
+
RecordTick(stats, WARM_FILE_READ_BYTES, size);
|
|
80
|
+
RecordTick(stats, WARM_FILE_READ_COUNT, 1);
|
|
81
|
+
break;
|
|
82
|
+
case Temperature::kCool:
|
|
83
|
+
IOSTATS_ADD(file_io_stats_by_temperature.cool_file_bytes_read, size);
|
|
84
|
+
IOSTATS_ADD(file_io_stats_by_temperature.cool_file_read_count, 1);
|
|
85
|
+
RecordTick(stats, COOL_FILE_READ_BYTES, size);
|
|
86
|
+
RecordTick(stats, COOL_FILE_READ_COUNT, 1);
|
|
87
|
+
break;
|
|
88
|
+
case Temperature::kCold:
|
|
89
|
+
IOSTATS_ADD(file_io_stats_by_temperature.cold_file_bytes_read, size);
|
|
90
|
+
IOSTATS_ADD(file_io_stats_by_temperature.cold_file_read_count, 1);
|
|
91
|
+
RecordTick(stats, COLD_FILE_READ_BYTES, size);
|
|
92
|
+
RecordTick(stats, COLD_FILE_READ_COUNT, 1);
|
|
93
|
+
break;
|
|
94
|
+
case Temperature::kIce:
|
|
95
|
+
IOSTATS_ADD(file_io_stats_by_temperature.ice_file_bytes_read, size);
|
|
96
|
+
IOSTATS_ADD(file_io_stats_by_temperature.ice_file_read_count, 1);
|
|
97
|
+
RecordTick(stats, ICE_FILE_READ_BYTES, size);
|
|
98
|
+
RecordTick(stats, ICE_FILE_READ_COUNT, 1);
|
|
99
|
+
break;
|
|
100
|
+
case Temperature::kUnknown:
|
|
101
|
+
if (is_last_level) {
|
|
102
|
+
IOSTATS_ADD(file_io_stats_by_temperature.unknown_last_level_bytes_read,
|
|
103
|
+
size);
|
|
104
|
+
IOSTATS_ADD(file_io_stats_by_temperature.unknown_last_level_read_count,
|
|
105
|
+
1);
|
|
106
|
+
} else {
|
|
107
|
+
IOSTATS_ADD(
|
|
108
|
+
file_io_stats_by_temperature.unknown_non_last_level_bytes_read,
|
|
109
|
+
size);
|
|
110
|
+
IOSTATS_ADD(
|
|
111
|
+
file_io_stats_by_temperature.unknown_non_last_level_read_count, 1);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
break;
|
|
104
116
|
}
|
|
105
117
|
}
|
|
106
118
|
|
|
@@ -516,6 +528,11 @@ IOStatus RandomAccessFileReader::ReadAsync(
|
|
|
516
528
|
void** io_handle, IOHandleDeleter* del_fn, AlignedBuf* aligned_buf,
|
|
517
529
|
IODebugContext* dbg) {
|
|
518
530
|
IOStatus s;
|
|
531
|
+
TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::ReadAsync:InjectStatus",
|
|
532
|
+
&s);
|
|
533
|
+
if (!s.ok()) {
|
|
534
|
+
return s;
|
|
535
|
+
}
|
|
519
536
|
// Create a callback and populate info.
|
|
520
537
|
auto read_async_callback =
|
|
521
538
|
std::bind(&RandomAccessFileReader::ReadAsyncCallback, this,
|
|
@@ -47,13 +47,13 @@ ifneq ($(strip $(FOLLY_PATH)),)
|
|
|
47
47
|
# Add -ldl at the end as gcc resolves a symbol in a library by searching only in libraries specified later
|
|
48
48
|
# in the command line
|
|
49
49
|
|
|
50
|
-
PLATFORM_LDFLAGS += $(FOLLY_PATH)/lib/libfolly.a $(BOOST_PATH)/lib/libboost_context.a $(BOOST_PATH)/lib/libboost_filesystem.a $(BOOST_PATH)/lib/libboost_atomic.a $(BOOST_PATH)/lib/libboost_program_options.a $(BOOST_PATH)/lib/libboost_regex.a $(BOOST_PATH)/lib/libboost_system.a $(BOOST_PATH)/lib/libboost_thread.a $(DBL_CONV_PATH)/lib/libdouble-conversion.a $(LIBEVENT_PATH)/lib/libevent
|
|
50
|
+
PLATFORM_LDFLAGS += $(FOLLY_PATH)/lib/libfolly.a $(BOOST_PATH)/lib/libboost_context.a $(BOOST_PATH)/lib/libboost_filesystem.a $(BOOST_PATH)/lib/libboost_atomic.a $(BOOST_PATH)/lib/libboost_program_options.a $(BOOST_PATH)/lib/libboost_regex.a $(BOOST_PATH)/lib/libboost_system.a $(BOOST_PATH)/lib/libboost_thread.a $(DBL_CONV_PATH)/lib/libdouble-conversion.a $(LIBEVENT_PATH)/lib/libevent.a $(LIBSODIUM_PATH)/lib/libsodium.a -ldl
|
|
51
51
|
ifneq ($(DEBUG_LEVEL),0)
|
|
52
52
|
PLATFORM_LDFLAGS += $(FMT_LIB_PATH)/libfmtd.a $(GLOG_LIB_PATH)/libglogd.so $(GFLAGS_PATH)/lib/libgflags_debug.so.2.2
|
|
53
53
|
else
|
|
54
54
|
PLATFORM_LDFLAGS += $(FMT_LIB_PATH)/libfmt.a $(GLOG_LIB_PATH)/libglog.so $(GFLAGS_PATH)/lib/libgflags.so.2.2
|
|
55
55
|
endif
|
|
56
|
-
PLATFORM_LDFLAGS += -Wl,-rpath=$(
|
|
56
|
+
PLATFORM_LDFLAGS += -Wl,-rpath=$(GLOG_LIB_PATH) -Wl,-rpath=$(GFLAGS_PATH)/lib
|
|
57
57
|
endif
|
|
58
58
|
PLATFORM_CCFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
59
59
|
PLATFORM_CXXFLAGS += -DUSE_FOLLY -DFOLLY_NO_CONFIG
|
|
@@ -98,7 +98,7 @@ endif # FMT_SOURCE_PATH
|
|
|
98
98
|
PLATFORM_LDFLAGS += -lglog
|
|
99
99
|
endif
|
|
100
100
|
|
|
101
|
-
FOLLY_COMMIT_HASH =
|
|
101
|
+
FOLLY_COMMIT_HASH = 3b0eed0a128c484a2b077546c3e08c824a311357
|
|
102
102
|
|
|
103
103
|
# For public CI runs, checkout folly in a way that can build with RocksDB.
|
|
104
104
|
# This is mostly intended as a test-only simulation of Meta-internal folly
|
|
@@ -116,10 +116,27 @@ checkout_folly:
|
|
|
116
116
|
perl -pi -e 's/(#include <atomic>)/$$1\n#include <cstring>/' third-party/folly/folly/lang/Exception.h
|
|
117
117
|
@# const mismatch
|
|
118
118
|
perl -pi -e 's/: environ/: (const char**)(environ)/' third-party/folly/folly/Subprocess.cpp
|
|
119
|
-
@#
|
|
120
|
-
cd third-party/folly &&
|
|
119
|
+
@# Restore cached downloads and handle unreliable mirrors with fallback
|
|
120
|
+
@cd third-party/folly && \
|
|
121
|
+
DOWNLOAD_DIR=`$(PYTHON) build/fbcode_builder/getdeps.py show-inst-dir | sed 's|/installed/.*|/downloads|'` && \
|
|
122
|
+
mkdir -p "$$DOWNLOAD_DIR" && \
|
|
123
|
+
CACHE_DIR="/tmp/rocksdb-getdeps-cache" && \
|
|
124
|
+
mkdir -p "$$CACHE_DIR" && \
|
|
125
|
+
echo "Restoring cached downloads..." && \
|
|
126
|
+
if ls "$$CACHE_DIR"/*.tar.gz "$$CACHE_DIR"/*.tar.xz "$$CACHE_DIR"/*.zip >/dev/null 2>&1; then \
|
|
127
|
+
cp -n "$$CACHE_DIR"/*.tar.gz "$$CACHE_DIR"/*.tar.xz "$$CACHE_DIR"/*.zip "$$DOWNLOAD_DIR/" 2>/dev/null || true; \
|
|
128
|
+
fi && \
|
|
129
|
+
echo "Handling known unreliable downloads with fallback mirrors..." && \
|
|
130
|
+
$(PYTHON) ../../build_tools/getdeps_fallback_mirror.py "$$DOWNLOAD_DIR" "$$CACHE_DIR" build/fbcode_builder/manifests
|
|
121
131
|
@# NOTE: boost and fmt source will be needed for any build including `USE_FOLLY_LITE` builds as those depend on those headers
|
|
122
132
|
cd third-party/folly && GETDEPS_USE_WGET=1 $(PYTHON) build/fbcode_builder/getdeps.py fetch boost && GETDEPS_USE_WGET=1 $(PYTHON) build/fbcode_builder/getdeps.py fetch fmt
|
|
133
|
+
@# Update cache with any new downloads
|
|
134
|
+
@cd third-party/folly && \
|
|
135
|
+
DOWNLOAD_DIR=`$(PYTHON) build/fbcode_builder/getdeps.py show-inst-dir | sed 's|/installed/.*|/downloads|'` && \
|
|
136
|
+
CACHE_DIR="/tmp/rocksdb-getdeps-cache" && \
|
|
137
|
+
if ls "$$DOWNLOAD_DIR"/*.tar.gz "$$DOWNLOAD_DIR"/*.tar.xz "$$DOWNLOAD_DIR"/*.zip >/dev/null 2>&1; then \
|
|
138
|
+
cp -n "$$DOWNLOAD_DIR"/*.tar.gz "$$DOWNLOAD_DIR"/*.tar.xz "$$DOWNLOAD_DIR"/*.zip "$$CACHE_DIR/" 2>/dev/null || true; \
|
|
139
|
+
fi
|
|
123
140
|
|
|
124
141
|
CXX_M_FLAGS = $(filter -m%, $(CXXFLAGS))
|
|
125
142
|
|
|
@@ -318,7 +318,7 @@ class Cache : public Customizable {
|
|
|
318
318
|
// REQUIRES: handle must have been returned by a method on *this.
|
|
319
319
|
virtual bool Release(Handle* handle, bool erase_if_last_ref = false) = 0;
|
|
320
320
|
|
|
321
|
-
// Return the object
|
|
321
|
+
// Return the object associated with a handle returned by a successful
|
|
322
322
|
// Lookup(). For historical reasons, this is also known at the "value"
|
|
323
323
|
// associated with the key.
|
|
324
324
|
// REQUIRES: handle must not have been released yet.
|