@nxtedition/rocksdb 15.4.1 → 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 -15
- 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/iterator.js +2 -2
- 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
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
#include "options/options_parser.h"
|
|
30
30
|
#include "rocksdb/convenience.h"
|
|
31
31
|
#include "rocksdb/filter_policy.h"
|
|
32
|
+
#include "rocksdb/io_dispatcher.h"
|
|
32
33
|
#include "rocksdb/secondary_cache.h"
|
|
33
34
|
#include "rocksdb/sst_file_manager.h"
|
|
34
35
|
#include "rocksdb/table_properties.h"
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
#include "utilities/backup/backup_engine_impl.h"
|
|
42
43
|
#include "utilities/fault_injection_fs.h"
|
|
43
44
|
#include "utilities/fault_injection_secondary_cache.h"
|
|
45
|
+
#include "utilities/trie_index/trie_index_factory.h"
|
|
44
46
|
|
|
45
47
|
namespace ROCKSDB_NAMESPACE {
|
|
46
48
|
|
|
@@ -74,25 +76,9 @@ StressTest::StressTest()
|
|
|
74
76
|
new_column_family_name_(1),
|
|
75
77
|
num_times_reopened_(0),
|
|
76
78
|
db_preload_finished_(false),
|
|
77
|
-
secondary_db_(nullptr),
|
|
78
79
|
is_db_stopped_(false) {
|
|
79
80
|
if (FLAGS_destroy_db_initially) {
|
|
80
|
-
|
|
81
|
-
db_stress_env->GetChildren(FLAGS_db, &files);
|
|
82
|
-
for (unsigned int i = 0; i < files.size(); i++) {
|
|
83
|
-
if (Slice(files[i]).starts_with("heap-")) {
|
|
84
|
-
db_stress_env->DeleteFile(FLAGS_db + "/" + files[i]);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
Options options;
|
|
89
|
-
options.env = db_stress_env;
|
|
90
|
-
// Remove files without preserving manfiest files
|
|
91
|
-
const Status s = !FLAGS_use_blob_db
|
|
92
|
-
? DestroyDB(FLAGS_db, options)
|
|
93
|
-
: blob_db::DestroyBlobDB(FLAGS_db, options,
|
|
94
|
-
blob_db::BlobDBOptions());
|
|
95
|
-
|
|
81
|
+
const Status s = DbStressDestroyDb(FLAGS_db);
|
|
96
82
|
if (!s.ok()) {
|
|
97
83
|
fprintf(stderr, "Cannot destroy original db: %s\n", s.ToString().c_str());
|
|
98
84
|
exit(1);
|
|
@@ -113,11 +99,10 @@ void StressTest::CleanUp() {
|
|
|
113
99
|
if (db_) {
|
|
114
100
|
db_->Close();
|
|
115
101
|
}
|
|
116
|
-
|
|
102
|
+
db_owner_.reset();
|
|
117
103
|
db_ = nullptr;
|
|
118
104
|
|
|
119
|
-
|
|
120
|
-
secondary_db_ = nullptr;
|
|
105
|
+
secondary_db_.reset();
|
|
121
106
|
}
|
|
122
107
|
|
|
123
108
|
void StressTest::CleanUpColumnFamilies() {
|
|
@@ -167,7 +152,6 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
|
|
|
167
152
|
}
|
|
168
153
|
CompressedSecondaryCacheOptions opts;
|
|
169
154
|
opts.capacity = FLAGS_compressed_secondary_cache_size;
|
|
170
|
-
opts.compress_format_version = FLAGS_compress_format_version;
|
|
171
155
|
if (FLAGS_enable_do_not_compress_roles) {
|
|
172
156
|
opts.do_not_compress_roles = {CacheEntryRoleSet::All()};
|
|
173
157
|
}
|
|
@@ -769,12 +753,11 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
769
753
|
}
|
|
770
754
|
if (s.ok()) {
|
|
771
755
|
CleanUpColumnFamilies();
|
|
772
|
-
|
|
756
|
+
db_owner_.reset();
|
|
773
757
|
db_ = nullptr;
|
|
774
758
|
txn_db_ = nullptr;
|
|
775
759
|
optimistic_txn_db_ = nullptr;
|
|
776
|
-
|
|
777
|
-
secondary_db_ = nullptr;
|
|
760
|
+
secondary_db_.reset();
|
|
778
761
|
|
|
779
762
|
db_preload_finished_.store(true);
|
|
780
763
|
auto now = clock_->NowMicros();
|
|
@@ -948,6 +931,22 @@ Status StressTest::CommitTxn(Transaction& txn, ThreadState* thread) {
|
|
|
948
931
|
return s;
|
|
949
932
|
}
|
|
950
933
|
|
|
934
|
+
bool StressTest::IsExpectedTxnError(const Status& s) {
|
|
935
|
+
if ((s.IsDeadlock() || s.IsTimedOut()) &&
|
|
936
|
+
(FLAGS_use_multiget || FLAGS_use_multi_get_entity)) {
|
|
937
|
+
return true;
|
|
938
|
+
}
|
|
939
|
+
// Optimistic transaction may return TryAgain when memtable history is
|
|
940
|
+
// insufficient for conflict detection (controlled by
|
|
941
|
+
// max_write_buffer_size_to_maintain). ExecuteTransaction retries up to 10
|
|
942
|
+
// times, and if all retries fail, it returns TryAgain. This is an expected
|
|
943
|
+
// condition and should not crash the stress test.
|
|
944
|
+
if (s.IsTryAgain() && FLAGS_use_optimistic_txn) {
|
|
945
|
+
return true;
|
|
946
|
+
}
|
|
947
|
+
return false;
|
|
948
|
+
}
|
|
949
|
+
|
|
951
950
|
Status StressTest::ExecuteTransaction(WriteOptions& write_opts,
|
|
952
951
|
ThreadState* thread,
|
|
953
952
|
std::function<Status(Transaction&)>&& ops,
|
|
@@ -1004,6 +1003,9 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1004
1003
|
read_opts.allow_unprepared_value = FLAGS_allow_unprepared_value;
|
|
1005
1004
|
read_opts.auto_refresh_iterator_with_snapshot =
|
|
1006
1005
|
FLAGS_auto_refresh_iterator_with_snapshot;
|
|
1006
|
+
if (FLAGS_use_trie_index && udi_factory_) {
|
|
1007
|
+
read_opts.table_index_factory = udi_factory_.get();
|
|
1008
|
+
}
|
|
1007
1009
|
|
|
1008
1010
|
WriteOptions write_opts;
|
|
1009
1011
|
if (FLAGS_rate_limit_auto_wal_flush) {
|
|
@@ -1053,6 +1055,9 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1053
1055
|
}
|
|
1054
1056
|
// Commenting this out as we don't want to reset stats on each open.
|
|
1055
1057
|
// thread->stats.Start();
|
|
1058
|
+
if (FLAGS_use_trie_index && udi_factory_) {
|
|
1059
|
+
read_opts.table_index_factory = udi_factory_.get();
|
|
1060
|
+
}
|
|
1056
1061
|
}
|
|
1057
1062
|
|
|
1058
1063
|
#ifndef NDEBUG
|
|
@@ -1286,6 +1291,11 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1286
1291
|
ProcessStatus(shared, "TestDisableManualCompaction", status);
|
|
1287
1292
|
}
|
|
1288
1293
|
|
|
1294
|
+
if (thread->rand.OneInOpt(FLAGS_abort_and_resume_compactions_one_in)) {
|
|
1295
|
+
Status status = TestAbortAndResumeCompactions(thread);
|
|
1296
|
+
ProcessStatus(shared, "TestAbortAndResumeCompactions", status);
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1289
1299
|
if (thread->rand.OneInOpt(FLAGS_verify_checksum_one_in)) {
|
|
1290
1300
|
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
1291
1301
|
ThreadStatusUtil::SetThreadOperation(
|
|
@@ -1706,6 +1716,14 @@ Status StressTest::TestMultiScan(ThreadState* thread,
|
|
|
1706
1716
|
FLAGS_multiscan_use_async_io &&
|
|
1707
1717
|
CheckFSFeatureSupport(options_.env->GetFileSystem().get(),
|
|
1708
1718
|
FSSupportedOps::kAsyncIO);
|
|
1719
|
+
std::shared_ptr<IODispatcher> io_dispatcher;
|
|
1720
|
+
if (FLAGS_multiscan_max_prefetch_memory_bytes > 0) {
|
|
1721
|
+
IODispatcherOptions io_opts;
|
|
1722
|
+
io_opts.max_prefetch_memory_bytes =
|
|
1723
|
+
FLAGS_multiscan_max_prefetch_memory_bytes;
|
|
1724
|
+
io_dispatcher.reset(NewIODispatcher(io_opts));
|
|
1725
|
+
scan_opts.io_dispatcher = io_dispatcher;
|
|
1726
|
+
}
|
|
1709
1727
|
start_key_strs.reserve(num_scans);
|
|
1710
1728
|
end_key_strs.reserve(num_scans);
|
|
1711
1729
|
|
|
@@ -1990,7 +2008,19 @@ Status StressTest::TestIterateImpl(ThreadState* thread,
|
|
|
1990
2008
|
|
|
1991
2009
|
Slice key(key_str);
|
|
1992
2010
|
|
|
1993
|
-
|
|
2011
|
+
// UserDefinedIndexIterator supports Seek(target), Next(), and
|
|
2012
|
+
// SeekToFirst(). However, SeekToLast, SeekForPrev, and Prev are not
|
|
2013
|
+
// supported. Check if UDI is being used either via ReadOptions or
|
|
2014
|
+
// CF-level configuration.
|
|
2015
|
+
const bool using_udi =
|
|
2016
|
+
(ro.table_index_factory != nullptr) || (udi_factory_ != nullptr);
|
|
2017
|
+
// SeekToFirst is supported by UDI, so only total_order is required.
|
|
2018
|
+
const bool support_seek_to_first =
|
|
2019
|
+
expect_total_order && (FLAGS_test_backward_scan || using_udi);
|
|
2020
|
+
// SeekToLast requires backward scan support which UDI does not provide.
|
|
2021
|
+
const bool support_seek_to_last =
|
|
2022
|
+
expect_total_order && FLAGS_test_backward_scan && !using_udi;
|
|
2023
|
+
const bool support_seek_for_prev = FLAGS_test_backward_scan && !using_udi;
|
|
1994
2024
|
|
|
1995
2025
|
// Write-prepared and Write-unprepared and multi-cf-iterator do not support
|
|
1996
2026
|
// Refresh() yet.
|
|
@@ -2005,17 +2035,17 @@ Status StressTest::TestIterateImpl(ThreadState* thread,
|
|
|
2005
2035
|
}
|
|
2006
2036
|
|
|
2007
2037
|
LastIterateOp last_op;
|
|
2008
|
-
if (
|
|
2038
|
+
if (support_seek_to_first && thread->rand.OneIn(100)) {
|
|
2009
2039
|
iter->SeekToFirst();
|
|
2010
2040
|
cmp_iter->SeekToFirst();
|
|
2011
2041
|
last_op = kLastOpSeekToFirst;
|
|
2012
2042
|
op_logs += "STF ";
|
|
2013
|
-
} else if (
|
|
2043
|
+
} else if (support_seek_to_last && thread->rand.OneIn(100)) {
|
|
2014
2044
|
iter->SeekToLast();
|
|
2015
2045
|
cmp_iter->SeekToLast();
|
|
2016
2046
|
last_op = kLastOpSeekToLast;
|
|
2017
2047
|
op_logs += "STL ";
|
|
2018
|
-
} else if (thread->rand.OneIn(8)) {
|
|
2048
|
+
} else if (support_seek_for_prev && thread->rand.OneIn(8)) {
|
|
2019
2049
|
iter->SeekForPrev(key);
|
|
2020
2050
|
cmp_iter->SeekForPrev(key);
|
|
2021
2051
|
last_op = kLastOpSeekForPrev;
|
|
@@ -2047,7 +2077,8 @@ Status StressTest::TestIterateImpl(ThreadState* thread,
|
|
|
2047
2077
|
key, op_logs, verify_func, &diverged);
|
|
2048
2078
|
|
|
2049
2079
|
const bool no_reverse =
|
|
2050
|
-
(FLAGS_memtablerep == "prefix_hash" && !expect_total_order)
|
|
2080
|
+
(FLAGS_memtablerep == "prefix_hash" && !expect_total_order) ||
|
|
2081
|
+
!FLAGS_test_backward_scan;
|
|
2051
2082
|
for (uint64_t i = 0; i < FLAGS_num_iterations && iter->Valid(); ++i) {
|
|
2052
2083
|
if (no_reverse || thread->rand.OneIn(2)) {
|
|
2053
2084
|
iter->Next();
|
|
@@ -2517,7 +2548,7 @@ Status StressTest::TestBackupRestore(
|
|
|
2517
2548
|
from = "BackupEngine::PurgeOldBackups";
|
|
2518
2549
|
}
|
|
2519
2550
|
}
|
|
2520
|
-
DB
|
|
2551
|
+
std::unique_ptr<DB> restored_db;
|
|
2521
2552
|
std::vector<ColumnFamilyHandle*> restored_cf_handles;
|
|
2522
2553
|
|
|
2523
2554
|
// Not yet implemented: opening restored BlobDB or TransactionDB
|
|
@@ -2605,8 +2636,7 @@ Status StressTest::TestBackupRestore(
|
|
|
2605
2636
|
for (auto* cf_handle : restored_cf_handles) {
|
|
2606
2637
|
restored_db->DestroyColumnFamilyHandle(cf_handle);
|
|
2607
2638
|
}
|
|
2608
|
-
|
|
2609
|
-
restored_db = nullptr;
|
|
2639
|
+
restored_db.reset();
|
|
2610
2640
|
}
|
|
2611
2641
|
if (s.ok() && inplace_not_restore) {
|
|
2612
2642
|
// Purge late if inplace open read-only
|
|
@@ -2841,7 +2871,7 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
2841
2871
|
delete checkpoint;
|
|
2842
2872
|
checkpoint = nullptr;
|
|
2843
2873
|
std::vector<ColumnFamilyHandle*> cf_handles;
|
|
2844
|
-
DB
|
|
2874
|
+
std::unique_ptr<DB> checkpoint_db;
|
|
2845
2875
|
if (s.ok()) {
|
|
2846
2876
|
Options options(options_);
|
|
2847
2877
|
options.best_efforts_recovery = false;
|
|
@@ -2905,8 +2935,7 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
2905
2935
|
delete cfh;
|
|
2906
2936
|
}
|
|
2907
2937
|
cf_handles.clear();
|
|
2908
|
-
|
|
2909
|
-
checkpoint_db = nullptr;
|
|
2938
|
+
checkpoint_db.reset();
|
|
2910
2939
|
}
|
|
2911
2940
|
|
|
2912
2941
|
// Temporarily disable error injection for clean-up
|
|
@@ -3062,8 +3091,9 @@ void StressTest::TestCompactFiles(ThreadState* thread,
|
|
|
3062
3091
|
// TOOD (hx235): allow an exact list of tolerable failures under stress
|
|
3063
3092
|
// test
|
|
3064
3093
|
bool non_ok_status_allowed =
|
|
3065
|
-
s.IsManualCompactionPaused() ||
|
|
3066
|
-
s
|
|
3094
|
+
s.IsManualCompactionPaused() || s.IsCompactionAborted() ||
|
|
3095
|
+
IsErrorInjectedAndRetryable(s) || s.IsAborted() ||
|
|
3096
|
+
s.IsInvalidArgument() || s.IsNotSupported();
|
|
3067
3097
|
if (!non_ok_status_allowed) {
|
|
3068
3098
|
fprintf(stderr,
|
|
3069
3099
|
"Unable to perform CompactFiles(): %s under specified "
|
|
@@ -3156,6 +3186,20 @@ Status StressTest::TestDisableManualCompaction(ThreadState* thread) {
|
|
|
3156
3186
|
return Status::OK();
|
|
3157
3187
|
}
|
|
3158
3188
|
|
|
3189
|
+
Status StressTest::TestAbortAndResumeCompactions(ThreadState* thread) {
|
|
3190
|
+
// Abort all running compactions and prevent new ones from starting
|
|
3191
|
+
db_->AbortAllCompactions();
|
|
3192
|
+
// Sleep to allow other threads to attempt operations while aborted
|
|
3193
|
+
// Uses same sleep pattern as TestPauseBackground and
|
|
3194
|
+
// TestDisableManualCompaction
|
|
3195
|
+
int pwr2_micros =
|
|
3196
|
+
std::min(thread->rand.Uniform(25), thread->rand.Uniform(25));
|
|
3197
|
+
clock_->SleepForMicroseconds(1 << pwr2_micros);
|
|
3198
|
+
// Resume compactions
|
|
3199
|
+
db_->ResumeAllCompactions();
|
|
3200
|
+
return Status::OK();
|
|
3201
|
+
}
|
|
3202
|
+
|
|
3159
3203
|
void StressTest::TestAcquireSnapshot(ThreadState* thread,
|
|
3160
3204
|
int rand_column_family,
|
|
3161
3205
|
const std::string& keystr, uint64_t i) {
|
|
@@ -3331,7 +3375,7 @@ void StressTest::TestCompactRange(ThreadState* thread, int64_t rand_key,
|
|
|
3331
3375
|
if (!status.ok()) {
|
|
3332
3376
|
// TOOD (hx235): allow an exact list of tolerable failures under stress test
|
|
3333
3377
|
bool non_ok_status_allowed =
|
|
3334
|
-
status.IsManualCompactionPaused() ||
|
|
3378
|
+
status.IsManualCompactionPaused() || status.IsCompactionAborted() ||
|
|
3335
3379
|
IsErrorInjectedAndRetryable(status) || status.IsAborted() ||
|
|
3336
3380
|
status.IsInvalidArgument() || status.IsNotSupported();
|
|
3337
3381
|
if (!non_ok_status_allowed) {
|
|
@@ -3631,8 +3675,11 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3631
3675
|
assert(db_ == nullptr);
|
|
3632
3676
|
assert(txn_db_ == nullptr);
|
|
3633
3677
|
assert(optimistic_txn_db_ == nullptr);
|
|
3678
|
+
if (FLAGS_use_trie_index) {
|
|
3679
|
+
udi_factory_ = std::make_shared<trie_index::TrieIndexFactory>();
|
|
3680
|
+
}
|
|
3634
3681
|
if (!InitializeOptionsFromFile(options_)) {
|
|
3635
|
-
InitializeOptionsFromFlags(cache_, filter_policy_, options_);
|
|
3682
|
+
InitializeOptionsFromFlags(cache_, filter_policy_, udi_factory_, options_);
|
|
3636
3683
|
}
|
|
3637
3684
|
InitializeOptionsGeneral(cache_, filter_policy_, sqfc_factory_, options_);
|
|
3638
3685
|
DbStressCustomCompressionManager::Register();
|
|
@@ -3670,13 +3717,6 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3670
3717
|
|
|
3671
3718
|
// Remote Compaction
|
|
3672
3719
|
if (FLAGS_remote_compaction_worker_threads > 0) {
|
|
3673
|
-
// TODO(jaykorean) Remove this after fix - remote worker shouldn't recover
|
|
3674
|
-
// from WAL
|
|
3675
|
-
if (!FLAGS_disable_wal) {
|
|
3676
|
-
fprintf(stderr,
|
|
3677
|
-
"WAL is not compatible with Remote Compaction in Stress Test\n");
|
|
3678
|
-
exit(1);
|
|
3679
|
-
}
|
|
3680
3720
|
if ((options_.enable_blob_files ||
|
|
3681
3721
|
options_.enable_blob_garbage_collection ||
|
|
3682
3722
|
FLAGS_allow_setting_blob_options_dynamically)) {
|
|
@@ -3859,26 +3899,28 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3859
3899
|
// StackableDB-based BlobDB
|
|
3860
3900
|
if (FLAGS_use_blob_db) {
|
|
3861
3901
|
blob_db::BlobDBOptions blob_db_options;
|
|
3862
|
-
blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
|
|
3863
|
-
blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
|
|
3864
3902
|
blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
|
|
3865
3903
|
blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
|
|
3866
|
-
blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
|
|
3867
3904
|
|
|
3868
3905
|
blob_db::BlobDB* blob_db = nullptr;
|
|
3869
3906
|
s = blob_db::BlobDB::Open(options_, blob_db_options, FLAGS_db,
|
|
3870
3907
|
cf_descriptors, &column_families_,
|
|
3871
3908
|
&blob_db);
|
|
3872
3909
|
if (s.ok()) {
|
|
3910
|
+
db_owner_.reset(blob_db);
|
|
3873
3911
|
db_ = blob_db;
|
|
3874
3912
|
}
|
|
3875
3913
|
} else {
|
|
3876
3914
|
if (db_preload_finished_.load() && FLAGS_read_only) {
|
|
3877
3915
|
s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db,
|
|
3878
|
-
cf_descriptors, &column_families_,
|
|
3916
|
+
cf_descriptors, &column_families_,
|
|
3917
|
+
&db_owner_);
|
|
3879
3918
|
} else {
|
|
3880
3919
|
s = DB::Open(DBOptions(options_), FLAGS_db, cf_descriptors,
|
|
3881
|
-
&column_families_, &
|
|
3920
|
+
&column_families_, &db_owner_);
|
|
3921
|
+
}
|
|
3922
|
+
if (s.ok()) {
|
|
3923
|
+
db_ = db_owner_.get();
|
|
3882
3924
|
}
|
|
3883
3925
|
}
|
|
3884
3926
|
|
|
@@ -3894,10 +3936,9 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3894
3936
|
s = db_->GetRootDB()->WaitForCompact(WaitForCompactOptions());
|
|
3895
3937
|
if (!s.ok()) {
|
|
3896
3938
|
CleanUpColumnFamilies();
|
|
3897
|
-
|
|
3939
|
+
db_owner_.reset();
|
|
3898
3940
|
db_ = nullptr;
|
|
3899
|
-
|
|
3900
|
-
secondary_db_ = nullptr;
|
|
3941
|
+
secondary_db_.reset();
|
|
3901
3942
|
}
|
|
3902
3943
|
}
|
|
3903
3944
|
if (!s.ok()) {
|
|
@@ -3954,6 +3995,7 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3954
3995
|
}
|
|
3955
3996
|
assert(s.ok());
|
|
3956
3997
|
{
|
|
3998
|
+
db_owner_.reset(optimistic_txn_db_);
|
|
3957
3999
|
db_ = optimistic_txn_db_;
|
|
3958
4000
|
db_aptr_.store(optimistic_txn_db_, std::memory_order_release);
|
|
3959
4001
|
}
|
|
@@ -3989,6 +4031,7 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
3989
4031
|
|
|
3990
4032
|
// Do not swap the order of the following.
|
|
3991
4033
|
{
|
|
4034
|
+
db_owner_.reset(txn_db_);
|
|
3992
4035
|
db_ = txn_db_;
|
|
3993
4036
|
db_aptr_.store(txn_db_, std::memory_order_release);
|
|
3994
4037
|
}
|
|
@@ -4027,6 +4070,7 @@ void StressTest::Open(SharedState* shared, bool reopen) {
|
|
|
4027
4070
|
} else {
|
|
4028
4071
|
DBWithTTL* db_with_ttl;
|
|
4029
4072
|
s = DBWithTTL::Open(options_, FLAGS_db, &db_with_ttl, FLAGS_ttl);
|
|
4073
|
+
db_owner_.reset(db_with_ttl);
|
|
4030
4074
|
db_ = db_with_ttl;
|
|
4031
4075
|
}
|
|
4032
4076
|
|
|
@@ -4106,12 +4150,11 @@ void StressTest::Reopen(ThreadState* thread) {
|
|
|
4106
4150
|
}
|
|
4107
4151
|
assert((txn_db_ == nullptr && optimistic_txn_db_ == nullptr) ||
|
|
4108
4152
|
(db_ == txn_db_ || db_ == optimistic_txn_db_));
|
|
4109
|
-
|
|
4153
|
+
db_owner_.reset();
|
|
4110
4154
|
db_ = nullptr;
|
|
4111
4155
|
txn_db_ = nullptr;
|
|
4112
4156
|
optimistic_txn_db_ = nullptr;
|
|
4113
|
-
|
|
4114
|
-
secondary_db_ = nullptr;
|
|
4157
|
+
secondary_db_.reset();
|
|
4115
4158
|
|
|
4116
4159
|
num_times_reopened_++;
|
|
4117
4160
|
auto now = clock_->NowMicros();
|
|
@@ -4269,6 +4312,7 @@ bool InitializeOptionsFromFile(Options& options) {
|
|
|
4269
4312
|
void InitializeOptionsFromFlags(
|
|
4270
4313
|
const std::shared_ptr<Cache>& cache,
|
|
4271
4314
|
const std::shared_ptr<const FilterPolicy>& filter_policy,
|
|
4315
|
+
const std::shared_ptr<UserDefinedIndexFactory>& udi_factory,
|
|
4272
4316
|
Options& options) {
|
|
4273
4317
|
BlockBasedTableOptions block_based_options;
|
|
4274
4318
|
block_based_options.decouple_partitioned_filters =
|
|
@@ -4311,6 +4355,8 @@ void InitializeOptionsFromFlags(
|
|
|
4311
4355
|
: CacheEntryRoleOptions::Decision::kDisabled}});
|
|
4312
4356
|
block_based_options.format_version =
|
|
4313
4357
|
static_cast<uint32_t>(FLAGS_format_version);
|
|
4358
|
+
block_based_options.separate_key_value_in_data_block =
|
|
4359
|
+
FLAGS_separate_key_value_in_data_block;
|
|
4314
4360
|
block_based_options.index_block_restart_interval =
|
|
4315
4361
|
static_cast<int32_t>(FLAGS_index_block_restart_interval);
|
|
4316
4362
|
block_based_options.filter_policy = filter_policy;
|
|
@@ -4324,6 +4370,10 @@ void InitializeOptionsFromFlags(
|
|
|
4324
4370
|
block_based_options.data_block_index_type =
|
|
4325
4371
|
static_cast<BlockBasedTableOptions::DataBlockIndexType>(
|
|
4326
4372
|
FLAGS_data_block_index_type);
|
|
4373
|
+
block_based_options.index_block_search_type =
|
|
4374
|
+
static_cast<BlockBasedTableOptions::BlockSearchType>(
|
|
4375
|
+
FLAGS_index_block_search_type);
|
|
4376
|
+
block_based_options.uniform_cv_threshold = FLAGS_uniform_cv_threshold;
|
|
4327
4377
|
block_based_options.prepopulate_block_cache =
|
|
4328
4378
|
static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
|
|
4329
4379
|
FLAGS_prepopulate_block_cache);
|
|
@@ -4346,6 +4396,9 @@ void InitializeOptionsFromFlags(
|
|
|
4346
4396
|
fLU64::FLAGS_super_block_alignment_size;
|
|
4347
4397
|
block_based_options.super_block_alignment_space_overhead_ratio =
|
|
4348
4398
|
fLU64::FLAGS_super_block_alignment_space_overhead_ratio;
|
|
4399
|
+
if (udi_factory) {
|
|
4400
|
+
block_based_options.user_defined_index_factory = udi_factory;
|
|
4401
|
+
}
|
|
4349
4402
|
options.table_factory.reset(NewBlockBasedTableFactory(block_based_options));
|
|
4350
4403
|
options.db_write_buffer_size = FLAGS_db_write_buffer_size;
|
|
4351
4404
|
options.write_buffer_size = FLAGS_write_buffer_size;
|
|
@@ -4374,6 +4427,12 @@ void InitializeOptionsFromFlags(
|
|
|
4374
4427
|
ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleFIFO) {
|
|
4375
4428
|
options.compaction_options_fifo.allow_compaction =
|
|
4376
4429
|
FLAGS_fifo_allow_compaction;
|
|
4430
|
+
if (FLAGS_fifo_compaction_max_data_files_size_mb > 0) {
|
|
4431
|
+
options.compaction_options_fifo.max_data_files_size =
|
|
4432
|
+
FLAGS_fifo_compaction_max_data_files_size_mb * 1024 * 1024;
|
|
4433
|
+
}
|
|
4434
|
+
options.compaction_options_fifo.use_kv_ratio_compaction =
|
|
4435
|
+
FLAGS_fifo_compaction_use_kv_ratio_compaction;
|
|
4377
4436
|
}
|
|
4378
4437
|
options.compaction_pri =
|
|
4379
4438
|
static_cast<ROCKSDB_NAMESPACE::CompactionPri>(FLAGS_compaction_pri);
|
|
@@ -4386,6 +4445,13 @@ void InitializeOptionsFromFlags(
|
|
|
4386
4445
|
}
|
|
4387
4446
|
}
|
|
4388
4447
|
options.max_open_files = FLAGS_open_files;
|
|
4448
|
+
options.open_files_async = FLAGS_open_files_async;
|
|
4449
|
+
if (FLAGS_open_files_async && !FLAGS_skip_stats_update_on_db_open) {
|
|
4450
|
+
FLAGS_skip_stats_update_on_db_open = true;
|
|
4451
|
+
fprintf(stderr,
|
|
4452
|
+
"open_files_async requires skip_stats_update_on_db_open, "
|
|
4453
|
+
"enabling it automatically\n");
|
|
4454
|
+
}
|
|
4389
4455
|
if (FLAGS_statistics) {
|
|
4390
4456
|
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
4391
4457
|
}
|
|
@@ -4431,6 +4497,8 @@ void InitializeOptionsFromFlags(
|
|
|
4431
4497
|
}
|
|
4432
4498
|
options.max_manifest_file_size = FLAGS_max_manifest_file_size;
|
|
4433
4499
|
options.max_manifest_space_amp_pct = FLAGS_max_manifest_space_amp_pct;
|
|
4500
|
+
options.verify_manifest_content_on_close =
|
|
4501
|
+
FLAGS_verify_manifest_content_on_close;
|
|
4434
4502
|
options.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
|
|
4435
4503
|
options.allow_concurrent_memtable_write =
|
|
4436
4504
|
FLAGS_allow_concurrent_memtable_write;
|
|
@@ -4459,6 +4527,8 @@ void InitializeOptionsFromFlags(
|
|
|
4459
4527
|
options.write_dbid_to_manifest = FLAGS_write_dbid_to_manifest;
|
|
4460
4528
|
options.write_identity_file = FLAGS_write_identity_file;
|
|
4461
4529
|
options.avoid_flush_during_recovery = FLAGS_avoid_flush_during_recovery;
|
|
4530
|
+
options.enforce_write_buffer_manager_during_recovery =
|
|
4531
|
+
FLAGS_enforce_write_buffer_manager_during_recovery;
|
|
4462
4532
|
options.max_write_batch_group_size_bytes =
|
|
4463
4533
|
FLAGS_max_write_batch_group_size_bytes;
|
|
4464
4534
|
options.level_compaction_dynamic_level_bytes =
|
|
@@ -4470,9 +4540,13 @@ void InitializeOptionsFromFlags(
|
|
|
4470
4540
|
options.memtable_protection_bytes_per_key =
|
|
4471
4541
|
FLAGS_memtable_protection_bytes_per_key;
|
|
4472
4542
|
options.block_protection_bytes_per_key = FLAGS_block_protection_bytes_per_key;
|
|
4543
|
+
options.verify_output_flags =
|
|
4544
|
+
static_cast<VerifyOutputFlags>(FLAGS_verify_output_flags);
|
|
4473
4545
|
options.paranoid_memory_checks = FLAGS_paranoid_memory_checks;
|
|
4474
4546
|
options.memtable_veirfy_per_key_checksum_on_seek =
|
|
4475
4547
|
FLAGS_memtable_veirfy_per_key_checksum_on_seek;
|
|
4548
|
+
options.memtable_batch_lookup_optimization =
|
|
4549
|
+
FLAGS_memtable_batch_lookup_optimization;
|
|
4476
4550
|
|
|
4477
4551
|
// Integrated BlobDB
|
|
4478
4552
|
options.enable_blob_files = FLAGS_enable_blob_files;
|
|
@@ -4701,10 +4775,18 @@ void InitializeOptionsGeneral(
|
|
|
4701
4775
|
"`preserve_unverified_changes` to keep all files\n");
|
|
4702
4776
|
options.avoid_flush_during_recovery = true;
|
|
4703
4777
|
}
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
4707
|
-
|
|
4778
|
+
if (options.enforce_write_buffer_manager_during_recovery) {
|
|
4779
|
+
fprintf(
|
|
4780
|
+
stderr,
|
|
4781
|
+
"WARNING: flipping `enforce_write_buffer_manager_during_recovery` "
|
|
4782
|
+
"to false for `preserve_unverified_changes` to keep all files\n");
|
|
4783
|
+
options.enforce_write_buffer_manager_during_recovery = false;
|
|
4784
|
+
}
|
|
4785
|
+
// Together with `avoid_flush_during_recovery == true` and
|
|
4786
|
+
// `enforce_write_buffer_manager_during_recovery == false`, this will
|
|
4787
|
+
// prevent live files from becoming obsolete and deleted between
|
|
4788
|
+
// `DB::Open()` and `DisableFileDeletions()` due to flush or compaction.
|
|
4789
|
+
// We do not need to warn the user since we will reenable compaction soon.
|
|
4708
4790
|
options.disable_auto_compactions = true;
|
|
4709
4791
|
}
|
|
4710
4792
|
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include "db_stress_tool/db_stress_common.h"
|
|
15
15
|
#include "db_stress_tool/db_stress_shared_state.h"
|
|
16
16
|
#include "rocksdb/experimental.h"
|
|
17
|
+
#include "rocksdb/user_defined_index.h"
|
|
17
18
|
#include "utilities/fault_injection_fs.h"
|
|
18
19
|
|
|
19
20
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -33,6 +34,12 @@ class StressTest {
|
|
|
33
34
|
!status_to_io_status(Status(error_s)).GetDataLoss();
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
// Returns true if the status is an expected transactional error, including
|
|
38
|
+
// lock conflicts (deadlock or timeout) from MaybeAddKeyToTxnForRYW writing
|
|
39
|
+
// to the same key space without the stress-test-level mutex, and TryAgain
|
|
40
|
+
// from optimistic transactions when conflict detection retries are exhausted.
|
|
41
|
+
static bool IsExpectedTxnError(const Status& s);
|
|
42
|
+
|
|
36
43
|
StressTest();
|
|
37
44
|
|
|
38
45
|
virtual ~StressTest() {}
|
|
@@ -332,6 +339,8 @@ class StressTest {
|
|
|
332
339
|
|
|
333
340
|
Status TestDisableManualCompaction(ThreadState* thread);
|
|
334
341
|
|
|
342
|
+
Status TestAbortAndResumeCompactions(ThreadState* thread);
|
|
343
|
+
|
|
335
344
|
void TestAcquireSnapshot(ThreadState* thread, int rand_column_family,
|
|
336
345
|
const std::string& keystr, uint64_t i);
|
|
337
346
|
|
|
@@ -402,6 +411,7 @@ class StressTest {
|
|
|
402
411
|
std::shared_ptr<Cache> cache_;
|
|
403
412
|
std::shared_ptr<Cache> compressed_cache_;
|
|
404
413
|
std::shared_ptr<const FilterPolicy> filter_policy_;
|
|
414
|
+
std::unique_ptr<DB> db_owner_;
|
|
405
415
|
DB* db_;
|
|
406
416
|
TransactionDB* txn_db_;
|
|
407
417
|
OptimisticTransactionDB* optimistic_txn_db_;
|
|
@@ -419,8 +429,9 @@ class StressTest {
|
|
|
419
429
|
std::vector<std::string> options_index_;
|
|
420
430
|
std::atomic<bool> db_preload_finished_;
|
|
421
431
|
std::shared_ptr<SstQueryFilterConfigsManager::Factory> sqfc_factory_;
|
|
432
|
+
std::shared_ptr<UserDefinedIndexFactory> udi_factory_;
|
|
422
433
|
|
|
423
|
-
DB
|
|
434
|
+
std::unique_ptr<DB> secondary_db_;
|
|
424
435
|
std::vector<ColumnFamilyHandle*> secondary_cfhs_;
|
|
425
436
|
bool is_db_stopped_;
|
|
426
437
|
};
|
|
@@ -434,7 +445,9 @@ bool InitializeOptionsFromFile(Options& options);
|
|
|
434
445
|
// input arguments.
|
|
435
446
|
void InitializeOptionsFromFlags(
|
|
436
447
|
const std::shared_ptr<Cache>& cache,
|
|
437
|
-
const std::shared_ptr<const FilterPolicy>& filter_policy,
|
|
448
|
+
const std::shared_ptr<const FilterPolicy>& filter_policy,
|
|
449
|
+
const std::shared_ptr<UserDefinedIndexFactory>& udi_factory,
|
|
450
|
+
Options& options);
|
|
438
451
|
|
|
439
452
|
// Initialize `options` on which `InitializeOptionsFromFile()` and
|
|
440
453
|
// `InitializeOptionsFromFlags()` have both been called already.
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include "db_stress_tool/db_stress_common.h"
|
|
25
25
|
#include "db_stress_tool/db_stress_driver.h"
|
|
26
26
|
#include "db_stress_tool/db_stress_shared_state.h"
|
|
27
|
+
#include "port/stack_trace.h"
|
|
27
28
|
#include "rocksdb/convenience.h"
|
|
28
29
|
#include "utilities/fault_injection_fs.h"
|
|
29
30
|
|
|
@@ -92,12 +93,50 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
92
93
|
fault_env_guard =
|
|
93
94
|
std::make_shared<CompositeEnvWrapper>(raw_env, fault_fs_guard);
|
|
94
95
|
raw_env = fault_env_guard.get();
|
|
96
|
+
|
|
97
|
+
// Register a crash callback so that recently injected errors are
|
|
98
|
+
// printed to stderr when the process crashes (SIGABRT, SIGSEGV, etc.).
|
|
99
|
+
// This helps diagnose stress test failures caused by fault injection.
|
|
100
|
+
port::RegisterCrashCallback([]() {
|
|
101
|
+
if (fault_fs_guard) {
|
|
102
|
+
fault_fs_guard->PrintRecentInjectedErrors();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
95
105
|
}
|
|
96
106
|
|
|
97
|
-
|
|
98
|
-
|
|
107
|
+
auto db_stress_fs =
|
|
108
|
+
std::make_shared<DbStressFSWrapper>(raw_env->GetFileSystem());
|
|
109
|
+
env_wrapper_guard =
|
|
110
|
+
std::make_shared<CompositeEnvWrapper>(raw_env, db_stress_fs);
|
|
99
111
|
db_stress_env = env_wrapper_guard.get();
|
|
100
112
|
|
|
113
|
+
// Handle --destroy_db_and_exit early, before other option validation
|
|
114
|
+
if (FLAGS_destroy_db_and_exit) {
|
|
115
|
+
s = DbStressDestroyDb(FLAGS_db);
|
|
116
|
+
if (s.ok()) {
|
|
117
|
+
fprintf(stdout, "Successfully destroyed db at %s\n", FLAGS_db.c_str());
|
|
118
|
+
return 0;
|
|
119
|
+
} else {
|
|
120
|
+
fprintf(stderr, "Failed to destroy db at %s: %s\n", FLAGS_db.c_str(),
|
|
121
|
+
s.ToString().c_str());
|
|
122
|
+
return 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Handle --delete_dir_and_exit early, before other option validation
|
|
127
|
+
if (!FLAGS_delete_dir_and_exit.empty()) {
|
|
128
|
+
s = DestroyDir(raw_env, FLAGS_delete_dir_and_exit);
|
|
129
|
+
if (s.ok()) {
|
|
130
|
+
fprintf(stdout, "Successfully deleted directory %s\n",
|
|
131
|
+
FLAGS_delete_dir_and_exit.c_str());
|
|
132
|
+
return 0;
|
|
133
|
+
} else {
|
|
134
|
+
fprintf(stderr, "Failed to delete directory %s: %s\n",
|
|
135
|
+
FLAGS_delete_dir_and_exit.c_str(), s.ToString().c_str());
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
101
140
|
FLAGS_rep_factory = StringToRepFactory(FLAGS_memtablerep.c_str());
|
|
102
141
|
|
|
103
142
|
// The number of background threads should be at least as much the
|
|
@@ -190,6 +229,22 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
190
229
|
FLAGS_atomic_flush = true;
|
|
191
230
|
}
|
|
192
231
|
|
|
232
|
+
// Trie UDI supports Seek, Next, and SeekToFirst, but not SeekToLast,
|
|
233
|
+
// SeekForPrev, or Prev. Disable backward scan testing.
|
|
234
|
+
if (FLAGS_use_trie_index) {
|
|
235
|
+
FLAGS_test_backward_scan = false;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Trie UDI uses zero-copy pointers into block data, which is
|
|
239
|
+
// incompatible with mmap_read.
|
|
240
|
+
if (FLAGS_use_trie_index && FLAGS_mmap_read) {
|
|
241
|
+
fprintf(stderr,
|
|
242
|
+
"Error: use_trie_index is incompatible with mmap_read. "
|
|
243
|
+
"The trie index uses zero-copy pointers into block data "
|
|
244
|
+
"which is unsafe with mmap'd reads.\n");
|
|
245
|
+
exit(1);
|
|
246
|
+
}
|
|
247
|
+
|
|
193
248
|
if (FLAGS_read_only) {
|
|
194
249
|
if (FLAGS_writepercent != 0 || FLAGS_delpercent != 0 ||
|
|
195
250
|
FLAGS_delrangepercent != 0) {
|
|
@@ -211,6 +266,25 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
211
266
|
FLAGS_db = default_db_path;
|
|
212
267
|
}
|
|
213
268
|
|
|
269
|
+
// Now that FLAGS_db is resolved, set the fault injection log file path
|
|
270
|
+
// so that PrintAll() writes to a file instead of stderr (signal-safe).
|
|
271
|
+
// Store the log in TEST_TMPDIR (outside the DB directory) so it survives
|
|
272
|
+
// DB reopen (which cleans untracked files) and gets included in the
|
|
273
|
+
// sandcastle db.tar.gz artifact for post-failure analysis.
|
|
274
|
+
if (fault_fs_guard) {
|
|
275
|
+
std::string log_dir;
|
|
276
|
+
const char* test_tmpdir = getenv("TEST_TMPDIR");
|
|
277
|
+
if (test_tmpdir && test_tmpdir[0] != '\0') {
|
|
278
|
+
log_dir = test_tmpdir;
|
|
279
|
+
} else {
|
|
280
|
+
log_dir = "/tmp";
|
|
281
|
+
}
|
|
282
|
+
std::string log_path = log_dir + "/fault_injection_" +
|
|
283
|
+
std::to_string(getpid()) + "_" +
|
|
284
|
+
std::to_string(time(nullptr)) + ".log";
|
|
285
|
+
fault_fs_guard->SetInjectedErrorLogPath(log_path);
|
|
286
|
+
}
|
|
287
|
+
|
|
214
288
|
if ((FLAGS_test_secondary || FLAGS_continuous_verification_interval > 0) &&
|
|
215
289
|
FLAGS_secondaries_base.empty()) {
|
|
216
290
|
std::string default_secondaries_path;
|