@nxtedition/rocksdb 8.2.0 → 8.2.2
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 +3 -3
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +8 -345
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
- package/deps/rocksdb/rocksdb/db/builder.h +2 -2
- package/deps/rocksdb/rocksdb/db/c.cc +76 -5
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
- package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
- package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
- package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
- package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
- package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
- package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
- package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
- package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
- package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
- package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
- package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
- package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options.cc +12 -53
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
- package/deps/rocksdb/rocksdb/port/lang.h +27 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
- package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/format.cc +4 -4
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
- package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
- package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
- package/deps/rocksdb/rocksdb/util/math.h +12 -7
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
- package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#include "db/db_test_util.h"
|
|
7
|
+
#include "port/port.h"
|
|
8
|
+
#include "util/random.h"
|
|
9
|
+
|
|
10
|
+
namespace ROCKSDB_NAMESPACE {
|
|
11
|
+
|
|
12
|
+
class DBClipTest : public DBTestBase {
|
|
13
|
+
public:
|
|
14
|
+
DBClipTest() : DBTestBase("db_clip_test", /*env_do_fsync=*/true) {}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
TEST_F(DBClipTest, TestClipRange) {
|
|
18
|
+
Options options = CurrentOptions();
|
|
19
|
+
options.write_buffer_size = 10 * 1024 * 1024;
|
|
20
|
+
options.max_bytes_for_level_multiplier = 2;
|
|
21
|
+
options.num_levels = 3;
|
|
22
|
+
options.max_background_compactions = 3;
|
|
23
|
+
options.disable_auto_compactions = true;
|
|
24
|
+
options.statistics = CreateDBStatistics();
|
|
25
|
+
|
|
26
|
+
DestroyAndReopen(options);
|
|
27
|
+
int32_t value_size = 10 * 1024; // 10 KB
|
|
28
|
+
|
|
29
|
+
Random rnd(301);
|
|
30
|
+
std::map<int32_t, std::string> values;
|
|
31
|
+
|
|
32
|
+
// file [0 => 100), [100 => 200), ... [900, 1000)
|
|
33
|
+
for (auto i = 0; i < 10; i++) {
|
|
34
|
+
for (auto j = 0; j < 100; j++) {
|
|
35
|
+
auto k = i * 100 + j;
|
|
36
|
+
values[k] = rnd.RandomString(value_size);
|
|
37
|
+
ASSERT_OK(Put(Key(k), values[k]));
|
|
38
|
+
}
|
|
39
|
+
ASSERT_OK(Flush());
|
|
40
|
+
}
|
|
41
|
+
ASSERT_EQ("10", FilesPerLevel(0));
|
|
42
|
+
auto begin_key = Key(251), end_key = Key(751);
|
|
43
|
+
ASSERT_OK(
|
|
44
|
+
db_->ClipColumnFamily(db_->DefaultColumnFamily(), begin_key, end_key));
|
|
45
|
+
|
|
46
|
+
for (auto i = 0; i < 251; i++) {
|
|
47
|
+
ReadOptions ropts;
|
|
48
|
+
std::string result;
|
|
49
|
+
auto s = db_->Get(ropts, Key(i), &result);
|
|
50
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
51
|
+
}
|
|
52
|
+
for (auto i = 251; i < 751; i++) {
|
|
53
|
+
ASSERT_EQ(Get(Key(i)), values[i]);
|
|
54
|
+
}
|
|
55
|
+
for (auto i = 751; i < 1000; i++) {
|
|
56
|
+
ReadOptions ropts;
|
|
57
|
+
std::string result;
|
|
58
|
+
auto s = db_->Get(ropts, Key(i), &result);
|
|
59
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
std::vector<LiveFileMetaData> all_metadata;
|
|
63
|
+
db_->GetLiveFilesMetaData(&all_metadata);
|
|
64
|
+
for (auto& md : all_metadata) {
|
|
65
|
+
// make sure clip_begin_key <= file_smallestkey <= file_largestkey <=
|
|
66
|
+
// clip_end_key
|
|
67
|
+
bool in_range = false;
|
|
68
|
+
|
|
69
|
+
if (options.comparator->Compare(begin_key, md.smallestkey) <= 0 &&
|
|
70
|
+
options.comparator->Compare(end_key, md.largestkey) > 0) {
|
|
71
|
+
in_range = true;
|
|
72
|
+
}
|
|
73
|
+
ASSERT_TRUE(in_range);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
CompactRangeOptions compact_options;
|
|
77
|
+
compact_options.change_level = true;
|
|
78
|
+
compact_options.target_level = 2;
|
|
79
|
+
ASSERT_OK(db_->CompactRange(compact_options, nullptr, nullptr));
|
|
80
|
+
ASSERT_EQ("0,0,3", FilesPerLevel(0));
|
|
81
|
+
|
|
82
|
+
for (auto i = 0; i < 10; i += 2) {
|
|
83
|
+
for (auto j = 0; j < 100; j++) {
|
|
84
|
+
auto k = i * 100 + j;
|
|
85
|
+
ASSERT_OK(Put(Key(k), values[k]));
|
|
86
|
+
}
|
|
87
|
+
ASSERT_OK(Flush());
|
|
88
|
+
}
|
|
89
|
+
ASSERT_EQ("5,0,3", FilesPerLevel(0));
|
|
90
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr));
|
|
91
|
+
ASSERT_EQ("0,5,3", FilesPerLevel(0));
|
|
92
|
+
|
|
93
|
+
for (auto i = 1; i < 10; i += 2) {
|
|
94
|
+
for (auto j = 0; j < 100; j++) {
|
|
95
|
+
auto k = i * 100 + j;
|
|
96
|
+
ASSERT_OK(Put(Key(k), values[k]));
|
|
97
|
+
}
|
|
98
|
+
ASSERT_OK(Flush());
|
|
99
|
+
}
|
|
100
|
+
ASSERT_EQ("5,5,3", FilesPerLevel(0));
|
|
101
|
+
|
|
102
|
+
auto begin_key_2 = Key(222), end_key_2 = Key(888);
|
|
103
|
+
|
|
104
|
+
ASSERT_OK(db_->ClipColumnFamily(db_->DefaultColumnFamily(), begin_key_2,
|
|
105
|
+
end_key_2));
|
|
106
|
+
|
|
107
|
+
for (auto i = 0; i < 222; i++) {
|
|
108
|
+
ReadOptions ropts;
|
|
109
|
+
std::string result;
|
|
110
|
+
auto s = db_->Get(ropts, Key(i), &result);
|
|
111
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
112
|
+
}
|
|
113
|
+
for (auto i = 222; i < 888; i++) {
|
|
114
|
+
ASSERT_EQ(Get(Key(i)), values[i]);
|
|
115
|
+
}
|
|
116
|
+
for (auto i = 888; i < 1000; i++) {
|
|
117
|
+
ReadOptions ropts;
|
|
118
|
+
std::string result;
|
|
119
|
+
auto s = db_->Get(ropts, Key(i), &result);
|
|
120
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
std::vector<LiveFileMetaData> all_metadata_2;
|
|
124
|
+
db_->GetLiveFilesMetaData(&all_metadata_2);
|
|
125
|
+
for (auto& md : all_metadata_2) {
|
|
126
|
+
// make sure clip_begin_key <= file_smallestkey <= file_largestkey <=
|
|
127
|
+
// clip_end_key
|
|
128
|
+
bool in_range = false;
|
|
129
|
+
if (begin_key_2.compare(md.smallestkey) <= 0 &&
|
|
130
|
+
end_key_2.compare(md.largestkey) > 0) {
|
|
131
|
+
in_range = true;
|
|
132
|
+
}
|
|
133
|
+
ASSERT_TRUE(in_range);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
137
|
+
|
|
138
|
+
int main(int argc, char** argv) {
|
|
139
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
140
|
+
::testing::InitGoogleTest(&argc, argv);
|
|
141
|
+
return RUN_ALL_TESTS();
|
|
142
|
+
}
|
|
@@ -742,7 +742,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilterContextCfId) {
|
|
|
742
742
|
ASSERT_TRUE(filter->compaction_filter_created());
|
|
743
743
|
}
|
|
744
744
|
|
|
745
|
-
// Compaction filters
|
|
745
|
+
// Compaction filters applies to all records, regardless snapshots.
|
|
746
746
|
TEST_F(DBTestCompactionFilter, CompactionFilterIgnoreSnapshot) {
|
|
747
747
|
std::string five = std::to_string(5);
|
|
748
748
|
Options options = CurrentOptions();
|
|
@@ -136,11 +136,12 @@ class DBCompactionTestWithParam
|
|
|
136
136
|
|
|
137
137
|
class DBCompactionTestWithBottommostParam
|
|
138
138
|
: public DBTestBase,
|
|
139
|
-
public testing::WithParamInterface<
|
|
139
|
+
public testing::WithParamInterface<
|
|
140
|
+
std::tuple<BottommostLevelCompaction, bool>> {
|
|
140
141
|
public:
|
|
141
142
|
DBCompactionTestWithBottommostParam()
|
|
142
143
|
: DBTestBase("db_compaction_test", /*env_do_fsync=*/true) {
|
|
143
|
-
bottommost_level_compaction_ = GetParam();
|
|
144
|
+
bottommost_level_compaction_ = std::get<0>(GetParam());
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
BottommostLevelCompaction bottommost_level_compaction_;
|
|
@@ -1104,7 +1105,7 @@ TEST_F(DBCompactionTest, CompactionSstPartitionerNonTrivial) {
|
|
|
1104
1105
|
ASSERT_OK(Put("bbbb1", "B"));
|
|
1105
1106
|
ASSERT_OK(Flush());
|
|
1106
1107
|
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
1107
|
-
ASSERT_OK(dbfull()->TEST_WaitForCompact(
|
|
1108
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1108
1109
|
|
|
1109
1110
|
std::vector<LiveFileMetaData> files;
|
|
1110
1111
|
dbfull()->GetLiveFilesMetaData(&files);
|
|
@@ -3613,7 +3614,10 @@ TEST_F(DBCompactionTest, CancelCompactionWaitingOnConflict) {
|
|
|
3613
3614
|
Random rnd(301);
|
|
3614
3615
|
for (int i = 0; i < kNumSortedRuns; ++i) {
|
|
3615
3616
|
int key_idx = 0;
|
|
3616
|
-
|
|
3617
|
+
// We hold the compaction from happening, so when generating the last SST
|
|
3618
|
+
// file, we cannot wait. Otherwise, we'll hit a deadlock.
|
|
3619
|
+
GenerateNewFile(&rnd, &key_idx,
|
|
3620
|
+
(i == kNumSortedRuns - 1) ? true : false /* nowait */);
|
|
3617
3621
|
}
|
|
3618
3622
|
auto_compaction_sleeping_task.WaitUntilSleeping();
|
|
3619
3623
|
|
|
@@ -5071,7 +5075,11 @@ TEST_F(DBCompactionTest, CompactRangeShutdownWhileDelayed) {
|
|
|
5071
5075
|
manual_compaction_thread.join();
|
|
5072
5076
|
TEST_SYNC_POINT(
|
|
5073
5077
|
"DBCompactionTest::CompactRangeShutdownWhileDelayed:PostManual");
|
|
5074
|
-
|
|
5078
|
+
if (i == 0) {
|
|
5079
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5080
|
+
} else {
|
|
5081
|
+
ASSERT_NOK(dbfull()->TEST_WaitForCompact());
|
|
5082
|
+
}
|
|
5075
5083
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
5076
5084
|
}
|
|
5077
5085
|
}
|
|
@@ -5506,8 +5514,9 @@ TEST_F(DBCompactionTest, CompactionLimiter) {
|
|
|
5506
5514
|
|
|
5507
5515
|
for (int n = 0; n < options.level0_file_num_compaction_trigger; n++) {
|
|
5508
5516
|
for (unsigned int cf = 0; cf < cf_count; cf++) {
|
|
5517
|
+
// All L0s should overlap with each other
|
|
5509
5518
|
for (int i = 0; i < kNumKeysPerFile; i++) {
|
|
5510
|
-
ASSERT_OK(Put(cf, Key(
|
|
5519
|
+
ASSERT_OK(Put(cf, Key(i), ""));
|
|
5511
5520
|
}
|
|
5512
5521
|
// put extra key to trigger flush
|
|
5513
5522
|
ASSERT_OK(Put(cf, "", ""));
|
|
@@ -6735,10 +6744,8 @@ class DBCompactionTestL0FilesMisorderCorruption : public DBCompactionTest {
|
|
|
6735
6744
|
if (compaction_path_to_test == "FindIntraL0Compaction" ||
|
|
6736
6745
|
compaction_path_to_test == "CompactRange") {
|
|
6737
6746
|
fifo_options.allow_compaction = true;
|
|
6738
|
-
fifo_options.age_for_warm = 0;
|
|
6739
6747
|
} else if (compaction_path_to_test == "CompactFile") {
|
|
6740
6748
|
fifo_options.allow_compaction = false;
|
|
6741
|
-
fifo_options.age_for_warm = 0;
|
|
6742
6749
|
}
|
|
6743
6750
|
options_.compaction_options_fifo = fifo_options;
|
|
6744
6751
|
}
|
|
@@ -7335,10 +7342,63 @@ TEST_P(DBCompactionTestL0FilesMisorderCorruptionWithParam,
|
|
|
7335
7342
|
Destroy(options_);
|
|
7336
7343
|
}
|
|
7337
7344
|
|
|
7345
|
+
TEST_F(DBCompactionTest, SingleLevelUniveresal) {
|
|
7346
|
+
// Tests that manual compaction works with single level universal compaction.
|
|
7347
|
+
Options options = CurrentOptions();
|
|
7348
|
+
options.compaction_style = kCompactionStyleUniversal;
|
|
7349
|
+
options.disable_auto_compactions = true;
|
|
7350
|
+
options.num_levels = 1;
|
|
7351
|
+
DestroyAndReopen(options);
|
|
7352
|
+
|
|
7353
|
+
Random rnd(31);
|
|
7354
|
+
for (int i = 0; i < 10; ++i) {
|
|
7355
|
+
for (int j = 0; j < 50; ++j) {
|
|
7356
|
+
ASSERT_OK(Put(Key(i * 100 + j), rnd.RandomString(50)));
|
|
7357
|
+
}
|
|
7358
|
+
ASSERT_OK(Flush());
|
|
7359
|
+
}
|
|
7360
|
+
ASSERT_EQ(NumTableFilesAtLevel(0), 10);
|
|
7361
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
7362
|
+
ASSERT_EQ(NumTableFilesAtLevel(0), 1);
|
|
7363
|
+
}
|
|
7364
|
+
|
|
7365
|
+
TEST_F(DBCompactionTest, SingleOverlappingNonL0BottommostManualCompaction) {
|
|
7366
|
+
// Tests that manual compact will rewrite bottommost level
|
|
7367
|
+
// when there is only a single non-L0 level that overlaps with
|
|
7368
|
+
// manual compaction range.
|
|
7369
|
+
constexpr int kSstNum = 10;
|
|
7370
|
+
Options options = CurrentOptions();
|
|
7371
|
+
options.disable_auto_compactions = true;
|
|
7372
|
+
options.num_levels = 7;
|
|
7373
|
+
for (auto b : {BottommostLevelCompaction::kForce,
|
|
7374
|
+
BottommostLevelCompaction::kForceOptimized}) {
|
|
7375
|
+
DestroyAndReopen(options);
|
|
7376
|
+
|
|
7377
|
+
// Generate some sst files on level 0 with sequence keys (no overlap)
|
|
7378
|
+
for (int i = 0; i < kSstNum; i++) {
|
|
7379
|
+
for (int j = 1; j < UCHAR_MAX; j++) {
|
|
7380
|
+
auto key = std::string(kSstNum, '\0');
|
|
7381
|
+
key[kSstNum - i] += static_cast<char>(j);
|
|
7382
|
+
ASSERT_OK(Put(key, std::string(i % 1000, 'A')));
|
|
7383
|
+
}
|
|
7384
|
+
ASSERT_OK(Flush());
|
|
7385
|
+
}
|
|
7386
|
+
MoveFilesToLevel(4);
|
|
7387
|
+
ASSERT_EQ(NumTableFilesAtLevel(4), kSstNum);
|
|
7388
|
+
CompactRangeOptions cro;
|
|
7389
|
+
cro.bottommost_level_compaction = b;
|
|
7390
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
7391
|
+
ASSERT_EQ(NumTableFilesAtLevel(4), 1);
|
|
7392
|
+
}
|
|
7393
|
+
}
|
|
7394
|
+
|
|
7338
7395
|
TEST_P(DBCompactionTestWithBottommostParam, SequenceKeysManualCompaction) {
|
|
7339
7396
|
constexpr int kSstNum = 10;
|
|
7340
7397
|
Options options = CurrentOptions();
|
|
7341
7398
|
options.disable_auto_compactions = true;
|
|
7399
|
+
options.num_levels = 7;
|
|
7400
|
+
const bool dynamic_level = std::get<1>(GetParam());
|
|
7401
|
+
options.level_compaction_dynamic_level_bytes = dynamic_level;
|
|
7342
7402
|
DestroyAndReopen(options);
|
|
7343
7403
|
|
|
7344
7404
|
// Generate some sst files on level 0 with sequence keys (no overlap)
|
|
@@ -7356,25 +7416,42 @@ TEST_P(DBCompactionTestWithBottommostParam, SequenceKeysManualCompaction) {
|
|
|
7356
7416
|
|
|
7357
7417
|
auto cro = CompactRangeOptions();
|
|
7358
7418
|
cro.bottommost_level_compaction = bottommost_level_compaction_;
|
|
7419
|
+
bool trivial_moved = false;
|
|
7420
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
7421
|
+
"DBImpl::BackgroundCompaction:TrivialMove",
|
|
7422
|
+
[&](void* /*arg*/) { trivial_moved = true; });
|
|
7423
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
7424
|
+
// All bottommost_level_compaction options should allow l0 -> l1 trivial move.
|
|
7359
7425
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
7426
|
+
ASSERT_TRUE(trivial_moved);
|
|
7360
7427
|
if (bottommost_level_compaction_ == BottommostLevelCompaction::kForce ||
|
|
7361
7428
|
bottommost_level_compaction_ ==
|
|
7362
7429
|
BottommostLevelCompaction::kForceOptimized) {
|
|
7363
|
-
//
|
|
7364
|
-
// 1
|
|
7365
|
-
|
|
7430
|
+
// bottommost level should go through intra-level compaction
|
|
7431
|
+
// and has only 1 file
|
|
7432
|
+
if (dynamic_level) {
|
|
7433
|
+
ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel(0));
|
|
7434
|
+
} else {
|
|
7435
|
+
ASSERT_EQ("0,1", FilesPerLevel(0));
|
|
7436
|
+
}
|
|
7366
7437
|
} else {
|
|
7367
|
-
// Just trivial move from level 0 -> 1
|
|
7368
|
-
|
|
7438
|
+
// Just trivial move from level 0 -> 1/base
|
|
7439
|
+
if (dynamic_level) {
|
|
7440
|
+
ASSERT_EQ("0,0,0,0,0,0," + std::to_string(kSstNum), FilesPerLevel(0));
|
|
7441
|
+
} else {
|
|
7442
|
+
ASSERT_EQ("0," + std::to_string(kSstNum), FilesPerLevel(0));
|
|
7443
|
+
}
|
|
7369
7444
|
}
|
|
7370
7445
|
}
|
|
7371
7446
|
|
|
7372
7447
|
INSTANTIATE_TEST_CASE_P(
|
|
7373
7448
|
DBCompactionTestWithBottommostParam, DBCompactionTestWithBottommostParam,
|
|
7374
|
-
::testing::
|
|
7375
|
-
|
|
7376
|
-
|
|
7377
|
-
|
|
7449
|
+
::testing::Combine(
|
|
7450
|
+
::testing::Values(BottommostLevelCompaction::kSkip,
|
|
7451
|
+
BottommostLevelCompaction::kIfHaveCompactionFilter,
|
|
7452
|
+
BottommostLevelCompaction::kForce,
|
|
7453
|
+
BottommostLevelCompaction::kForceOptimized),
|
|
7454
|
+
::testing::Bool()));
|
|
7378
7455
|
|
|
7379
7456
|
TEST_F(DBCompactionTest, UpdateLevelSubCompactionTest) {
|
|
7380
7457
|
Options options = CurrentOptions();
|
|
@@ -8518,7 +8595,7 @@ TEST_F(DBCompactionTest, CompactionWithChecksumHandoffManifest2) {
|
|
|
8518
8595
|
Destroy(options);
|
|
8519
8596
|
}
|
|
8520
8597
|
|
|
8521
|
-
TEST_F(DBCompactionTest,
|
|
8598
|
+
TEST_F(DBCompactionTest, FIFOChangeTemperature) {
|
|
8522
8599
|
Options options = CurrentOptions();
|
|
8523
8600
|
options.compaction_style = kCompactionStyleFIFO;
|
|
8524
8601
|
options.num_levels = 1;
|
|
@@ -8526,18 +8603,18 @@ TEST_F(DBCompactionTest, FIFOWarm) {
|
|
|
8526
8603
|
options.level0_file_num_compaction_trigger = 2;
|
|
8527
8604
|
options.create_if_missing = true;
|
|
8528
8605
|
CompactionOptionsFIFO fifo_options;
|
|
8529
|
-
fifo_options.
|
|
8606
|
+
fifo_options.file_temperature_age_thresholds = {{Temperature::kCold, 1000}};
|
|
8530
8607
|
fifo_options.max_table_files_size = 100000000;
|
|
8531
8608
|
options.compaction_options_fifo = fifo_options;
|
|
8532
8609
|
env_->SetMockSleep();
|
|
8533
8610
|
Reopen(options);
|
|
8534
8611
|
|
|
8535
|
-
int
|
|
8612
|
+
int total_cold = 0;
|
|
8536
8613
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
8537
8614
|
"NewWritableFile::FileOptions.temperature", [&](void* arg) {
|
|
8538
8615
|
Temperature temperature = *(static_cast<Temperature*>(arg));
|
|
8539
|
-
if (temperature == Temperature::
|
|
8540
|
-
|
|
8616
|
+
if (temperature == Temperature::kCold) {
|
|
8617
|
+
total_cold++;
|
|
8541
8618
|
}
|
|
8542
8619
|
});
|
|
8543
8620
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
@@ -8574,9 +8651,9 @@ TEST_F(DBCompactionTest, FIFOWarm) {
|
|
|
8574
8651
|
ASSERT_EQ(4, metadata.file_count);
|
|
8575
8652
|
ASSERT_EQ(Temperature::kUnknown, metadata.levels[0].files[0].temperature);
|
|
8576
8653
|
ASSERT_EQ(Temperature::kUnknown, metadata.levels[0].files[1].temperature);
|
|
8577
|
-
ASSERT_EQ(Temperature::
|
|
8578
|
-
ASSERT_EQ(Temperature::
|
|
8579
|
-
ASSERT_EQ(2,
|
|
8654
|
+
ASSERT_EQ(Temperature::kCold, metadata.levels[0].files[2].temperature);
|
|
8655
|
+
ASSERT_EQ(Temperature::kCold, metadata.levels[0].files[3].temperature);
|
|
8656
|
+
ASSERT_EQ(2, total_cold);
|
|
8580
8657
|
|
|
8581
8658
|
Destroy(options);
|
|
8582
8659
|
}
|
|
@@ -8641,7 +8718,7 @@ TEST_F(DBCompactionTest, DisableMultiManualCompaction) {
|
|
|
8641
8718
|
|
|
8642
8719
|
sleeping_task_low.WakeUp();
|
|
8643
8720
|
sleeping_task_low.WaitUntilDone();
|
|
8644
|
-
ASSERT_OK(dbfull()->TEST_WaitForCompact(
|
|
8721
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
8645
8722
|
}
|
|
8646
8723
|
|
|
8647
8724
|
TEST_F(DBCompactionTest, DisableJustStartedManualCompaction) {
|
|
@@ -8773,7 +8850,7 @@ TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFull) {
|
|
|
8773
8850
|
|
|
8774
8851
|
sleeping_task_low.WakeUp();
|
|
8775
8852
|
sleeping_task_low.WaitUntilDone();
|
|
8776
|
-
ASSERT_OK(dbfull()->TEST_WaitForCompact(
|
|
8853
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
8777
8854
|
ASSERT_EQ("0,1", FilesPerLevel(0));
|
|
8778
8855
|
}
|
|
8779
8856
|
|
|
@@ -9108,6 +9185,235 @@ TEST_F(DBCompactionTest, BottommostFileCompactionAllowIngestBehind) {
|
|
|
9108
9185
|
// ASSERT_OK(dbfull()->TEST_WaitForCompact(true /* wait_unscheduled */));
|
|
9109
9186
|
}
|
|
9110
9187
|
|
|
9188
|
+
TEST_F(DBCompactionTest, TurnOnLevelCompactionDynamicLevelBytes) {
|
|
9189
|
+
Options options = CurrentOptions();
|
|
9190
|
+
options.compaction_style = kCompactionStyleLevel;
|
|
9191
|
+
options.allow_ingest_behind = false;
|
|
9192
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
9193
|
+
options.num_levels = 6;
|
|
9194
|
+
options.compression = kNoCompression;
|
|
9195
|
+
options.max_bytes_for_level_base = 1 << 20;
|
|
9196
|
+
options.max_bytes_for_level_multiplier = 10;
|
|
9197
|
+
DestroyAndReopen(options);
|
|
9198
|
+
|
|
9199
|
+
// put files in L0, L1 and L2
|
|
9200
|
+
WriteOptions write_opts;
|
|
9201
|
+
ASSERT_OK(db_->Put(write_opts, Key(1), "val1"));
|
|
9202
|
+
Random rnd(33);
|
|
9203
|
+
// Fill L2 with size larger than max_bytes_for_level_base,
|
|
9204
|
+
// so the level above it won't be drained.
|
|
9205
|
+
for (int i = 2; i <= (1 << 10); ++i) {
|
|
9206
|
+
ASSERT_OK(db_->Put(write_opts, Key(i), rnd.RandomString(2 << 10)));
|
|
9207
|
+
}
|
|
9208
|
+
ASSERT_OK(Flush());
|
|
9209
|
+
MoveFilesToLevel(2);
|
|
9210
|
+
ASSERT_OK(db_->Put(write_opts, Key(2), "val2"));
|
|
9211
|
+
ASSERT_OK(Flush());
|
|
9212
|
+
MoveFilesToLevel(2);
|
|
9213
|
+
ASSERT_OK(db_->Put(write_opts, Key(1), "new_val1"));
|
|
9214
|
+
ASSERT_OK(Flush());
|
|
9215
|
+
MoveFilesToLevel(1);
|
|
9216
|
+
ASSERT_OK(db_->Put(write_opts, Key(3), "val3"));
|
|
9217
|
+
ASSERT_OK(Flush());
|
|
9218
|
+
ASSERT_EQ("1,1,2", FilesPerLevel());
|
|
9219
|
+
auto verify_db = [&]() {
|
|
9220
|
+
ASSERT_EQ(Get(Key(1)), "new_val1");
|
|
9221
|
+
ASSERT_EQ(Get(Key(2)), "val2");
|
|
9222
|
+
ASSERT_EQ(Get(Key(3)), "val3");
|
|
9223
|
+
};
|
|
9224
|
+
verify_db();
|
|
9225
|
+
|
|
9226
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
9227
|
+
Reopen(options);
|
|
9228
|
+
// except for L0, files should be pushed down as much as possible
|
|
9229
|
+
ASSERT_EQ("1,0,0,0,1,2", FilesPerLevel());
|
|
9230
|
+
verify_db();
|
|
9231
|
+
|
|
9232
|
+
// turning the options on and off should be safe
|
|
9233
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
9234
|
+
Reopen(options);
|
|
9235
|
+
MoveFilesToLevel(1);
|
|
9236
|
+
ASSERT_EQ("0,1,0,0,1,2", FilesPerLevel());
|
|
9237
|
+
verify_db();
|
|
9238
|
+
|
|
9239
|
+
// newly flushed file is also pushed down
|
|
9240
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
9241
|
+
Reopen(options);
|
|
9242
|
+
// Files in L1 should be trivially moved down during DB opening.
|
|
9243
|
+
// The file should be moved to L3, and then may be drained and compacted to
|
|
9244
|
+
// L4. So we just check L1 and L2 here.
|
|
9245
|
+
ASSERT_EQ(0, NumTableFilesAtLevel(1));
|
|
9246
|
+
ASSERT_EQ(0, NumTableFilesAtLevel(2));
|
|
9247
|
+
verify_db();
|
|
9248
|
+
}
|
|
9249
|
+
|
|
9250
|
+
TEST_F(DBCompactionTest, TurnOnLevelCompactionDynamicLevelBytesUCToLC) {
|
|
9251
|
+
// Basic test for migrating from UC to LC.
|
|
9252
|
+
// DB has non-empty L1 that should be pushed down to last level (L49).
|
|
9253
|
+
Options options = CurrentOptions();
|
|
9254
|
+
options.compaction_style = CompactionStyle::kCompactionStyleUniversal;
|
|
9255
|
+
options.allow_ingest_behind = false;
|
|
9256
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
9257
|
+
options.num_levels = 50;
|
|
9258
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
9259
|
+
|
|
9260
|
+
Random rnd(33);
|
|
9261
|
+
for (int f = 0; f < 10; ++f) {
|
|
9262
|
+
ASSERT_OK(Put(1, Key(f), rnd.RandomString(1000)));
|
|
9263
|
+
ASSERT_OK(Flush(1));
|
|
9264
|
+
}
|
|
9265
|
+
CompactRangeOptions compact_options;
|
|
9266
|
+
compact_options.change_level = true;
|
|
9267
|
+
compact_options.target_level = 1;
|
|
9268
|
+
ASSERT_OK(db_->CompactRange(compact_options, handles_[1], nullptr, nullptr));
|
|
9269
|
+
ASSERT_EQ("0,1", FilesPerLevel(1));
|
|
9270
|
+
|
|
9271
|
+
options.compaction_style = CompactionStyle::kCompactionStyleLevel;
|
|
9272
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
9273
|
+
ReopenWithColumnFamilies({"default", "pikachu"}, options);
|
|
9274
|
+
std::string expected_lsm = "";
|
|
9275
|
+
for (int i = 0; i < 49; ++i) {
|
|
9276
|
+
expected_lsm += "0,";
|
|
9277
|
+
}
|
|
9278
|
+
expected_lsm += "1";
|
|
9279
|
+
ASSERT_EQ(expected_lsm, FilesPerLevel(1));
|
|
9280
|
+
|
|
9281
|
+
// Tests that entries for trial move in MANIFEST should be valid
|
|
9282
|
+
ReopenWithColumnFamilies({"default", "pikachu"}, options);
|
|
9283
|
+
ASSERT_EQ(expected_lsm, FilesPerLevel(1));
|
|
9284
|
+
}
|
|
9285
|
+
|
|
9286
|
+
TEST_F(DBCompactionTest, DrainUnnecessaryLevelsAfterMultiplierChanged) {
|
|
9287
|
+
// When the level size multiplier increases such that fewer levels become
|
|
9288
|
+
// necessary, unnecessary levels should to be drained.
|
|
9289
|
+
const int kBaseLevelBytes = 256 << 10; // 256KB
|
|
9290
|
+
const int kFileBytes = 64 << 10; // 64KB
|
|
9291
|
+
const int kInitMultiplier = 2, kChangedMultiplier = 10;
|
|
9292
|
+
const int kNumFiles = 32;
|
|
9293
|
+
const int kNumLevels = 5;
|
|
9294
|
+
const int kValueBytes = 1 << 10; // 1KB
|
|
9295
|
+
|
|
9296
|
+
Options options = CurrentOptions();
|
|
9297
|
+
options.compression = kNoCompression;
|
|
9298
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
9299
|
+
options.max_bytes_for_level_base = kBaseLevelBytes;
|
|
9300
|
+
options.max_bytes_for_level_multiplier = kInitMultiplier;
|
|
9301
|
+
options.num_levels = kNumLevels;
|
|
9302
|
+
Reopen(options);
|
|
9303
|
+
|
|
9304
|
+
// Initially we setup the LSM to look roughly as follows:
|
|
9305
|
+
//
|
|
9306
|
+
// L0: empty
|
|
9307
|
+
// L1: 256KB
|
|
9308
|
+
// ...
|
|
9309
|
+
// L4: 1MB
|
|
9310
|
+
Random rnd(301);
|
|
9311
|
+
for (int file = 0; file < kNumFiles; ++file) {
|
|
9312
|
+
for (int i = 0; i < kFileBytes / kValueBytes; ++i) {
|
|
9313
|
+
ASSERT_OK(Put(Key(file * kFileBytes / kValueBytes + i),
|
|
9314
|
+
rnd.RandomString(kValueBytes)));
|
|
9315
|
+
}
|
|
9316
|
+
ASSERT_OK(Flush());
|
|
9317
|
+
}
|
|
9318
|
+
|
|
9319
|
+
int init_num_nonempty = 0;
|
|
9320
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
9321
|
+
for (int level = 1; level < kNumLevels; ++level) {
|
|
9322
|
+
if (NumTableFilesAtLevel(level) > 0) {
|
|
9323
|
+
++init_num_nonempty;
|
|
9324
|
+
}
|
|
9325
|
+
}
|
|
9326
|
+
|
|
9327
|
+
// After increasing the multiplier and running compaction fewer levels are
|
|
9328
|
+
// needed to hold all the data. Unnecessary levels should be drained.
|
|
9329
|
+
ASSERT_OK(db_->SetOptions({{"max_bytes_for_level_multiplier",
|
|
9330
|
+
std::to_string(kChangedMultiplier)}}));
|
|
9331
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
9332
|
+
int final_num_nonempty = 0;
|
|
9333
|
+
for (int level = 1; level < kNumLevels; ++level) {
|
|
9334
|
+
if (NumTableFilesAtLevel(level) > 0) {
|
|
9335
|
+
++final_num_nonempty;
|
|
9336
|
+
}
|
|
9337
|
+
}
|
|
9338
|
+
ASSERT_GT(init_num_nonempty, final_num_nonempty);
|
|
9339
|
+
}
|
|
9340
|
+
|
|
9341
|
+
TEST_F(DBCompactionTest, DrainUnnecessaryLevelsAfterDBBecomesSmall) {
|
|
9342
|
+
// When the DB size is smaller, e.g., large chunk of data deleted by
|
|
9343
|
+
// DeleteRange(), unnecessary levels should to be drained.
|
|
9344
|
+
const int kBaseLevelBytes = 256 << 10; // 256KB
|
|
9345
|
+
const int kFileBytes = 64 << 10; // 64KB
|
|
9346
|
+
const int kMultiplier = 2;
|
|
9347
|
+
const int kNumFiles = 32;
|
|
9348
|
+
const int kNumLevels = 5;
|
|
9349
|
+
const int kValueBytes = 1 << 10; // 1KB
|
|
9350
|
+
const int kDeleteFileNum = 8;
|
|
9351
|
+
|
|
9352
|
+
Options options = CurrentOptions();
|
|
9353
|
+
options.compression = kNoCompression;
|
|
9354
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
9355
|
+
options.max_bytes_for_level_base = kBaseLevelBytes;
|
|
9356
|
+
options.max_bytes_for_level_multiplier = kMultiplier;
|
|
9357
|
+
options.num_levels = kNumLevels;
|
|
9358
|
+
Reopen(options);
|
|
9359
|
+
|
|
9360
|
+
// Initially we setup the LSM to look roughly as follows:
|
|
9361
|
+
//
|
|
9362
|
+
// L0: empty
|
|
9363
|
+
// L1: 256KB
|
|
9364
|
+
// ...
|
|
9365
|
+
// L4: 1MB
|
|
9366
|
+
Random rnd(301);
|
|
9367
|
+
for (int file = 0; file < kNumFiles; ++file) {
|
|
9368
|
+
for (int i = 0; i < kFileBytes / kValueBytes; ++i) {
|
|
9369
|
+
ASSERT_OK(Put(Key(file * kFileBytes / kValueBytes + i),
|
|
9370
|
+
rnd.RandomString(kValueBytes)));
|
|
9371
|
+
}
|
|
9372
|
+
ASSERT_OK(Flush());
|
|
9373
|
+
if (file == kDeleteFileNum) {
|
|
9374
|
+
// Ensure the DeleteRange() call below only delete data from last level
|
|
9375
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
9376
|
+
ASSERT_EQ(NumTableFilesAtLevel(kNumLevels - 1), kDeleteFileNum + 1);
|
|
9377
|
+
}
|
|
9378
|
+
}
|
|
9379
|
+
|
|
9380
|
+
int init_num_nonempty = 0;
|
|
9381
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
9382
|
+
for (int level = 1; level < kNumLevels; ++level) {
|
|
9383
|
+
if (NumTableFilesAtLevel(level) > 0) {
|
|
9384
|
+
++init_num_nonempty;
|
|
9385
|
+
}
|
|
9386
|
+
}
|
|
9387
|
+
|
|
9388
|
+
// Disable auto compaction CompactRange() below
|
|
9389
|
+
ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "true"}}));
|
|
9390
|
+
// Delete keys within first (kDeleteFileNum + 1) files' key ranges.
|
|
9391
|
+
// This should reduce DB size enough such that there is now
|
|
9392
|
+
// an unneeded level.
|
|
9393
|
+
std::string begin = Key(0);
|
|
9394
|
+
std::string end = Key(kDeleteFileNum * kFileBytes / kValueBytes);
|
|
9395
|
+
ASSERT_OK(
|
|
9396
|
+
db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), begin, end));
|
|
9397
|
+
Slice begin_slice = begin;
|
|
9398
|
+
Slice end_slice = end;
|
|
9399
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), &begin_slice, &end_slice));
|
|
9400
|
+
int after_delete_range_nonempty = 0;
|
|
9401
|
+
for (int level = 1; level < kNumLevels; ++level) {
|
|
9402
|
+
if (NumTableFilesAtLevel(level) > 0) {
|
|
9403
|
+
++after_delete_range_nonempty;
|
|
9404
|
+
}
|
|
9405
|
+
}
|
|
9406
|
+
ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "false"}}));
|
|
9407
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
9408
|
+
int final_num_nonempty = 0;
|
|
9409
|
+
for (int level = 1; level < kNumLevels; ++level) {
|
|
9410
|
+
if (NumTableFilesAtLevel(level) > 0) {
|
|
9411
|
+
++final_num_nonempty;
|
|
9412
|
+
}
|
|
9413
|
+
}
|
|
9414
|
+
ASSERT_GE(init_num_nonempty, after_delete_range_nonempty);
|
|
9415
|
+
ASSERT_GT(after_delete_range_nonempty, final_num_nonempty);
|
|
9416
|
+
}
|
|
9111
9417
|
|
|
9112
9418
|
} // namespace ROCKSDB_NAMESPACE
|
|
9113
9419
|
|
|
@@ -46,6 +46,11 @@ Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
|
|
|
46
46
|
Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
|
|
47
47
|
const Slice& key, PinnableSlice* value,
|
|
48
48
|
std::string* timestamp) {
|
|
49
|
+
if (options.io_activity != Env::IOActivity::kUnknown) {
|
|
50
|
+
return Status::InvalidArgument(
|
|
51
|
+
"Cannot call Get with `ReadOptions::io_activity` != "
|
|
52
|
+
"`Env::IOActivity::kUnknown`");
|
|
53
|
+
}
|
|
49
54
|
assert(user_comparator_);
|
|
50
55
|
if (options.timestamp) {
|
|
51
56
|
const Status s = FailIfTsMismatchCf(
|
|
@@ -128,6 +128,13 @@ class CompactedDBImpl : public DBImpl {
|
|
|
128
128
|
return Status::NotSupported("Not supported in compacted db mode.");
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
using DB::ClipColumnFamily;
|
|
132
|
+
virtual Status ClipColumnFamily(ColumnFamilyHandle* /*column_family*/,
|
|
133
|
+
const Slice& /*begin*/,
|
|
134
|
+
const Slice& /*end*/) override {
|
|
135
|
+
return Status::NotSupported("Not supported in compacted db mode.");
|
|
136
|
+
}
|
|
137
|
+
|
|
131
138
|
// FIXME: some missing overrides for more "write" functions
|
|
132
139
|
// Share with DBImplReadOnly?
|
|
133
140
|
|