@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
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#include "port/port.h"
|
|
18
18
|
#include "port/stack_trace.h"
|
|
19
19
|
#include "rocksdb/utilities/transaction_db.h"
|
|
20
|
+
#include "table/block_based/block_based_table_builder.h"
|
|
20
21
|
#include "test_util/sync_point.h"
|
|
21
22
|
#include "test_util/testutil.h"
|
|
22
23
|
#include "util/cast_util.h"
|
|
@@ -33,6 +34,17 @@ static std::string NEW_VALUE = "NewValue";
|
|
|
33
34
|
class DBFlushTest : public DBTestBase {
|
|
34
35
|
public:
|
|
35
36
|
DBFlushTest() : DBTestBase("db_flush_test", /*env_do_fsync=*/true) {}
|
|
37
|
+
|
|
38
|
+
// Wait for all background flush callbacks to complete before Close().
|
|
39
|
+
// Close() calls db_.reset() which nulls the unique_ptr before the destructor
|
|
40
|
+
// runs, so a concurrent OnFlushCompleted reading test_->db_ would race.
|
|
41
|
+
// WaitForCompact() waits for bg_flush_scheduled_==0 (which is decremented
|
|
42
|
+
// after listener callbacks return) without setting shutting_down_ (so
|
|
43
|
+
// callbacks are not skipped) and without requiring NumNotFlushed()==0 (which
|
|
44
|
+
// would hang when mempurge leaves a memtable in imm()).
|
|
45
|
+
Status WaitForFlushCallbacks() {
|
|
46
|
+
return db_->WaitForCompact(WaitForCompactOptions());
|
|
47
|
+
}
|
|
36
48
|
};
|
|
37
49
|
|
|
38
50
|
class DBFlushDirectIOTest : public DBFlushTest,
|
|
@@ -101,7 +113,7 @@ TEST_F(DBFlushTest, SyncFail) {
|
|
|
101
113
|
TEST_SYNC_POINT("DBFlushTest::SyncFail:2");
|
|
102
114
|
fault_injection_env->SetFilesystemActive(true);
|
|
103
115
|
// Now the background job will do the flush; wait for it.
|
|
104
|
-
// Returns the IO error
|
|
116
|
+
// Returns the IO error happened during flush.
|
|
105
117
|
ASSERT_NOK(dbfull()->TEST_WaitForFlushMemTable());
|
|
106
118
|
ASSERT_EQ("", FilesPerLevel()); // flush failed.
|
|
107
119
|
Destroy(options);
|
|
@@ -518,11 +530,11 @@ TEST_F(DBFlushTest, StatisticsGarbageInsertAndDeletes) {
|
|
|
518
530
|
// Note : one set of delete for KEY1, KEY2, KEY3 is written to
|
|
519
531
|
// SSTable to propagate the delete operations to K-V pairs
|
|
520
532
|
// that could have been inserted into the database during past Flush
|
|
521
|
-
//
|
|
533
|
+
// operations.
|
|
522
534
|
EXPECTED_MEMTABLE_GARBAGE_BYTES_AT_FLUSH -=
|
|
523
535
|
KEY1.size() + KEY2.size() + KEY3.size() + 3 * sizeof(uint64_t);
|
|
524
536
|
|
|
525
|
-
// Additional useful
|
|
537
|
+
// Additional useful payload.
|
|
526
538
|
ASSERT_OK(Delete(KEY4));
|
|
527
539
|
ASSERT_OK(Delete(KEY5));
|
|
528
540
|
ASSERT_OK(Delete(KEY6));
|
|
@@ -614,7 +626,7 @@ TEST_F(DBFlushTest, StatisticsGarbageRangeDeletes) {
|
|
|
614
626
|
|
|
615
627
|
// Note : one set of deleteRange for (KEY1, KEY2) and (KEY2, KEY3) is written
|
|
616
628
|
// to SSTable to propagate the deleteRange operations to K-V pairs that could
|
|
617
|
-
// have been inserted into the database during past Flush
|
|
629
|
+
// have been inserted into the database during past Flush operations.
|
|
618
630
|
EXPECTED_MEMTABLE_GARBAGE_BYTES_AT_FLUSH -=
|
|
619
631
|
(KEY1.size() + KEY2.size() + sizeof(uint64_t)) +
|
|
620
632
|
(KEY2.size() + KEY3.size() + sizeof(uint64_t));
|
|
@@ -709,7 +721,7 @@ class TestFlushListener : public EventListener {
|
|
|
709
721
|
// that assumption does not hold (see the test case MultiDBMultiListeners
|
|
710
722
|
// below).
|
|
711
723
|
ASSERT_TRUE(test_);
|
|
712
|
-
if (db == test_->db_) {
|
|
724
|
+
if (db == test_->db_.get()) {
|
|
713
725
|
std::vector<std::vector<FileMetaData>> files_by_level;
|
|
714
726
|
test_->dbfull()->TEST_GetFilesMetaData(db->DefaultColumnFamily(),
|
|
715
727
|
&files_by_level);
|
|
@@ -842,7 +854,7 @@ TEST_F(DBFlushTest, FixFlushReasonRaceFromConcurrentFlushes) {
|
|
|
842
854
|
ASSERT_OK(Put(1, Key(idx), std::string(1, 'v')));
|
|
843
855
|
}
|
|
844
856
|
|
|
845
|
-
// To coerce a manual flush
|
|
857
|
+
// To coerce a manual flush happening in the middle of GetLiveFiles's flush,
|
|
846
858
|
// we need to pause background flush thread and enable it later.
|
|
847
859
|
std::shared_ptr<test::SleepingBackgroundTask> sleeping_task =
|
|
848
860
|
std::make_shared<test::SleepingBackgroundTask>();
|
|
@@ -851,7 +863,7 @@ TEST_F(DBFlushTest, FixFlushReasonRaceFromConcurrentFlushes) {
|
|
|
851
863
|
sleeping_task.get(), Env::Priority::HIGH);
|
|
852
864
|
sleeping_task->WaitUntilSleeping();
|
|
853
865
|
|
|
854
|
-
// Coerce a manual flush
|
|
866
|
+
// Coerce a manual flush happening in the middle of GetLiveFiles's flush
|
|
855
867
|
bool get_live_files_paused_at_sync_point = false;
|
|
856
868
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
857
869
|
"DBImpl::AtomicFlushMemTables:AfterScheduleFlush", [&](void* /* arg */) {
|
|
@@ -1055,6 +1067,7 @@ TEST_F(DBFlushTest, MemPurgeBasic) {
|
|
|
1055
1067
|
ASSERT_EQ(Get(RNDKEY2), p_rv2);
|
|
1056
1068
|
ASSERT_EQ(Get(RNDKEY3), p_rv3);
|
|
1057
1069
|
|
|
1070
|
+
ASSERT_OK(WaitForFlushCallbacks());
|
|
1058
1071
|
Close();
|
|
1059
1072
|
}
|
|
1060
1073
|
|
|
@@ -1169,6 +1182,7 @@ TEST_F(DBFlushTest, MemPurgeBasicToggle) {
|
|
|
1169
1182
|
// We expect no mempurge at all.
|
|
1170
1183
|
EXPECT_EQ(mempurge_count.exchange(0), ZERO);
|
|
1171
1184
|
|
|
1185
|
+
ASSERT_OK(WaitForFlushCallbacks());
|
|
1172
1186
|
Close();
|
|
1173
1187
|
}
|
|
1174
1188
|
// End of MemPurgeBasicToggle, which is not
|
|
@@ -1425,10 +1439,11 @@ TEST_F(DBFlushTest, MemPurgeDeleteAndDeleteRange) {
|
|
|
1425
1439
|
delete iter;
|
|
1426
1440
|
}
|
|
1427
1441
|
|
|
1442
|
+
ASSERT_OK(WaitForFlushCallbacks());
|
|
1428
1443
|
Close();
|
|
1429
1444
|
}
|
|
1430
1445
|
|
|
1431
|
-
// Create a Compaction
|
|
1446
|
+
// Create a Compaction Filter that will be invoked
|
|
1432
1447
|
// at flush time and will update the value of a KV pair
|
|
1433
1448
|
// if the key string is "lower" than the filter_key_ string.
|
|
1434
1449
|
class ConditionalUpdateFilter : public CompactionFilter {
|
|
@@ -1879,6 +1894,85 @@ TEST_F(DBFlushTest, MemPurgeCorrectLogNumberAndSSTFileCreation) {
|
|
|
1879
1894
|
Close();
|
|
1880
1895
|
}
|
|
1881
1896
|
|
|
1897
|
+
// Reproduction for MemPurge memtable ID ordering bug.
|
|
1898
|
+
// When MemPurge runs, it releases db_mutex_. During that window, new
|
|
1899
|
+
// memtables can be switched to the immutable list with higher IDs. When
|
|
1900
|
+
// MemPurge re-acquires the mutex and adds its output memtable using the
|
|
1901
|
+
// stale ID from mems_.back(), the ordering assertion fires.
|
|
1902
|
+
TEST_F(DBFlushTest, MemPurgeIdOrdering) {
|
|
1903
|
+
Options options = CurrentOptions();
|
|
1904
|
+
options.create_if_missing = true;
|
|
1905
|
+
options.compression = kNoCompression;
|
|
1906
|
+
options.inplace_update_support = false;
|
|
1907
|
+
options.allow_concurrent_memtable_write = true;
|
|
1908
|
+
options.write_buffer_size = 1 << 20; // 1MB
|
|
1909
|
+
// Allow enough immutable memtables so writes don't stall while the
|
|
1910
|
+
// flush thread is paused in the sync point.
|
|
1911
|
+
options.max_write_buffer_number = 8;
|
|
1912
|
+
// Always attempt MemPurge on flush.
|
|
1913
|
+
options.experimental_mempurge_threshold = 1.0;
|
|
1914
|
+
ASSERT_OK(TryReopen(options));
|
|
1915
|
+
|
|
1916
|
+
// Coordinate via LoadDependency:
|
|
1917
|
+
// 1. Flush thread hits BeforeReacquireMutex -> foreground unblocks
|
|
1918
|
+
// 2. Foreground writes data, triggers memtable switch
|
|
1919
|
+
// 3. Foreground hits SwitchDone -> flush thread unblocks at
|
|
1920
|
+
// AfterWaitForTest
|
|
1921
|
+
// 4. Flush thread re-acquires mutex, tries AddMemTable with stale ID
|
|
1922
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
1923
|
+
{{"FlushJob::MemPurge:BeforeReacquireMutex",
|
|
1924
|
+
"DBFlushTest::MemPurgeIdOrdering:StartWriting"},
|
|
1925
|
+
{"DBFlushTest::MemPurgeIdOrdering:SwitchDone",
|
|
1926
|
+
"FlushJob::MemPurge:AfterWaitForTest"}});
|
|
1927
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
1928
|
+
|
|
1929
|
+
const int kValueSize = 10240; // 10KB values like MemPurgeBasic
|
|
1930
|
+
const int kNumKeys = 30;
|
|
1931
|
+
Random rnd(301);
|
|
1932
|
+
|
|
1933
|
+
// Fill the memtable with overwrites of the same keys so MemPurge
|
|
1934
|
+
// can compact them down (high garbage ratio). Each round is ~300KB,
|
|
1935
|
+
// need ~3 rounds to approach the 1MB write_buffer_size.
|
|
1936
|
+
for (int round = 0; round < 3; round++) {
|
|
1937
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
1938
|
+
ASSERT_OK(Put("key" + std::to_string(i), rnd.RandomString(kValueSize)));
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
// One more round should trigger a flush with MemPurge in the background.
|
|
1943
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
1944
|
+
ASSERT_OK(Put("key" + std::to_string(i), rnd.RandomString(kValueSize)));
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
// Block until MemPurge reaches the sync point (db_mutex_ released).
|
|
1948
|
+
TEST_SYNC_POINT("DBFlushTest::MemPurgeIdOrdering:StartWriting");
|
|
1949
|
+
|
|
1950
|
+
// Now MemPurge is paused with db_mutex_ released. Write enough data
|
|
1951
|
+
// to fill another memtable and trigger a switch. This creates an
|
|
1952
|
+
// immutable memtable with a higher ID than the one being mempurged.
|
|
1953
|
+
for (int i = 0; i < kNumKeys * 4; i++) {
|
|
1954
|
+
ASSERT_OK(Put("newkey" + std::to_string(i), rnd.RandomString(kValueSize)));
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
// Let MemPurge continue -- it will re-acquire the mutex and try to
|
|
1958
|
+
// add the output memtable with the stale ID.
|
|
1959
|
+
TEST_SYNC_POINT("DBFlushTest::MemPurgeIdOrdering:SwitchDone");
|
|
1960
|
+
|
|
1961
|
+
// Allow background work to finish.
|
|
1962
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
1963
|
+
|
|
1964
|
+
// If the bug is present, the assertion in AddMemTable fires before
|
|
1965
|
+
// we reach here.
|
|
1966
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
1967
|
+
ASSERT_NE(Get("key" + std::to_string(i)), "NOT_FOUND");
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
1971
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1972
|
+
|
|
1973
|
+
Close();
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1882
1976
|
TEST_P(DBFlushDirectIOTest, DirectIO) {
|
|
1883
1977
|
Options options;
|
|
1884
1978
|
options.create_if_missing = true;
|
|
@@ -2533,7 +2627,7 @@ TEST_F(DBFlushTest, TombstoneVisibleInSnapshot) {
|
|
|
2533
2627
|
|
|
2534
2628
|
ASSERT_OK(db_->Put(WriteOptions(), "foo", "value0"));
|
|
2535
2629
|
|
|
2536
|
-
ManagedSnapshot snapshot_guard(db_);
|
|
2630
|
+
ManagedSnapshot snapshot_guard(db_.get());
|
|
2537
2631
|
|
|
2538
2632
|
ColumnFamilyHandle* default_cf = db_->DefaultColumnFamily();
|
|
2539
2633
|
ASSERT_OK(db_->Flush(FlushOptions(), default_cf));
|
|
@@ -2574,7 +2668,7 @@ TEST_P(DBAtomicFlushTest, ManualFlushUnder2PC) {
|
|
|
2574
2668
|
txn_db_opts.write_policy = TxnDBWritePolicy::WRITE_COMMITTED;
|
|
2575
2669
|
ASSERT_OK(TransactionDB::Open(options, txn_db_opts, dbname_, &txn_db));
|
|
2576
2670
|
ASSERT_NE(txn_db, nullptr);
|
|
2577
|
-
db_
|
|
2671
|
+
db_.reset(txn_db);
|
|
2578
2672
|
|
|
2579
2673
|
// Create two more columns other than default CF.
|
|
2580
2674
|
std::vector<std::string> cfs = {"puppy", "kitty"};
|
|
@@ -2638,9 +2732,8 @@ TEST_P(DBAtomicFlushTest, ManualFlushUnder2PC) {
|
|
|
2638
2732
|
// it means atomic flush didn't write the min_log_number_to_keep to MANIFEST.
|
|
2639
2733
|
cfs.push_back(kDefaultColumnFamilyName);
|
|
2640
2734
|
ASSERT_OK(TryReopenWithColumnFamilies(cfs, options));
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
ASSERT_NE(db_impl->MinLogNumberToKeep(), 0);
|
|
2735
|
+
ASSERT_TRUE(dbfull()->allow_2pc());
|
|
2736
|
+
ASSERT_NE(dbfull()->MinLogNumberToKeep(), 0);
|
|
2644
2737
|
}
|
|
2645
2738
|
|
|
2646
2739
|
TEST_P(DBAtomicFlushTest, ManualAtomicFlush) {
|
|
@@ -3707,6 +3800,55 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
3707
3800
|
// larger than the max allowed padding size
|
|
3708
3801
|
testing::Values(4, kLowSpaceOverheadRatio)));
|
|
3709
3802
|
|
|
3803
|
+
// Test that when the table builder's io_status becomes bad during flush
|
|
3804
|
+
// (simulating write fault injection), BuildTable properly propagates the
|
|
3805
|
+
// builder's IO error instead of producing a misleading Corruption from the
|
|
3806
|
+
// num_entries mismatch check.
|
|
3807
|
+
TEST_F(DBFlushTest, BuilderWriteFaultPropagationDuringFlush) {
|
|
3808
|
+
Options options = CurrentOptions();
|
|
3809
|
+
options.flush_verify_memtable_count = true;
|
|
3810
|
+
options.table_factory.reset(
|
|
3811
|
+
NewBlockBasedTableFactory(BlockBasedTableOptions()));
|
|
3812
|
+
|
|
3813
|
+
DestroyAndReopen(options);
|
|
3814
|
+
|
|
3815
|
+
for (int i = 0; i < 100; i++) {
|
|
3816
|
+
ASSERT_OK(Put("key" + std::to_string(i),
|
|
3817
|
+
std::string(100, 'v') + std::to_string(i)));
|
|
3818
|
+
}
|
|
3819
|
+
|
|
3820
|
+
// Skip all Add() calls to simulate entries not being committed (builder
|
|
3821
|
+
// stays empty), as happens when fault injection causes early returns.
|
|
3822
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3823
|
+
"BlockBasedTableBuilder::Add::skip",
|
|
3824
|
+
[&](void* skip) { *(bool*)skip = true; });
|
|
3825
|
+
|
|
3826
|
+
// Inject an IOError into the builder's status before the empty check.
|
|
3827
|
+
// This simulates the scenario where write fault injection puts the builder
|
|
3828
|
+
// in an error state, causing all Add() calls to return early (ok() is false)
|
|
3829
|
+
// and leaving the builder empty.
|
|
3830
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3831
|
+
"BuildTable:BeforeCheckEmpty", [&](void* arg) {
|
|
3832
|
+
auto* builder = static_cast<BlockBasedTableBuilder*>(
|
|
3833
|
+
static_cast<TableBuilder*>(arg));
|
|
3834
|
+
builder->TEST_InjectIOError();
|
|
3835
|
+
});
|
|
3836
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3837
|
+
|
|
3838
|
+
Status s = Flush();
|
|
3839
|
+
|
|
3840
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3841
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3842
|
+
|
|
3843
|
+
// With the fix, the builder's IOError is propagated instead of the
|
|
3844
|
+
// misleading Corruption from the key count mismatch check.
|
|
3845
|
+
ASSERT_NOK(s);
|
|
3846
|
+
ASSERT_TRUE(s.IsIOError())
|
|
3847
|
+
<< "Expected IOError from builder error propagation, got: "
|
|
3848
|
+
<< s.ToString();
|
|
3849
|
+
|
|
3850
|
+
Close();
|
|
3851
|
+
}
|
|
3710
3852
|
} // namespace ROCKSDB_NAMESPACE
|
|
3711
3853
|
|
|
3712
3854
|
int main(int argc, char** argv) {
|
|
@@ -91,8 +91,21 @@ Status CompactedDBImpl::Get(const ReadOptions& _read_options,
|
|
|
91
91
|
/*b_has_ts=*/false) < 0) {
|
|
92
92
|
return Status::NotFound();
|
|
93
93
|
}
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
TableReader* t = nullptr;
|
|
95
|
+
TableCache::TypedHandle* handle = nullptr;
|
|
96
|
+
Status s = cfd_->table_cache()->FindTable(
|
|
97
|
+
read_options, cfd_->table_cache()->file_options(),
|
|
98
|
+
cfd_->internal_comparator(), *f.file_metadata, &handle,
|
|
99
|
+
version_->GetMutableCFOptions(), &t, false /* no_io */,
|
|
100
|
+
nullptr /* file_read_hist */, false /* skip_filters */, files_level_,
|
|
101
|
+
true /* prefetch_index_and_filter_in_cache */,
|
|
102
|
+
0 /* max_file_size_for_l0_meta_pin */, f.file_metadata->temperature,
|
|
103
|
+
true /* pin_table_handle */);
|
|
104
|
+
if (s.ok()) {
|
|
105
|
+
assert(handle == nullptr);
|
|
106
|
+
// Use TableReader directly to avoid extra table_cache->Get() overheads
|
|
107
|
+
s = t->Get(read_options, lkey.internal_key(), &get_context, nullptr);
|
|
108
|
+
}
|
|
96
109
|
if (!s.ok() && !s.IsNotFound()) {
|
|
97
110
|
return s;
|
|
98
111
|
}
|
|
@@ -152,7 +165,6 @@ void CompactedDBImpl::MultiGet(const ReadOptions& _read_options,
|
|
|
152
165
|
}
|
|
153
166
|
|
|
154
167
|
GetWithTimestampReadCallback read_cb(kMaxSequenceNumber);
|
|
155
|
-
autovector<TableReader*, 16> reader_list;
|
|
156
168
|
for (size_t i = 0; i < num_keys; ++i) {
|
|
157
169
|
const Slice& key = keys[i];
|
|
158
170
|
LookupKey lkey(key, kMaxSequenceNumber, read_options.timestamp);
|
|
@@ -162,38 +174,40 @@ void CompactedDBImpl::MultiGet(const ReadOptions& _read_options,
|
|
|
162
174
|
ExtractUserKeyAndStripTimestamp(f.smallest_key,
|
|
163
175
|
user_comparator_->timestamp_size()),
|
|
164
176
|
/*b_has_ts=*/false) < 0) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
f.fd.table_reader->Prepare(lkey.internal_key());
|
|
168
|
-
reader_list.push_back(f.fd.table_reader);
|
|
177
|
+
statuses[i] = Status::NotFound();
|
|
178
|
+
continue;
|
|
169
179
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
180
|
+
PinnableSlice& pinnable_val = values[i];
|
|
181
|
+
std::string* timestamp = timestamps ? ×tamps[i] : nullptr;
|
|
182
|
+
GetContext get_context(
|
|
183
|
+
user_comparator_, nullptr, nullptr, nullptr, GetContext::kNotFound,
|
|
184
|
+
lkey.user_key(), &pinnable_val, /*columns=*/nullptr,
|
|
185
|
+
user_comparator_->timestamp_size() > 0 ? timestamp : nullptr, nullptr,
|
|
186
|
+
nullptr, true, nullptr, nullptr, nullptr, nullptr, &read_cb);
|
|
187
|
+
TableReader* t = nullptr;
|
|
188
|
+
TableCache::TypedHandle* handle = nullptr;
|
|
189
|
+
Status status = cfd_->table_cache()->FindTable(
|
|
190
|
+
read_options, cfd_->table_cache()->file_options(),
|
|
191
|
+
cfd_->internal_comparator(), *f.file_metadata, &handle,
|
|
192
|
+
version_->GetMutableCFOptions(), &t, false /* no_io */,
|
|
193
|
+
nullptr /* file_read_hist */, false /* skip_filters */, files_level_,
|
|
194
|
+
true /* prefetch_index_and_filter_in_cache */,
|
|
195
|
+
0 /* max_file_size_for_l0_meta_pin */, f.file_metadata->temperature,
|
|
196
|
+
true /* pin_table_handle */);
|
|
197
|
+
if (status.ok()) {
|
|
198
|
+
assert(handle == nullptr);
|
|
199
|
+
// Use TableReader directly to avoid extra table_cache->Get() overheads
|
|
200
|
+
status = t->Get(read_options, lkey.internal_key(), &get_context, nullptr);
|
|
201
|
+
}
|
|
202
|
+
if (!status.ok() && !status.IsNotFound()) {
|
|
203
|
+
statuses[i] = status;
|
|
204
|
+
} else {
|
|
205
|
+
if (get_context.State() == GetContext::kFound) {
|
|
206
|
+
statuses[i] = Status::OK();
|
|
190
207
|
} else {
|
|
191
|
-
|
|
192
|
-
statuses[idx] = Status::OK();
|
|
193
|
-
}
|
|
208
|
+
statuses[i] = Status::NotFound();
|
|
194
209
|
}
|
|
195
210
|
}
|
|
196
|
-
++idx;
|
|
197
211
|
}
|
|
198
212
|
}
|
|
199
213
|
|
|
@@ -230,6 +244,7 @@ Status CompactedDBImpl::Init(const Options& options) {
|
|
|
230
244
|
return Status::NotSupported("Both L0 and other level contain files");
|
|
231
245
|
}
|
|
232
246
|
files_ = l0;
|
|
247
|
+
files_level_ = 0;
|
|
233
248
|
return Status::OK();
|
|
234
249
|
}
|
|
235
250
|
|
|
@@ -242,6 +257,7 @@ Status CompactedDBImpl::Init(const Options& options) {
|
|
|
242
257
|
int level = vstorage->num_non_empty_levels() - 1;
|
|
243
258
|
if (vstorage->LevelFilesBrief(level).num_files > 0) {
|
|
244
259
|
files_ = vstorage->LevelFilesBrief(level);
|
|
260
|
+
files_level_ = level;
|
|
245
261
|
return Status::OK();
|
|
246
262
|
}
|
|
247
263
|
return Status::NotSupported("no file exists");
|
|
@@ -261,6 +277,13 @@ Status CompactedDBImpl::Open(const Options& options, const std::string& dbname,
|
|
|
261
277
|
std::unique_ptr<CompactedDBImpl> db(new CompactedDBImpl(db_options, dbname));
|
|
262
278
|
Status s = db->Init(options);
|
|
263
279
|
if (s.ok()) {
|
|
280
|
+
{
|
|
281
|
+
InstrumentedMutexLock l(&db->mutex_);
|
|
282
|
+
db->opened_successfully_ = true;
|
|
283
|
+
if (db->immutable_db_options_.open_files_async) {
|
|
284
|
+
db->ScheduleAsyncFileOpening();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
264
287
|
s = db->StartPeriodicTaskScheduler();
|
|
265
288
|
}
|
|
266
289
|
if (s.ok()) {
|