@nxtedition/rocksdb 5.2.21 → 5.2.28
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 +510 -967
- package/binding.gyp +78 -72
- package/chained-batch.js +1 -2
- package/deps/rocksdb/build_version.cc +70 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
- package/deps/rocksdb/rocksdb/Makefile +459 -469
- package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
- package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
- package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
- package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
- package/deps/rocksdb/rocksdb/db/builder.h +16 -37
- package/deps/rocksdb/rocksdb/db/c.cc +413 -208
- package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
- package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
- package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
- package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
- package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
- package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
- package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
- package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
- package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
- package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
- package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
- package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
- package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
- package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
- package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
- package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
- package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
- package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
- package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
- package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
- package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
- package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
- package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
- package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
- package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
- package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
- package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
- package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
- package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
- package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
- package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
- package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
- package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
- package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
- package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
- package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
- package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
- package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
- package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
- package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
- package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
- package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
- package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
- package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
- package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
- package/deps/rocksdb/rocksdb/env/env.cc +632 -42
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
- package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
- package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
- package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
- package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
- package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
- package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
- package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
- package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
- package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
- package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
- package/deps/rocksdb/rocksdb/file/filename.h +13 -8
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
- package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
- package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
- package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
- package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
- package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
- package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
- package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
- package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
- package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
- package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
- package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
- package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
- package/deps/rocksdb/rocksdb/options/options.cc +49 -17
- package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
- package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
- package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
- package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
- package/deps/rocksdb/rocksdb/port/lang.h +52 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
- package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
- package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
- package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
- package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
- package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
- package/deps/rocksdb/rocksdb/python.mk +9 -0
- package/deps/rocksdb/rocksdb/src.mk +82 -34
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
- package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
- package/deps/rocksdb/rocksdb/table/format.cc +258 -104
- package/deps/rocksdb/rocksdb/table/format.h +120 -109
- package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
- package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
- package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
- package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
- package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
- package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
- package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
- package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
- package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
- package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/channel.h +2 -0
- package/deps/rocksdb/rocksdb/util/coding.h +1 -33
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
- package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
- package/deps/rocksdb/rocksdb/util/compression.h +212 -7
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
- package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
- package/deps/rocksdb/rocksdb/util/defer.h +30 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
- package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
- package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
- package/deps/rocksdb/rocksdb/util/hash.h +31 -1
- package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
- package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
- package/deps/rocksdb/rocksdb/util/heap.h +6 -1
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/util/math.h +74 -7
- package/deps/rocksdb/rocksdb/util/math128.h +13 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
- package/deps/rocksdb/rocksdb/util/random.cc +9 -0
- package/deps/rocksdb/rocksdb/util/random.h +6 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
- package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
- package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
- package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
- package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
- package/deps/rocksdb/rocksdb/util/status.cc +32 -29
- package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
- package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
- package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
- package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
- package/deps/rocksdb/rocksdb/util/timer.h +55 -46
- package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
- package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
- package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
- package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
- package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
- package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
- package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
- package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
- package/deps/rocksdb/rocksdb.gyp +425 -446
- package/index.js +5 -87
- package/package-lock.json +23687 -0
- package/package.json +8 -9
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/README.md +0 -32
- package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
- package/deps/rocksdb/rocksdb/hdfs/README +0 -23
- package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
- package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
- package/deps/rocksdb/rocksdb/port/README +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
- package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
- package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
- package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
- package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
- package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
- package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
- package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
- package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
- package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
- package/deps/snappy/snappy-1.1.7/README.md +0 -149
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
#include "db/blob/blob_index.h"
|
|
13
13
|
#include "db/db_test_util.h"
|
|
14
|
+
#include "env/mock_env.h"
|
|
14
15
|
#include "port/port.h"
|
|
15
16
|
#include "port/stack_trace.h"
|
|
16
17
|
#include "rocksdb/concurrent_task_limiter.h"
|
|
@@ -18,9 +19,11 @@
|
|
|
18
19
|
#include "rocksdb/sst_file_writer.h"
|
|
19
20
|
#include "rocksdb/utilities/convenience.h"
|
|
20
21
|
#include "test_util/sync_point.h"
|
|
22
|
+
#include "test_util/testutil.h"
|
|
21
23
|
#include "util/concurrent_task_limiter_impl.h"
|
|
22
24
|
#include "util/random.h"
|
|
23
25
|
#include "utilities/fault_injection_env.h"
|
|
26
|
+
#include "utilities/fault_injection_fs.h"
|
|
24
27
|
|
|
25
28
|
namespace ROCKSDB_NAMESPACE {
|
|
26
29
|
|
|
@@ -30,32 +33,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
30
33
|
class DBCompactionTest : public DBTestBase {
|
|
31
34
|
public:
|
|
32
35
|
DBCompactionTest()
|
|
33
|
-
: DBTestBase("
|
|
34
|
-
|
|
35
|
-
std::vector<uint64_t> GetBlobFileNumbers() {
|
|
36
|
-
VersionSet* const versions = dbfull()->TEST_GetVersionSet();
|
|
37
|
-
assert(versions);
|
|
38
|
-
|
|
39
|
-
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
40
|
-
assert(cfd);
|
|
41
|
-
|
|
42
|
-
Version* const current = cfd->current();
|
|
43
|
-
assert(current);
|
|
44
|
-
|
|
45
|
-
const VersionStorageInfo* const storage_info = current->storage_info();
|
|
46
|
-
assert(storage_info);
|
|
47
|
-
|
|
48
|
-
const auto& blob_files = storage_info->GetBlobFiles();
|
|
49
|
-
|
|
50
|
-
std::vector<uint64_t> result;
|
|
51
|
-
result.reserve(blob_files.size());
|
|
52
|
-
|
|
53
|
-
for (const auto& blob_file : blob_files) {
|
|
54
|
-
result.emplace_back(blob_file.first);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
36
|
+
: DBTestBase("db_compaction_test", /*env_do_fsync=*/true) {}
|
|
59
37
|
};
|
|
60
38
|
|
|
61
39
|
class DBCompactionTestWithParam
|
|
@@ -63,7 +41,7 @@ class DBCompactionTestWithParam
|
|
|
63
41
|
public testing::WithParamInterface<std::tuple<uint32_t, bool>> {
|
|
64
42
|
public:
|
|
65
43
|
DBCompactionTestWithParam()
|
|
66
|
-
: DBTestBase("
|
|
44
|
+
: DBTestBase("db_compaction_test", /*env_do_fsync=*/true) {
|
|
67
45
|
max_subcompactions_ = std::get<0>(GetParam());
|
|
68
46
|
exclusive_manual_compaction_ = std::get<1>(GetParam());
|
|
69
47
|
}
|
|
@@ -81,7 +59,7 @@ class DBCompactionTestWithBottommostParam
|
|
|
81
59
|
public testing::WithParamInterface<BottommostLevelCompaction> {
|
|
82
60
|
public:
|
|
83
61
|
DBCompactionTestWithBottommostParam()
|
|
84
|
-
: DBTestBase("
|
|
62
|
+
: DBTestBase("db_compaction_test", /*env_do_fsync=*/true) {
|
|
85
63
|
bottommost_level_compaction_ = GetParam();
|
|
86
64
|
}
|
|
87
65
|
|
|
@@ -204,6 +182,7 @@ Options DeletionTriggerOptions(Options options) {
|
|
|
204
182
|
options.target_file_size_base * options.target_file_size_multiplier;
|
|
205
183
|
options.max_bytes_for_level_multiplier = 2;
|
|
206
184
|
options.disable_auto_compactions = false;
|
|
185
|
+
options.compaction_options_universal.max_size_amplification_percent = 100;
|
|
207
186
|
return options;
|
|
208
187
|
}
|
|
209
188
|
|
|
@@ -323,7 +302,7 @@ const SstFileMetaData* PickFileRandomly(
|
|
|
323
302
|
}
|
|
324
303
|
} // anonymous namespace
|
|
325
304
|
|
|
326
|
-
#
|
|
305
|
+
#if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
327
306
|
// All the TEST_P tests run once with sub_compactions disabled (i.e.
|
|
328
307
|
// options.max_subcompactions = 1) and once with it enabled
|
|
329
308
|
TEST_P(DBCompactionTestWithParam, CompactionDeletionTrigger) {
|
|
@@ -358,98 +337,37 @@ TEST_P(DBCompactionTestWithParam, CompactionDeletionTrigger) {
|
|
|
358
337
|
for (int k = 0; k < kTestSize; ++k) {
|
|
359
338
|
ASSERT_OK(Delete(Key(k)));
|
|
360
339
|
}
|
|
361
|
-
ASSERT_OK(
|
|
340
|
+
ASSERT_OK(Flush());
|
|
362
341
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
363
342
|
ASSERT_OK(Size(Key(0), Key(kTestSize - 1), &db_size[1]));
|
|
364
343
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
options.compaction_style = kCompactionStyleUniversal;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
DestroyAndReopen(options);
|
|
392
|
-
Random rnd(301);
|
|
393
|
-
// highlight the default; all deletes should be preserved
|
|
394
|
-
SetPreserveDeletesSequenceNumber(0);
|
|
395
|
-
|
|
396
|
-
const int kTestSize = kCDTKeysPerBuffer;
|
|
397
|
-
std::vector<std::string> values;
|
|
398
|
-
for (int k = 0; k < kTestSize; ++k) {
|
|
399
|
-
values.push_back(rnd.RandomString(kCDTValueSize));
|
|
400
|
-
ASSERT_OK(Put(Key(k), values[k]));
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
for (int k = 0; k < kTestSize; ++k) {
|
|
404
|
-
ASSERT_OK(Delete(Key(k)));
|
|
405
|
-
}
|
|
406
|
-
// to ensure we tackle all tombstones
|
|
407
|
-
CompactRangeOptions cro;
|
|
408
|
-
cro.change_level = true;
|
|
409
|
-
cro.target_level = 2;
|
|
410
|
-
cro.bottommost_level_compaction =
|
|
411
|
-
BottommostLevelCompaction::kForceOptimized;
|
|
412
|
-
|
|
413
|
-
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
414
|
-
ASSERT_TRUE(
|
|
415
|
-
dbfull()->CompactRange(cro, nullptr, nullptr).IsInvalidArgument());
|
|
416
|
-
|
|
417
|
-
// check that normal user iterator doesn't see anything
|
|
418
|
-
Iterator* db_iter = dbfull()->NewIterator(ReadOptions());
|
|
419
|
-
int i = 0;
|
|
420
|
-
for (db_iter->SeekToFirst(); db_iter->Valid(); db_iter->Next()) {
|
|
421
|
-
i++;
|
|
422
|
-
}
|
|
423
|
-
ASSERT_OK(db_iter->status());
|
|
424
|
-
ASSERT_EQ(i, 0);
|
|
425
|
-
delete db_iter;
|
|
426
|
-
|
|
427
|
-
// check that iterator that sees internal keys sees tombstones
|
|
428
|
-
ReadOptions ro;
|
|
429
|
-
ro.iter_start_seqnum=1;
|
|
430
|
-
db_iter = dbfull()->NewIterator(ro);
|
|
431
|
-
ASSERT_OK(db_iter->status());
|
|
432
|
-
i = 0;
|
|
433
|
-
for (db_iter->SeekToFirst(); db_iter->Valid(); db_iter->Next()) {
|
|
434
|
-
i++;
|
|
435
|
-
}
|
|
436
|
-
ASSERT_EQ(i, 4);
|
|
437
|
-
delete db_iter;
|
|
438
|
-
|
|
439
|
-
// now all deletes should be gone
|
|
440
|
-
SetPreserveDeletesSequenceNumber(100000000);
|
|
441
|
-
ASSERT_NOK(dbfull()->CompactRange(cro, nullptr, nullptr));
|
|
442
|
-
|
|
443
|
-
db_iter = dbfull()->NewIterator(ro);
|
|
444
|
-
ASSERT_TRUE(db_iter->status().IsInvalidArgument());
|
|
445
|
-
i = 0;
|
|
446
|
-
for (db_iter->SeekToFirst(); db_iter->Valid(); db_iter->Next()) {
|
|
447
|
-
i++;
|
|
344
|
+
if (options.compaction_style == kCompactionStyleUniversal) {
|
|
345
|
+
// Claim: in universal compaction none of the original data will remain
|
|
346
|
+
// once compactions settle.
|
|
347
|
+
//
|
|
348
|
+
// Proof: The compensated size of the file containing the most tombstones
|
|
349
|
+
// is enough on its own to trigger size amp compaction. Size amp
|
|
350
|
+
// compaction is a full compaction, so all tombstones meet the obsolete
|
|
351
|
+
// keys they cover.
|
|
352
|
+
ASSERT_EQ(0, db_size[1]);
|
|
353
|
+
} else {
|
|
354
|
+
// Claim: in level compaction at most `db_size[0] / 2` of the original
|
|
355
|
+
// data will remain once compactions settle.
|
|
356
|
+
//
|
|
357
|
+
// Proof: Assume the original data is all in the bottom level. If it were
|
|
358
|
+
// not, it would meet its tombstone sooner. The original data size is
|
|
359
|
+
// large enough to require fanout to bottom level to be greater than
|
|
360
|
+
// `max_bytes_for_level_multiplier == 2`. In the level just above,
|
|
361
|
+
// tombstones must cover less than `db_size[0] / 4` bytes since fanout >=
|
|
362
|
+
// 2 and file size is compensated by doubling the size of values we expect
|
|
363
|
+
// are covered (`kDeletionWeightOnCompaction == 2`). The tombstones in
|
|
364
|
+
// levels above must cover less than `db_size[0] / 8` bytes of original
|
|
365
|
+
// data, `db_size[0] / 16`, and so on.
|
|
366
|
+
ASSERT_GT(db_size[0] / 2, db_size[1]);
|
|
448
367
|
}
|
|
449
|
-
ASSERT_EQ(i, 0);
|
|
450
|
-
delete db_iter;
|
|
451
368
|
}
|
|
452
369
|
}
|
|
370
|
+
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
453
371
|
|
|
454
372
|
TEST_F(DBCompactionTest, SkipStatsUpdateTest) {
|
|
455
373
|
// This test verify UpdateAccumulatedStats is not on
|
|
@@ -500,9 +418,12 @@ TEST_F(DBCompactionTest, SkipStatsUpdateTest) {
|
|
|
500
418
|
TEST_F(DBCompactionTest, TestTableReaderForCompaction) {
|
|
501
419
|
Options options = CurrentOptions();
|
|
502
420
|
options.env = env_;
|
|
503
|
-
options.new_table_reader_for_compaction_inputs = true;
|
|
504
421
|
options.max_open_files = 20;
|
|
505
422
|
options.level0_file_num_compaction_trigger = 3;
|
|
423
|
+
// Avoid many shards with small max_open_files, where as little as
|
|
424
|
+
// two table insertions could lead to an LRU eviction, depending on
|
|
425
|
+
// hash values.
|
|
426
|
+
options.table_cache_numshardbits = 2;
|
|
506
427
|
DestroyAndReopen(options);
|
|
507
428
|
Random rnd(301);
|
|
508
429
|
|
|
@@ -630,9 +551,8 @@ TEST_P(DBCompactionTestWithParam, CompactionDeletionTriggerReopen) {
|
|
|
630
551
|
}
|
|
631
552
|
ASSERT_OK(Size(Key(0), Key(kTestSize - 1), &db_size[1]));
|
|
632
553
|
Close();
|
|
633
|
-
// as auto_compaction is off, we shouldn't see
|
|
634
|
-
|
|
635
|
-
ASSERT_LT(db_size[0] / 3, db_size[1]);
|
|
554
|
+
// as auto_compaction is off, we shouldn't see any reduction in db size.
|
|
555
|
+
ASSERT_LE(db_size[0], db_size[1]);
|
|
636
556
|
|
|
637
557
|
// round 3 --- reopen db with auto_compaction on and see if
|
|
638
558
|
// deletion compensation still work.
|
|
@@ -646,7 +566,13 @@ TEST_P(DBCompactionTestWithParam, CompactionDeletionTriggerReopen) {
|
|
|
646
566
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
647
567
|
ASSERT_OK(Size(Key(0), Key(kTestSize - 1), &db_size[2]));
|
|
648
568
|
// this time we're expecting significant drop in size.
|
|
649
|
-
|
|
569
|
+
//
|
|
570
|
+
// See "CompactionDeletionTrigger" test for proof that at most
|
|
571
|
+
// `db_size[0] / 2` of the original data remains. In addition to that, this
|
|
572
|
+
// test inserts `db_size[0] / 10` to push the tombstones into SST files and
|
|
573
|
+
// then through automatic compactions. So in total `3 * db_size[0] / 5` of
|
|
574
|
+
// the original data may remain.
|
|
575
|
+
ASSERT_GT(3 * db_size[0] / 5, db_size[2]);
|
|
650
576
|
}
|
|
651
577
|
}
|
|
652
578
|
|
|
@@ -733,8 +659,15 @@ TEST_F(DBCompactionTest, DisableStatsUpdateReopen) {
|
|
|
733
659
|
values.push_back(rnd.RandomString(kCDTValueSize));
|
|
734
660
|
ASSERT_OK(Put(Key(k), values[k]));
|
|
735
661
|
}
|
|
736
|
-
ASSERT_OK(
|
|
662
|
+
ASSERT_OK(Flush());
|
|
737
663
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
664
|
+
// L1 and L2 can fit deletions iff size compensation does not take effect,
|
|
665
|
+
// i.e., when `skip_stats_update_on_db_open == true`. Move any remaining
|
|
666
|
+
// files at or above L2 down to L3 to ensure obsolete data does not
|
|
667
|
+
// accidentally meet its tombstone above L3. This makes the final size more
|
|
668
|
+
// deterministic and easy to see whether size compensation for deletions
|
|
669
|
+
// took effect.
|
|
670
|
+
MoveFilesToLevel(3 /* level */);
|
|
738
671
|
ASSERT_OK(Size(Key(0), Key(kTestSize - 1), &db_size[0]));
|
|
739
672
|
Close();
|
|
740
673
|
|
|
@@ -750,9 +683,8 @@ TEST_F(DBCompactionTest, DisableStatsUpdateReopen) {
|
|
|
750
683
|
}
|
|
751
684
|
ASSERT_OK(Size(Key(0), Key(kTestSize - 1), &db_size[1]));
|
|
752
685
|
Close();
|
|
753
|
-
// as auto_compaction is off, we shouldn't see
|
|
754
|
-
|
|
755
|
-
ASSERT_LT(db_size[0] / 3, db_size[1]);
|
|
686
|
+
// as auto_compaction is off, we shouldn't see any reduction in db size.
|
|
687
|
+
ASSERT_LE(db_size[0], db_size[1]);
|
|
756
688
|
|
|
757
689
|
// round 3 --- reopen db with auto_compaction on and see if
|
|
758
690
|
// deletion compensation still work.
|
|
@@ -765,10 +697,17 @@ TEST_F(DBCompactionTest, DisableStatsUpdateReopen) {
|
|
|
765
697
|
if (options.skip_stats_update_on_db_open) {
|
|
766
698
|
// If update stats on DB::Open is disable, we don't expect
|
|
767
699
|
// deletion entries taking effect.
|
|
768
|
-
|
|
700
|
+
//
|
|
701
|
+
// The deletions are small enough to fit in L1 and L2, and obsolete keys
|
|
702
|
+
// were moved to L3+, so none of the original data should have been
|
|
703
|
+
// dropped.
|
|
704
|
+
ASSERT_LE(db_size[0], db_size[2]);
|
|
769
705
|
} else {
|
|
770
706
|
// Otherwise, we should see a significant drop in db size.
|
|
771
|
-
|
|
707
|
+
//
|
|
708
|
+
// See "CompactionDeletionTrigger" test for proof that at most
|
|
709
|
+
// `db_size[0] / 2` of the original data remains.
|
|
710
|
+
ASSERT_GT(db_size[0] / 2, db_size[2]);
|
|
772
711
|
}
|
|
773
712
|
}
|
|
774
713
|
}
|
|
@@ -783,7 +722,8 @@ TEST_P(DBCompactionTestWithParam, CompactionTrigger) {
|
|
|
783
722
|
options.num_levels = 3;
|
|
784
723
|
options.level0_file_num_compaction_trigger = 3;
|
|
785
724
|
options.max_subcompactions = max_subcompactions_;
|
|
786
|
-
options.memtable_factory.reset(
|
|
725
|
+
options.memtable_factory.reset(
|
|
726
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
787
727
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
788
728
|
|
|
789
729
|
Random rnd(301);
|
|
@@ -830,7 +770,8 @@ TEST_F(DBCompactionTest, BGCompactionsAllowed) {
|
|
|
830
770
|
options.level0_slowdown_writes_trigger = 20;
|
|
831
771
|
options.soft_pending_compaction_bytes_limit = 1 << 30; // Infinitely large
|
|
832
772
|
options.max_background_compactions = 3;
|
|
833
|
-
options.memtable_factory.reset(
|
|
773
|
+
options.memtable_factory.reset(
|
|
774
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
834
775
|
|
|
835
776
|
// Block all threads in thread pool.
|
|
836
777
|
const size_t kTotalTasks = 4;
|
|
@@ -1413,6 +1354,74 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveTargetLevel) {
|
|
|
1413
1354
|
}
|
|
1414
1355
|
}
|
|
1415
1356
|
|
|
1357
|
+
TEST_P(DBCompactionTestWithParam, PartialOverlappingL0) {
|
|
1358
|
+
class SubCompactionEventListener : public EventListener {
|
|
1359
|
+
public:
|
|
1360
|
+
void OnSubcompactionCompleted(const SubcompactionJobInfo&) override {
|
|
1361
|
+
sub_compaction_finished_++;
|
|
1362
|
+
}
|
|
1363
|
+
std::atomic<int> sub_compaction_finished_{0};
|
|
1364
|
+
};
|
|
1365
|
+
|
|
1366
|
+
Options options = CurrentOptions();
|
|
1367
|
+
options.disable_auto_compactions = true;
|
|
1368
|
+
options.write_buffer_size = 10 * 1024 * 1024;
|
|
1369
|
+
options.max_subcompactions = max_subcompactions_;
|
|
1370
|
+
SubCompactionEventListener* listener = new SubCompactionEventListener();
|
|
1371
|
+
options.listeners.emplace_back(listener);
|
|
1372
|
+
|
|
1373
|
+
DestroyAndReopen(options);
|
|
1374
|
+
|
|
1375
|
+
// For subcompactino to trigger, output level needs to be non-empty.
|
|
1376
|
+
ASSERT_OK(Put("key", ""));
|
|
1377
|
+
ASSERT_OK(Put("kez", ""));
|
|
1378
|
+
ASSERT_OK(Flush());
|
|
1379
|
+
ASSERT_OK(Put("key", ""));
|
|
1380
|
+
ASSERT_OK(Put("kez", ""));
|
|
1381
|
+
ASSERT_OK(Flush());
|
|
1382
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
1383
|
+
|
|
1384
|
+
// Ranges that are only briefly overlapping so that they won't be trivially
|
|
1385
|
+
// moved but subcompaction ranges would only contain a subset of files.
|
|
1386
|
+
std::vector<std::pair<int32_t, int32_t>> ranges = {
|
|
1387
|
+
{100, 199}, {198, 399}, {397, 600}, {598, 800}, {799, 900}, {895, 999},
|
|
1388
|
+
};
|
|
1389
|
+
int32_t value_size = 10 * 1024; // 10 KB
|
|
1390
|
+
|
|
1391
|
+
Random rnd(301);
|
|
1392
|
+
std::map<int32_t, std::string> values;
|
|
1393
|
+
for (size_t i = 0; i < ranges.size(); i++) {
|
|
1394
|
+
for (int32_t j = ranges[i].first; j <= ranges[i].second; j++) {
|
|
1395
|
+
values[j] = rnd.RandomString(value_size);
|
|
1396
|
+
ASSERT_OK(Put(Key(j), values[j]));
|
|
1397
|
+
}
|
|
1398
|
+
ASSERT_OK(Flush());
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
int32_t level0_files = NumTableFilesAtLevel(0, 0);
|
|
1402
|
+
ASSERT_EQ(level0_files, ranges.size()); // Multiple files in L0
|
|
1403
|
+
ASSERT_EQ(NumTableFilesAtLevel(1, 0), 1); // One file in L1
|
|
1404
|
+
|
|
1405
|
+
listener->sub_compaction_finished_ = 0;
|
|
1406
|
+
ASSERT_OK(db_->EnableAutoCompaction({db_->DefaultColumnFamily()}));
|
|
1407
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1408
|
+
if (max_subcompactions_ > 3) {
|
|
1409
|
+
// RocksDB might not generate the exact number of sub compactions.
|
|
1410
|
+
// Here we validate that at least subcompaction happened.
|
|
1411
|
+
ASSERT_GT(listener->sub_compaction_finished_.load(), 2);
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
// We expect that all the files were compacted to L1
|
|
1415
|
+
ASSERT_EQ(NumTableFilesAtLevel(0, 0), 0);
|
|
1416
|
+
ASSERT_GT(NumTableFilesAtLevel(1, 0), 1);
|
|
1417
|
+
|
|
1418
|
+
for (size_t i = 0; i < ranges.size(); i++) {
|
|
1419
|
+
for (int32_t j = ranges[i].first; j <= ranges[i].second; j++) {
|
|
1420
|
+
ASSERT_EQ(Get(Key(j)), values[j]);
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1416
1425
|
TEST_P(DBCompactionTestWithParam, ManualCompactionPartial) {
|
|
1417
1426
|
int32_t trivial_move = 0;
|
|
1418
1427
|
int32_t non_trivial_move = 0;
|
|
@@ -2072,7 +2081,7 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionThirdPath) {
|
|
|
2072
2081
|
options.db_paths.emplace_back(dbname_ + "_2", 4 * 1024 * 1024);
|
|
2073
2082
|
options.db_paths.emplace_back(dbname_ + "_3", 1024 * 1024 * 1024);
|
|
2074
2083
|
options.memtable_factory.reset(
|
|
2075
|
-
|
|
2084
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
2076
2085
|
options.compaction_style = kCompactionStyleLevel;
|
|
2077
2086
|
options.write_buffer_size = 110 << 10; // 110KB
|
|
2078
2087
|
options.arena_block_size = 4 << 10;
|
|
@@ -2181,7 +2190,7 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionPathUse) {
|
|
|
2181
2190
|
options.db_paths.emplace_back(dbname_ + "_2", 4 * 1024 * 1024);
|
|
2182
2191
|
options.db_paths.emplace_back(dbname_ + "_3", 1024 * 1024 * 1024);
|
|
2183
2192
|
options.memtable_factory.reset(
|
|
2184
|
-
|
|
2193
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
2185
2194
|
options.compaction_style = kCompactionStyleLevel;
|
|
2186
2195
|
options.write_buffer_size = 110 << 10; // 110KB
|
|
2187
2196
|
options.arena_block_size = 4 << 10;
|
|
@@ -2291,7 +2300,7 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionCFPathUse) {
|
|
|
2291
2300
|
options.db_paths.emplace_back(dbname_ + "_2", 4 * 1024 * 1024);
|
|
2292
2301
|
options.db_paths.emplace_back(dbname_ + "_3", 1024 * 1024 * 1024);
|
|
2293
2302
|
options.memtable_factory.reset(
|
|
2294
|
-
|
|
2303
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
2295
2304
|
options.compaction_style = kCompactionStyleLevel;
|
|
2296
2305
|
options.write_buffer_size = 110 << 10; // 110KB
|
|
2297
2306
|
options.arena_block_size = 4 << 10;
|
|
@@ -2310,7 +2319,7 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionCFPathUse) {
|
|
|
2310
2319
|
option_vector.emplace_back(DBOptions(options), cf_opt1);
|
|
2311
2320
|
CreateColumnFamilies({"one"},option_vector[1]);
|
|
2312
2321
|
|
|
2313
|
-
//
|
|
2322
|
+
// Configure CF2 specific paths.
|
|
2314
2323
|
cf_opt2.cf_paths.emplace_back(dbname_ + "cf2", 500 * 1024);
|
|
2315
2324
|
cf_opt2.cf_paths.emplace_back(dbname_ + "cf2_2", 4 * 1024 * 1024);
|
|
2316
2325
|
cf_opt2.cf_paths.emplace_back(dbname_ + "cf2_3", 1024 * 1024 * 1024);
|
|
@@ -2365,13 +2374,16 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionCFPathUse) {
|
|
|
2365
2374
|
// Check that default column family uses db_paths.
|
|
2366
2375
|
// And Column family "one" uses cf_paths.
|
|
2367
2376
|
|
|
2368
|
-
//
|
|
2369
|
-
//
|
|
2377
|
+
// The compaction in level0 outputs the sst files in level1.
|
|
2378
|
+
// The first path cannot hold level1's data(400KB+400KB > 500KB),
|
|
2379
|
+
// so every compaction move a sst file to second path. Please
|
|
2380
|
+
// refer to LevelCompactionBuilder::GetPathId.
|
|
2370
2381
|
for (int num = 0; num < 3; num++) {
|
|
2371
2382
|
generate_file();
|
|
2372
2383
|
}
|
|
2384
|
+
check_sstfilecount(0, 1);
|
|
2385
|
+
check_sstfilecount(1, 2);
|
|
2373
2386
|
|
|
2374
|
-
// Another 110KB triggers a compaction to 400K file to fill up first path
|
|
2375
2387
|
generate_file();
|
|
2376
2388
|
check_sstfilecount(1, 3);
|
|
2377
2389
|
|
|
@@ -2987,7 +2999,7 @@ TEST_P(DBCompactionTestWithParam, CompressLevelCompaction) {
|
|
|
2987
2999
|
}
|
|
2988
3000
|
Options options = CurrentOptions();
|
|
2989
3001
|
options.memtable_factory.reset(
|
|
2990
|
-
|
|
3002
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
2991
3003
|
options.compaction_style = kCompactionStyleLevel;
|
|
2992
3004
|
options.write_buffer_size = 110 << 10; // 110KB
|
|
2993
3005
|
options.arena_block_size = 4 << 10;
|
|
@@ -3578,6 +3590,41 @@ TEST_F(DBCompactionTest, CompactFilesOverlapInL0Bug) {
|
|
|
3578
3590
|
ASSERT_EQ("new_val", Get(Key(0)));
|
|
3579
3591
|
}
|
|
3580
3592
|
|
|
3593
|
+
TEST_F(DBCompactionTest, DeleteFilesInRangeConflictWithCompaction) {
|
|
3594
|
+
Options options = CurrentOptions();
|
|
3595
|
+
DestroyAndReopen(options);
|
|
3596
|
+
const Snapshot* snapshot = nullptr;
|
|
3597
|
+
const int kMaxKey = 10;
|
|
3598
|
+
|
|
3599
|
+
for (int i = 0; i < kMaxKey; i++) {
|
|
3600
|
+
ASSERT_OK(Put(Key(i), Key(i)));
|
|
3601
|
+
ASSERT_OK(Delete(Key(i)));
|
|
3602
|
+
if (!snapshot) {
|
|
3603
|
+
snapshot = db_->GetSnapshot();
|
|
3604
|
+
}
|
|
3605
|
+
}
|
|
3606
|
+
ASSERT_OK(Flush());
|
|
3607
|
+
MoveFilesToLevel(1);
|
|
3608
|
+
ASSERT_OK(Put(Key(kMaxKey), Key(kMaxKey)));
|
|
3609
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3610
|
+
// test DeleteFilesInRange() deletes the files already picked for compaction
|
|
3611
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
3612
|
+
{{"VersionSet::LogAndApply:WriteManifestStart",
|
|
3613
|
+
"BackgroundCallCompaction:0"},
|
|
3614
|
+
{"DBImpl::BackgroundCompaction:Finish",
|
|
3615
|
+
"VersionSet::LogAndApply:WriteManifestDone"}});
|
|
3616
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3617
|
+
|
|
3618
|
+
// release snapshot which mark bottommost file for compaction
|
|
3619
|
+
db_->ReleaseSnapshot(snapshot);
|
|
3620
|
+
std::string begin_string = Key(0);
|
|
3621
|
+
std::string end_string = Key(kMaxKey + 1);
|
|
3622
|
+
Slice begin(begin_string);
|
|
3623
|
+
Slice end(end_string);
|
|
3624
|
+
ASSERT_OK(DeleteFilesInRange(db_, db_->DefaultColumnFamily(), &begin, &end));
|
|
3625
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3626
|
+
}
|
|
3627
|
+
|
|
3581
3628
|
TEST_F(DBCompactionTest, CompactBottomLevelFilesWithDeletions) {
|
|
3582
3629
|
// bottom-level files may contain deletions due to snapshots protecting the
|
|
3583
3630
|
// deleted keys. Once the snapshot is released, we should see files with many
|
|
@@ -4239,6 +4286,67 @@ TEST_F(DBCompactionTest, LevelPeriodicAndTtlCompaction) {
|
|
|
4239
4286
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
4240
4287
|
}
|
|
4241
4288
|
|
|
4289
|
+
TEST_F(DBCompactionTest, LevelTtlBooster) {
|
|
4290
|
+
const int kNumKeysPerFile = 32;
|
|
4291
|
+
const int kNumLevelFiles = 3;
|
|
4292
|
+
const int kValueSize = 1000;
|
|
4293
|
+
|
|
4294
|
+
Options options = CurrentOptions();
|
|
4295
|
+
options.ttl = 10 * 60 * 60; // 10 hours
|
|
4296
|
+
options.periodic_compaction_seconds = 480 * 60 * 60; // very long
|
|
4297
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
4298
|
+
options.max_bytes_for_level_base = 5 * uint64_t{kNumKeysPerFile * kValueSize};
|
|
4299
|
+
options.max_open_files = -1; // needed for both periodic and ttl compactions
|
|
4300
|
+
options.compaction_pri = CompactionPri::kMinOverlappingRatio;
|
|
4301
|
+
env_->SetMockSleep();
|
|
4302
|
+
options.env = env_;
|
|
4303
|
+
|
|
4304
|
+
// NOTE: Presumed unnecessary and removed: resetting mock time in env
|
|
4305
|
+
|
|
4306
|
+
DestroyAndReopen(options);
|
|
4307
|
+
|
|
4308
|
+
Random rnd(301);
|
|
4309
|
+
for (int i = 0; i < kNumLevelFiles; ++i) {
|
|
4310
|
+
for (int j = 0; j < kNumKeysPerFile; ++j) {
|
|
4311
|
+
ASSERT_OK(
|
|
4312
|
+
Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize)));
|
|
4313
|
+
}
|
|
4314
|
+
ASSERT_OK(Flush());
|
|
4315
|
+
}
|
|
4316
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4317
|
+
|
|
4318
|
+
MoveFilesToLevel(2);
|
|
4319
|
+
|
|
4320
|
+
ASSERT_EQ("0,0,3", FilesPerLevel());
|
|
4321
|
+
|
|
4322
|
+
// Create some files for L1
|
|
4323
|
+
for (int i = 0; i < 2; i++) {
|
|
4324
|
+
for (int j = 0; j < kNumKeysPerFile; ++j) {
|
|
4325
|
+
ASSERT_OK(Put(Key(2 * j + i), rnd.RandomString(kValueSize)));
|
|
4326
|
+
}
|
|
4327
|
+
ASSERT_OK(Flush());
|
|
4328
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4329
|
+
}
|
|
4330
|
+
|
|
4331
|
+
ASSERT_EQ("0,1,3", FilesPerLevel());
|
|
4332
|
+
|
|
4333
|
+
// Make the new L0 files qualify TTL boosting and generate one more to trigger
|
|
4334
|
+
// L1 -> L2 compaction. Old files will be picked even if their priority is
|
|
4335
|
+
// lower without boosting.
|
|
4336
|
+
env_->MockSleepForSeconds(8 * 60 * 60);
|
|
4337
|
+
for (int i = 0; i < 2; i++) {
|
|
4338
|
+
for (int j = 0; j < kNumKeysPerFile; ++j) {
|
|
4339
|
+
ASSERT_OK(Put(Key(kNumKeysPerFile * 2 + 2 * j + i),
|
|
4340
|
+
rnd.RandomString(kValueSize * 2)));
|
|
4341
|
+
}
|
|
4342
|
+
ASSERT_OK(Flush());
|
|
4343
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4344
|
+
}
|
|
4345
|
+
ASSERT_EQ("0,1,2", FilesPerLevel());
|
|
4346
|
+
|
|
4347
|
+
ASSERT_GT(SizeAtLevel(1), kNumKeysPerFile * 4 * kValueSize);
|
|
4348
|
+
}
|
|
4349
|
+
|
|
4242
4350
|
TEST_F(DBCompactionTest, LevelPeriodicCompactionWithCompactionFilters) {
|
|
4243
4351
|
class TestCompactionFilter : public CompactionFilter {
|
|
4244
4352
|
const char* Name() const override { return "TestCompactionFilter"; }
|
|
@@ -4631,6 +4739,98 @@ TEST_F(DBCompactionTest, CompactionStatsTest) {
|
|
|
4631
4739
|
VerifyCompactionStats(*cfd, *collector);
|
|
4632
4740
|
}
|
|
4633
4741
|
|
|
4742
|
+
TEST_F(DBCompactionTest, SubcompactionEvent) {
|
|
4743
|
+
class SubCompactionEventListener : public EventListener {
|
|
4744
|
+
public:
|
|
4745
|
+
void OnCompactionBegin(DB* /*db*/, const CompactionJobInfo& ci) override {
|
|
4746
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4747
|
+
ASSERT_EQ(running_compactions_.find(ci.job_id),
|
|
4748
|
+
running_compactions_.end());
|
|
4749
|
+
running_compactions_.emplace(ci.job_id, std::unordered_set<int>());
|
|
4750
|
+
}
|
|
4751
|
+
|
|
4752
|
+
void OnCompactionCompleted(DB* /*db*/,
|
|
4753
|
+
const CompactionJobInfo& ci) override {
|
|
4754
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4755
|
+
auto it = running_compactions_.find(ci.job_id);
|
|
4756
|
+
ASSERT_NE(it, running_compactions_.end());
|
|
4757
|
+
ASSERT_EQ(it->second.size(), 0);
|
|
4758
|
+
running_compactions_.erase(it);
|
|
4759
|
+
}
|
|
4760
|
+
|
|
4761
|
+
void OnSubcompactionBegin(const SubcompactionJobInfo& si) override {
|
|
4762
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4763
|
+
auto it = running_compactions_.find(si.job_id);
|
|
4764
|
+
ASSERT_NE(it, running_compactions_.end());
|
|
4765
|
+
auto r = it->second.insert(si.subcompaction_job_id);
|
|
4766
|
+
ASSERT_TRUE(r.second); // each subcompaction_job_id should be different
|
|
4767
|
+
total_subcompaction_cnt_++;
|
|
4768
|
+
}
|
|
4769
|
+
|
|
4770
|
+
void OnSubcompactionCompleted(const SubcompactionJobInfo& si) override {
|
|
4771
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4772
|
+
auto it = running_compactions_.find(si.job_id);
|
|
4773
|
+
ASSERT_NE(it, running_compactions_.end());
|
|
4774
|
+
auto r = it->second.erase(si.subcompaction_job_id);
|
|
4775
|
+
ASSERT_EQ(r, 1);
|
|
4776
|
+
}
|
|
4777
|
+
|
|
4778
|
+
size_t GetRunningCompactionCount() {
|
|
4779
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4780
|
+
return running_compactions_.size();
|
|
4781
|
+
}
|
|
4782
|
+
|
|
4783
|
+
size_t GetTotalSubcompactionCount() {
|
|
4784
|
+
InstrumentedMutexLock l(&mutex_);
|
|
4785
|
+
return total_subcompaction_cnt_;
|
|
4786
|
+
}
|
|
4787
|
+
|
|
4788
|
+
private:
|
|
4789
|
+
InstrumentedMutex mutex_;
|
|
4790
|
+
std::unordered_map<int, std::unordered_set<int>> running_compactions_;
|
|
4791
|
+
size_t total_subcompaction_cnt_ = 0;
|
|
4792
|
+
};
|
|
4793
|
+
|
|
4794
|
+
Options options = CurrentOptions();
|
|
4795
|
+
options.target_file_size_base = 1024;
|
|
4796
|
+
options.level0_file_num_compaction_trigger = 10;
|
|
4797
|
+
auto* listener = new SubCompactionEventListener();
|
|
4798
|
+
options.listeners.emplace_back(listener);
|
|
4799
|
+
|
|
4800
|
+
DestroyAndReopen(options);
|
|
4801
|
+
|
|
4802
|
+
// generate 4 files @ L2
|
|
4803
|
+
for (int i = 0; i < 4; i++) {
|
|
4804
|
+
for (int j = 0; j < 10; j++) {
|
|
4805
|
+
int key_id = i * 10 + j;
|
|
4806
|
+
ASSERT_OK(Put(Key(key_id), "value" + ToString(key_id)));
|
|
4807
|
+
}
|
|
4808
|
+
ASSERT_OK(Flush());
|
|
4809
|
+
}
|
|
4810
|
+
MoveFilesToLevel(2);
|
|
4811
|
+
|
|
4812
|
+
// generate 2 files @ L1 which overlaps with L2 files
|
|
4813
|
+
for (int i = 0; i < 2; i++) {
|
|
4814
|
+
for (int j = 0; j < 10; j++) {
|
|
4815
|
+
int key_id = i * 20 + j * 2;
|
|
4816
|
+
ASSERT_OK(Put(Key(key_id), "value" + ToString(key_id)));
|
|
4817
|
+
}
|
|
4818
|
+
ASSERT_OK(Flush());
|
|
4819
|
+
}
|
|
4820
|
+
MoveFilesToLevel(1);
|
|
4821
|
+
ASSERT_EQ(FilesPerLevel(), "0,2,4");
|
|
4822
|
+
|
|
4823
|
+
CompactRangeOptions comp_opts;
|
|
4824
|
+
comp_opts.max_subcompactions = 4;
|
|
4825
|
+
Status s = dbfull()->CompactRange(comp_opts, nullptr, nullptr);
|
|
4826
|
+
ASSERT_OK(s);
|
|
4827
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4828
|
+
// make sure there's no running compaction
|
|
4829
|
+
ASSERT_EQ(listener->GetRunningCompactionCount(), 0);
|
|
4830
|
+
// and sub compaction is triggered
|
|
4831
|
+
ASSERT_GT(listener->GetTotalSubcompactionCount(), 0);
|
|
4832
|
+
}
|
|
4833
|
+
|
|
4634
4834
|
TEST_F(DBCompactionTest, CompactFilesOutputRangeConflict) {
|
|
4635
4835
|
// LSM setup:
|
|
4636
4836
|
// L1: [ba bz]
|
|
@@ -4755,7 +4955,8 @@ TEST_F(DBCompactionTest, CompactionLimiter) {
|
|
|
4755
4955
|
options.level0_slowdown_writes_trigger = 64;
|
|
4756
4956
|
options.level0_stop_writes_trigger = 64;
|
|
4757
4957
|
options.max_background_jobs = kMaxBackgroundThreads; // Enough threads
|
|
4758
|
-
options.memtable_factory.reset(
|
|
4958
|
+
options.memtable_factory.reset(
|
|
4959
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
4759
4960
|
options.max_write_buffer_number = 10; // Enough memtables
|
|
4760
4961
|
DestroyAndReopen(options);
|
|
4761
4962
|
|
|
@@ -4915,7 +5116,7 @@ TEST_P(DBCompactionDirectIOTest, DirectIO) {
|
|
|
4915
5116
|
options.create_if_missing = true;
|
|
4916
5117
|
options.disable_auto_compactions = true;
|
|
4917
5118
|
options.use_direct_io_for_flush_and_compaction = GetParam();
|
|
4918
|
-
options.env =
|
|
5119
|
+
options.env = MockEnv::Create(Env::Default());
|
|
4919
5120
|
Reopen(options);
|
|
4920
5121
|
bool readahead = false;
|
|
4921
5122
|
SyncPoint::GetInstance()->SetCallBack(
|
|
@@ -4948,7 +5149,7 @@ class CompactionPriTest : public DBTestBase,
|
|
|
4948
5149
|
public testing::WithParamInterface<uint32_t> {
|
|
4949
5150
|
public:
|
|
4950
5151
|
CompactionPriTest()
|
|
4951
|
-
: DBTestBase("
|
|
5152
|
+
: DBTestBase("compaction_pri_test", /*env_do_fsync=*/true) {
|
|
4952
5153
|
compaction_pri_ = GetParam();
|
|
4953
5154
|
}
|
|
4954
5155
|
|
|
@@ -5131,6 +5332,97 @@ TEST_F(DBCompactionTest, ManualCompactionBottomLevelOptimized) {
|
|
|
5131
5332
|
ASSERT_EQ(num, 0);
|
|
5132
5333
|
}
|
|
5133
5334
|
|
|
5335
|
+
TEST_F(DBCompactionTest, ManualCompactionMax) {
|
|
5336
|
+
uint64_t l1_avg_size = 0, l2_avg_size = 0;
|
|
5337
|
+
auto generate_sst_func = [&]() {
|
|
5338
|
+
Random rnd(301);
|
|
5339
|
+
for (auto i = 0; i < 100; i++) {
|
|
5340
|
+
for (auto j = 0; j < 10; j++) {
|
|
5341
|
+
ASSERT_OK(Put(Key(i * 10 + j), rnd.RandomString(1024)));
|
|
5342
|
+
}
|
|
5343
|
+
ASSERT_OK(Flush());
|
|
5344
|
+
}
|
|
5345
|
+
MoveFilesToLevel(2);
|
|
5346
|
+
|
|
5347
|
+
for (auto i = 0; i < 10; i++) {
|
|
5348
|
+
for (auto j = 0; j < 10; j++) {
|
|
5349
|
+
ASSERT_OK(Put(Key(i * 100 + j * 10), rnd.RandomString(1024)));
|
|
5350
|
+
}
|
|
5351
|
+
ASSERT_OK(Flush());
|
|
5352
|
+
}
|
|
5353
|
+
MoveFilesToLevel(1);
|
|
5354
|
+
|
|
5355
|
+
std::vector<std::vector<FileMetaData>> level_to_files;
|
|
5356
|
+
dbfull()->TEST_GetFilesMetaData(dbfull()->DefaultColumnFamily(),
|
|
5357
|
+
&level_to_files);
|
|
5358
|
+
|
|
5359
|
+
uint64_t total = 0;
|
|
5360
|
+
for (const auto& file : level_to_files[1]) {
|
|
5361
|
+
total += file.compensated_file_size;
|
|
5362
|
+
}
|
|
5363
|
+
l1_avg_size = total / level_to_files[1].size();
|
|
5364
|
+
|
|
5365
|
+
total = 0;
|
|
5366
|
+
for (const auto& file : level_to_files[2]) {
|
|
5367
|
+
total += file.compensated_file_size;
|
|
5368
|
+
}
|
|
5369
|
+
l2_avg_size = total / level_to_files[2].size();
|
|
5370
|
+
};
|
|
5371
|
+
|
|
5372
|
+
std::atomic_int num_compactions(0);
|
|
5373
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
5374
|
+
"DBImpl::BGWorkCompaction", [&](void* /*arg*/) { ++num_compactions; });
|
|
5375
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
5376
|
+
|
|
5377
|
+
Options opts = CurrentOptions();
|
|
5378
|
+
opts.disable_auto_compactions = true;
|
|
5379
|
+
|
|
5380
|
+
// with default setting (1.6G by default), it should cover all files in 1
|
|
5381
|
+
// compaction
|
|
5382
|
+
DestroyAndReopen(opts);
|
|
5383
|
+
generate_sst_func();
|
|
5384
|
+
num_compactions.store(0);
|
|
5385
|
+
CompactRangeOptions cro;
|
|
5386
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
5387
|
+
ASSERT_TRUE(num_compactions.load() == 1);
|
|
5388
|
+
|
|
5389
|
+
// split the compaction to 5
|
|
5390
|
+
int num_split = 5;
|
|
5391
|
+
DestroyAndReopen(opts);
|
|
5392
|
+
generate_sst_func();
|
|
5393
|
+
uint64_t total_size = (l1_avg_size * 10) + (l2_avg_size * 100);
|
|
5394
|
+
opts.max_compaction_bytes = total_size / num_split;
|
|
5395
|
+
opts.target_file_size_base = total_size / num_split;
|
|
5396
|
+
Reopen(opts);
|
|
5397
|
+
num_compactions.store(0);
|
|
5398
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
5399
|
+
ASSERT_TRUE(num_compactions.load() == num_split);
|
|
5400
|
+
|
|
5401
|
+
// very small max_compaction_bytes, it should still move forward
|
|
5402
|
+
opts.max_compaction_bytes = l1_avg_size / 2;
|
|
5403
|
+
opts.target_file_size_base = l1_avg_size / 2;
|
|
5404
|
+
DestroyAndReopen(opts);
|
|
5405
|
+
generate_sst_func();
|
|
5406
|
+
num_compactions.store(0);
|
|
5407
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
5408
|
+
ASSERT_TRUE(num_compactions.load() > 10);
|
|
5409
|
+
|
|
5410
|
+
// dynamically set the option
|
|
5411
|
+
num_split = 2;
|
|
5412
|
+
opts.max_compaction_bytes = 0;
|
|
5413
|
+
DestroyAndReopen(opts);
|
|
5414
|
+
generate_sst_func();
|
|
5415
|
+
total_size = (l1_avg_size * 10) + (l2_avg_size * 100);
|
|
5416
|
+
Status s = db_->SetOptions(
|
|
5417
|
+
{{"max_compaction_bytes", std::to_string(total_size / num_split)},
|
|
5418
|
+
{"target_file_size_base", std::to_string(total_size / num_split)}});
|
|
5419
|
+
ASSERT_OK(s);
|
|
5420
|
+
|
|
5421
|
+
num_compactions.store(0);
|
|
5422
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
5423
|
+
ASSERT_TRUE(num_compactions.load() == num_split);
|
|
5424
|
+
}
|
|
5425
|
+
|
|
5134
5426
|
TEST_F(DBCompactionTest, CompactionDuringShutdown) {
|
|
5135
5427
|
Options opts = CurrentOptions();
|
|
5136
5428
|
opts.level0_file_num_compaction_trigger = 2;
|
|
@@ -5190,7 +5482,8 @@ TEST_P(DBCompactionTestWithParam, FixFileIngestionCompactionDeadlock) {
|
|
|
5190
5482
|
options.level0_file_num_compaction_trigger =
|
|
5191
5483
|
options.level0_stop_writes_trigger;
|
|
5192
5484
|
options.max_subcompactions = max_subcompactions_;
|
|
5193
|
-
options.memtable_factory.reset(
|
|
5485
|
+
options.memtable_factory.reset(
|
|
5486
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
5194
5487
|
DestroyAndReopen(options);
|
|
5195
5488
|
Random rnd(301);
|
|
5196
5489
|
|
|
@@ -5716,7 +6009,7 @@ TEST_F(DBCompactionTest, ChangeLevelCompactRangeConflictsWithManual) {
|
|
|
5716
6009
|
// `Status::Incomplete`.
|
|
5717
6010
|
Options options = CurrentOptions();
|
|
5718
6011
|
options.memtable_factory.reset(
|
|
5719
|
-
|
|
6012
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
5720
6013
|
options.level0_file_num_compaction_trigger = 2;
|
|
5721
6014
|
options.num_levels = 3;
|
|
5722
6015
|
Reopen(options);
|
|
@@ -5804,7 +6097,7 @@ TEST_F(DBCompactionTest, ChangeLevelErrorPathTest) {
|
|
|
5804
6097
|
// succeeds
|
|
5805
6098
|
Options options = CurrentOptions();
|
|
5806
6099
|
options.memtable_factory.reset(
|
|
5807
|
-
|
|
6100
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
5808
6101
|
options.level0_file_num_compaction_trigger = 2;
|
|
5809
6102
|
options.num_levels = 3;
|
|
5810
6103
|
Reopen(options);
|
|
@@ -5910,7 +6203,7 @@ TEST_F(DBCompactionTest, CompactionWithBlob) {
|
|
|
5910
6203
|
ASSERT_EQ(Get(first_key), third_value);
|
|
5911
6204
|
ASSERT_EQ(Get(second_key), third_value);
|
|
5912
6205
|
|
|
5913
|
-
VersionSet* const versions = dbfull()->
|
|
6206
|
+
VersionSet* const versions = dbfull()->GetVersionSet();
|
|
5914
6207
|
assert(versions);
|
|
5915
6208
|
|
|
5916
6209
|
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
@@ -5931,7 +6224,7 @@ TEST_F(DBCompactionTest, CompactionWithBlob) {
|
|
|
5931
6224
|
const auto& blob_files = storage_info->GetBlobFiles();
|
|
5932
6225
|
ASSERT_EQ(blob_files.size(), 1);
|
|
5933
6226
|
|
|
5934
|
-
const auto& blob_file = blob_files.
|
|
6227
|
+
const auto& blob_file = blob_files.front();
|
|
5935
6228
|
ASSERT_NE(blob_file, nullptr);
|
|
5936
6229
|
|
|
5937
6230
|
ASSERT_EQ(table_file->smallest.user_key(), first_key);
|
|
@@ -5944,24 +6237,22 @@ TEST_F(DBCompactionTest, CompactionWithBlob) {
|
|
|
5944
6237
|
const InternalStats* const internal_stats = cfd->internal_stats();
|
|
5945
6238
|
ASSERT_NE(internal_stats, nullptr);
|
|
5946
6239
|
|
|
5947
|
-
const uint64_t expected_bytes =
|
|
5948
|
-
table_file->fd.GetFileSize() + blob_file->GetTotalBlobBytes();
|
|
5949
|
-
|
|
5950
6240
|
const auto& compaction_stats = internal_stats->TEST_GetCompactionStats();
|
|
5951
6241
|
ASSERT_GE(compaction_stats.size(), 2);
|
|
5952
|
-
ASSERT_EQ(compaction_stats[1].
|
|
5953
|
-
ASSERT_EQ(compaction_stats[1].
|
|
6242
|
+
ASSERT_EQ(compaction_stats[1].bytes_read_blob, 0);
|
|
6243
|
+
ASSERT_EQ(compaction_stats[1].bytes_written, table_file->fd.GetFileSize());
|
|
6244
|
+
ASSERT_EQ(compaction_stats[1].bytes_written_blob,
|
|
6245
|
+
blob_file->GetTotalBlobBytes());
|
|
6246
|
+
ASSERT_EQ(compaction_stats[1].num_output_files, 1);
|
|
6247
|
+
ASSERT_EQ(compaction_stats[1].num_output_files_blob, 1);
|
|
5954
6248
|
}
|
|
5955
6249
|
|
|
5956
6250
|
class DBCompactionTestBlobError
|
|
5957
6251
|
: public DBCompactionTest,
|
|
5958
6252
|
public testing::WithParamInterface<std::string> {
|
|
5959
6253
|
public:
|
|
5960
|
-
DBCompactionTestBlobError()
|
|
5961
|
-
: fault_injection_env_(env_), sync_point_(GetParam()) {}
|
|
5962
|
-
~DBCompactionTestBlobError() { Close(); }
|
|
6254
|
+
DBCompactionTestBlobError() : sync_point_(GetParam()) {}
|
|
5963
6255
|
|
|
5964
|
-
FaultInjectionTestEnv fault_injection_env_;
|
|
5965
6256
|
std::string sync_point_;
|
|
5966
6257
|
};
|
|
5967
6258
|
|
|
@@ -5996,13 +6287,14 @@ TEST_P(DBCompactionTestBlobError, CompactionError) {
|
|
|
5996
6287
|
ASSERT_OK(Flush());
|
|
5997
6288
|
|
|
5998
6289
|
options.enable_blob_files = true;
|
|
5999
|
-
options.env = &fault_injection_env_;
|
|
6000
6290
|
|
|
6001
6291
|
Reopen(options);
|
|
6002
6292
|
|
|
6003
|
-
SyncPoint::GetInstance()->SetCallBack(sync_point_, [this](void*
|
|
6004
|
-
|
|
6005
|
-
|
|
6293
|
+
SyncPoint::GetInstance()->SetCallBack(sync_point_, [this](void* arg) {
|
|
6294
|
+
Status* const s = static_cast<Status*>(arg);
|
|
6295
|
+
assert(s);
|
|
6296
|
+
|
|
6297
|
+
(*s) = Status::IOError(sync_point_);
|
|
6006
6298
|
});
|
|
6007
6299
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
6008
6300
|
|
|
@@ -6014,7 +6306,7 @@ TEST_P(DBCompactionTestBlobError, CompactionError) {
|
|
|
6014
6306
|
SyncPoint::GetInstance()->DisableProcessing();
|
|
6015
6307
|
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
6016
6308
|
|
|
6017
|
-
VersionSet* const versions = dbfull()->
|
|
6309
|
+
VersionSet* const versions = dbfull()->GetVersionSet();
|
|
6018
6310
|
assert(versions);
|
|
6019
6311
|
|
|
6020
6312
|
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
@@ -6039,12 +6331,18 @@ TEST_P(DBCompactionTestBlobError, CompactionError) {
|
|
|
6039
6331
|
ASSERT_GE(compaction_stats.size(), 2);
|
|
6040
6332
|
|
|
6041
6333
|
if (sync_point_ == "BlobFileBuilder::WriteBlobToFile:AddRecord") {
|
|
6334
|
+
ASSERT_EQ(compaction_stats[1].bytes_read_blob, 0);
|
|
6042
6335
|
ASSERT_EQ(compaction_stats[1].bytes_written, 0);
|
|
6336
|
+
ASSERT_EQ(compaction_stats[1].bytes_written_blob, 0);
|
|
6043
6337
|
ASSERT_EQ(compaction_stats[1].num_output_files, 0);
|
|
6338
|
+
ASSERT_EQ(compaction_stats[1].num_output_files_blob, 0);
|
|
6044
6339
|
} else {
|
|
6045
6340
|
// SST file writing succeeded; blob file writing failed (during Finish)
|
|
6341
|
+
ASSERT_EQ(compaction_stats[1].bytes_read_blob, 0);
|
|
6046
6342
|
ASSERT_GT(compaction_stats[1].bytes_written, 0);
|
|
6343
|
+
ASSERT_EQ(compaction_stats[1].bytes_written_blob, 0);
|
|
6047
6344
|
ASSERT_EQ(compaction_stats[1].num_output_files, 1);
|
|
6345
|
+
ASSERT_EQ(compaction_stats[1].num_output_files_blob, 0);
|
|
6048
6346
|
}
|
|
6049
6347
|
}
|
|
6050
6348
|
|
|
@@ -6129,6 +6427,36 @@ TEST_P(DBCompactionTestBlobGC, CompactionWithBlobGC) {
|
|
|
6129
6427
|
for (size_t i = cutoff_index; i < original_blob_files.size(); ++i) {
|
|
6130
6428
|
ASSERT_EQ(new_blob_files[i - cutoff_index], original_blob_files[i]);
|
|
6131
6429
|
}
|
|
6430
|
+
|
|
6431
|
+
VersionSet* const versions = dbfull()->GetVersionSet();
|
|
6432
|
+
assert(versions);
|
|
6433
|
+
assert(versions->GetColumnFamilySet());
|
|
6434
|
+
|
|
6435
|
+
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
6436
|
+
assert(cfd);
|
|
6437
|
+
|
|
6438
|
+
const InternalStats* const internal_stats = cfd->internal_stats();
|
|
6439
|
+
assert(internal_stats);
|
|
6440
|
+
|
|
6441
|
+
const auto& compaction_stats = internal_stats->TEST_GetCompactionStats();
|
|
6442
|
+
ASSERT_GE(compaction_stats.size(), 2);
|
|
6443
|
+
|
|
6444
|
+
if (blob_gc_age_cutoff_ > 0.0) {
|
|
6445
|
+
ASSERT_GT(compaction_stats[1].bytes_read_blob, 0);
|
|
6446
|
+
|
|
6447
|
+
if (updated_enable_blob_files_) {
|
|
6448
|
+
// GC relocated some blobs to new blob files
|
|
6449
|
+
ASSERT_GT(compaction_stats[1].bytes_written_blob, 0);
|
|
6450
|
+
ASSERT_EQ(compaction_stats[1].bytes_read_blob,
|
|
6451
|
+
compaction_stats[1].bytes_written_blob);
|
|
6452
|
+
} else {
|
|
6453
|
+
// GC moved some blobs back to the LSM, no new blob files
|
|
6454
|
+
ASSERT_EQ(compaction_stats[1].bytes_written_blob, 0);
|
|
6455
|
+
}
|
|
6456
|
+
} else {
|
|
6457
|
+
ASSERT_EQ(compaction_stats[1].bytes_read_blob, 0);
|
|
6458
|
+
ASSERT_EQ(compaction_stats[1].bytes_written_blob, 0);
|
|
6459
|
+
}
|
|
6132
6460
|
}
|
|
6133
6461
|
|
|
6134
6462
|
TEST_F(DBCompactionTest, CompactionWithBlobGCError_CorruptIndex) {
|
|
@@ -6156,20 +6484,29 @@ TEST_F(DBCompactionTest, CompactionWithBlobGCError_CorruptIndex) {
|
|
|
6156
6484
|
ASSERT_OK(Put(third_key, third_value));
|
|
6157
6485
|
|
|
6158
6486
|
constexpr char fourth_key[] = "fourth_key";
|
|
6159
|
-
constexpr char
|
|
6160
|
-
|
|
6161
|
-
WriteBatch batch;
|
|
6162
|
-
ASSERT_OK(WriteBatchInternal::PutBlobIndex(&batch, 0, fourth_key,
|
|
6163
|
-
corrupt_blob_index));
|
|
6164
|
-
ASSERT_OK(db_->Write(WriteOptions(), &batch));
|
|
6487
|
+
constexpr char fourth_value[] = "fourth_value";
|
|
6488
|
+
ASSERT_OK(Put(fourth_key, fourth_value));
|
|
6165
6489
|
|
|
6166
6490
|
ASSERT_OK(Flush());
|
|
6167
6491
|
|
|
6168
|
-
|
|
6169
|
-
|
|
6492
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
6493
|
+
"CompactionIterator::GarbageCollectBlobIfNeeded::TamperWithBlobIndex",
|
|
6494
|
+
[](void* arg) {
|
|
6495
|
+
Slice* const blob_index = static_cast<Slice*>(arg);
|
|
6496
|
+
assert(blob_index);
|
|
6497
|
+
assert(!blob_index->empty());
|
|
6498
|
+
blob_index->remove_prefix(1);
|
|
6499
|
+
});
|
|
6500
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
6501
|
+
|
|
6502
|
+
constexpr Slice* begin = nullptr;
|
|
6503
|
+
constexpr Slice* end = nullptr;
|
|
6170
6504
|
|
|
6171
6505
|
ASSERT_TRUE(
|
|
6172
6506
|
db_->CompactRange(CompactRangeOptions(), begin, end).IsCorruption());
|
|
6507
|
+
|
|
6508
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6509
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
6173
6510
|
}
|
|
6174
6511
|
|
|
6175
6512
|
TEST_F(DBCompactionTest, CompactionWithBlobGCError_InlinedTTLIndex) {
|
|
@@ -6275,6 +6612,851 @@ TEST_F(DBCompactionTest, CompactionWithBlobGCError_IndexWithInvalidFileNumber) {
|
|
|
6275
6612
|
db_->CompactRange(CompactRangeOptions(), begin, end).IsCorruption());
|
|
6276
6613
|
}
|
|
6277
6614
|
|
|
6615
|
+
TEST_F(DBCompactionTest, CompactionWithChecksumHandoff1) {
|
|
6616
|
+
if (mem_env_ || encrypted_env_) {
|
|
6617
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
6618
|
+
return;
|
|
6619
|
+
}
|
|
6620
|
+
std::shared_ptr<FaultInjectionTestFS> fault_fs(
|
|
6621
|
+
new FaultInjectionTestFS(FileSystem::Default()));
|
|
6622
|
+
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
6623
|
+
Options options = CurrentOptions();
|
|
6624
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
6625
|
+
options.num_levels = 3;
|
|
6626
|
+
options.env = fault_fs_env.get();
|
|
6627
|
+
options.create_if_missing = true;
|
|
6628
|
+
options.checksum_handoff_file_types.Add(FileType::kTableFile);
|
|
6629
|
+
Status s;
|
|
6630
|
+
Reopen(options);
|
|
6631
|
+
|
|
6632
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6633
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6634
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6635
|
+
s = Flush();
|
|
6636
|
+
ASSERT_EQ(s, Status::OK());
|
|
6637
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6638
|
+
s = Flush();
|
|
6639
|
+
ASSERT_EQ(s, Status::OK());
|
|
6640
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6641
|
+
ASSERT_EQ(s, Status::OK());
|
|
6642
|
+
Destroy(options);
|
|
6643
|
+
Reopen(options);
|
|
6644
|
+
|
|
6645
|
+
// The hash does not match, compaction write fails
|
|
6646
|
+
// fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
|
|
6647
|
+
// Since the file system returns IOStatus::Corruption, it is an
|
|
6648
|
+
// unrecoverable error.
|
|
6649
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6650
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6651
|
+
s = Flush();
|
|
6652
|
+
ASSERT_EQ(s, Status::OK());
|
|
6653
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6654
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6655
|
+
"BackgroundCallCompaction:0"}});
|
|
6656
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6657
|
+
"BackgroundCallCompaction:0", [&](void*) {
|
|
6658
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
|
|
6659
|
+
});
|
|
6660
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6661
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6662
|
+
s = Flush();
|
|
6663
|
+
ASSERT_EQ(s, Status::OK());
|
|
6664
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6665
|
+
ASSERT_EQ(s.severity(),
|
|
6666
|
+
ROCKSDB_NAMESPACE::Status::Severity::kUnrecoverableError);
|
|
6667
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6668
|
+
Destroy(options);
|
|
6669
|
+
Reopen(options);
|
|
6670
|
+
|
|
6671
|
+
// The file system does not support checksum handoff. The check
|
|
6672
|
+
// will be ignored.
|
|
6673
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kNoChecksum);
|
|
6674
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6675
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6676
|
+
s = Flush();
|
|
6677
|
+
ASSERT_EQ(s, Status::OK());
|
|
6678
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6679
|
+
s = Flush();
|
|
6680
|
+
ASSERT_EQ(s, Status::OK());
|
|
6681
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6682
|
+
ASSERT_EQ(s, Status::OK());
|
|
6683
|
+
|
|
6684
|
+
// Each write will be similated as corrupted.
|
|
6685
|
+
// Since the file system returns IOStatus::Corruption, it is an
|
|
6686
|
+
// unrecoverable error.
|
|
6687
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6688
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6689
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6690
|
+
s = Flush();
|
|
6691
|
+
ASSERT_EQ(s, Status::OK());
|
|
6692
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6693
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6694
|
+
"BackgroundCallCompaction:0"}});
|
|
6695
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6696
|
+
"BackgroundCallCompaction:0",
|
|
6697
|
+
[&](void*) { fault_fs->IngestDataCorruptionBeforeWrite(); });
|
|
6698
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6699
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6700
|
+
s = Flush();
|
|
6701
|
+
ASSERT_EQ(s, Status::OK());
|
|
6702
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6703
|
+
ASSERT_EQ(s.severity(),
|
|
6704
|
+
ROCKSDB_NAMESPACE::Status::Severity::kUnrecoverableError);
|
|
6705
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6706
|
+
|
|
6707
|
+
Destroy(options);
|
|
6708
|
+
}
|
|
6709
|
+
|
|
6710
|
+
TEST_F(DBCompactionTest, CompactionWithChecksumHandoff2) {
|
|
6711
|
+
if (mem_env_ || encrypted_env_) {
|
|
6712
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
6713
|
+
return;
|
|
6714
|
+
}
|
|
6715
|
+
std::shared_ptr<FaultInjectionTestFS> fault_fs(
|
|
6716
|
+
new FaultInjectionTestFS(FileSystem::Default()));
|
|
6717
|
+
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
6718
|
+
Options options = CurrentOptions();
|
|
6719
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
6720
|
+
options.num_levels = 3;
|
|
6721
|
+
options.env = fault_fs_env.get();
|
|
6722
|
+
options.create_if_missing = true;
|
|
6723
|
+
Status s;
|
|
6724
|
+
Reopen(options);
|
|
6725
|
+
|
|
6726
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6727
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6728
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6729
|
+
s = Flush();
|
|
6730
|
+
ASSERT_EQ(s, Status::OK());
|
|
6731
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6732
|
+
s = Flush();
|
|
6733
|
+
ASSERT_EQ(s, Status::OK());
|
|
6734
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6735
|
+
ASSERT_EQ(s, Status::OK());
|
|
6736
|
+
Destroy(options);
|
|
6737
|
+
Reopen(options);
|
|
6738
|
+
|
|
6739
|
+
// options is not set, the checksum handoff will not be triggered
|
|
6740
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6741
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6742
|
+
s = Flush();
|
|
6743
|
+
ASSERT_EQ(s, Status::OK());
|
|
6744
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6745
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6746
|
+
"BackgroundCallCompaction:0"}});
|
|
6747
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6748
|
+
"BackgroundCallCompaction:0", [&](void*) {
|
|
6749
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
|
|
6750
|
+
});
|
|
6751
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6752
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6753
|
+
s = Flush();
|
|
6754
|
+
ASSERT_EQ(s, Status::OK());
|
|
6755
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6756
|
+
ASSERT_EQ(s, Status::OK());
|
|
6757
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6758
|
+
Destroy(options);
|
|
6759
|
+
Reopen(options);
|
|
6760
|
+
|
|
6761
|
+
// The file system does not support checksum handoff. The check
|
|
6762
|
+
// will be ignored.
|
|
6763
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kNoChecksum);
|
|
6764
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6765
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6766
|
+
s = Flush();
|
|
6767
|
+
ASSERT_EQ(s, Status::OK());
|
|
6768
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6769
|
+
s = Flush();
|
|
6770
|
+
ASSERT_EQ(s, Status::OK());
|
|
6771
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6772
|
+
ASSERT_EQ(s, Status::OK());
|
|
6773
|
+
|
|
6774
|
+
// options is not set, the checksum handoff will not be triggered
|
|
6775
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6776
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6777
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6778
|
+
s = Flush();
|
|
6779
|
+
ASSERT_EQ(s, Status::OK());
|
|
6780
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6781
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6782
|
+
"BackgroundCallCompaction:0"}});
|
|
6783
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6784
|
+
"BackgroundCallCompaction:0",
|
|
6785
|
+
[&](void*) { fault_fs->IngestDataCorruptionBeforeWrite(); });
|
|
6786
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6787
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6788
|
+
s = Flush();
|
|
6789
|
+
ASSERT_EQ(s, Status::OK());
|
|
6790
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6791
|
+
ASSERT_EQ(s, Status::OK());
|
|
6792
|
+
|
|
6793
|
+
Destroy(options);
|
|
6794
|
+
}
|
|
6795
|
+
|
|
6796
|
+
TEST_F(DBCompactionTest, CompactionWithChecksumHandoffManifest1) {
|
|
6797
|
+
if (mem_env_ || encrypted_env_) {
|
|
6798
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
6799
|
+
return;
|
|
6800
|
+
}
|
|
6801
|
+
std::shared_ptr<FaultInjectionTestFS> fault_fs(
|
|
6802
|
+
new FaultInjectionTestFS(FileSystem::Default()));
|
|
6803
|
+
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
6804
|
+
Options options = CurrentOptions();
|
|
6805
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
6806
|
+
options.num_levels = 3;
|
|
6807
|
+
options.env = fault_fs_env.get();
|
|
6808
|
+
options.create_if_missing = true;
|
|
6809
|
+
options.checksum_handoff_file_types.Add(FileType::kDescriptorFile);
|
|
6810
|
+
Status s;
|
|
6811
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6812
|
+
Reopen(options);
|
|
6813
|
+
|
|
6814
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6815
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6816
|
+
s = Flush();
|
|
6817
|
+
ASSERT_EQ(s, Status::OK());
|
|
6818
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6819
|
+
s = Flush();
|
|
6820
|
+
ASSERT_EQ(s, Status::OK());
|
|
6821
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6822
|
+
ASSERT_EQ(s, Status::OK());
|
|
6823
|
+
Destroy(options);
|
|
6824
|
+
Reopen(options);
|
|
6825
|
+
|
|
6826
|
+
// The hash does not match, compaction write fails
|
|
6827
|
+
// fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
|
|
6828
|
+
// Since the file system returns IOStatus::Corruption, it is mapped to
|
|
6829
|
+
// kFatalError error.
|
|
6830
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6831
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6832
|
+
s = Flush();
|
|
6833
|
+
ASSERT_EQ(s, Status::OK());
|
|
6834
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6835
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6836
|
+
"BackgroundCallCompaction:0"}});
|
|
6837
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6838
|
+
"BackgroundCallCompaction:0", [&](void*) {
|
|
6839
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
|
|
6840
|
+
});
|
|
6841
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6842
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6843
|
+
s = Flush();
|
|
6844
|
+
ASSERT_EQ(s, Status::OK());
|
|
6845
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6846
|
+
ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kFatalError);
|
|
6847
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6848
|
+
Destroy(options);
|
|
6849
|
+
}
|
|
6850
|
+
|
|
6851
|
+
TEST_F(DBCompactionTest, CompactionWithChecksumHandoffManifest2) {
|
|
6852
|
+
if (mem_env_ || encrypted_env_) {
|
|
6853
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
6854
|
+
return;
|
|
6855
|
+
}
|
|
6856
|
+
std::shared_ptr<FaultInjectionTestFS> fault_fs(
|
|
6857
|
+
new FaultInjectionTestFS(FileSystem::Default()));
|
|
6858
|
+
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
6859
|
+
Options options = CurrentOptions();
|
|
6860
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
6861
|
+
options.num_levels = 3;
|
|
6862
|
+
options.env = fault_fs_env.get();
|
|
6863
|
+
options.create_if_missing = true;
|
|
6864
|
+
options.checksum_handoff_file_types.Add(FileType::kDescriptorFile);
|
|
6865
|
+
Status s;
|
|
6866
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kNoChecksum);
|
|
6867
|
+
Reopen(options);
|
|
6868
|
+
|
|
6869
|
+
// The file system does not support checksum handoff. The check
|
|
6870
|
+
// will be ignored.
|
|
6871
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6872
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6873
|
+
s = Flush();
|
|
6874
|
+
ASSERT_EQ(s, Status::OK());
|
|
6875
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6876
|
+
s = Flush();
|
|
6877
|
+
ASSERT_EQ(s, Status::OK());
|
|
6878
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6879
|
+
ASSERT_EQ(s, Status::OK());
|
|
6880
|
+
|
|
6881
|
+
// Each write will be similated as corrupted.
|
|
6882
|
+
// Since the file system returns IOStatus::Corruption, it is mapped to
|
|
6883
|
+
// kFatalError error.
|
|
6884
|
+
fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
|
|
6885
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6886
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6887
|
+
s = Flush();
|
|
6888
|
+
ASSERT_EQ(s, Status::OK());
|
|
6889
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
6890
|
+
{{"DBImpl::FlushMemTable:FlushMemTableFinished",
|
|
6891
|
+
"BackgroundCallCompaction:0"}});
|
|
6892
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6893
|
+
"BackgroundCallCompaction:0",
|
|
6894
|
+
[&](void*) { fault_fs->IngestDataCorruptionBeforeWrite(); });
|
|
6895
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6896
|
+
ASSERT_OK(Put(Key(1), "value3"));
|
|
6897
|
+
s = Flush();
|
|
6898
|
+
ASSERT_EQ(s, Status::OK());
|
|
6899
|
+
s = dbfull()->TEST_WaitForCompact();
|
|
6900
|
+
ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kFatalError);
|
|
6901
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
6902
|
+
|
|
6903
|
+
Destroy(options);
|
|
6904
|
+
}
|
|
6905
|
+
|
|
6906
|
+
TEST_F(DBCompactionTest, FIFOWarm) {
|
|
6907
|
+
Options options = CurrentOptions();
|
|
6908
|
+
options.compaction_style = kCompactionStyleFIFO;
|
|
6909
|
+
options.num_levels = 1;
|
|
6910
|
+
options.max_open_files = -1;
|
|
6911
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
6912
|
+
options.create_if_missing = true;
|
|
6913
|
+
CompactionOptionsFIFO fifo_options;
|
|
6914
|
+
fifo_options.age_for_warm = 1000;
|
|
6915
|
+
fifo_options.max_table_files_size = 100000000;
|
|
6916
|
+
options.compaction_options_fifo = fifo_options;
|
|
6917
|
+
env_->SetMockSleep();
|
|
6918
|
+
Reopen(options);
|
|
6919
|
+
|
|
6920
|
+
int total_warm = 0;
|
|
6921
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6922
|
+
"NewWritableFile::FileOptions.temperature", [&](void* arg) {
|
|
6923
|
+
Temperature temperature = *(static_cast<Temperature*>(arg));
|
|
6924
|
+
if (temperature == Temperature::kWarm) {
|
|
6925
|
+
total_warm++;
|
|
6926
|
+
}
|
|
6927
|
+
});
|
|
6928
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6929
|
+
|
|
6930
|
+
// The file system does not support checksum handoff. The check
|
|
6931
|
+
// will be ignored.
|
|
6932
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6933
|
+
env_->MockSleepForSeconds(800);
|
|
6934
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6935
|
+
ASSERT_OK(Flush());
|
|
6936
|
+
|
|
6937
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6938
|
+
env_->MockSleepForSeconds(800);
|
|
6939
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6940
|
+
ASSERT_OK(Flush());
|
|
6941
|
+
|
|
6942
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6943
|
+
env_->MockSleepForSeconds(800);
|
|
6944
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6945
|
+
ASSERT_OK(Flush());
|
|
6946
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6947
|
+
|
|
6948
|
+
ASSERT_OK(Put(Key(0), "value1"));
|
|
6949
|
+
env_->MockSleepForSeconds(800);
|
|
6950
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
6951
|
+
ASSERT_OK(Flush());
|
|
6952
|
+
|
|
6953
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6954
|
+
|
|
6955
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
6956
|
+
|
|
6957
|
+
ColumnFamilyMetaData metadata;
|
|
6958
|
+
db_->GetColumnFamilyMetaData(&metadata);
|
|
6959
|
+
ASSERT_EQ(4, metadata.file_count);
|
|
6960
|
+
ASSERT_EQ(Temperature::kUnknown, metadata.levels[0].files[0].temperature);
|
|
6961
|
+
ASSERT_EQ(Temperature::kUnknown, metadata.levels[0].files[1].temperature);
|
|
6962
|
+
ASSERT_EQ(Temperature::kWarm, metadata.levels[0].files[2].temperature);
|
|
6963
|
+
ASSERT_EQ(Temperature::kWarm, metadata.levels[0].files[3].temperature);
|
|
6964
|
+
ASSERT_EQ(2, total_warm);
|
|
6965
|
+
|
|
6966
|
+
Destroy(options);
|
|
6967
|
+
}
|
|
6968
|
+
|
|
6969
|
+
TEST_F(DBCompactionTest, DisableMultiManualCompaction) {
|
|
6970
|
+
const int kNumL0Files = 10;
|
|
6971
|
+
|
|
6972
|
+
Options options = CurrentOptions();
|
|
6973
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
6974
|
+
Reopen(options);
|
|
6975
|
+
|
|
6976
|
+
// Generate 2 levels of file to make sure the manual compaction is not skipped
|
|
6977
|
+
for (int i = 0; i < 10; i++) {
|
|
6978
|
+
ASSERT_OK(Put(Key(i), "value"));
|
|
6979
|
+
if (i % 2) {
|
|
6980
|
+
ASSERT_OK(Flush());
|
|
6981
|
+
}
|
|
6982
|
+
}
|
|
6983
|
+
MoveFilesToLevel(2);
|
|
6984
|
+
|
|
6985
|
+
for (int i = 0; i < 10; i++) {
|
|
6986
|
+
ASSERT_OK(Put(Key(i), "value"));
|
|
6987
|
+
if (i % 2) {
|
|
6988
|
+
ASSERT_OK(Flush());
|
|
6989
|
+
}
|
|
6990
|
+
}
|
|
6991
|
+
MoveFilesToLevel(1);
|
|
6992
|
+
|
|
6993
|
+
// Block compaction queue
|
|
6994
|
+
test::SleepingBackgroundTask sleeping_task_low;
|
|
6995
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
6996
|
+
Env::Priority::LOW);
|
|
6997
|
+
|
|
6998
|
+
port::Thread compact_thread1([&]() {
|
|
6999
|
+
CompactRangeOptions cro;
|
|
7000
|
+
cro.exclusive_manual_compaction = false;
|
|
7001
|
+
std::string begin_str = Key(0);
|
|
7002
|
+
std::string end_str = Key(3);
|
|
7003
|
+
Slice b = begin_str;
|
|
7004
|
+
Slice e = end_str;
|
|
7005
|
+
auto s = db_->CompactRange(cro, &b, &e);
|
|
7006
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7007
|
+
});
|
|
7008
|
+
|
|
7009
|
+
port::Thread compact_thread2([&]() {
|
|
7010
|
+
CompactRangeOptions cro;
|
|
7011
|
+
cro.exclusive_manual_compaction = false;
|
|
7012
|
+
std::string begin_str = Key(4);
|
|
7013
|
+
std::string end_str = Key(7);
|
|
7014
|
+
Slice b = begin_str;
|
|
7015
|
+
Slice e = end_str;
|
|
7016
|
+
auto s = db_->CompactRange(cro, &b, &e);
|
|
7017
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7018
|
+
});
|
|
7019
|
+
|
|
7020
|
+
// Disable manual compaction should cancel both manual compactions and both
|
|
7021
|
+
// compaction should return incomplete.
|
|
7022
|
+
db_->DisableManualCompaction();
|
|
7023
|
+
|
|
7024
|
+
compact_thread1.join();
|
|
7025
|
+
compact_thread2.join();
|
|
7026
|
+
|
|
7027
|
+
sleeping_task_low.WakeUp();
|
|
7028
|
+
sleeping_task_low.WaitUntilDone();
|
|
7029
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
|
|
7030
|
+
}
|
|
7031
|
+
|
|
7032
|
+
TEST_F(DBCompactionTest, DisableJustStartedManualCompaction) {
|
|
7033
|
+
const int kNumL0Files = 4;
|
|
7034
|
+
|
|
7035
|
+
Options options = CurrentOptions();
|
|
7036
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7037
|
+
Reopen(options);
|
|
7038
|
+
|
|
7039
|
+
// generate files, but avoid trigger auto compaction
|
|
7040
|
+
for (int i = 0; i < kNumL0Files / 2; i++) {
|
|
7041
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7042
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7043
|
+
ASSERT_OK(Flush());
|
|
7044
|
+
}
|
|
7045
|
+
|
|
7046
|
+
// make sure the manual compaction background is started but not yet set the
|
|
7047
|
+
// status to in_progress, then cancel the manual compaction, which should not
|
|
7048
|
+
// result in segfault
|
|
7049
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7050
|
+
{{"DBImpl::BGWorkCompaction",
|
|
7051
|
+
"DBCompactionTest::DisableJustStartedManualCompaction:"
|
|
7052
|
+
"PreDisableManualCompaction"},
|
|
7053
|
+
{"DBImpl::RunManualCompaction:Unscheduled",
|
|
7054
|
+
"BackgroundCallCompaction:0"}});
|
|
7055
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7056
|
+
|
|
7057
|
+
port::Thread compact_thread([&]() {
|
|
7058
|
+
CompactRangeOptions cro;
|
|
7059
|
+
cro.exclusive_manual_compaction = true;
|
|
7060
|
+
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
|
7061
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7062
|
+
});
|
|
7063
|
+
TEST_SYNC_POINT(
|
|
7064
|
+
"DBCompactionTest::DisableJustStartedManualCompaction:"
|
|
7065
|
+
"PreDisableManualCompaction");
|
|
7066
|
+
db_->DisableManualCompaction();
|
|
7067
|
+
|
|
7068
|
+
compact_thread.join();
|
|
7069
|
+
}
|
|
7070
|
+
|
|
7071
|
+
TEST_F(DBCompactionTest, DisableInProgressManualCompaction) {
|
|
7072
|
+
const int kNumL0Files = 4;
|
|
7073
|
+
|
|
7074
|
+
Options options = CurrentOptions();
|
|
7075
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7076
|
+
Reopen(options);
|
|
7077
|
+
|
|
7078
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7079
|
+
{{"DBImpl::BackgroundCompaction:InProgress",
|
|
7080
|
+
"DBCompactionTest::DisableInProgressManualCompaction:"
|
|
7081
|
+
"PreDisableManualCompaction"},
|
|
7082
|
+
{"DBImpl::RunManualCompaction:Unscheduled",
|
|
7083
|
+
"CompactionJob::Run():Start"}});
|
|
7084
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7085
|
+
|
|
7086
|
+
// generate files, but avoid trigger auto compaction
|
|
7087
|
+
for (int i = 0; i < kNumL0Files / 2; i++) {
|
|
7088
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7089
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7090
|
+
ASSERT_OK(Flush());
|
|
7091
|
+
}
|
|
7092
|
+
|
|
7093
|
+
port::Thread compact_thread([&]() {
|
|
7094
|
+
CompactRangeOptions cro;
|
|
7095
|
+
cro.exclusive_manual_compaction = true;
|
|
7096
|
+
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
|
7097
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7098
|
+
});
|
|
7099
|
+
|
|
7100
|
+
TEST_SYNC_POINT(
|
|
7101
|
+
"DBCompactionTest::DisableInProgressManualCompaction:"
|
|
7102
|
+
"PreDisableManualCompaction");
|
|
7103
|
+
db_->DisableManualCompaction();
|
|
7104
|
+
|
|
7105
|
+
compact_thread.join();
|
|
7106
|
+
}
|
|
7107
|
+
|
|
7108
|
+
TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFull) {
|
|
7109
|
+
const int kNumL0Files = 4;
|
|
7110
|
+
|
|
7111
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7112
|
+
{{"DBImpl::RunManualCompaction:Scheduled",
|
|
7113
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFull:"
|
|
7114
|
+
"PreDisableManualCompaction"}});
|
|
7115
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7116
|
+
|
|
7117
|
+
Options options = CurrentOptions();
|
|
7118
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7119
|
+
Reopen(options);
|
|
7120
|
+
|
|
7121
|
+
// Block compaction queue
|
|
7122
|
+
test::SleepingBackgroundTask sleeping_task_low;
|
|
7123
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
7124
|
+
Env::Priority::LOW);
|
|
7125
|
+
|
|
7126
|
+
// generate files, but avoid trigger auto compaction
|
|
7127
|
+
for (int i = 0; i < kNumL0Files / 2; i++) {
|
|
7128
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7129
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7130
|
+
ASSERT_OK(Flush());
|
|
7131
|
+
}
|
|
7132
|
+
|
|
7133
|
+
port::Thread compact_thread([&]() {
|
|
7134
|
+
CompactRangeOptions cro;
|
|
7135
|
+
cro.exclusive_manual_compaction = true;
|
|
7136
|
+
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
|
7137
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7138
|
+
});
|
|
7139
|
+
|
|
7140
|
+
TEST_SYNC_POINT(
|
|
7141
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFull:"
|
|
7142
|
+
"PreDisableManualCompaction");
|
|
7143
|
+
|
|
7144
|
+
// Generate more files to trigger auto compaction which is scheduled after
|
|
7145
|
+
// manual compaction. Has to generate 4 more files because existing files are
|
|
7146
|
+
// pending compaction
|
|
7147
|
+
for (int i = 0; i < kNumL0Files; i++) {
|
|
7148
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7149
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7150
|
+
ASSERT_OK(Flush());
|
|
7151
|
+
}
|
|
7152
|
+
ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
|
|
7153
|
+
|
|
7154
|
+
db_->DisableManualCompaction();
|
|
7155
|
+
|
|
7156
|
+
// CompactRange should return before the compaction has the chance to run
|
|
7157
|
+
compact_thread.join();
|
|
7158
|
+
|
|
7159
|
+
sleeping_task_low.WakeUp();
|
|
7160
|
+
sleeping_task_low.WaitUntilDone();
|
|
7161
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
|
|
7162
|
+
ASSERT_EQ("0,1", FilesPerLevel(0));
|
|
7163
|
+
}
|
|
7164
|
+
|
|
7165
|
+
TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFullDBClose) {
|
|
7166
|
+
const int kNumL0Files = 4;
|
|
7167
|
+
|
|
7168
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7169
|
+
{{"DBImpl::RunManualCompaction:Scheduled",
|
|
7170
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFullDBClose:"
|
|
7171
|
+
"PreDisableManualCompaction"}});
|
|
7172
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7173
|
+
|
|
7174
|
+
Options options = CurrentOptions();
|
|
7175
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7176
|
+
Reopen(options);
|
|
7177
|
+
|
|
7178
|
+
// Block compaction queue
|
|
7179
|
+
test::SleepingBackgroundTask sleeping_task_low;
|
|
7180
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
7181
|
+
Env::Priority::LOW);
|
|
7182
|
+
|
|
7183
|
+
// generate files, but avoid trigger auto compaction
|
|
7184
|
+
for (int i = 0; i < kNumL0Files / 2; i++) {
|
|
7185
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7186
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7187
|
+
ASSERT_OK(Flush());
|
|
7188
|
+
}
|
|
7189
|
+
|
|
7190
|
+
port::Thread compact_thread([&]() {
|
|
7191
|
+
CompactRangeOptions cro;
|
|
7192
|
+
cro.exclusive_manual_compaction = true;
|
|
7193
|
+
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
|
7194
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7195
|
+
});
|
|
7196
|
+
|
|
7197
|
+
TEST_SYNC_POINT(
|
|
7198
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFullDBClose:"
|
|
7199
|
+
"PreDisableManualCompaction");
|
|
7200
|
+
|
|
7201
|
+
// Generate more files to trigger auto compaction which is scheduled after
|
|
7202
|
+
// manual compaction. Has to generate 4 more files because existing files are
|
|
7203
|
+
// pending compaction
|
|
7204
|
+
for (int i = 0; i < kNumL0Files; i++) {
|
|
7205
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7206
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7207
|
+
ASSERT_OK(Flush());
|
|
7208
|
+
}
|
|
7209
|
+
ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
|
|
7210
|
+
|
|
7211
|
+
db_->DisableManualCompaction();
|
|
7212
|
+
|
|
7213
|
+
// CompactRange should return before the compaction has the chance to run
|
|
7214
|
+
compact_thread.join();
|
|
7215
|
+
|
|
7216
|
+
// Try close DB while manual compaction is canceled but still in the queue.
|
|
7217
|
+
// And an auto-triggered compaction is also in the queue.
|
|
7218
|
+
auto s = db_->Close();
|
|
7219
|
+
ASSERT_OK(s);
|
|
7220
|
+
|
|
7221
|
+
sleeping_task_low.WakeUp();
|
|
7222
|
+
sleeping_task_low.WaitUntilDone();
|
|
7223
|
+
}
|
|
7224
|
+
|
|
7225
|
+
TEST_F(DBCompactionTest, DBCloseWithManualCompaction) {
|
|
7226
|
+
const int kNumL0Files = 4;
|
|
7227
|
+
|
|
7228
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7229
|
+
{{"DBImpl::RunManualCompaction:Scheduled",
|
|
7230
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFullDBClose:"
|
|
7231
|
+
"PreDisableManualCompaction"}});
|
|
7232
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7233
|
+
|
|
7234
|
+
Options options = CurrentOptions();
|
|
7235
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7236
|
+
Reopen(options);
|
|
7237
|
+
|
|
7238
|
+
// Block compaction queue
|
|
7239
|
+
test::SleepingBackgroundTask sleeping_task_low;
|
|
7240
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
7241
|
+
Env::Priority::LOW);
|
|
7242
|
+
|
|
7243
|
+
// generate files, but avoid trigger auto compaction
|
|
7244
|
+
for (int i = 0; i < kNumL0Files / 2; i++) {
|
|
7245
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7246
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7247
|
+
ASSERT_OK(Flush());
|
|
7248
|
+
}
|
|
7249
|
+
|
|
7250
|
+
port::Thread compact_thread([&]() {
|
|
7251
|
+
CompactRangeOptions cro;
|
|
7252
|
+
cro.exclusive_manual_compaction = true;
|
|
7253
|
+
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
|
7254
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
7255
|
+
});
|
|
7256
|
+
|
|
7257
|
+
TEST_SYNC_POINT(
|
|
7258
|
+
"DBCompactionTest::DisableManualCompactionThreadQueueFullDBClose:"
|
|
7259
|
+
"PreDisableManualCompaction");
|
|
7260
|
+
|
|
7261
|
+
// Generate more files to trigger auto compaction which is scheduled after
|
|
7262
|
+
// manual compaction. Has to generate 4 more files because existing files are
|
|
7263
|
+
// pending compaction
|
|
7264
|
+
for (int i = 0; i < kNumL0Files; i++) {
|
|
7265
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7266
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7267
|
+
ASSERT_OK(Flush());
|
|
7268
|
+
}
|
|
7269
|
+
ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
|
|
7270
|
+
|
|
7271
|
+
// Close DB with manual compaction and auto triggered compaction in the queue.
|
|
7272
|
+
auto s = db_->Close();
|
|
7273
|
+
ASSERT_OK(s);
|
|
7274
|
+
|
|
7275
|
+
// manual compaction thread should return with Incomplete().
|
|
7276
|
+
compact_thread.join();
|
|
7277
|
+
|
|
7278
|
+
sleeping_task_low.WakeUp();
|
|
7279
|
+
sleeping_task_low.WaitUntilDone();
|
|
7280
|
+
}
|
|
7281
|
+
|
|
7282
|
+
TEST_F(DBCompactionTest,
|
|
7283
|
+
DisableManualCompactionDoesNotWaitForDrainingAutomaticCompaction) {
|
|
7284
|
+
// When `CompactRangeOptions::exclusive_manual_compaction == true`, we wait
|
|
7285
|
+
// for automatic compactions to drain before starting the manual compaction.
|
|
7286
|
+
// This test verifies `DisableManualCompaction()` can cancel such a compaction
|
|
7287
|
+
// without waiting for the drain to complete.
|
|
7288
|
+
const int kNumL0Files = 4;
|
|
7289
|
+
|
|
7290
|
+
// Enforces manual compaction enters wait loop due to pending automatic
|
|
7291
|
+
// compaction.
|
|
7292
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
7293
|
+
{{"DBImpl::BGWorkCompaction", "DBImpl::RunManualCompaction:NotScheduled"},
|
|
7294
|
+
{"DBImpl::RunManualCompaction:WaitScheduled",
|
|
7295
|
+
"BackgroundCallCompaction:0"}});
|
|
7296
|
+
// The automatic compaction will cancel the waiting manual compaction.
|
|
7297
|
+
// Completing this implies the cancellation did not wait on automatic
|
|
7298
|
+
// compactions to finish.
|
|
7299
|
+
bool callback_completed = false;
|
|
7300
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
7301
|
+
"BackgroundCallCompaction:0", [&](void* /*arg*/) {
|
|
7302
|
+
db_->DisableManualCompaction();
|
|
7303
|
+
callback_completed = true;
|
|
7304
|
+
});
|
|
7305
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
7306
|
+
|
|
7307
|
+
Options options = CurrentOptions();
|
|
7308
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7309
|
+
Reopen(options);
|
|
7310
|
+
|
|
7311
|
+
for (int i = 0; i < kNumL0Files; ++i) {
|
|
7312
|
+
ASSERT_OK(Put(Key(1), "value1"));
|
|
7313
|
+
ASSERT_OK(Put(Key(2), "value2"));
|
|
7314
|
+
ASSERT_OK(Flush());
|
|
7315
|
+
}
|
|
7316
|
+
|
|
7317
|
+
CompactRangeOptions cro;
|
|
7318
|
+
cro.exclusive_manual_compaction = true;
|
|
7319
|
+
ASSERT_TRUE(db_->CompactRange(cro, nullptr, nullptr).IsIncomplete());
|
|
7320
|
+
|
|
7321
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
7322
|
+
ASSERT_TRUE(callback_completed);
|
|
7323
|
+
}
|
|
7324
|
+
|
|
7325
|
+
TEST_F(DBCompactionTest, ChangeLevelConflictsWithManual) {
|
|
7326
|
+
Options options = CurrentOptions();
|
|
7327
|
+
options.num_levels = 3;
|
|
7328
|
+
Reopen(options);
|
|
7329
|
+
|
|
7330
|
+
// Setup an LSM with L2 populated.
|
|
7331
|
+
Random rnd(301);
|
|
7332
|
+
ASSERT_OK(Put(Key(0), rnd.RandomString(990)));
|
|
7333
|
+
ASSERT_OK(Put(Key(1), rnd.RandomString(990)));
|
|
7334
|
+
{
|
|
7335
|
+
CompactRangeOptions cro;
|
|
7336
|
+
cro.change_level = true;
|
|
7337
|
+
cro.target_level = 2;
|
|
7338
|
+
ASSERT_OK(dbfull()->CompactRange(cro, nullptr, nullptr));
|
|
7339
|
+
}
|
|
7340
|
+
ASSERT_EQ("0,0,1", FilesPerLevel(0));
|
|
7341
|
+
|
|
7342
|
+
// The background thread will refit L2->L1 while the foreground thread will
|
|
7343
|
+
// attempt to run a compaction on new data. The following dependencies
|
|
7344
|
+
// ensure the background manual compaction's refitting phase disables manual
|
|
7345
|
+
// compaction immediately before the foreground manual compaction can register
|
|
7346
|
+
// itself. Manual compaction is kept disabled until the foreground manual
|
|
7347
|
+
// checks for the failure once.
|
|
7348
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency({
|
|
7349
|
+
// Only do Put()s for foreground CompactRange() once the background
|
|
7350
|
+
// CompactRange() has reached the refitting phase.
|
|
7351
|
+
{
|
|
7352
|
+
"DBImpl::CompactRange:BeforeRefit:1",
|
|
7353
|
+
"DBCompactionTest::ChangeLevelConflictsWithManual:"
|
|
7354
|
+
"PreForegroundCompactRange",
|
|
7355
|
+
},
|
|
7356
|
+
// Right before we register the manual compaction, proceed with
|
|
7357
|
+
// the refitting phase so manual compactions are disabled. Stay in
|
|
7358
|
+
// the refitting phase with manual compactions disabled until it is
|
|
7359
|
+
// noticed.
|
|
7360
|
+
{
|
|
7361
|
+
"DBImpl::RunManualCompaction:0",
|
|
7362
|
+
"DBImpl::CompactRange:BeforeRefit:2",
|
|
7363
|
+
},
|
|
7364
|
+
{
|
|
7365
|
+
"DBImpl::CompactRange:PreRefitLevel",
|
|
7366
|
+
"DBImpl::RunManualCompaction:1",
|
|
7367
|
+
},
|
|
7368
|
+
{
|
|
7369
|
+
"DBImpl::RunManualCompaction:PausedAtStart",
|
|
7370
|
+
"DBImpl::CompactRange:PostRefitLevel",
|
|
7371
|
+
},
|
|
7372
|
+
// If compaction somehow were scheduled, let's let it run after reenabling
|
|
7373
|
+
// manual compactions. This dependency is not expected to be hit but is
|
|
7374
|
+
// here for speculatively coercing future bugs.
|
|
7375
|
+
{
|
|
7376
|
+
"DBImpl::CompactRange:PostRefitLevel:ManualCompactionEnabled",
|
|
7377
|
+
"BackgroundCallCompaction:0",
|
|
7378
|
+
},
|
|
7379
|
+
});
|
|
7380
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
7381
|
+
|
|
7382
|
+
ROCKSDB_NAMESPACE::port::Thread refit_level_thread([&] {
|
|
7383
|
+
CompactRangeOptions cro;
|
|
7384
|
+
cro.change_level = true;
|
|
7385
|
+
cro.target_level = 1;
|
|
7386
|
+
ASSERT_OK(dbfull()->CompactRange(cro, nullptr, nullptr));
|
|
7387
|
+
});
|
|
7388
|
+
|
|
7389
|
+
TEST_SYNC_POINT(
|
|
7390
|
+
"DBCompactionTest::ChangeLevelConflictsWithManual:"
|
|
7391
|
+
"PreForegroundCompactRange");
|
|
7392
|
+
ASSERT_OK(Put(Key(0), rnd.RandomString(990)));
|
|
7393
|
+
ASSERT_OK(Put(Key(1), rnd.RandomString(990)));
|
|
7394
|
+
ASSERT_TRUE(dbfull()
|
|
7395
|
+
->CompactRange(CompactRangeOptions(), nullptr, nullptr)
|
|
7396
|
+
.IsIncomplete());
|
|
7397
|
+
|
|
7398
|
+
refit_level_thread.join();
|
|
7399
|
+
}
|
|
7400
|
+
|
|
7401
|
+
TEST_F(DBCompactionTest, BottomPriCompactionCountsTowardConcurrencyLimit) {
|
|
7402
|
+
// Flushes several files to trigger compaction while lock is released during
|
|
7403
|
+
// a bottom-pri compaction. Verifies it does not get scheduled to thread pool
|
|
7404
|
+
// because per-DB limit for compaction parallelism is one (default).
|
|
7405
|
+
const int kNumL0Files = 4;
|
|
7406
|
+
const int kNumLevels = 3;
|
|
7407
|
+
|
|
7408
|
+
env_->SetBackgroundThreads(1, Env::Priority::BOTTOM);
|
|
7409
|
+
|
|
7410
|
+
Options options = CurrentOptions();
|
|
7411
|
+
options.level0_file_num_compaction_trigger = kNumL0Files;
|
|
7412
|
+
options.num_levels = kNumLevels;
|
|
7413
|
+
DestroyAndReopen(options);
|
|
7414
|
+
|
|
7415
|
+
// Setup last level to be non-empty since it's a bit unclear whether
|
|
7416
|
+
// compaction to an empty level would be considered "bottommost".
|
|
7417
|
+
ASSERT_OK(Put(Key(0), "val"));
|
|
7418
|
+
ASSERT_OK(Flush());
|
|
7419
|
+
MoveFilesToLevel(kNumLevels - 1);
|
|
7420
|
+
|
|
7421
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7422
|
+
{{"DBImpl::BGWorkBottomCompaction",
|
|
7423
|
+
"DBCompactionTest::BottomPriCompactionCountsTowardConcurrencyLimit:"
|
|
7424
|
+
"PreTriggerCompaction"},
|
|
7425
|
+
{"DBCompactionTest::BottomPriCompactionCountsTowardConcurrencyLimit:"
|
|
7426
|
+
"PostTriggerCompaction",
|
|
7427
|
+
"BackgroundCallCompaction:0"}});
|
|
7428
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7429
|
+
|
|
7430
|
+
port::Thread compact_range_thread([&] {
|
|
7431
|
+
CompactRangeOptions cro;
|
|
7432
|
+
cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
|
|
7433
|
+
cro.exclusive_manual_compaction = false;
|
|
7434
|
+
ASSERT_OK(dbfull()->CompactRange(cro, nullptr, nullptr));
|
|
7435
|
+
});
|
|
7436
|
+
|
|
7437
|
+
// Sleep in the low-pri thread so any newly scheduled compaction will be
|
|
7438
|
+
// queued. Otherwise it might finish before we check its existence.
|
|
7439
|
+
test::SleepingBackgroundTask sleeping_task_low;
|
|
7440
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
7441
|
+
Env::Priority::LOW);
|
|
7442
|
+
|
|
7443
|
+
TEST_SYNC_POINT(
|
|
7444
|
+
"DBCompactionTest::BottomPriCompactionCountsTowardConcurrencyLimit:"
|
|
7445
|
+
"PreTriggerCompaction");
|
|
7446
|
+
for (int i = 0; i < kNumL0Files; ++i) {
|
|
7447
|
+
ASSERT_OK(Put(Key(0), "val"));
|
|
7448
|
+
ASSERT_OK(Flush());
|
|
7449
|
+
}
|
|
7450
|
+
ASSERT_EQ(0u, env_->GetThreadPoolQueueLen(Env::Priority::LOW));
|
|
7451
|
+
TEST_SYNC_POINT(
|
|
7452
|
+
"DBCompactionTest::BottomPriCompactionCountsTowardConcurrencyLimit:"
|
|
7453
|
+
"PostTriggerCompaction");
|
|
7454
|
+
|
|
7455
|
+
sleeping_task_low.WakeUp();
|
|
7456
|
+
sleeping_task_low.WaitUntilDone();
|
|
7457
|
+
compact_range_thread.join();
|
|
7458
|
+
}
|
|
7459
|
+
|
|
6278
7460
|
#endif // !defined(ROCKSDB_LITE)
|
|
6279
7461
|
|
|
6280
7462
|
} // namespace ROCKSDB_NAMESPACE
|