@nxtedition/rocksdb 15.4.1 → 16.0.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 +70 -23
- 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 +70 -10
- package/iterator.js +25 -3
- package/max_rev_operator.h +9 -5
- 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
|
@@ -758,8 +758,8 @@ class BackupEngineTest : public testing::Test {
|
|
|
758
758
|
ASSERT_OK(CreateLoggerFromOptions(dbname_, logger_options, &logger_));
|
|
759
759
|
}
|
|
760
760
|
|
|
761
|
-
DB
|
|
762
|
-
DB
|
|
761
|
+
std::unique_ptr<DB> OpenDB() {
|
|
762
|
+
std::unique_ptr<DB> db;
|
|
763
763
|
EXPECT_OK(DB::Open(options_, dbname_, &db));
|
|
764
764
|
return db;
|
|
765
765
|
}
|
|
@@ -770,13 +770,11 @@ class BackupEngineTest : public testing::Test {
|
|
|
770
770
|
|
|
771
771
|
// Open DB
|
|
772
772
|
test_db_fs_->SetLimitWrittenFiles(1000000);
|
|
773
|
-
DB* db;
|
|
774
773
|
if (read_only) {
|
|
775
|
-
ASSERT_OK(DB::OpenForReadOnly(options_, dbname_, &
|
|
774
|
+
ASSERT_OK(DB::OpenForReadOnly(options_, dbname_, &db_));
|
|
776
775
|
} else {
|
|
777
|
-
ASSERT_OK(DB::Open(options_, dbname_, &
|
|
776
|
+
ASSERT_OK(DB::Open(options_, dbname_, &db_));
|
|
778
777
|
}
|
|
779
|
-
db_.reset(db);
|
|
780
778
|
}
|
|
781
779
|
|
|
782
780
|
void InitializeDBAndBackupEngine(bool dummy = false) {
|
|
@@ -784,14 +782,12 @@ class BackupEngineTest : public testing::Test {
|
|
|
784
782
|
test_db_fs_->SetLimitWrittenFiles(1000000);
|
|
785
783
|
test_db_fs_->SetDummySequentialFile(dummy);
|
|
786
784
|
|
|
787
|
-
DB* db;
|
|
788
785
|
if (dummy) {
|
|
789
786
|
dummy_db_ = new DummyDB(options_, dbname_);
|
|
790
|
-
|
|
787
|
+
db_.reset(dummy_db_);
|
|
791
788
|
} else {
|
|
792
|
-
ASSERT_OK(DB::Open(options_, dbname_, &
|
|
789
|
+
ASSERT_OK(DB::Open(options_, dbname_, &db_));
|
|
793
790
|
}
|
|
794
|
-
db_.reset(db);
|
|
795
791
|
}
|
|
796
792
|
|
|
797
793
|
virtual void OpenDBAndBackupEngine(
|
|
@@ -914,13 +910,13 @@ class BackupEngineTest : public testing::Test {
|
|
|
914
910
|
ASSERT_OK(backup_engine_->RestoreDBFromLatestBackup(dbname_, dbname_,
|
|
915
911
|
restore_options));
|
|
916
912
|
}
|
|
917
|
-
|
|
913
|
+
auto db = OpenDB();
|
|
918
914
|
// Check DB contents
|
|
919
|
-
AssertExists(db, start_exist, end_exist);
|
|
915
|
+
AssertExists(db.get(), start_exist, end_exist);
|
|
920
916
|
if (end != 0) {
|
|
921
|
-
AssertEmpty(db, end_exist, end);
|
|
917
|
+
AssertEmpty(db.get(), end_exist, end);
|
|
922
918
|
}
|
|
923
|
-
|
|
919
|
+
db.reset();
|
|
924
920
|
if (opened_backup_engine) {
|
|
925
921
|
CloseBackupEngine();
|
|
926
922
|
}
|
|
@@ -1063,6 +1059,7 @@ class BackupEngineTest : public testing::Test {
|
|
|
1063
1059
|
// all the dbs!
|
|
1064
1060
|
DummyDB* dummy_db_; // owned as db_ when present
|
|
1065
1061
|
std::unique_ptr<DB> db_;
|
|
1062
|
+
DBImpl* dbfull() { return static_cast_with_check<DBImpl>(db_.get()); }
|
|
1066
1063
|
std::unique_ptr<BackupEngine> backup_engine_;
|
|
1067
1064
|
|
|
1068
1065
|
// options
|
|
@@ -1203,7 +1200,7 @@ TEST_F(BackupEngineTest, IncrementalRestore) {
|
|
|
1203
1200
|
// Since we started with a blank db, restore copied all the files.
|
|
1204
1201
|
test_db_fs_->AssertWrittenFiles(all_files);
|
|
1205
1202
|
|
|
1206
|
-
db_
|
|
1203
|
+
db_ = OpenDB();
|
|
1207
1204
|
|
|
1208
1205
|
// Check DB contents.
|
|
1209
1206
|
AssertExists(db_.get(), 0, keys_iteration * 2);
|
|
@@ -1255,7 +1252,7 @@ TEST_F(BackupEngineTest, IncrementalRestore) {
|
|
|
1255
1252
|
test_db_fs_->AssertWrittenFiles(should_have_written);
|
|
1256
1253
|
|
|
1257
1254
|
// Check DB contents.
|
|
1258
|
-
db_
|
|
1255
|
+
db_ = OpenDB();
|
|
1259
1256
|
AssertExists(db_.get(), 0, keys_iteration * 2);
|
|
1260
1257
|
|
|
1261
1258
|
db_.reset(); // Close DB.
|
|
@@ -1307,7 +1304,7 @@ TEST_F(BackupEngineTest, IncrementalRestore) {
|
|
|
1307
1304
|
// 'Hole' has been patched, 'in-policy' db files were retained.
|
|
1308
1305
|
test_db_fs_->AssertWrittenFiles(should_have_written);
|
|
1309
1306
|
|
|
1310
|
-
db_
|
|
1307
|
+
db_ = OpenDB();
|
|
1311
1308
|
Status s = db_->VerifyChecksum();
|
|
1312
1309
|
|
|
1313
1310
|
// Check DB contents.
|
|
@@ -1424,9 +1421,9 @@ TEST_P(BackupEngineTestWithParam, OfflineIntegrationTest) {
|
|
|
1424
1421
|
DestroyDBWithoutCheck(dbname_, options_);
|
|
1425
1422
|
|
|
1426
1423
|
// ---- make sure it's empty ----
|
|
1427
|
-
|
|
1428
|
-
AssertEmpty(db, 0, fill_up_to);
|
|
1429
|
-
|
|
1424
|
+
auto db = OpenDB();
|
|
1425
|
+
AssertEmpty(db.get(), 0, fill_up_to);
|
|
1426
|
+
db.reset();
|
|
1430
1427
|
|
|
1431
1428
|
// ---- restore the DB ----
|
|
1432
1429
|
OpenBackupEngine();
|
|
@@ -1478,9 +1475,9 @@ TEST_P(BackupEngineTestWithParam, OnlineIntegrationTest) {
|
|
|
1478
1475
|
DestroyDBWithoutCheck(dbname_, options_);
|
|
1479
1476
|
|
|
1480
1477
|
// ---- make sure it's empty ----
|
|
1481
|
-
|
|
1482
|
-
AssertEmpty(db, 0, max_key);
|
|
1483
|
-
|
|
1478
|
+
auto db = OpenDB();
|
|
1479
|
+
AssertEmpty(db.get(), 0, max_key);
|
|
1480
|
+
db.reset();
|
|
1484
1481
|
|
|
1485
1482
|
// ---- restore every backup and verify all the data is there ----
|
|
1486
1483
|
OpenBackupEngine();
|
|
@@ -2091,10 +2088,9 @@ TEST_F(BackupEngineTest, FlushCompactDuringBackupCheckpoint) {
|
|
|
2091
2088
|
"BackupEngineTest::FlushCompactDuringBackupCheckpoint:Before");
|
|
2092
2089
|
FillDB(db_.get(), keys_iteration, 2 * keys_iteration);
|
|
2093
2090
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
2094
|
-
|
|
2095
|
-
ASSERT_OK(dbi->TEST_WaitForFlushMemTable());
|
|
2091
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
2096
2092
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
2097
|
-
ASSERT_OK(
|
|
2093
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
2098
2094
|
TEST_SYNC_POINT(
|
|
2099
2095
|
"BackupEngineTest::FlushCompactDuringBackupCheckpoint:After");
|
|
2100
2096
|
}};
|
|
@@ -2141,7 +2137,7 @@ TEST_F(BackupEngineTest, BackupOptions) {
|
|
|
2141
2137
|
// Must reset() before reset(OpenDB()) again.
|
|
2142
2138
|
// Calling OpenDB() while *db_ is existing will cause LOCK issue
|
|
2143
2139
|
db_.reset();
|
|
2144
|
-
db_
|
|
2140
|
+
db_ = OpenDB();
|
|
2145
2141
|
ASSERT_OK(backup_engine_->CreateNewBackup(db_.get(), true));
|
|
2146
2142
|
ASSERT_OK(ROCKSDB_NAMESPACE::GetLatestOptionsFileName(db_->GetName(),
|
|
2147
2143
|
options_.env, &name));
|
|
@@ -2169,13 +2165,12 @@ TEST_F(BackupEngineTest, SetOptionsBackupRaceCondition) {
|
|
|
2169
2165
|
ROCKSDB_NAMESPACE::port::Thread setoptions_thread{[this]() {
|
|
2170
2166
|
TEST_SYNC_POINT(
|
|
2171
2167
|
"BackupEngineTest::SetOptionsBackupRaceCondition:BeforeSetOptions");
|
|
2172
|
-
DBImpl* dbi = static_cast<DBImpl*>(db_.get());
|
|
2173
2168
|
// Change arbitrary option to trigger OPTIONS file deletion
|
|
2174
|
-
ASSERT_OK(
|
|
2169
|
+
ASSERT_OK(db_->SetOptions(db_->DefaultColumnFamily(),
|
|
2175
2170
|
{{"paranoid_file_checks", "false"}}));
|
|
2176
|
-
ASSERT_OK(
|
|
2171
|
+
ASSERT_OK(db_->SetOptions(db_->DefaultColumnFamily(),
|
|
2177
2172
|
{{"paranoid_file_checks", "true"}}));
|
|
2178
|
-
ASSERT_OK(
|
|
2173
|
+
ASSERT_OK(db_->SetOptions(db_->DefaultColumnFamily(),
|
|
2179
2174
|
{{"paranoid_file_checks", "false"}}));
|
|
2180
2175
|
TEST_SYNC_POINT(
|
|
2181
2176
|
"BackupEngineTest::SetOptionsBackupRaceCondition:AfterSetOptions");
|
|
@@ -2433,14 +2428,13 @@ TEST_F(BackupEngineTest, TableFileCorruptionBeforeIncremental) {
|
|
|
2433
2428
|
engine_options_->share_files_with_checksum_naming = option;
|
|
2434
2429
|
}
|
|
2435
2430
|
OpenDBAndBackupEngine(true, false, share);
|
|
2436
|
-
DBImpl* dbi = static_cast<DBImpl*>(db_.get());
|
|
2437
2431
|
// A small SST file
|
|
2438
|
-
ASSERT_OK(
|
|
2439
|
-
ASSERT_OK(
|
|
2432
|
+
ASSERT_OK(db_->Put(WriteOptions(), "x", "y"));
|
|
2433
|
+
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
2440
2434
|
// And a bigger one
|
|
2441
|
-
ASSERT_OK(
|
|
2442
|
-
ASSERT_OK(
|
|
2443
|
-
ASSERT_OK(
|
|
2435
|
+
ASSERT_OK(db_->Put(WriteOptions(), "y", Random(42).RandomString(500)));
|
|
2436
|
+
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
2437
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
2444
2438
|
CloseAndReopenDB(/*read_only*/ true);
|
|
2445
2439
|
|
|
2446
2440
|
std::vector<FileAttributes> table_files;
|
|
@@ -2485,9 +2479,8 @@ TEST_F(BackupEngineTest, TableFileCorruptionBeforeIncremental) {
|
|
|
2485
2479
|
db_.reset();
|
|
2486
2480
|
ASSERT_OK(backup_engine_->RestoreDBFromBackup(2, dbname_, dbname_));
|
|
2487
2481
|
{
|
|
2488
|
-
|
|
2482
|
+
auto db = OpenDB();
|
|
2489
2483
|
s = db->VerifyChecksum();
|
|
2490
|
-
delete db;
|
|
2491
2484
|
}
|
|
2492
2485
|
if (option != kLegacyCrc32cAndFileSize && !corrupt_before_first_backup) {
|
|
2493
2486
|
// Second backup is OK because it used (uncorrupt) file from first
|
|
@@ -2529,11 +2522,10 @@ TEST_F(BackupEngineTest, TableFileCorruptionBeforeIncremental) {
|
|
|
2529
2522
|
|
|
2530
2523
|
TEST_F(BackupEngineTest, PropertiesBlockCorruptionIncremental) {
|
|
2531
2524
|
OpenDBAndBackupEngine(true, false, kShareWithChecksum);
|
|
2532
|
-
DBImpl* dbi = static_cast<DBImpl*>(db_.get());
|
|
2533
2525
|
// A small SST file
|
|
2534
|
-
ASSERT_OK(
|
|
2535
|
-
ASSERT_OK(
|
|
2536
|
-
ASSERT_OK(
|
|
2526
|
+
ASSERT_OK(db_->Put(WriteOptions(), "x", "y"));
|
|
2527
|
+
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
2528
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
2537
2529
|
|
|
2538
2530
|
ASSERT_OK(backup_engine_->CreateNewBackup(db_.get()));
|
|
2539
2531
|
|
|
@@ -3350,9 +3342,9 @@ TEST_F(BackupEngineTest, ReadOnlyBackupEngine) {
|
|
|
3350
3342
|
std::vector<std::string> should_have_written;
|
|
3351
3343
|
test_backup_fs_->AssertWrittenFiles(should_have_written);
|
|
3352
3344
|
|
|
3353
|
-
|
|
3354
|
-
AssertExists(db, 0, 200);
|
|
3355
|
-
|
|
3345
|
+
auto db = OpenDB();
|
|
3346
|
+
AssertExists(db.get(), 0, 200);
|
|
3347
|
+
db.reset();
|
|
3356
3348
|
}
|
|
3357
3349
|
|
|
3358
3350
|
TEST_F(BackupEngineTest, OpenBackupAsReadOnlyDB) {
|
|
@@ -3385,7 +3377,7 @@ TEST_F(BackupEngineTest, OpenBackupAsReadOnlyDB) {
|
|
|
3385
3377
|
// Caution: DBOptions only holds a raw pointer to Env, so something else
|
|
3386
3378
|
// must keep it alive.
|
|
3387
3379
|
// Case 1: Keeping BackupEngine open suffices to keep Env alive
|
|
3388
|
-
DB
|
|
3380
|
+
std::unique_ptr<DB> db;
|
|
3389
3381
|
Options opts = options_;
|
|
3390
3382
|
// Ensure some key defaults are set
|
|
3391
3383
|
opts.wal_dir = "";
|
|
@@ -3397,11 +3389,10 @@ TEST_F(BackupEngineTest, OpenBackupAsReadOnlyDB) {
|
|
|
3397
3389
|
backup_info = BackupInfo();
|
|
3398
3390
|
ASSERT_OK(DB::OpenForReadOnly(opts, name, &db));
|
|
3399
3391
|
|
|
3400
|
-
AssertExists(db, 0, 100);
|
|
3401
|
-
AssertEmpty(db, 100, 200);
|
|
3392
|
+
AssertExists(db.get(), 0, 100);
|
|
3393
|
+
AssertEmpty(db.get(), 100, 200);
|
|
3402
3394
|
|
|
3403
|
-
|
|
3404
|
-
db = nullptr;
|
|
3395
|
+
db.reset();
|
|
3405
3396
|
|
|
3406
3397
|
// Case 2: Keeping BackupInfo alive rather than BackupEngine also suffices
|
|
3407
3398
|
ASSERT_OK(backup_engine_->GetBackupInfo(/*id*/ 2U, &backup_info,
|
|
@@ -3413,12 +3404,71 @@ TEST_F(BackupEngineTest, OpenBackupAsReadOnlyDB) {
|
|
|
3413
3404
|
// Note: keeping backup_info alive
|
|
3414
3405
|
ASSERT_OK(DB::OpenForReadOnly(opts, name, &db));
|
|
3415
3406
|
|
|
3416
|
-
AssertExists(db, 0, 200);
|
|
3417
|
-
|
|
3418
|
-
db = nullptr;
|
|
3407
|
+
AssertExists(db.get(), 0, 200);
|
|
3408
|
+
db.reset();
|
|
3419
3409
|
|
|
3420
3410
|
// Now try opening read-write and make sure it fails, for safety.
|
|
3421
|
-
|
|
3411
|
+
{
|
|
3412
|
+
std::unique_ptr<DB> dbptr;
|
|
3413
|
+
ASSERT_TRUE(DB::Open(opts, name, &dbptr).IsIOError());
|
|
3414
|
+
}
|
|
3415
|
+
}
|
|
3416
|
+
|
|
3417
|
+
TEST_F(BackupEngineTest, FileDetailsHaveCorrectFileType) {
|
|
3418
|
+
// Verify that BackupInfo::file_details correctly reports file_type
|
|
3419
|
+
// for all file types in the backup (SST, WAL, MANIFEST, CURRENT, OPTIONS).
|
|
3420
|
+
DestroyDBWithoutCheck(dbname_, options_);
|
|
3421
|
+
OpenDBAndBackupEngine(true);
|
|
3422
|
+
|
|
3423
|
+
// Use kFlushMost so there's both SST data and WAL data in the backup.
|
|
3424
|
+
FillDB(db_.get(), 0, 100);
|
|
3425
|
+
ASSERT_OK(backup_engine_->CreateNewBackup(db_.get(), /*flush*/ false));
|
|
3426
|
+
|
|
3427
|
+
BackupInfo backup_info;
|
|
3428
|
+
ASSERT_OK(backup_engine_->GetBackupInfo(/*id*/ 1U, &backup_info,
|
|
3429
|
+
/*include_file_details*/ true));
|
|
3430
|
+
ASSERT_GT(backup_info.file_details.size(), 0);
|
|
3431
|
+
|
|
3432
|
+
bool found_wal = false;
|
|
3433
|
+
bool found_sst = false;
|
|
3434
|
+
bool found_manifest = false;
|
|
3435
|
+
bool found_current = false;
|
|
3436
|
+
bool found_options = false;
|
|
3437
|
+
|
|
3438
|
+
for (const auto& file_info : backup_info.file_details) {
|
|
3439
|
+
// No file should have the default kTempFile type — ParseFileName should
|
|
3440
|
+
// have successfully identified all backup files.
|
|
3441
|
+
EXPECT_NE(file_info.file_type, kTempFile)
|
|
3442
|
+
<< "Unexpected kTempFile for: " << file_info.relative_filename;
|
|
3443
|
+
|
|
3444
|
+
switch (file_info.file_type) {
|
|
3445
|
+
case kWalFile:
|
|
3446
|
+
found_wal = true;
|
|
3447
|
+
break;
|
|
3448
|
+
case kTableFile:
|
|
3449
|
+
found_sst = true;
|
|
3450
|
+
break;
|
|
3451
|
+
case kDescriptorFile:
|
|
3452
|
+
found_manifest = true;
|
|
3453
|
+
break;
|
|
3454
|
+
case kCurrentFile:
|
|
3455
|
+
found_current = true;
|
|
3456
|
+
break;
|
|
3457
|
+
case kOptionsFile:
|
|
3458
|
+
found_options = true;
|
|
3459
|
+
break;
|
|
3460
|
+
default:
|
|
3461
|
+
break;
|
|
3462
|
+
}
|
|
3463
|
+
}
|
|
3464
|
+
|
|
3465
|
+
EXPECT_TRUE(found_sst) << "Expected at least one SST file in backup";
|
|
3466
|
+
EXPECT_TRUE(found_wal) << "Expected at least one WAL file in backup";
|
|
3467
|
+
EXPECT_TRUE(found_manifest) << "Expected MANIFEST file in backup";
|
|
3468
|
+
EXPECT_TRUE(found_current) << "Expected CURRENT file in backup";
|
|
3469
|
+
EXPECT_TRUE(found_options) << "Expected OPTIONS file in backup";
|
|
3470
|
+
|
|
3471
|
+
CloseDBAndBackupEngine();
|
|
3422
3472
|
}
|
|
3423
3473
|
|
|
3424
3474
|
TEST_F(BackupEngineTest, ProgressCallbackDuringBackup) {
|
|
@@ -3565,16 +3615,15 @@ TEST_F(BackupEngineTest, ChangeManifestDuringBackupCreation) {
|
|
|
3565
3615
|
// The last manifest roll would've already been cleaned up by the full scan
|
|
3566
3616
|
// that happens when CreateNewBackup invokes EnableFileDeletions. We need to
|
|
3567
3617
|
// trigger another roll to verify non-full scan purges stale manifests.
|
|
3568
|
-
DBImpl* db_impl = static_cast_with_check<DBImpl>(db_.get());
|
|
3569
3618
|
std::string prev_manifest_path =
|
|
3570
|
-
DescriptorFileName(dbname_,
|
|
3619
|
+
DescriptorFileName(dbname_, dbfull()->TEST_Current_Manifest_FileNo());
|
|
3571
3620
|
FillDB(db_.get(), 0, 100, kAutoFlushOnly);
|
|
3572
3621
|
ASSERT_OK(db_chroot_env_->FileExists(prev_manifest_path));
|
|
3573
3622
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
3574
3623
|
// Even though manual flush completed above, the background thread may not
|
|
3575
3624
|
// have finished its cleanup work. `TEST_WaitForBackgroundWork()` will wait
|
|
3576
3625
|
// until all the background thread's work has completed, including cleanup.
|
|
3577
|
-
ASSERT_OK(
|
|
3626
|
+
ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
|
|
3578
3627
|
ASSERT_TRUE(db_chroot_env_->FileExists(prev_manifest_path).IsNotFound());
|
|
3579
3628
|
|
|
3580
3629
|
CloseDBAndBackupEngine();
|
|
@@ -3940,7 +3989,7 @@ TEST_F(BackupEngineTest, Concurrency) {
|
|
|
3940
3989
|
// by doing it async and ensuring we either get OK or InvalidArgument
|
|
3941
3990
|
restore_verify_threads[i] =
|
|
3942
3991
|
std::thread([this, &db_opts, restore_db_dir, to_restore] {
|
|
3943
|
-
DB
|
|
3992
|
+
std::unique_ptr<DB> restored;
|
|
3944
3993
|
Status s;
|
|
3945
3994
|
for (;;) {
|
|
3946
3995
|
s = DB::Open(db_opts, restore_db_dir, &restored);
|
|
@@ -3956,10 +4005,9 @@ TEST_F(BackupEngineTest, Concurrency) {
|
|
|
3956
4005
|
}
|
|
3957
4006
|
}
|
|
3958
4007
|
int factor = std::min(static_cast<int>(to_restore), max_factor);
|
|
3959
|
-
AssertExists(restored, 0, factor * keys_iteration);
|
|
3960
|
-
AssertEmpty(restored, factor * keys_iteration,
|
|
4008
|
+
AssertExists(restored.get(), 0, factor * keys_iteration);
|
|
4009
|
+
AssertEmpty(restored.get(), factor * keys_iteration,
|
|
3961
4010
|
(factor + 1) * keys_iteration);
|
|
3962
|
-
delete restored;
|
|
3963
4011
|
});
|
|
3964
4012
|
|
|
3965
4013
|
// (Ok now) Restore one of the backups, or "latest"
|
|
@@ -4418,14 +4466,13 @@ TEST_F(BackupEngineTest, FileTemperatures) {
|
|
|
4418
4466
|
kShareWithChecksum);
|
|
4419
4467
|
|
|
4420
4468
|
// generate a bottommost file (combined from 2) and a non-bottommost file
|
|
4421
|
-
DBImpl* dbi = static_cast_with_check<DBImpl>(db_.get());
|
|
4422
4469
|
ASSERT_OK(db_->Put(WriteOptions(), "a", "val"));
|
|
4423
4470
|
ASSERT_OK(db_->Put(WriteOptions(), "c", "val"));
|
|
4424
4471
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
4425
4472
|
ASSERT_OK(db_->Put(WriteOptions(), "b", "val"));
|
|
4426
4473
|
ASSERT_OK(db_->Put(WriteOptions(), "d", "val"));
|
|
4427
4474
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
4428
|
-
ASSERT_OK(
|
|
4475
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4429
4476
|
ASSERT_OK(db_->Put(WriteOptions(), "e", "val"));
|
|
4430
4477
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
4431
4478
|
|
|
@@ -4524,9 +4571,8 @@ TEST_F(BackupEngineTest, FileTemperatures) {
|
|
|
4524
4571
|
ASSERT_OK(backup_engine_->GetLatestBackupInfo(
|
|
4525
4572
|
&info, /*include_file_details*/ true));
|
|
4526
4573
|
ASSERT_GT(info.file_details.size(), 2);
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
}
|
|
4574
|
+
// TODO: Restore temperature check once finfo.temperature is populated
|
|
4575
|
+
// in SetBackupInfoFromBackupMeta (currently commented out).
|
|
4530
4576
|
|
|
4531
4577
|
// Restore backup to another virtual (tiered) dir
|
|
4532
4578
|
const std::string restore_dir = "/restore" + std::to_string(i);
|
|
@@ -4583,7 +4629,7 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4583
4629
|
|
|
4584
4630
|
// Ensure each backup is same set of files
|
|
4585
4631
|
db_.reset();
|
|
4586
|
-
DB
|
|
4632
|
+
std::unique_ptr<DB> db;
|
|
4587
4633
|
ASSERT_OK(DB::OpenForReadOnly(options_, dbname_, &db));
|
|
4588
4634
|
|
|
4589
4635
|
// A callback that throws should cleanly fail the backup creation.
|
|
@@ -4593,12 +4639,12 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4593
4639
|
MaybeExcludeBackupFile* /*files_end*/) {
|
|
4594
4640
|
throw 42;
|
|
4595
4641
|
};
|
|
4596
|
-
ASSERT_TRUE(backup_engine_->CreateNewBackup(cbo, db).IsAborted());
|
|
4642
|
+
ASSERT_TRUE(backup_engine_->CreateNewBackup(cbo, db.get()).IsAborted());
|
|
4597
4643
|
cbo.exclude_files_callback = [](MaybeExcludeBackupFile* /*files_begin*/,
|
|
4598
4644
|
MaybeExcludeBackupFile* /*files_end*/) {
|
|
4599
4645
|
throw std::out_of_range("blah");
|
|
4600
4646
|
};
|
|
4601
|
-
ASSERT_TRUE(backup_engine_->CreateNewBackup(cbo, db).IsAborted());
|
|
4647
|
+
ASSERT_TRUE(backup_engine_->CreateNewBackup(cbo, db.get()).IsAborted());
|
|
4602
4648
|
|
|
4603
4649
|
// Include files only in given bucket, based on modulus and remainder
|
|
4604
4650
|
constexpr int modulus = 4;
|
|
@@ -4619,22 +4665,21 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4619
4665
|
BackupID first_id{};
|
|
4620
4666
|
BackupID last_alt_id{};
|
|
4621
4667
|
remainder = 0;
|
|
4622
|
-
ASSERT_OK(backup_engine_->CreateNewBackup(cbo, db, &first_id));
|
|
4668
|
+
ASSERT_OK(backup_engine_->CreateNewBackup(cbo, db.get(), &first_id));
|
|
4623
4669
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4624
4670
|
remainder = 1;
|
|
4625
|
-
ASSERT_OK(alt_backup_engine->CreateNewBackup(cbo, db));
|
|
4671
|
+
ASSERT_OK(alt_backup_engine->CreateNewBackup(cbo, db.get()));
|
|
4626
4672
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4627
4673
|
remainder = 2;
|
|
4628
|
-
ASSERT_OK(backup_engine_->CreateNewBackup(cbo, db));
|
|
4674
|
+
ASSERT_OK(backup_engine_->CreateNewBackup(cbo, db.get()));
|
|
4629
4675
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4630
4676
|
remainder = 3;
|
|
4631
|
-
ASSERT_OK(alt_backup_engine->CreateNewBackup(cbo, db, &last_alt_id));
|
|
4677
|
+
ASSERT_OK(alt_backup_engine->CreateNewBackup(cbo, db.get(), &last_alt_id));
|
|
4632
4678
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4633
4679
|
|
|
4634
4680
|
// Close DB
|
|
4635
4681
|
ASSERT_OK(db->Close());
|
|
4636
|
-
|
|
4637
|
-
db = nullptr;
|
|
4682
|
+
db.reset();
|
|
4638
4683
|
|
|
4639
4684
|
auto backup_engine = backup_engine_.get();
|
|
4640
4685
|
for (auto be_pair : {std::make_pair(backup_engine, alt_backup_engine),
|
|
@@ -4652,8 +4697,8 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4652
4697
|
|
|
4653
4698
|
// Check DB contents
|
|
4654
4699
|
db = OpenDB();
|
|
4655
|
-
AssertExists(db, 0, keys_iteration);
|
|
4656
|
-
|
|
4700
|
+
AssertExists(db.get(), 0, keys_iteration);
|
|
4701
|
+
db.reset();
|
|
4657
4702
|
}
|
|
4658
4703
|
|
|
4659
4704
|
// Should still work after close and re-open
|
|
@@ -32,7 +32,7 @@ CompactionFilter::Decision BlobIndexCompactionFilterBase::FilterV2(
|
|
|
32
32
|
if (ucf == nullptr) {
|
|
33
33
|
return Decision::kKeep;
|
|
34
34
|
}
|
|
35
|
-
// Apply user compaction filter for
|
|
35
|
+
// Apply user compaction filter for non-blob data.
|
|
36
36
|
CompactionFilter::Decision decision =
|
|
37
37
|
ucf->FilterV2(level, key, value_type, value, new_value, skip_until);
|
|
38
38
|
if (decision == Decision::kChangeValue) {
|
|
@@ -52,34 +52,12 @@ CompactionFilter::Decision BlobIndexCompactionFilterBase::FilterV2(
|
|
|
52
52
|
expired_size_ += key.size() + value.size();
|
|
53
53
|
return Decision::kRemove;
|
|
54
54
|
}
|
|
55
|
-
if (
|
|
56
|
-
blob_index.file_number() < context_.next_file_number &&
|
|
55
|
+
if (blob_index.file_number() < context_.next_file_number &&
|
|
57
56
|
context_.current_blob_files.count(blob_index.file_number()) == 0) {
|
|
58
|
-
// Corresponding blob file gone (most likely, evicted by FIFO eviction).
|
|
59
57
|
evicted_count_++;
|
|
60
58
|
evicted_size_ += key.size() + value.size();
|
|
61
59
|
return Decision::kRemove;
|
|
62
60
|
}
|
|
63
|
-
if (context_.fifo_eviction_seq > 0 && blob_index.HasTTL() &&
|
|
64
|
-
blob_index.expiration() < context_.evict_expiration_up_to) {
|
|
65
|
-
// Hack: Internal key is passed to BlobIndexCompactionFilter for it to
|
|
66
|
-
// get sequence number.
|
|
67
|
-
ParsedInternalKey ikey;
|
|
68
|
-
if (!ParseInternalKey(
|
|
69
|
-
key, &ikey,
|
|
70
|
-
context_.blob_db_impl->db_options_.allow_data_in_errors)
|
|
71
|
-
.ok()) {
|
|
72
|
-
assert(false);
|
|
73
|
-
return Decision::kKeep;
|
|
74
|
-
}
|
|
75
|
-
// Remove keys that could have been remove by last FIFO eviction.
|
|
76
|
-
// If get error while parsing key, ignore and continue.
|
|
77
|
-
if (ikey.sequence < context_.fifo_eviction_seq) {
|
|
78
|
-
evicted_count_++;
|
|
79
|
-
evicted_size_ += key.size() + value.size();
|
|
80
|
-
return Decision::kRemove;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
61
|
// Apply user compaction filter for all non-TTL blob data.
|
|
84
62
|
if (ucf != nullptr && !blob_index.HasTTL()) {
|
|
85
63
|
// Hack: Internal key is passed to BlobIndexCompactionFilter for it to
|
|
@@ -94,10 +72,7 @@ CompactionFilter::Decision BlobIndexCompactionFilterBase::FilterV2(
|
|
|
94
72
|
}
|
|
95
73
|
// Read value from blob file.
|
|
96
74
|
PinnableSlice blob;
|
|
97
|
-
|
|
98
|
-
constexpr bool need_decompress = true;
|
|
99
|
-
if (!ReadBlobFromOldFile(ikey.user_key, blob_index, &blob, need_decompress,
|
|
100
|
-
&compression_type)) {
|
|
75
|
+
if (!ReadBlobFromOldFile(ikey.user_key, blob_index, &blob)) {
|
|
101
76
|
return Decision::kIOError;
|
|
102
77
|
}
|
|
103
78
|
CompactionFilter::Decision decision = ucf->FilterV2(
|
|
@@ -112,22 +87,10 @@ CompactionFilter::Decision BlobIndexCompactionFilterBase::FilterV2(
|
|
|
112
87
|
|
|
113
88
|
CompactionFilter::Decision BlobIndexCompactionFilterBase::HandleValueChange(
|
|
114
89
|
const Slice& key, std::string* new_value) const {
|
|
115
|
-
BlobDBImpl* const blob_db_impl = context_.blob_db_impl;
|
|
116
|
-
assert(blob_db_impl);
|
|
117
|
-
|
|
118
|
-
if (new_value->size() < blob_db_impl->bdb_options_.min_blob_size) {
|
|
119
|
-
// Keep new_value inlined.
|
|
120
|
-
return Decision::kChangeValue;
|
|
121
|
-
}
|
|
122
90
|
if (!OpenNewBlobFileIfNeeded()) {
|
|
123
91
|
return Decision::kIOError;
|
|
124
92
|
}
|
|
125
93
|
Slice new_blob_value(*new_value);
|
|
126
|
-
std::string compression_output;
|
|
127
|
-
if (blob_db_impl->bdb_options_.compression != kNoCompression) {
|
|
128
|
-
new_blob_value =
|
|
129
|
-
blob_db_impl->GetCompressedSlice(new_blob_value, &compression_output);
|
|
130
|
-
}
|
|
131
94
|
uint64_t new_blob_file_number = 0;
|
|
132
95
|
uint64_t new_blob_offset = 0;
|
|
133
96
|
if (!WriteBlobToNewFile(key, new_blob_value, &new_blob_file_number,
|
|
@@ -138,8 +101,7 @@ CompactionFilter::Decision BlobIndexCompactionFilterBase::HandleValueChange(
|
|
|
138
101
|
return Decision::kIOError;
|
|
139
102
|
}
|
|
140
103
|
BlobIndex::EncodeBlob(new_value, new_blob_file_number, new_blob_offset,
|
|
141
|
-
new_blob_value.size(),
|
|
142
|
-
blob_db_impl->bdb_options_.compression);
|
|
104
|
+
new_blob_value.size(), kNoCompression);
|
|
143
105
|
return Decision::kChangeBlobIndex;
|
|
144
106
|
}
|
|
145
107
|
|
|
@@ -201,14 +163,13 @@ bool BlobIndexCompactionFilterBase::OpenNewBlobFileIfNeeded() const {
|
|
|
201
163
|
}
|
|
202
164
|
|
|
203
165
|
bool BlobIndexCompactionFilterBase::ReadBlobFromOldFile(
|
|
204
|
-
const Slice& key, const BlobIndex& blob_index, PinnableSlice* blob
|
|
205
|
-
bool need_decompress, CompressionType* compression_type) const {
|
|
166
|
+
const Slice& key, const BlobIndex& blob_index, PinnableSlice* blob) const {
|
|
206
167
|
BlobDBImpl* const blob_db_impl = context_.blob_db_impl;
|
|
207
168
|
assert(blob_db_impl);
|
|
208
169
|
|
|
209
|
-
Status s = blob_db_impl->GetRawBlobFromFile(
|
|
210
|
-
|
|
211
|
-
|
|
170
|
+
Status s = blob_db_impl->GetRawBlobFromFile(key, blob_index.file_number(),
|
|
171
|
+
blob_index.offset(),
|
|
172
|
+
blob_index.size(), blob);
|
|
212
173
|
|
|
213
174
|
if (!s.ok()) {
|
|
214
175
|
ROCKS_LOG_ERROR(
|
|
@@ -221,21 +182,6 @@ bool BlobIndexCompactionFilterBase::ReadBlobFromOldFile(
|
|
|
221
182
|
return false;
|
|
222
183
|
}
|
|
223
184
|
|
|
224
|
-
if (need_decompress && *compression_type != kNoCompression) {
|
|
225
|
-
s = blob_db_impl->DecompressSlice(*blob, *compression_type, blob);
|
|
226
|
-
if (!s.ok()) {
|
|
227
|
-
ROCKS_LOG_ERROR(
|
|
228
|
-
blob_db_impl->db_options_.info_log,
|
|
229
|
-
"Uncompression error during blob read from file: %" PRIu64
|
|
230
|
-
" blob_offset: %" PRIu64 " blob_size: %" PRIu64
|
|
231
|
-
" key: %s status: '%s'",
|
|
232
|
-
blob_index.file_number(), blob_index.offset(), blob_index.size(),
|
|
233
|
-
key.ToString(/* output_hex */ true).c_str(), s.ToString().c_str());
|
|
234
|
-
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
185
|
return true;
|
|
240
186
|
}
|
|
241
187
|
|
|
@@ -306,8 +252,7 @@ bool BlobIndexCompactionFilterBase::CloseAndRegisterNewBlobFile() const {
|
|
|
306
252
|
// TODO: plumb Env::IOActivity, Env::IOPriority
|
|
307
253
|
s = blob_db_impl->CloseBlobFile(WriteOptions(), blob_file_);
|
|
308
254
|
|
|
309
|
-
// Note: we delay registering the new blob file until it's closed
|
|
310
|
-
// prevent FIFO eviction from processing it during compaction/GC.
|
|
255
|
+
// Note: we delay registering the new blob file until it's closed.
|
|
311
256
|
blob_db_impl->RegisterBlobFile(blob_file_);
|
|
312
257
|
}
|
|
313
258
|
|
|
@@ -336,18 +281,12 @@ CompactionFilter::BlobDecision BlobIndexCompactionFilterGC::PrepareBlobOutput(
|
|
|
336
281
|
assert(blob_db_impl->bdb_options_.enable_garbage_collection);
|
|
337
282
|
|
|
338
283
|
BlobIndex blob_index;
|
|
339
|
-
|
|
284
|
+
Status s = blob_index.DecodeFrom(existing_value);
|
|
340
285
|
if (!s.ok()) {
|
|
341
286
|
gc_stats_.SetError();
|
|
342
287
|
return BlobDecision::kCorruption;
|
|
343
288
|
}
|
|
344
289
|
|
|
345
|
-
if (blob_index.IsInlined()) {
|
|
346
|
-
gc_stats_.AddBlob(blob_index.value().size());
|
|
347
|
-
|
|
348
|
-
return BlobDecision::kKeep;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
290
|
gc_stats_.AddBlob(blob_index.size());
|
|
352
291
|
|
|
353
292
|
if (blob_index.HasTTL()) {
|
|
@@ -368,31 +307,11 @@ CompactionFilter::BlobDecision BlobIndexCompactionFilterGC::PrepareBlobOutput(
|
|
|
368
307
|
}
|
|
369
308
|
|
|
370
309
|
PinnableSlice blob;
|
|
371
|
-
|
|
372
|
-
std::string compression_output;
|
|
373
|
-
if (!ReadBlobFromOldFile(key, blob_index, &blob, false, &compression_type)) {
|
|
310
|
+
if (!ReadBlobFromOldFile(key, blob_index, &blob)) {
|
|
374
311
|
gc_stats_.SetError();
|
|
375
312
|
return BlobDecision::kIOError;
|
|
376
313
|
}
|
|
377
314
|
|
|
378
|
-
// If the compression_type is changed, re-compress it with the new compression
|
|
379
|
-
// type.
|
|
380
|
-
if (compression_type != blob_db_impl->bdb_options_.compression) {
|
|
381
|
-
if (compression_type != kNoCompression) {
|
|
382
|
-
const Status status =
|
|
383
|
-
blob_db_impl->DecompressSlice(blob, compression_type, &blob);
|
|
384
|
-
if (!status.ok()) {
|
|
385
|
-
gc_stats_.SetError();
|
|
386
|
-
return BlobDecision::kCorruption;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
if (blob_db_impl->bdb_options_.compression != kNoCompression) {
|
|
390
|
-
blob_db_impl->GetCompressedSlice(blob, &compression_output);
|
|
391
|
-
blob = PinnableSlice(&compression_output);
|
|
392
|
-
blob.PinSelf();
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
315
|
uint64_t new_blob_file_number = 0;
|
|
397
316
|
uint64_t new_blob_offset = 0;
|
|
398
317
|
if (!WriteBlobToNewFile(key, blob, &new_blob_file_number, &new_blob_offset)) {
|
|
@@ -406,7 +325,7 @@ CompactionFilter::BlobDecision BlobIndexCompactionFilterGC::PrepareBlobOutput(
|
|
|
406
325
|
}
|
|
407
326
|
|
|
408
327
|
BlobIndex::EncodeBlob(new_value, new_blob_file_number, new_blob_offset,
|
|
409
|
-
blob.size(),
|
|
328
|
+
blob.size(), kNoCompression);
|
|
410
329
|
|
|
411
330
|
gc_stats_.AddRelocatedBlob(blob_index.size());
|
|
412
331
|
|
|
@@ -21,8 +21,6 @@ struct BlobCompactionContext {
|
|
|
21
21
|
BlobDBImpl* blob_db_impl = nullptr;
|
|
22
22
|
uint64_t next_file_number = 0;
|
|
23
23
|
std::unordered_set<uint64_t> current_blob_files;
|
|
24
|
-
SequenceNumber fifo_eviction_seq = 0;
|
|
25
|
-
uint64_t evict_expiration_up_to = 0;
|
|
26
24
|
};
|
|
27
25
|
|
|
28
26
|
struct BlobCompactionContextGC {
|
|
@@ -59,8 +57,7 @@ class BlobIndexCompactionFilterBase : public LayeredCompactionFilterBase {
|
|
|
59
57
|
bool IsBlobFileOpened() const;
|
|
60
58
|
virtual bool OpenNewBlobFileIfNeeded() const;
|
|
61
59
|
bool ReadBlobFromOldFile(const Slice& key, const BlobIndex& blob_index,
|
|
62
|
-
PinnableSlice* blob
|
|
63
|
-
CompressionType* compression_type) const;
|
|
60
|
+
PinnableSlice* blob) const;
|
|
64
61
|
bool WriteBlobToNewFile(const Slice& key, const Slice& blob,
|
|
65
62
|
uint64_t* new_blob_file_number,
|
|
66
63
|
uint64_t* new_blob_offset) const;
|