@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
|
@@ -20,14 +20,18 @@
|
|
|
20
20
|
#include <utility>
|
|
21
21
|
#include <vector>
|
|
22
22
|
|
|
23
|
+
#include "db/blob/blob_counting_iterator.h"
|
|
23
24
|
#include "db/blob/blob_file_addition.h"
|
|
24
25
|
#include "db/blob/blob_file_builder.h"
|
|
26
|
+
#include "db/blob/blob_garbage_meter.h"
|
|
25
27
|
#include "db/builder.h"
|
|
28
|
+
#include "db/compaction/clipping_iterator.h"
|
|
26
29
|
#include "db/db_impl/db_impl.h"
|
|
27
30
|
#include "db/db_iter.h"
|
|
28
31
|
#include "db/dbformat.h"
|
|
29
32
|
#include "db/error_handler.h"
|
|
30
33
|
#include "db/event_helpers.h"
|
|
34
|
+
#include "db/history_trimming_iterator.h"
|
|
31
35
|
#include "db/log_reader.h"
|
|
32
36
|
#include "db/log_writer.h"
|
|
33
37
|
#include "db/memtable.h"
|
|
@@ -46,6 +50,8 @@
|
|
|
46
50
|
#include "monitoring/iostats_context_imp.h"
|
|
47
51
|
#include "monitoring/perf_context_imp.h"
|
|
48
52
|
#include "monitoring/thread_status_util.h"
|
|
53
|
+
#include "options/configurable_helper.h"
|
|
54
|
+
#include "options/options_helper.h"
|
|
49
55
|
#include "port/port.h"
|
|
50
56
|
#include "rocksdb/db.h"
|
|
51
57
|
#include "rocksdb/env.h"
|
|
@@ -53,6 +59,7 @@
|
|
|
53
59
|
#include "rocksdb/statistics.h"
|
|
54
60
|
#include "rocksdb/status.h"
|
|
55
61
|
#include "rocksdb/table.h"
|
|
62
|
+
#include "rocksdb/utilities/options_type.h"
|
|
56
63
|
#include "table/block_based/block.h"
|
|
57
64
|
#include "table/block_based/block_based_table_factory.h"
|
|
58
65
|
#include "table/merging_iterator.h"
|
|
@@ -101,6 +108,10 @@ const char* GetCompactionReasonString(CompactionReason compaction_reason) {
|
|
|
101
108
|
return "ExternalSstIngestion";
|
|
102
109
|
case CompactionReason::kPeriodicCompaction:
|
|
103
110
|
return "PeriodicCompaction";
|
|
111
|
+
case CompactionReason::kChangeTemperature:
|
|
112
|
+
return "ChangeTemperature";
|
|
113
|
+
case CompactionReason::kForcedBlobGC:
|
|
114
|
+
return "ForcedBlobGC";
|
|
104
115
|
case CompactionReason::kNumOfReasons:
|
|
105
116
|
// fall through
|
|
106
117
|
default:
|
|
@@ -128,10 +139,12 @@ struct CompactionJob::SubcompactionState {
|
|
|
128
139
|
// Files produced by this subcompaction
|
|
129
140
|
struct Output {
|
|
130
141
|
Output(FileMetaData&& _meta, const InternalKeyComparator& _icmp,
|
|
131
|
-
bool _enable_order_check, bool _enable_hash
|
|
142
|
+
bool _enable_order_check, bool _enable_hash, bool _finished = false,
|
|
143
|
+
uint64_t precalculated_hash = 0)
|
|
132
144
|
: meta(std::move(_meta)),
|
|
133
|
-
validator(_icmp, _enable_order_check, _enable_hash
|
|
134
|
-
|
|
145
|
+
validator(_icmp, _enable_order_check, _enable_hash,
|
|
146
|
+
precalculated_hash),
|
|
147
|
+
finished(_finished) {}
|
|
135
148
|
FileMetaData meta;
|
|
136
149
|
OutputValidator validator;
|
|
137
150
|
bool finished;
|
|
@@ -141,6 +154,7 @@ struct CompactionJob::SubcompactionState {
|
|
|
141
154
|
// State kept for output being generated
|
|
142
155
|
std::vector<Output> outputs;
|
|
143
156
|
std::vector<BlobFileAddition> blob_file_additions;
|
|
157
|
+
std::unique_ptr<BlobGarbageMeter> blob_garbage_meter;
|
|
144
158
|
std::unique_ptr<WritableFileWriter> outfile;
|
|
145
159
|
std::unique_ptr<TableBuilder> builder;
|
|
146
160
|
|
|
@@ -149,7 +163,7 @@ struct CompactionJob::SubcompactionState {
|
|
|
149
163
|
// This subcompaction's output could be empty if compaction was aborted
|
|
150
164
|
// before this subcompaction had a chance to generate any output files.
|
|
151
165
|
// When subcompactions are executed sequentially this is more likely and
|
|
152
|
-
// will be
|
|
166
|
+
// will be particularly likely for the later subcompactions to be empty.
|
|
153
167
|
// Once they are run in parallel however it should be much rarer.
|
|
154
168
|
return nullptr;
|
|
155
169
|
} else {
|
|
@@ -157,6 +171,13 @@ struct CompactionJob::SubcompactionState {
|
|
|
157
171
|
}
|
|
158
172
|
}
|
|
159
173
|
|
|
174
|
+
// Some identified files with old oldest ancester time and the range should be
|
|
175
|
+
// isolated out so that the output file(s) in that range can be merged down
|
|
176
|
+
// for TTL and clear the timestamps for the range.
|
|
177
|
+
std::vector<FileMetaData*> files_to_cut_for_ttl;
|
|
178
|
+
int cur_files_to_cut_for_ttl = -1;
|
|
179
|
+
int next_files_to_cut_for_ttl = 0;
|
|
180
|
+
|
|
160
181
|
uint64_t current_output_file_size = 0;
|
|
161
182
|
|
|
162
183
|
// State during the subcompaction
|
|
@@ -171,9 +192,21 @@ struct CompactionJob::SubcompactionState {
|
|
|
171
192
|
uint64_t overlapped_bytes = 0;
|
|
172
193
|
// A flag determine whether the key has been seen in ShouldStopBefore()
|
|
173
194
|
bool seen_key = false;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
195
|
+
// sub compaction job id, which is used to identify different sub-compaction
|
|
196
|
+
// within the same compaction job.
|
|
197
|
+
const uint32_t sub_job_id;
|
|
198
|
+
|
|
199
|
+
// Notify on sub-compaction completion only if listener was notified on
|
|
200
|
+
// sub-compaction begin.
|
|
201
|
+
bool notify_on_subcompaction_completion = false;
|
|
202
|
+
|
|
203
|
+
SubcompactionState(Compaction* c, Slice* _start, Slice* _end, uint64_t size,
|
|
204
|
+
uint32_t _sub_job_id)
|
|
205
|
+
: compaction(c),
|
|
206
|
+
start(_start),
|
|
207
|
+
end(_end),
|
|
208
|
+
approx_size(size),
|
|
209
|
+
sub_job_id(_sub_job_id) {
|
|
177
210
|
assert(compaction != nullptr);
|
|
178
211
|
}
|
|
179
212
|
|
|
@@ -191,6 +224,8 @@ struct CompactionJob::SubcompactionState {
|
|
|
191
224
|
return Status::OK();
|
|
192
225
|
}
|
|
193
226
|
|
|
227
|
+
void FillFilesToCutForTtl();
|
|
228
|
+
|
|
194
229
|
// Returns true iff we should stop building the current output
|
|
195
230
|
// before processing "internal_key".
|
|
196
231
|
bool ShouldStopBefore(const Slice& internal_key, uint64_t curr_file_size) {
|
|
@@ -198,6 +233,7 @@ struct CompactionJob::SubcompactionState {
|
|
|
198
233
|
&compaction->column_family_data()->internal_comparator();
|
|
199
234
|
const std::vector<FileMetaData*>& grandparents = compaction->grandparents();
|
|
200
235
|
|
|
236
|
+
bool grandparant_file_switched = false;
|
|
201
237
|
// Scan to find earliest grandparent file that contains key.
|
|
202
238
|
while (grandparent_index < grandparents.size() &&
|
|
203
239
|
icmp->Compare(internal_key,
|
|
@@ -205,6 +241,7 @@ struct CompactionJob::SubcompactionState {
|
|
|
205
241
|
0) {
|
|
206
242
|
if (seen_key) {
|
|
207
243
|
overlapped_bytes += grandparents[grandparent_index]->fd.GetFileSize();
|
|
244
|
+
grandparant_file_switched = true;
|
|
208
245
|
}
|
|
209
246
|
assert(grandparent_index + 1 >= grandparents.size() ||
|
|
210
247
|
icmp->Compare(
|
|
@@ -214,17 +251,99 @@ struct CompactionJob::SubcompactionState {
|
|
|
214
251
|
}
|
|
215
252
|
seen_key = true;
|
|
216
253
|
|
|
217
|
-
if (overlapped_bytes + curr_file_size >
|
|
218
|
-
|
|
254
|
+
if (grandparant_file_switched && overlapped_bytes + curr_file_size >
|
|
255
|
+
compaction->max_compaction_bytes()) {
|
|
219
256
|
// Too much overlap for current output; start new output
|
|
220
257
|
overlapped_bytes = 0;
|
|
221
258
|
return true;
|
|
222
259
|
}
|
|
223
260
|
|
|
261
|
+
if (!files_to_cut_for_ttl.empty()) {
|
|
262
|
+
if (cur_files_to_cut_for_ttl != -1) {
|
|
263
|
+
// Previous key is inside the range of a file
|
|
264
|
+
if (icmp->Compare(internal_key,
|
|
265
|
+
files_to_cut_for_ttl[cur_files_to_cut_for_ttl]
|
|
266
|
+
->largest.Encode()) > 0) {
|
|
267
|
+
next_files_to_cut_for_ttl = cur_files_to_cut_for_ttl + 1;
|
|
268
|
+
cur_files_to_cut_for_ttl = -1;
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
} else {
|
|
272
|
+
// Look for the key position
|
|
273
|
+
while (next_files_to_cut_for_ttl <
|
|
274
|
+
static_cast<int>(files_to_cut_for_ttl.size())) {
|
|
275
|
+
if (icmp->Compare(internal_key,
|
|
276
|
+
files_to_cut_for_ttl[next_files_to_cut_for_ttl]
|
|
277
|
+
->smallest.Encode()) >= 0) {
|
|
278
|
+
if (icmp->Compare(internal_key,
|
|
279
|
+
files_to_cut_for_ttl[next_files_to_cut_for_ttl]
|
|
280
|
+
->largest.Encode()) <= 0) {
|
|
281
|
+
// With in the current file
|
|
282
|
+
cur_files_to_cut_for_ttl = next_files_to_cut_for_ttl;
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
// Beyond the current file
|
|
286
|
+
next_files_to_cut_for_ttl++;
|
|
287
|
+
} else {
|
|
288
|
+
// Still fall into the gap
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
224
295
|
return false;
|
|
225
296
|
}
|
|
297
|
+
|
|
298
|
+
Status ProcessOutFlowIfNeeded(const Slice& key, const Slice& value) {
|
|
299
|
+
if (!blob_garbage_meter) {
|
|
300
|
+
return Status::OK();
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return blob_garbage_meter->ProcessOutFlow(key, value);
|
|
304
|
+
}
|
|
226
305
|
};
|
|
227
306
|
|
|
307
|
+
void CompactionJob::SubcompactionState::FillFilesToCutForTtl() {
|
|
308
|
+
if (compaction->immutable_options()->compaction_style !=
|
|
309
|
+
CompactionStyle::kCompactionStyleLevel ||
|
|
310
|
+
compaction->immutable_options()->compaction_pri !=
|
|
311
|
+
CompactionPri::kMinOverlappingRatio ||
|
|
312
|
+
compaction->mutable_cf_options()->ttl == 0 ||
|
|
313
|
+
compaction->num_input_levels() < 2 || compaction->bottommost_level()) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// We define new file with oldest ancestor time to be younger than 1/4 TTL,
|
|
318
|
+
// and an old one to be older than 1/2 TTL time.
|
|
319
|
+
int64_t temp_current_time;
|
|
320
|
+
auto get_time_status = compaction->immutable_options()->clock->GetCurrentTime(
|
|
321
|
+
&temp_current_time);
|
|
322
|
+
if (!get_time_status.ok()) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
uint64_t current_time = static_cast<uint64_t>(temp_current_time);
|
|
326
|
+
if (current_time < compaction->mutable_cf_options()->ttl) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
uint64_t old_age_thres =
|
|
330
|
+
current_time - compaction->mutable_cf_options()->ttl / 2;
|
|
331
|
+
|
|
332
|
+
const std::vector<FileMetaData*>& olevel =
|
|
333
|
+
*(compaction->inputs(compaction->num_input_levels() - 1));
|
|
334
|
+
for (FileMetaData* file : olevel) {
|
|
335
|
+
// Worth filtering out by start and end?
|
|
336
|
+
uint64_t oldest_ancester_time = file->TryGetOldestAncesterTime();
|
|
337
|
+
// We put old files if they are not too small to prevent a flood
|
|
338
|
+
// of small files.
|
|
339
|
+
if (oldest_ancester_time < old_age_thres &&
|
|
340
|
+
file->fd.GetFileSize() >
|
|
341
|
+
compaction->mutable_cf_options()->target_file_size_base / 2) {
|
|
342
|
+
files_to_cut_for_ttl.push_back(file);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
228
347
|
// Maintains state for the entire compaction
|
|
229
348
|
struct CompactionJob::CompactionState {
|
|
230
349
|
Compaction* const compaction;
|
|
@@ -296,28 +415,38 @@ void CompactionJob::AggregateStatistics() {
|
|
|
296
415
|
|
|
297
416
|
CompactionJob::CompactionJob(
|
|
298
417
|
int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
|
|
299
|
-
const
|
|
300
|
-
const std::atomic<bool>* shutting_down,
|
|
301
|
-
|
|
302
|
-
FSDirectory*
|
|
303
|
-
|
|
304
|
-
|
|
418
|
+
const MutableDBOptions& mutable_db_options, const FileOptions& file_options,
|
|
419
|
+
VersionSet* versions, const std::atomic<bool>* shutting_down,
|
|
420
|
+
LogBuffer* log_buffer, FSDirectory* db_directory,
|
|
421
|
+
FSDirectory* output_directory, FSDirectory* blob_output_directory,
|
|
422
|
+
Statistics* stats, InstrumentedMutex* db_mutex,
|
|
423
|
+
ErrorHandler* db_error_handler,
|
|
305
424
|
std::vector<SequenceNumber> existing_snapshots,
|
|
306
425
|
SequenceNumber earliest_write_conflict_snapshot,
|
|
307
|
-
const SnapshotChecker* snapshot_checker,
|
|
308
|
-
EventLogger* event_logger,
|
|
309
|
-
const std::string& dbname,
|
|
310
|
-
Env::Priority thread_pri,
|
|
311
|
-
const std::
|
|
312
|
-
const std::
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
426
|
+
const SnapshotChecker* snapshot_checker, JobContext* job_context,
|
|
427
|
+
std::shared_ptr<Cache> table_cache, EventLogger* event_logger,
|
|
428
|
+
bool paranoid_file_checks, bool measure_io_stats, const std::string& dbname,
|
|
429
|
+
CompactionJobStats* compaction_job_stats, Env::Priority thread_pri,
|
|
430
|
+
const std::shared_ptr<IOTracer>& io_tracer,
|
|
431
|
+
const std::atomic<int>* manual_compaction_paused,
|
|
432
|
+
const std::atomic<bool>* manual_compaction_canceled,
|
|
433
|
+
const std::string& db_id, const std::string& db_session_id,
|
|
434
|
+
std::string full_history_ts_low, std::string trim_ts,
|
|
435
|
+
BlobFileCompletionCallback* blob_callback)
|
|
436
|
+
: compact_(new CompactionState(compaction)),
|
|
316
437
|
compaction_stats_(compaction->compaction_reason(), 1),
|
|
438
|
+
db_options_(db_options),
|
|
439
|
+
mutable_db_options_copy_(mutable_db_options),
|
|
440
|
+
log_buffer_(log_buffer),
|
|
441
|
+
output_directory_(output_directory),
|
|
442
|
+
stats_(stats),
|
|
443
|
+
bottommost_level_(false),
|
|
444
|
+
write_hint_(Env::WLTH_NOT_SET),
|
|
445
|
+
job_id_(job_id),
|
|
446
|
+
compaction_job_stats_(compaction_job_stats),
|
|
317
447
|
dbname_(dbname),
|
|
318
448
|
db_id_(db_id),
|
|
319
449
|
db_session_id_(db_session_id),
|
|
320
|
-
db_options_(db_options),
|
|
321
450
|
file_options_(file_options),
|
|
322
451
|
env_(db_options.env),
|
|
323
452
|
io_tracer_(io_tracer),
|
|
@@ -327,25 +456,23 @@ CompactionJob::CompactionJob(
|
|
|
327
456
|
versions_(versions),
|
|
328
457
|
shutting_down_(shutting_down),
|
|
329
458
|
manual_compaction_paused_(manual_compaction_paused),
|
|
330
|
-
|
|
331
|
-
log_buffer_(log_buffer),
|
|
459
|
+
manual_compaction_canceled_(manual_compaction_canceled),
|
|
332
460
|
db_directory_(db_directory),
|
|
333
|
-
output_directory_(output_directory),
|
|
334
461
|
blob_output_directory_(blob_output_directory),
|
|
335
|
-
stats_(stats),
|
|
336
462
|
db_mutex_(db_mutex),
|
|
337
463
|
db_error_handler_(db_error_handler),
|
|
338
464
|
existing_snapshots_(std::move(existing_snapshots)),
|
|
339
465
|
earliest_write_conflict_snapshot_(earliest_write_conflict_snapshot),
|
|
340
466
|
snapshot_checker_(snapshot_checker),
|
|
467
|
+
job_context_(job_context),
|
|
341
468
|
table_cache_(std::move(table_cache)),
|
|
342
469
|
event_logger_(event_logger),
|
|
343
|
-
bottommost_level_(false),
|
|
344
470
|
paranoid_file_checks_(paranoid_file_checks),
|
|
345
471
|
measure_io_stats_(measure_io_stats),
|
|
346
|
-
write_hint_(Env::WLTH_NOT_SET),
|
|
347
472
|
thread_pri_(thread_pri),
|
|
348
|
-
full_history_ts_low_(std::move(full_history_ts_low))
|
|
473
|
+
full_history_ts_low_(std::move(full_history_ts_low)),
|
|
474
|
+
trim_ts_(std::move(trim_ts)),
|
|
475
|
+
blob_callback_(blob_callback) {
|
|
349
476
|
assert(compaction_job_stats_ != nullptr);
|
|
350
477
|
assert(log_buffer_ != nullptr);
|
|
351
478
|
const auto* cfd = compact_->compaction->column_family_data();
|
|
@@ -407,7 +534,7 @@ void CompactionJob::Prepare() {
|
|
|
407
534
|
AutoThreadOperationStageUpdater stage_updater(
|
|
408
535
|
ThreadStatus::STAGE_COMPACTION_PREPARE);
|
|
409
536
|
|
|
410
|
-
// Generate file_levels_ for compaction
|
|
537
|
+
// Generate file_levels_ for compaction before making Iterator
|
|
411
538
|
auto* c = compact_->compaction;
|
|
412
539
|
assert(c->column_family_data() != nullptr);
|
|
413
540
|
assert(c->column_family_data()->current()->storage_info()->NumLevelFiles(
|
|
@@ -419,7 +546,7 @@ void CompactionJob::Prepare() {
|
|
|
419
546
|
|
|
420
547
|
if (c->ShouldFormSubcompactions()) {
|
|
421
548
|
{
|
|
422
|
-
StopWatch sw(
|
|
549
|
+
StopWatch sw(db_options_.clock, stats_, SUBCOMPACTION_SETUP_TIME);
|
|
423
550
|
GenSubcompactionBoundaries();
|
|
424
551
|
}
|
|
425
552
|
assert(sizes_.size() == boundaries_.size() + 1);
|
|
@@ -427,7 +554,8 @@ void CompactionJob::Prepare() {
|
|
|
427
554
|
for (size_t i = 0; i <= boundaries_.size(); i++) {
|
|
428
555
|
Slice* start = i == 0 ? nullptr : &boundaries_[i - 1];
|
|
429
556
|
Slice* end = i == boundaries_.size() ? nullptr : &boundaries_[i];
|
|
430
|
-
compact_->sub_compact_states.emplace_back(c, start, end, sizes_[i]
|
|
557
|
+
compact_->sub_compact_states.emplace_back(c, start, end, sizes_[i],
|
|
558
|
+
static_cast<uint32_t>(i));
|
|
431
559
|
}
|
|
432
560
|
RecordInHistogram(stats_, NUM_SUBCOMPACTIONS_SCHEDULED,
|
|
433
561
|
compact_->sub_compact_states.size());
|
|
@@ -436,7 +564,8 @@ void CompactionJob::Prepare() {
|
|
|
436
564
|
constexpr Slice* end = nullptr;
|
|
437
565
|
constexpr uint64_t size = 0;
|
|
438
566
|
|
|
439
|
-
compact_->sub_compact_states.emplace_back(c, start, end, size
|
|
567
|
+
compact_->sub_compact_states.emplace_back(c, start, end, size,
|
|
568
|
+
/*sub_job_id*/ 0);
|
|
440
569
|
}
|
|
441
570
|
}
|
|
442
571
|
|
|
@@ -542,9 +671,10 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
542
671
|
int base_level = v->storage_info()->base_level();
|
|
543
672
|
uint64_t max_output_files = static_cast<uint64_t>(std::ceil(
|
|
544
673
|
sum / min_file_fill_percent /
|
|
545
|
-
MaxFileSizeForLevel(
|
|
546
|
-
c->
|
|
547
|
-
c->
|
|
674
|
+
MaxFileSizeForLevel(
|
|
675
|
+
*(c->mutable_cf_options()), out_lvl,
|
|
676
|
+
c->immutable_options()->compaction_style, base_level,
|
|
677
|
+
c->immutable_options()->level_compaction_dynamic_level_bytes)));
|
|
548
678
|
uint64_t subcompactions =
|
|
549
679
|
std::min({static_cast<uint64_t>(ranges.size()),
|
|
550
680
|
static_cast<uint64_t>(c->max_subcompactions()),
|
|
@@ -585,7 +715,7 @@ Status CompactionJob::Run() {
|
|
|
585
715
|
|
|
586
716
|
const size_t num_threads = compact_->sub_compact_states.size();
|
|
587
717
|
assert(num_threads > 0);
|
|
588
|
-
const uint64_t start_micros =
|
|
718
|
+
const uint64_t start_micros = db_options_.clock->NowMicros();
|
|
589
719
|
|
|
590
720
|
// Launch a thread for each of subcompactions 1...num_threads-1
|
|
591
721
|
std::vector<port::Thread> thread_pool;
|
|
@@ -604,7 +734,7 @@ Status CompactionJob::Run() {
|
|
|
604
734
|
thread.join();
|
|
605
735
|
}
|
|
606
736
|
|
|
607
|
-
compaction_stats_.micros =
|
|
737
|
+
compaction_stats_.micros = db_options_.clock->NowMicros() - start_micros;
|
|
608
738
|
compaction_stats_.cpu_micros = 0;
|
|
609
739
|
for (size_t i = 0; i < compact_->sub_compact_states.size(); i++) {
|
|
610
740
|
compaction_stats_.cpu_micros +=
|
|
@@ -641,12 +771,16 @@ Status CompactionJob::Run() {
|
|
|
641
771
|
constexpr IODebugContext* dbg = nullptr;
|
|
642
772
|
|
|
643
773
|
if (output_directory_) {
|
|
644
|
-
io_s = output_directory_->
|
|
774
|
+
io_s = output_directory_->FsyncWithDirOptions(
|
|
775
|
+
IOOptions(), dbg,
|
|
776
|
+
DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
|
|
645
777
|
}
|
|
646
778
|
|
|
647
779
|
if (io_s.ok() && wrote_new_blob_files && blob_output_directory_ &&
|
|
648
780
|
blob_output_directory_ != output_directory_) {
|
|
649
|
-
io_s = blob_output_directory_->
|
|
781
|
+
io_s = blob_output_directory_->FsyncWithDirOptions(
|
|
782
|
+
IOOptions(), dbg,
|
|
783
|
+
DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
|
|
650
784
|
}
|
|
651
785
|
}
|
|
652
786
|
if (io_status_.ok()) {
|
|
@@ -664,8 +798,8 @@ Status CompactionJob::Run() {
|
|
|
664
798
|
}
|
|
665
799
|
}
|
|
666
800
|
ColumnFamilyData* cfd = compact_->compaction->column_family_data();
|
|
667
|
-
auto prefix_extractor =
|
|
668
|
-
compact_->compaction->mutable_cf_options()->prefix_extractor
|
|
801
|
+
auto& prefix_extractor =
|
|
802
|
+
compact_->compaction->mutable_cf_options()->prefix_extractor;
|
|
669
803
|
std::atomic<size_t> next_file_idx(0);
|
|
670
804
|
auto verify_table = [&](Status& output_status) {
|
|
671
805
|
while (true) {
|
|
@@ -743,7 +877,7 @@ Status CompactionJob::Run() {
|
|
|
743
877
|
for (const auto& state : compact_->sub_compact_states) {
|
|
744
878
|
for (const auto& output : state.outputs) {
|
|
745
879
|
auto fn =
|
|
746
|
-
TableFileName(state.compaction->
|
|
880
|
+
TableFileName(state.compaction->immutable_options()->cf_paths,
|
|
747
881
|
output.meta.fd.GetNumber(), output.meta.fd.GetPathId());
|
|
748
882
|
tp[fn] = output.table_properties;
|
|
749
883
|
}
|
|
@@ -792,55 +926,64 @@ Status CompactionJob::Install(const MutableCFOptions& mutable_cf_options) {
|
|
|
792
926
|
double bytes_read_per_sec = 0;
|
|
793
927
|
double bytes_written_per_sec = 0;
|
|
794
928
|
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
929
|
+
const uint64_t bytes_read_non_output_and_blob =
|
|
930
|
+
stats.bytes_read_non_output_levels + stats.bytes_read_blob;
|
|
931
|
+
const uint64_t bytes_read_all =
|
|
932
|
+
stats.bytes_read_output_level + bytes_read_non_output_and_blob;
|
|
933
|
+
const uint64_t bytes_written_all =
|
|
934
|
+
stats.bytes_written + stats.bytes_written_blob;
|
|
935
|
+
|
|
936
|
+
if (bytes_read_non_output_and_blob > 0) {
|
|
937
|
+
read_write_amp = (bytes_written_all + bytes_read_all) /
|
|
938
|
+
static_cast<double>(bytes_read_non_output_and_blob);
|
|
939
|
+
write_amp =
|
|
940
|
+
bytes_written_all / static_cast<double>(bytes_read_non_output_and_blob);
|
|
801
941
|
}
|
|
802
942
|
if (stats.micros > 0) {
|
|
803
|
-
bytes_read_per_sec =
|
|
804
|
-
(stats.bytes_read_non_output_levels + stats.bytes_read_output_level) /
|
|
805
|
-
static_cast<double>(stats.micros);
|
|
943
|
+
bytes_read_per_sec = bytes_read_all / static_cast<double>(stats.micros);
|
|
806
944
|
bytes_written_per_sec =
|
|
807
|
-
|
|
945
|
+
bytes_written_all / static_cast<double>(stats.micros);
|
|
808
946
|
}
|
|
809
947
|
|
|
810
948
|
const std::string& column_family_name = cfd->GetName();
|
|
811
949
|
|
|
950
|
+
constexpr double kMB = 1048576.0;
|
|
951
|
+
|
|
812
952
|
ROCKS_LOG_BUFFER(
|
|
813
953
|
log_buffer_,
|
|
814
954
|
"[%s] compacted to: %s, MB/sec: %.1f rd, %.1f wr, level %d, "
|
|
815
|
-
"files in(%d, %d) out(%d) "
|
|
816
|
-
"MB in(%.1f, %.1f) out(%.1f
|
|
817
|
-
"write-amplify(%.1f) %s, records in: %" PRIu64
|
|
955
|
+
"files in(%d, %d) out(%d +%d blob) "
|
|
956
|
+
"MB in(%.1f, %.1f +%.1f blob) out(%.1f +%.1f blob), "
|
|
957
|
+
"read-write-amplify(%.1f) write-amplify(%.1f) %s, records in: %" PRIu64
|
|
818
958
|
", records dropped: %" PRIu64 " output_compression: %s\n",
|
|
819
959
|
column_family_name.c_str(), vstorage->LevelSummary(&tmp),
|
|
820
960
|
bytes_read_per_sec, bytes_written_per_sec,
|
|
821
961
|
compact_->compaction->output_level(),
|
|
822
962
|
stats.num_input_files_in_non_output_levels,
|
|
823
963
|
stats.num_input_files_in_output_level, stats.num_output_files,
|
|
824
|
-
stats.bytes_read_non_output_levels /
|
|
825
|
-
stats.bytes_read_output_level /
|
|
826
|
-
stats.bytes_written /
|
|
827
|
-
status.ToString().c_str(), stats.num_input_records,
|
|
964
|
+
stats.num_output_files_blob, stats.bytes_read_non_output_levels / kMB,
|
|
965
|
+
stats.bytes_read_output_level / kMB, stats.bytes_read_blob / kMB,
|
|
966
|
+
stats.bytes_written / kMB, stats.bytes_written_blob / kMB, read_write_amp,
|
|
967
|
+
write_amp, status.ToString().c_str(), stats.num_input_records,
|
|
828
968
|
stats.num_dropped_records,
|
|
829
969
|
CompressionTypeToString(compact_->compaction->output_compression())
|
|
830
970
|
.c_str());
|
|
831
971
|
|
|
832
972
|
const auto& blob_files = vstorage->GetBlobFiles();
|
|
833
973
|
if (!blob_files.empty()) {
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
974
|
+
assert(blob_files.front());
|
|
975
|
+
assert(blob_files.back());
|
|
976
|
+
|
|
977
|
+
ROCKS_LOG_BUFFER(
|
|
978
|
+
log_buffer_,
|
|
979
|
+
"[%s] Blob file summary: head=%" PRIu64 ", tail=%" PRIu64 "\n",
|
|
980
|
+
column_family_name.c_str(), blob_files.front()->GetBlobFileNumber(),
|
|
981
|
+
blob_files.back()->GetBlobFileNumber());
|
|
839
982
|
}
|
|
840
983
|
|
|
841
984
|
UpdateCompactionJobStats(stats);
|
|
842
985
|
|
|
843
|
-
auto stream = event_logger_->LogToBuffer(log_buffer_);
|
|
986
|
+
auto stream = event_logger_->LogToBuffer(log_buffer_, 8192);
|
|
844
987
|
stream << "job" << job_id_ << "event"
|
|
845
988
|
<< "compaction_finished"
|
|
846
989
|
<< "compaction_time_micros" << stats.micros
|
|
@@ -882,19 +1025,298 @@ Status CompactionJob::Install(const MutableCFOptions& mutable_cf_options) {
|
|
|
882
1025
|
stream.EndArray();
|
|
883
1026
|
|
|
884
1027
|
if (!blob_files.empty()) {
|
|
885
|
-
|
|
886
|
-
stream << "
|
|
1028
|
+
assert(blob_files.front());
|
|
1029
|
+
stream << "blob_file_head" << blob_files.front()->GetBlobFileNumber();
|
|
1030
|
+
|
|
1031
|
+
assert(blob_files.back());
|
|
1032
|
+
stream << "blob_file_tail" << blob_files.back()->GetBlobFileNumber();
|
|
887
1033
|
}
|
|
888
1034
|
|
|
889
1035
|
CleanupCompaction();
|
|
890
1036
|
return status;
|
|
891
1037
|
}
|
|
892
1038
|
|
|
1039
|
+
#ifndef ROCKSDB_LITE
|
|
1040
|
+
CompactionServiceJobStatus
|
|
1041
|
+
CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
1042
|
+
SubcompactionState* sub_compact) {
|
|
1043
|
+
assert(sub_compact);
|
|
1044
|
+
assert(sub_compact->compaction);
|
|
1045
|
+
assert(db_options_.compaction_service);
|
|
1046
|
+
|
|
1047
|
+
const Compaction* compaction = sub_compact->compaction;
|
|
1048
|
+
CompactionServiceInput compaction_input;
|
|
1049
|
+
compaction_input.output_level = compaction->output_level();
|
|
1050
|
+
|
|
1051
|
+
const std::vector<CompactionInputFiles>& inputs =
|
|
1052
|
+
*(compact_->compaction->inputs());
|
|
1053
|
+
for (const auto& files_per_level : inputs) {
|
|
1054
|
+
for (const auto& file : files_per_level.files) {
|
|
1055
|
+
compaction_input.input_files.emplace_back(
|
|
1056
|
+
MakeTableFileName(file->fd.GetNumber()));
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
compaction_input.column_family.name =
|
|
1060
|
+
compaction->column_family_data()->GetName();
|
|
1061
|
+
compaction_input.column_family.options =
|
|
1062
|
+
compaction->column_family_data()->GetLatestCFOptions();
|
|
1063
|
+
compaction_input.db_options =
|
|
1064
|
+
BuildDBOptions(db_options_, mutable_db_options_copy_);
|
|
1065
|
+
compaction_input.snapshots = existing_snapshots_;
|
|
1066
|
+
compaction_input.has_begin = sub_compact->start;
|
|
1067
|
+
compaction_input.begin =
|
|
1068
|
+
compaction_input.has_begin ? sub_compact->start->ToString() : "";
|
|
1069
|
+
compaction_input.has_end = sub_compact->end;
|
|
1070
|
+
compaction_input.end =
|
|
1071
|
+
compaction_input.has_end ? sub_compact->end->ToString() : "";
|
|
1072
|
+
compaction_input.approx_size = sub_compact->approx_size;
|
|
1073
|
+
|
|
1074
|
+
std::string compaction_input_binary;
|
|
1075
|
+
Status s = compaction_input.Write(&compaction_input_binary);
|
|
1076
|
+
if (!s.ok()) {
|
|
1077
|
+
sub_compact->status = s;
|
|
1078
|
+
return CompactionServiceJobStatus::kFailure;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
std::ostringstream input_files_oss;
|
|
1082
|
+
bool is_first_one = true;
|
|
1083
|
+
for (const auto& file : compaction_input.input_files) {
|
|
1084
|
+
input_files_oss << (is_first_one ? "" : ", ") << file;
|
|
1085
|
+
is_first_one = false;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
ROCKS_LOG_INFO(
|
|
1089
|
+
db_options_.info_log,
|
|
1090
|
+
"[%s] [JOB %d] Starting remote compaction (output level: %d): %s",
|
|
1091
|
+
compaction_input.column_family.name.c_str(), job_id_,
|
|
1092
|
+
compaction_input.output_level, input_files_oss.str().c_str());
|
|
1093
|
+
CompactionServiceJobInfo info(dbname_, db_id_, db_session_id_,
|
|
1094
|
+
GetCompactionId(sub_compact), thread_pri_);
|
|
1095
|
+
CompactionServiceJobStatus compaction_status =
|
|
1096
|
+
db_options_.compaction_service->StartV2(info, compaction_input_binary);
|
|
1097
|
+
switch (compaction_status) {
|
|
1098
|
+
case CompactionServiceJobStatus::kSuccess:
|
|
1099
|
+
break;
|
|
1100
|
+
case CompactionServiceJobStatus::kFailure:
|
|
1101
|
+
sub_compact->status = Status::Incomplete(
|
|
1102
|
+
"CompactionService failed to start compaction job.");
|
|
1103
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
1104
|
+
"[%s] [JOB %d] Remote compaction failed to start.",
|
|
1105
|
+
compaction_input.column_family.name.c_str(), job_id_);
|
|
1106
|
+
return compaction_status;
|
|
1107
|
+
case CompactionServiceJobStatus::kUseLocal:
|
|
1108
|
+
ROCKS_LOG_INFO(
|
|
1109
|
+
db_options_.info_log,
|
|
1110
|
+
"[%s] [JOB %d] Remote compaction fallback to local by API Start.",
|
|
1111
|
+
compaction_input.column_family.name.c_str(), job_id_);
|
|
1112
|
+
return compaction_status;
|
|
1113
|
+
default:
|
|
1114
|
+
assert(false); // unknown status
|
|
1115
|
+
break;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
1119
|
+
"[%s] [JOB %d] Waiting for remote compaction...",
|
|
1120
|
+
compaction_input.column_family.name.c_str(), job_id_);
|
|
1121
|
+
std::string compaction_result_binary;
|
|
1122
|
+
compaction_status = db_options_.compaction_service->WaitForCompleteV2(
|
|
1123
|
+
info, &compaction_result_binary);
|
|
1124
|
+
|
|
1125
|
+
if (compaction_status == CompactionServiceJobStatus::kUseLocal) {
|
|
1126
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
1127
|
+
"[%s] [JOB %d] Remote compaction fallback to local by API "
|
|
1128
|
+
"WaitForComplete.",
|
|
1129
|
+
compaction_input.column_family.name.c_str(), job_id_);
|
|
1130
|
+
return compaction_status;
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
CompactionServiceResult compaction_result;
|
|
1134
|
+
s = CompactionServiceResult::Read(compaction_result_binary,
|
|
1135
|
+
&compaction_result);
|
|
1136
|
+
|
|
1137
|
+
if (compaction_status == CompactionServiceJobStatus::kFailure) {
|
|
1138
|
+
if (s.ok()) {
|
|
1139
|
+
if (compaction_result.status.ok()) {
|
|
1140
|
+
sub_compact->status = Status::Incomplete(
|
|
1141
|
+
"CompactionService failed to run the compaction job (even though "
|
|
1142
|
+
"the internal status is okay).");
|
|
1143
|
+
} else {
|
|
1144
|
+
// set the current sub compaction status with the status returned from
|
|
1145
|
+
// remote
|
|
1146
|
+
sub_compact->status = compaction_result.status;
|
|
1147
|
+
}
|
|
1148
|
+
} else {
|
|
1149
|
+
sub_compact->status = Status::Incomplete(
|
|
1150
|
+
"CompactionService failed to run the compaction job (and no valid "
|
|
1151
|
+
"result is returned).");
|
|
1152
|
+
compaction_result.status.PermitUncheckedError();
|
|
1153
|
+
}
|
|
1154
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
1155
|
+
"[%s] [JOB %d] Remote compaction failed.",
|
|
1156
|
+
compaction_input.column_family.name.c_str(), job_id_);
|
|
1157
|
+
return compaction_status;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
if (!s.ok()) {
|
|
1161
|
+
sub_compact->status = s;
|
|
1162
|
+
compaction_result.status.PermitUncheckedError();
|
|
1163
|
+
return CompactionServiceJobStatus::kFailure;
|
|
1164
|
+
}
|
|
1165
|
+
sub_compact->status = compaction_result.status;
|
|
1166
|
+
|
|
1167
|
+
std::ostringstream output_files_oss;
|
|
1168
|
+
is_first_one = true;
|
|
1169
|
+
for (const auto& file : compaction_result.output_files) {
|
|
1170
|
+
output_files_oss << (is_first_one ? "" : ", ") << file.file_name;
|
|
1171
|
+
is_first_one = false;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
1175
|
+
"[%s] [JOB %d] Receive remote compaction result, output path: "
|
|
1176
|
+
"%s, files: %s",
|
|
1177
|
+
compaction_input.column_family.name.c_str(), job_id_,
|
|
1178
|
+
compaction_result.output_path.c_str(),
|
|
1179
|
+
output_files_oss.str().c_str());
|
|
1180
|
+
|
|
1181
|
+
if (!s.ok()) {
|
|
1182
|
+
sub_compact->status = s;
|
|
1183
|
+
return CompactionServiceJobStatus::kFailure;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
for (const auto& file : compaction_result.output_files) {
|
|
1187
|
+
uint64_t file_num = versions_->NewFileNumber();
|
|
1188
|
+
auto src_file = compaction_result.output_path + "/" + file.file_name;
|
|
1189
|
+
auto tgt_file = TableFileName(compaction->immutable_options()->cf_paths,
|
|
1190
|
+
file_num, compaction->output_path_id());
|
|
1191
|
+
s = fs_->RenameFile(src_file, tgt_file, IOOptions(), nullptr);
|
|
1192
|
+
if (!s.ok()) {
|
|
1193
|
+
sub_compact->status = s;
|
|
1194
|
+
return CompactionServiceJobStatus::kFailure;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
FileMetaData meta;
|
|
1198
|
+
uint64_t file_size;
|
|
1199
|
+
s = fs_->GetFileSize(tgt_file, IOOptions(), &file_size, nullptr);
|
|
1200
|
+
if (!s.ok()) {
|
|
1201
|
+
sub_compact->status = s;
|
|
1202
|
+
return CompactionServiceJobStatus::kFailure;
|
|
1203
|
+
}
|
|
1204
|
+
meta.fd = FileDescriptor(file_num, compaction->output_path_id(), file_size,
|
|
1205
|
+
file.smallest_seqno, file.largest_seqno);
|
|
1206
|
+
meta.smallest.DecodeFrom(file.smallest_internal_key);
|
|
1207
|
+
meta.largest.DecodeFrom(file.largest_internal_key);
|
|
1208
|
+
meta.oldest_ancester_time = file.oldest_ancester_time;
|
|
1209
|
+
meta.file_creation_time = file.file_creation_time;
|
|
1210
|
+
meta.marked_for_compaction = file.marked_for_compaction;
|
|
1211
|
+
|
|
1212
|
+
auto cfd = compaction->column_family_data();
|
|
1213
|
+
sub_compact->outputs.emplace_back(std::move(meta),
|
|
1214
|
+
cfd->internal_comparator(), false, false,
|
|
1215
|
+
true, file.paranoid_hash);
|
|
1216
|
+
}
|
|
1217
|
+
sub_compact->compaction_job_stats = compaction_result.stats;
|
|
1218
|
+
sub_compact->num_output_records = compaction_result.num_output_records;
|
|
1219
|
+
sub_compact->approx_size = compaction_input.approx_size; // is this used?
|
|
1220
|
+
sub_compact->total_bytes = compaction_result.total_bytes;
|
|
1221
|
+
RecordTick(stats_, REMOTE_COMPACT_READ_BYTES, compaction_result.bytes_read);
|
|
1222
|
+
RecordTick(stats_, REMOTE_COMPACT_WRITE_BYTES,
|
|
1223
|
+
compaction_result.bytes_written);
|
|
1224
|
+
return CompactionServiceJobStatus::kSuccess;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
void CompactionJob::BuildSubcompactionJobInfo(
|
|
1228
|
+
SubcompactionState* sub_compact,
|
|
1229
|
+
SubcompactionJobInfo* subcompaction_job_info) const {
|
|
1230
|
+
Compaction* c = compact_->compaction;
|
|
1231
|
+
ColumnFamilyData* cfd = c->column_family_data();
|
|
1232
|
+
|
|
1233
|
+
subcompaction_job_info->cf_id = cfd->GetID();
|
|
1234
|
+
subcompaction_job_info->cf_name = cfd->GetName();
|
|
1235
|
+
subcompaction_job_info->status = sub_compact->status;
|
|
1236
|
+
subcompaction_job_info->thread_id = env_->GetThreadID();
|
|
1237
|
+
subcompaction_job_info->job_id = job_id_;
|
|
1238
|
+
subcompaction_job_info->subcompaction_job_id = sub_compact->sub_job_id;
|
|
1239
|
+
subcompaction_job_info->base_input_level = c->start_level();
|
|
1240
|
+
subcompaction_job_info->output_level = c->output_level();
|
|
1241
|
+
subcompaction_job_info->stats = sub_compact->compaction_job_stats;
|
|
1242
|
+
}
|
|
1243
|
+
#endif // !ROCKSDB_LITE
|
|
1244
|
+
|
|
1245
|
+
void CompactionJob::NotifyOnSubcompactionBegin(
|
|
1246
|
+
SubcompactionState* sub_compact) {
|
|
1247
|
+
#ifndef ROCKSDB_LITE
|
|
1248
|
+
Compaction* c = compact_->compaction;
|
|
1249
|
+
|
|
1250
|
+
if (db_options_.listeners.empty()) {
|
|
1251
|
+
return;
|
|
1252
|
+
}
|
|
1253
|
+
if (shutting_down_->load(std::memory_order_acquire)) {
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
if (c->is_manual_compaction() && manual_compaction_paused_ &&
|
|
1257
|
+
manual_compaction_paused_->load(std::memory_order_acquire) > 0) {
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
sub_compact->notify_on_subcompaction_completion = true;
|
|
1262
|
+
|
|
1263
|
+
SubcompactionJobInfo info{};
|
|
1264
|
+
BuildSubcompactionJobInfo(sub_compact, &info);
|
|
1265
|
+
|
|
1266
|
+
for (auto listener : db_options_.listeners) {
|
|
1267
|
+
listener->OnSubcompactionBegin(info);
|
|
1268
|
+
}
|
|
1269
|
+
info.status.PermitUncheckedError();
|
|
1270
|
+
|
|
1271
|
+
#else
|
|
1272
|
+
(void)sub_compact;
|
|
1273
|
+
#endif // ROCKSDB_LITE
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
void CompactionJob::NotifyOnSubcompactionCompleted(
|
|
1277
|
+
SubcompactionState* sub_compact) {
|
|
1278
|
+
#ifndef ROCKSDB_LITE
|
|
1279
|
+
|
|
1280
|
+
if (db_options_.listeners.empty()) {
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1283
|
+
if (shutting_down_->load(std::memory_order_acquire)) {
|
|
1284
|
+
return;
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
if (sub_compact->notify_on_subcompaction_completion == false) {
|
|
1288
|
+
return;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
SubcompactionJobInfo info{};
|
|
1292
|
+
BuildSubcompactionJobInfo(sub_compact, &info);
|
|
1293
|
+
|
|
1294
|
+
for (auto listener : db_options_.listeners) {
|
|
1295
|
+
listener->OnSubcompactionCompleted(info);
|
|
1296
|
+
}
|
|
1297
|
+
#else
|
|
1298
|
+
(void)sub_compact;
|
|
1299
|
+
#endif // ROCKSDB_LITE
|
|
1300
|
+
}
|
|
1301
|
+
|
|
893
1302
|
void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
894
1303
|
assert(sub_compact);
|
|
895
1304
|
assert(sub_compact->compaction);
|
|
896
1305
|
|
|
897
|
-
|
|
1306
|
+
#ifndef ROCKSDB_LITE
|
|
1307
|
+
if (db_options_.compaction_service) {
|
|
1308
|
+
CompactionServiceJobStatus comp_status =
|
|
1309
|
+
ProcessKeyValueCompactionWithCompactionService(sub_compact);
|
|
1310
|
+
if (comp_status == CompactionServiceJobStatus::kSuccess ||
|
|
1311
|
+
comp_status == CompactionServiceJobStatus::kFailure) {
|
|
1312
|
+
return;
|
|
1313
|
+
}
|
|
1314
|
+
// fallback to local compaction
|
|
1315
|
+
assert(comp_status == CompactionServiceJobStatus::kUseLocal);
|
|
1316
|
+
}
|
|
1317
|
+
#endif // !ROCKSDB_LITE
|
|
1318
|
+
|
|
1319
|
+
uint64_t prev_cpu_micros = db_options_.clock->CPUMicros();
|
|
898
1320
|
|
|
899
1321
|
ColumnFamilyData* cfd = sub_compact->compaction->column_family_data();
|
|
900
1322
|
|
|
@@ -915,22 +1337,82 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
915
1337
|
return;
|
|
916
1338
|
}
|
|
917
1339
|
|
|
1340
|
+
NotifyOnSubcompactionBegin(sub_compact);
|
|
1341
|
+
|
|
918
1342
|
CompactionRangeDelAggregator range_del_agg(&cfd->internal_comparator(),
|
|
919
1343
|
existing_snapshots_);
|
|
1344
|
+
|
|
1345
|
+
// TODO: since we already use C++17, should use
|
|
1346
|
+
// std::optional<const Slice> instead.
|
|
1347
|
+
const Slice* const start = sub_compact->start;
|
|
1348
|
+
const Slice* const end = sub_compact->end;
|
|
1349
|
+
|
|
920
1350
|
ReadOptions read_options;
|
|
921
1351
|
read_options.verify_checksums = true;
|
|
922
1352
|
read_options.fill_cache = false;
|
|
1353
|
+
read_options.rate_limiter_priority = Env::IO_LOW;
|
|
923
1354
|
// Compaction iterators shouldn't be confined to a single prefix.
|
|
924
1355
|
// Compactions use Seek() for
|
|
925
1356
|
// (a) concurrent compactions,
|
|
926
1357
|
// (b) CompactionFilter::Decision::kRemoveAndSkipUntil.
|
|
927
1358
|
read_options.total_order_seek = true;
|
|
928
1359
|
|
|
1360
|
+
// Note: if we're going to support subcompactions for user-defined timestamps,
|
|
1361
|
+
// the timestamp part will have to be stripped from the bounds here.
|
|
1362
|
+
assert((!start && !end) || cfd->user_comparator()->timestamp_size() == 0);
|
|
1363
|
+
read_options.iterate_lower_bound = start;
|
|
1364
|
+
read_options.iterate_upper_bound = end;
|
|
1365
|
+
|
|
929
1366
|
// Although the v2 aggregator is what the level iterator(s) know about,
|
|
930
1367
|
// the AddTombstones calls will be propagated down to the v1 aggregator.
|
|
931
|
-
std::unique_ptr<InternalIterator>
|
|
932
|
-
|
|
933
|
-
|
|
1368
|
+
std::unique_ptr<InternalIterator> raw_input(versions_->MakeInputIterator(
|
|
1369
|
+
read_options, sub_compact->compaction, &range_del_agg,
|
|
1370
|
+
file_options_for_read_,
|
|
1371
|
+
(start == nullptr) ? std::optional<const Slice>{}
|
|
1372
|
+
: std::optional<const Slice>{*start},
|
|
1373
|
+
(end == nullptr) ? std::optional<const Slice>{}
|
|
1374
|
+
: std::optional<const Slice>{*end}));
|
|
1375
|
+
InternalIterator* input = raw_input.get();
|
|
1376
|
+
|
|
1377
|
+
IterKey start_ikey;
|
|
1378
|
+
IterKey end_ikey;
|
|
1379
|
+
Slice start_slice;
|
|
1380
|
+
Slice end_slice;
|
|
1381
|
+
|
|
1382
|
+
if (start) {
|
|
1383
|
+
start_ikey.SetInternalKey(*start, kMaxSequenceNumber, kValueTypeForSeek);
|
|
1384
|
+
start_slice = start_ikey.GetInternalKey();
|
|
1385
|
+
}
|
|
1386
|
+
if (end) {
|
|
1387
|
+
end_ikey.SetInternalKey(*end, kMaxSequenceNumber, kValueTypeForSeek);
|
|
1388
|
+
end_slice = end_ikey.GetInternalKey();
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
std::unique_ptr<InternalIterator> clip;
|
|
1392
|
+
if (start || end) {
|
|
1393
|
+
clip = std::make_unique<ClippingIterator>(
|
|
1394
|
+
raw_input.get(), start ? &start_slice : nullptr,
|
|
1395
|
+
end ? &end_slice : nullptr, &cfd->internal_comparator());
|
|
1396
|
+
input = clip.get();
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
std::unique_ptr<InternalIterator> blob_counter;
|
|
1400
|
+
|
|
1401
|
+
if (sub_compact->compaction->DoesInputReferenceBlobFiles()) {
|
|
1402
|
+
sub_compact->blob_garbage_meter = std::make_unique<BlobGarbageMeter>();
|
|
1403
|
+
blob_counter = std::make_unique<BlobCountingIterator>(
|
|
1404
|
+
input, sub_compact->blob_garbage_meter.get());
|
|
1405
|
+
input = blob_counter.get();
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
std::unique_ptr<InternalIterator> trim_history_iter;
|
|
1409
|
+
if (cfd->user_comparator()->timestamp_size() > 0 && !trim_ts_.empty()) {
|
|
1410
|
+
trim_history_iter = std::make_unique<HistoryTrimmingIterator>(
|
|
1411
|
+
input, cfd->user_comparator(), trim_ts_);
|
|
1412
|
+
input = trim_history_iter.get();
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
input->SeekToFirst();
|
|
934
1416
|
|
|
935
1417
|
AutoThreadOperationStageUpdater stage_updater(
|
|
936
1418
|
ThreadStatus::STAGE_COMPACTION_PROCESS_KV);
|
|
@@ -956,12 +1438,11 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
956
1438
|
}
|
|
957
1439
|
|
|
958
1440
|
MergeHelper merge(
|
|
959
|
-
env_, cfd->user_comparator(), cfd->ioptions()->merge_operator,
|
|
1441
|
+
env_, cfd->user_comparator(), cfd->ioptions()->merge_operator.get(),
|
|
960
1442
|
compaction_filter, db_options_.info_log.get(),
|
|
961
1443
|
false /* internal key corruption is expected */,
|
|
962
1444
|
existing_snapshots_.empty() ? 0 : existing_snapshots_.back(),
|
|
963
|
-
snapshot_checker_, compact_->compaction->level(),
|
|
964
|
-
db_options_.statistics.get());
|
|
1445
|
+
snapshot_checker_, compact_->compaction->level(), db_options_.stats);
|
|
965
1446
|
|
|
966
1447
|
const MutableCFOptions* mutable_cf_options =
|
|
967
1448
|
sub_compact->compaction->mutable_cf_options();
|
|
@@ -972,10 +1453,11 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
972
1453
|
std::unique_ptr<BlobFileBuilder> blob_file_builder(
|
|
973
1454
|
mutable_cf_options->enable_blob_files
|
|
974
1455
|
? new BlobFileBuilder(
|
|
975
|
-
versions_,
|
|
976
|
-
sub_compact->compaction->
|
|
1456
|
+
versions_, fs_.get(),
|
|
1457
|
+
sub_compact->compaction->immutable_options(),
|
|
977
1458
|
mutable_cf_options, &file_options_, job_id_, cfd->GetID(),
|
|
978
1459
|
cfd->GetName(), Env::IOPriority::IO_LOW, write_hint_,
|
|
1460
|
+
io_tracer_, blob_callback_, BlobFileCreationReason::kCompaction,
|
|
979
1461
|
&blob_file_paths, &sub_compact->blob_file_additions)
|
|
980
1462
|
: nullptr);
|
|
981
1463
|
|
|
@@ -985,31 +1467,25 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
985
1467
|
reinterpret_cast<void*>(
|
|
986
1468
|
const_cast<std::atomic<int>*>(manual_compaction_paused_)));
|
|
987
1469
|
|
|
988
|
-
Slice* start = sub_compact->start;
|
|
989
|
-
Slice* end = sub_compact->end;
|
|
990
|
-
if (start != nullptr) {
|
|
991
|
-
IterKey start_iter;
|
|
992
|
-
start_iter.SetInternalKey(*start, kMaxSequenceNumber, kValueTypeForSeek);
|
|
993
|
-
input->Seek(start_iter.GetInternalKey());
|
|
994
|
-
} else {
|
|
995
|
-
input->SeekToFirst();
|
|
996
|
-
}
|
|
997
|
-
|
|
998
1470
|
Status status;
|
|
999
1471
|
const std::string* const full_history_ts_low =
|
|
1000
1472
|
full_history_ts_low_.empty() ? nullptr : &full_history_ts_low_;
|
|
1473
|
+
const SequenceNumber job_snapshot_seq =
|
|
1474
|
+
job_context_ ? job_context_->GetJobSnapshotSequence()
|
|
1475
|
+
: kMaxSequenceNumber;
|
|
1001
1476
|
sub_compact->c_iter.reset(new CompactionIterator(
|
|
1002
|
-
input
|
|
1003
|
-
&existing_snapshots_, earliest_write_conflict_snapshot_,
|
|
1477
|
+
input, cfd->user_comparator(), &merge, versions_->LastSequence(),
|
|
1478
|
+
&existing_snapshots_, earliest_write_conflict_snapshot_, job_snapshot_seq,
|
|
1004
1479
|
snapshot_checker_, env_, ShouldReportDetailedTime(env_, stats_),
|
|
1005
1480
|
/*expect_valid_internal_key=*/true, &range_del_agg,
|
|
1006
1481
|
blob_file_builder.get(), db_options_.allow_data_in_errors,
|
|
1007
1482
|
sub_compact->compaction, compaction_filter, shutting_down_,
|
|
1008
|
-
|
|
1009
|
-
full_history_ts_low));
|
|
1483
|
+
manual_compaction_paused_, manual_compaction_canceled_,
|
|
1484
|
+
db_options_.info_log, full_history_ts_low));
|
|
1010
1485
|
auto c_iter = sub_compact->c_iter.get();
|
|
1011
1486
|
c_iter->SeekToFirst();
|
|
1012
1487
|
if (c_iter->Valid() && sub_compact->compaction->output_level() != 0) {
|
|
1488
|
+
sub_compact->FillFilesToCutForTtl();
|
|
1013
1489
|
// ShouldStopBefore() maintains state based on keys processed so far. The
|
|
1014
1490
|
// compaction loop always calls it on the "next" key, thus won't tell it the
|
|
1015
1491
|
// first key. So we do that here.
|
|
@@ -1030,12 +1506,9 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1030
1506
|
const Slice& key = c_iter->key();
|
|
1031
1507
|
const Slice& value = c_iter->value();
|
|
1032
1508
|
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
cfd->user_comparator()->Compare(c_iter->user_key(), *end) >= 0) {
|
|
1037
|
-
break;
|
|
1038
|
-
}
|
|
1509
|
+
assert(!end ||
|
|
1510
|
+
cfd->user_comparator()->Compare(c_iter->user_key(), *end) < 0);
|
|
1511
|
+
|
|
1039
1512
|
if (c_iter_stats.num_input_records % kRecordStatsEvery ==
|
|
1040
1513
|
kRecordStatsEvery - 1) {
|
|
1041
1514
|
RecordDroppedKeys(c_iter_stats, &sub_compact->compaction_job_stats);
|
|
@@ -1055,11 +1528,20 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1055
1528
|
break;
|
|
1056
1529
|
}
|
|
1057
1530
|
|
|
1058
|
-
sub_compact->
|
|
1059
|
-
|
|
1531
|
+
status = sub_compact->ProcessOutFlowIfNeeded(key, value);
|
|
1532
|
+
if (!status.ok()) {
|
|
1533
|
+
break;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1060
1536
|
const ParsedInternalKey& ikey = c_iter->ikey();
|
|
1061
|
-
sub_compact->current_output()->meta.UpdateBoundaries(
|
|
1537
|
+
status = sub_compact->current_output()->meta.UpdateBoundaries(
|
|
1062
1538
|
key, value, ikey.sequence, ikey.type);
|
|
1539
|
+
if (!status.ok()) {
|
|
1540
|
+
break;
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
sub_compact->current_output_file_size =
|
|
1544
|
+
sub_compact->builder->EstimatedFileSize();
|
|
1063
1545
|
sub_compact->num_output_records++;
|
|
1064
1546
|
|
|
1065
1547
|
// Close output file if it is big enough. Two possibilities determine it's
|
|
@@ -1119,6 +1601,10 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1119
1601
|
}
|
|
1120
1602
|
}
|
|
1121
1603
|
|
|
1604
|
+
sub_compact->compaction_job_stats.num_blobs_read =
|
|
1605
|
+
c_iter_stats.num_blobs_read;
|
|
1606
|
+
sub_compact->compaction_job_stats.total_blob_bytes_read =
|
|
1607
|
+
c_iter_stats.total_blob_bytes_read;
|
|
1122
1608
|
sub_compact->compaction_job_stats.num_input_deletion_records =
|
|
1123
1609
|
c_iter_stats.num_input_deletion_records;
|
|
1124
1610
|
sub_compact->compaction_job_stats.num_corrupt_keys =
|
|
@@ -1134,6 +1620,16 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1134
1620
|
|
|
1135
1621
|
RecordTick(stats_, FILTER_OPERATION_TOTAL_TIME,
|
|
1136
1622
|
c_iter_stats.total_filter_time);
|
|
1623
|
+
|
|
1624
|
+
if (c_iter_stats.num_blobs_relocated > 0) {
|
|
1625
|
+
RecordTick(stats_, BLOB_DB_GC_NUM_KEYS_RELOCATED,
|
|
1626
|
+
c_iter_stats.num_blobs_relocated);
|
|
1627
|
+
}
|
|
1628
|
+
if (c_iter_stats.total_blob_bytes_relocated > 0) {
|
|
1629
|
+
RecordTick(stats_, BLOB_DB_GC_BYTES_RELOCATED,
|
|
1630
|
+
c_iter_stats.total_blob_bytes_relocated);
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1137
1633
|
RecordDroppedKeys(c_iter_stats, &sub_compact->compaction_job_stats);
|
|
1138
1634
|
RecordCompactionIOStats();
|
|
1139
1635
|
|
|
@@ -1146,8 +1642,10 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1146
1642
|
status = Status::ShutdownInProgress("Database shutdown");
|
|
1147
1643
|
}
|
|
1148
1644
|
if ((status.ok() || status.IsColumnFamilyDropped()) &&
|
|
1149
|
-
(manual_compaction_paused_ &&
|
|
1150
|
-
|
|
1645
|
+
((manual_compaction_paused_ &&
|
|
1646
|
+
manual_compaction_paused_->load(std::memory_order_relaxed) > 0) ||
|
|
1647
|
+
(manual_compaction_canceled_ &&
|
|
1648
|
+
manual_compaction_canceled_->load(std::memory_order_relaxed)))) {
|
|
1151
1649
|
status = Status::Incomplete(Status::SubCode::kManualCompactionPaused);
|
|
1152
1650
|
}
|
|
1153
1651
|
if (status.ok()) {
|
|
@@ -1178,13 +1676,14 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1178
1676
|
if (blob_file_builder) {
|
|
1179
1677
|
if (status.ok()) {
|
|
1180
1678
|
status = blob_file_builder->Finish();
|
|
1679
|
+
} else {
|
|
1680
|
+
blob_file_builder->Abandon(status);
|
|
1181
1681
|
}
|
|
1182
|
-
|
|
1183
1682
|
blob_file_builder.reset();
|
|
1184
1683
|
}
|
|
1185
1684
|
|
|
1186
1685
|
sub_compact->compaction_job_stats.cpu_micros =
|
|
1187
|
-
|
|
1686
|
+
db_options_.clock->CPUMicros() - prev_cpu_micros;
|
|
1188
1687
|
|
|
1189
1688
|
if (measure_io_stats_) {
|
|
1190
1689
|
sub_compact->compaction_job_stats.file_write_nanos +=
|
|
@@ -1215,8 +1714,15 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1215
1714
|
#endif // ROCKSDB_ASSERT_STATUS_CHECKED
|
|
1216
1715
|
|
|
1217
1716
|
sub_compact->c_iter.reset();
|
|
1218
|
-
|
|
1717
|
+
blob_counter.reset();
|
|
1718
|
+
clip.reset();
|
|
1719
|
+
raw_input.reset();
|
|
1219
1720
|
sub_compact->status = status;
|
|
1721
|
+
NotifyOnSubcompactionCompleted(sub_compact);
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
uint64_t CompactionJob::GetCompactionId(SubcompactionState* sub_compact) {
|
|
1725
|
+
return (uint64_t)job_id_ << 32 | sub_compact->sub_job_id;
|
|
1220
1726
|
}
|
|
1221
1727
|
|
|
1222
1728
|
void CompactionJob::RecordDroppedKeys(
|
|
@@ -1433,7 +1939,6 @@ Status CompactionJob::FinishCompactionOutputFile(
|
|
|
1433
1939
|
meta->UpdateBoundariesForRange(smallest_candidate, largest_candidate,
|
|
1434
1940
|
tombstone.seq_,
|
|
1435
1941
|
cfd->internal_comparator());
|
|
1436
|
-
|
|
1437
1942
|
// The smallest key in a file is used for range tombstone truncation, so
|
|
1438
1943
|
// it cannot have a seqnum of 0 (unless the smallest data key in a file
|
|
1439
1944
|
// has a seqnum of 0). Otherwise, the truncated tombstone may expose
|
|
@@ -1457,13 +1962,30 @@ Status CompactionJob::FinishCompactionOutputFile(
|
|
|
1457
1962
|
if (s.ok()) {
|
|
1458
1963
|
meta->fd.file_size = current_bytes;
|
|
1459
1964
|
meta->marked_for_compaction = sub_compact->builder->NeedCompact();
|
|
1965
|
+
// With accurate smallest and largest key, we can get a slightly more
|
|
1966
|
+
// accurate oldest ancester time.
|
|
1967
|
+
// This makes oldest ancester time in manifest more accurate than in
|
|
1968
|
+
// table properties. Not sure how to resolve it.
|
|
1969
|
+
if (meta->smallest.size() > 0 && meta->largest.size() > 0) {
|
|
1970
|
+
uint64_t refined_oldest_ancester_time;
|
|
1971
|
+
Slice new_smallest = meta->smallest.user_key();
|
|
1972
|
+
Slice new_largest = meta->largest.user_key();
|
|
1973
|
+
if (!new_largest.empty() && !new_smallest.empty()) {
|
|
1974
|
+
refined_oldest_ancester_time =
|
|
1975
|
+
sub_compact->compaction->MinInputFileOldestAncesterTime(
|
|
1976
|
+
&(meta->smallest), &(meta->largest));
|
|
1977
|
+
if (refined_oldest_ancester_time != port::kMaxUint64) {
|
|
1978
|
+
meta->oldest_ancester_time = refined_oldest_ancester_time;
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1460
1982
|
}
|
|
1461
1983
|
sub_compact->current_output()->finished = true;
|
|
1462
1984
|
sub_compact->total_bytes += current_bytes;
|
|
1463
1985
|
|
|
1464
1986
|
// Finish and check for file errors
|
|
1465
1987
|
if (s.ok()) {
|
|
1466
|
-
StopWatch sw(
|
|
1988
|
+
StopWatch sw(db_options_.clock, stats_, COMPACTION_OUTFILE_SYNC_MICROS);
|
|
1467
1989
|
io_s = sub_compact->outfile->Sync(db_options_.use_fsync);
|
|
1468
1990
|
}
|
|
1469
1991
|
if (s.ok() && io_s.ok()) {
|
|
@@ -1498,7 +2020,7 @@ Status CompactionJob::FinishCompactionOutputFile(
|
|
|
1498
2020
|
// This happens when the output level is bottom level, at the same time
|
|
1499
2021
|
// the sub_compact output nothing.
|
|
1500
2022
|
std::string fname =
|
|
1501
|
-
TableFileName(sub_compact->compaction->
|
|
2023
|
+
TableFileName(sub_compact->compaction->immutable_options()->cf_paths,
|
|
1502
2024
|
meta->fd.GetNumber(), meta->fd.GetPathId());
|
|
1503
2025
|
|
|
1504
2026
|
// TODO(AR) it is not clear if there are any larger implications if
|
|
@@ -1534,19 +2056,21 @@ Status CompactionJob::FinishCompactionOutputFile(
|
|
|
1534
2056
|
std::string fname;
|
|
1535
2057
|
FileDescriptor output_fd;
|
|
1536
2058
|
uint64_t oldest_blob_file_number = kInvalidBlobFileNumber;
|
|
2059
|
+
Status status_for_listener = s;
|
|
1537
2060
|
if (meta != nullptr) {
|
|
1538
|
-
fname =
|
|
1539
|
-
TableFileName(sub_compact->compaction->immutable_cf_options()->cf_paths,
|
|
1540
|
-
meta->fd.GetNumber(), meta->fd.GetPathId());
|
|
2061
|
+
fname = GetTableFileName(meta->fd.GetNumber());
|
|
1541
2062
|
output_fd = meta->fd;
|
|
1542
2063
|
oldest_blob_file_number = meta->oldest_blob_file_number;
|
|
1543
2064
|
} else {
|
|
1544
2065
|
fname = "(nil)";
|
|
2066
|
+
if (s.ok()) {
|
|
2067
|
+
status_for_listener = Status::Aborted("Empty SST file not kept");
|
|
2068
|
+
}
|
|
1545
2069
|
}
|
|
1546
2070
|
EventHelpers::LogAndNotifyTableFileCreationFinished(
|
|
1547
2071
|
event_logger_, cfd->ioptions()->listeners, dbname_, cfd->GetName(), fname,
|
|
1548
2072
|
job_id_, output_fd, oldest_blob_file_number, tp,
|
|
1549
|
-
TableFileCreationReason::kCompaction,
|
|
2073
|
+
TableFileCreationReason::kCompaction, status_for_listener, file_checksum,
|
|
1550
2074
|
file_checksum_func_name);
|
|
1551
2075
|
|
|
1552
2076
|
#ifndef ROCKSDB_LITE
|
|
@@ -1585,19 +2109,6 @@ Status CompactionJob::InstallCompactionResults(
|
|
|
1585
2109
|
auto* compaction = compact_->compaction;
|
|
1586
2110
|
assert(compaction);
|
|
1587
2111
|
|
|
1588
|
-
// paranoia: verify that the files that we started with
|
|
1589
|
-
// still exist in the current version and in the same original level.
|
|
1590
|
-
// This ensures that a concurrent compaction did not erroneously
|
|
1591
|
-
// pick the same files to compact_.
|
|
1592
|
-
if (!versions_->VerifyCompactionFileConsistency(compaction)) {
|
|
1593
|
-
Compaction::InputLevelSummaryBuffer inputs_summary;
|
|
1594
|
-
|
|
1595
|
-
ROCKS_LOG_ERROR(db_options_.info_log, "[%s] [JOB %d] Compaction %s aborted",
|
|
1596
|
-
compaction->column_family_data()->GetName().c_str(),
|
|
1597
|
-
job_id_, compaction->InputLevelSummary(&inputs_summary));
|
|
1598
|
-
return Status::Corruption("Compaction input files inconsistent");
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
2112
|
{
|
|
1602
2113
|
Compaction::InputLevelSummaryBuffer inputs_summary;
|
|
1603
2114
|
ROCKS_LOG_INFO(db_options_.info_log,
|
|
@@ -1613,6 +2124,8 @@ Status CompactionJob::InstallCompactionResults(
|
|
|
1613
2124
|
// Add compaction inputs
|
|
1614
2125
|
compaction->AddInputDeletions(edit);
|
|
1615
2126
|
|
|
2127
|
+
std::unordered_map<uint64_t, BlobGarbageMeter::BlobStats> blob_total_garbage;
|
|
2128
|
+
|
|
1616
2129
|
for (const auto& sub_compact : compact_->sub_compact_states) {
|
|
1617
2130
|
for (const auto& out : sub_compact.outputs) {
|
|
1618
2131
|
edit->AddFile(compaction->output_level(), out.meta);
|
|
@@ -1621,6 +2134,29 @@ Status CompactionJob::InstallCompactionResults(
|
|
|
1621
2134
|
for (const auto& blob : sub_compact.blob_file_additions) {
|
|
1622
2135
|
edit->AddBlobFile(blob);
|
|
1623
2136
|
}
|
|
2137
|
+
|
|
2138
|
+
if (sub_compact.blob_garbage_meter) {
|
|
2139
|
+
const auto& flows = sub_compact.blob_garbage_meter->flows();
|
|
2140
|
+
|
|
2141
|
+
for (const auto& pair : flows) {
|
|
2142
|
+
const uint64_t blob_file_number = pair.first;
|
|
2143
|
+
const BlobGarbageMeter::BlobInOutFlow& flow = pair.second;
|
|
2144
|
+
|
|
2145
|
+
assert(flow.IsValid());
|
|
2146
|
+
if (flow.HasGarbage()) {
|
|
2147
|
+
blob_total_garbage[blob_file_number].Add(flow.GetGarbageCount(),
|
|
2148
|
+
flow.GetGarbageBytes());
|
|
2149
|
+
}
|
|
2150
|
+
}
|
|
2151
|
+
}
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
for (const auto& pair : blob_total_garbage) {
|
|
2155
|
+
const uint64_t blob_file_number = pair.first;
|
|
2156
|
+
const BlobGarbageMeter::BlobStats& stats = pair.second;
|
|
2157
|
+
|
|
2158
|
+
edit->AddBlobFileGarbage(blob_file_number, stats.GetCount(),
|
|
2159
|
+
stats.GetBytes());
|
|
1624
2160
|
}
|
|
1625
2161
|
|
|
1626
2162
|
return versions_->LogAndApply(compaction->column_family_data(),
|
|
@@ -1657,9 +2193,7 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1657
2193
|
assert(sub_compact->builder == nullptr);
|
|
1658
2194
|
// no need to lock because VersionSet::next_file_number_ is atomic
|
|
1659
2195
|
uint64_t file_number = versions_->NewFileNumber();
|
|
1660
|
-
std::string fname =
|
|
1661
|
-
TableFileName(sub_compact->compaction->immutable_cf_options()->cf_paths,
|
|
1662
|
-
file_number, sub_compact->compaction->output_path_id());
|
|
2196
|
+
std::string fname = GetTableFileName(file_number);
|
|
1663
2197
|
// Fire events.
|
|
1664
2198
|
ColumnFamilyData* cfd = sub_compact->compaction->column_family_data();
|
|
1665
2199
|
#ifndef ROCKSDB_LITE
|
|
@@ -1674,9 +2208,18 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1674
2208
|
TEST_SYNC_POINT_CALLBACK("CompactionJob::OpenCompactionOutputFile",
|
|
1675
2209
|
&syncpoint_arg);
|
|
1676
2210
|
#endif
|
|
2211
|
+
|
|
2212
|
+
// Pass temperature of botommost files to FileSystem.
|
|
2213
|
+
FileOptions fo_copy = file_options_;
|
|
2214
|
+
Temperature temperature = sub_compact->compaction->output_temperature();
|
|
2215
|
+
if (temperature == Temperature::kUnknown && bottommost_level_) {
|
|
2216
|
+
temperature =
|
|
2217
|
+
sub_compact->compaction->mutable_cf_options()->bottommost_temperature;
|
|
2218
|
+
}
|
|
2219
|
+
fo_copy.temperature = temperature;
|
|
2220
|
+
|
|
1677
2221
|
Status s;
|
|
1678
|
-
IOStatus io_s =
|
|
1679
|
-
NewWritableFile(fs_.get(), fname, &writable_file, file_options_);
|
|
2222
|
+
IOStatus io_s = NewWritableFile(fs_.get(), fname, &writable_file, fo_copy);
|
|
1680
2223
|
s = io_s;
|
|
1681
2224
|
if (sub_compact->io_status.ok()) {
|
|
1682
2225
|
sub_compact->io_status = io_s;
|
|
@@ -1702,7 +2245,7 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1702
2245
|
|
|
1703
2246
|
// Try to figure out the output file's oldest ancester time.
|
|
1704
2247
|
int64_t temp_current_time = 0;
|
|
1705
|
-
auto get_time_status =
|
|
2248
|
+
auto get_time_status = db_options_.clock->GetCurrentTime(&temp_current_time);
|
|
1706
2249
|
// Safe to proceed even if GetCurrentTime fails. So, log and proceed.
|
|
1707
2250
|
if (!get_time_status.ok()) {
|
|
1708
2251
|
ROCKS_LOG_WARN(db_options_.info_log,
|
|
@@ -1710,8 +2253,17 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1710
2253
|
get_time_status.ToString().c_str());
|
|
1711
2254
|
}
|
|
1712
2255
|
uint64_t current_time = static_cast<uint64_t>(temp_current_time);
|
|
2256
|
+
InternalKey tmp_start, tmp_end;
|
|
2257
|
+
if (sub_compact->start != nullptr) {
|
|
2258
|
+
tmp_start.SetMinPossibleForUserKey(*(sub_compact->start));
|
|
2259
|
+
}
|
|
2260
|
+
if (sub_compact->end != nullptr) {
|
|
2261
|
+
tmp_end.SetMinPossibleForUserKey(*(sub_compact->end));
|
|
2262
|
+
}
|
|
1713
2263
|
uint64_t oldest_ancester_time =
|
|
1714
|
-
sub_compact->compaction->MinInputFileOldestAncesterTime(
|
|
2264
|
+
sub_compact->compaction->MinInputFileOldestAncesterTime(
|
|
2265
|
+
(sub_compact->start != nullptr) ? &tmp_start : nullptr,
|
|
2266
|
+
(sub_compact->end != nullptr) ? &tmp_end : nullptr);
|
|
1715
2267
|
if (oldest_ancester_time == port::kMaxUint64) {
|
|
1716
2268
|
oldest_ancester_time = current_time;
|
|
1717
2269
|
}
|
|
@@ -1723,6 +2275,7 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1723
2275
|
sub_compact->compaction->output_path_id(), 0);
|
|
1724
2276
|
meta.oldest_ancester_time = oldest_ancester_time;
|
|
1725
2277
|
meta.file_creation_time = current_time;
|
|
2278
|
+
meta.temperature = temperature;
|
|
1726
2279
|
sub_compact->outputs.emplace_back(
|
|
1727
2280
|
std::move(meta), cfd->internal_comparator(),
|
|
1728
2281
|
/*enable_order_check=*/
|
|
@@ -1733,32 +2286,28 @@ Status CompactionJob::OpenCompactionOutputFile(
|
|
|
1733
2286
|
|
|
1734
2287
|
writable_file->SetIOPriority(Env::IOPriority::IO_LOW);
|
|
1735
2288
|
writable_file->SetWriteLifeTimeHint(write_hint_);
|
|
2289
|
+
FileTypeSet tmp_set = db_options_.checksum_handoff_file_types;
|
|
1736
2290
|
writable_file->SetPreallocationBlockSize(static_cast<size_t>(
|
|
1737
2291
|
sub_compact->compaction->OutputFilePreallocationSize()));
|
|
1738
2292
|
const auto& listeners =
|
|
1739
|
-
sub_compact->compaction->
|
|
2293
|
+
sub_compact->compaction->immutable_options()->listeners;
|
|
1740
2294
|
sub_compact->outfile.reset(new WritableFileWriter(
|
|
1741
|
-
std::move(writable_file), fname,
|
|
1742
|
-
db_options_.
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
// If the Column family flag is to only optimize filters for hits,
|
|
1746
|
-
// we can skip creating filters if this is the bottommost_level where
|
|
1747
|
-
// data is going to be found
|
|
1748
|
-
bool skip_filters =
|
|
1749
|
-
cfd->ioptions()->optimize_filters_for_hits && bottommost_level_;
|
|
2295
|
+
std::move(writable_file), fname, fo_copy, db_options_.clock, io_tracer_,
|
|
2296
|
+
db_options_.stats, listeners, db_options_.file_checksum_gen_factory.get(),
|
|
2297
|
+
tmp_set.Contains(FileType::kTableFile), false));
|
|
1750
2298
|
|
|
1751
|
-
|
|
2299
|
+
TableBuilderOptions tboptions(
|
|
1752
2300
|
*cfd->ioptions(), *(sub_compact->compaction->mutable_cf_options()),
|
|
1753
2301
|
cfd->internal_comparator(), cfd->int_tbl_prop_collector_factories(),
|
|
1754
|
-
cfd->GetID(), cfd->GetName(), sub_compact->outfile.get(),
|
|
1755
2302
|
sub_compact->compaction->output_compression(),
|
|
1756
|
-
|
|
1757
|
-
sub_compact->compaction->
|
|
1758
|
-
|
|
1759
|
-
oldest_ancester_time, 0 /* oldest_key_time */,
|
|
1760
|
-
sub_compact->compaction->max_output_file_size(),
|
|
1761
|
-
|
|
2303
|
+
sub_compact->compaction->output_compression_opts(), cfd->GetID(),
|
|
2304
|
+
cfd->GetName(), sub_compact->compaction->output_level(),
|
|
2305
|
+
bottommost_level_, TableFileCreationReason::kCompaction,
|
|
2306
|
+
oldest_ancester_time, 0 /* oldest_key_time */, current_time, db_id_,
|
|
2307
|
+
db_session_id_, sub_compact->compaction->max_output_file_size(),
|
|
2308
|
+
file_number);
|
|
2309
|
+
sub_compact->builder.reset(
|
|
2310
|
+
NewTableBuilder(tboptions, sub_compact->outfile.get()));
|
|
1762
2311
|
LogFlush(db_options_.info_log);
|
|
1763
2312
|
return s;
|
|
1764
2313
|
}
|
|
@@ -1820,11 +2369,16 @@ void CompactionJob::UpdateCompactionStats() {
|
|
|
1820
2369
|
}
|
|
1821
2370
|
}
|
|
1822
2371
|
|
|
2372
|
+
assert(compaction_job_stats_);
|
|
2373
|
+
compaction_stats_.bytes_read_blob =
|
|
2374
|
+
compaction_job_stats_->total_blob_bytes_read;
|
|
2375
|
+
|
|
1823
2376
|
compaction_stats_.num_output_files =
|
|
1824
|
-
static_cast<int>(compact_->num_output_files)
|
|
2377
|
+
static_cast<int>(compact_->num_output_files);
|
|
2378
|
+
compaction_stats_.num_output_files_blob =
|
|
1825
2379
|
static_cast<int>(compact_->num_blob_output_files);
|
|
1826
|
-
compaction_stats_.bytes_written =
|
|
1827
|
-
|
|
2380
|
+
compaction_stats_.bytes_written = compact_->total_bytes;
|
|
2381
|
+
compaction_stats_.bytes_written_blob = compact_->total_blob_bytes;
|
|
1828
2382
|
|
|
1829
2383
|
if (compaction_stats_.num_input_records > compact_->num_output_records) {
|
|
1830
2384
|
compaction_stats_.num_dropped_records =
|
|
@@ -1864,8 +2418,10 @@ void CompactionJob::UpdateCompactionJobStats(
|
|
|
1864
2418
|
|
|
1865
2419
|
// output information
|
|
1866
2420
|
compaction_job_stats_->total_output_bytes = stats.bytes_written;
|
|
2421
|
+
compaction_job_stats_->total_output_bytes_blob = stats.bytes_written_blob;
|
|
1867
2422
|
compaction_job_stats_->num_output_records = compact_->num_output_records;
|
|
1868
2423
|
compaction_job_stats_->num_output_files = stats.num_output_files;
|
|
2424
|
+
compaction_job_stats_->num_output_files_blob = stats.num_output_files_blob;
|
|
1869
2425
|
|
|
1870
2426
|
if (stats.num_output_files > 0) {
|
|
1871
2427
|
CopyPrefix(compact_->SmallestUserKey(),
|
|
@@ -1914,4 +2470,613 @@ void CompactionJob::LogCompaction() {
|
|
|
1914
2470
|
}
|
|
1915
2471
|
}
|
|
1916
2472
|
|
|
2473
|
+
std::string CompactionJob::GetTableFileName(uint64_t file_number) {
|
|
2474
|
+
return TableFileName(compact_->compaction->immutable_options()->cf_paths,
|
|
2475
|
+
file_number, compact_->compaction->output_path_id());
|
|
2476
|
+
}
|
|
2477
|
+
|
|
2478
|
+
#ifndef ROCKSDB_LITE
|
|
2479
|
+
std::string CompactionServiceCompactionJob::GetTableFileName(
|
|
2480
|
+
uint64_t file_number) {
|
|
2481
|
+
return MakeTableFileName(output_path_, file_number);
|
|
2482
|
+
}
|
|
2483
|
+
|
|
2484
|
+
void CompactionServiceCompactionJob::RecordCompactionIOStats() {
|
|
2485
|
+
compaction_result_->bytes_read += IOSTATS(bytes_read);
|
|
2486
|
+
compaction_result_->bytes_written += IOSTATS(bytes_written);
|
|
2487
|
+
CompactionJob::RecordCompactionIOStats();
|
|
2488
|
+
}
|
|
2489
|
+
|
|
2490
|
+
CompactionServiceCompactionJob::CompactionServiceCompactionJob(
|
|
2491
|
+
int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
|
|
2492
|
+
const MutableDBOptions& mutable_db_options, const FileOptions& file_options,
|
|
2493
|
+
VersionSet* versions, const std::atomic<bool>* shutting_down,
|
|
2494
|
+
LogBuffer* log_buffer, FSDirectory* output_directory, Statistics* stats,
|
|
2495
|
+
InstrumentedMutex* db_mutex, ErrorHandler* db_error_handler,
|
|
2496
|
+
std::vector<SequenceNumber> existing_snapshots,
|
|
2497
|
+
std::shared_ptr<Cache> table_cache, EventLogger* event_logger,
|
|
2498
|
+
const std::string& dbname, const std::shared_ptr<IOTracer>& io_tracer,
|
|
2499
|
+
const std::atomic<bool>* manual_compaction_canceled,
|
|
2500
|
+
const std::string& db_id, const std::string& db_session_id,
|
|
2501
|
+
const std::string& output_path,
|
|
2502
|
+
const CompactionServiceInput& compaction_service_input,
|
|
2503
|
+
CompactionServiceResult* compaction_service_result)
|
|
2504
|
+
: CompactionJob(
|
|
2505
|
+
job_id, compaction, db_options, mutable_db_options, file_options,
|
|
2506
|
+
versions, shutting_down, log_buffer, nullptr, output_directory,
|
|
2507
|
+
nullptr, stats, db_mutex, db_error_handler, existing_snapshots,
|
|
2508
|
+
kMaxSequenceNumber, nullptr, nullptr, table_cache, event_logger,
|
|
2509
|
+
compaction->mutable_cf_options()->paranoid_file_checks,
|
|
2510
|
+
compaction->mutable_cf_options()->report_bg_io_stats, dbname,
|
|
2511
|
+
&(compaction_service_result->stats), Env::Priority::USER, io_tracer,
|
|
2512
|
+
nullptr, manual_compaction_canceled, db_id, db_session_id,
|
|
2513
|
+
compaction->column_family_data()->GetFullHistoryTsLow()),
|
|
2514
|
+
output_path_(output_path),
|
|
2515
|
+
compaction_input_(compaction_service_input),
|
|
2516
|
+
compaction_result_(compaction_service_result) {}
|
|
2517
|
+
|
|
2518
|
+
Status CompactionServiceCompactionJob::Run() {
|
|
2519
|
+
AutoThreadOperationStageUpdater stage_updater(
|
|
2520
|
+
ThreadStatus::STAGE_COMPACTION_RUN);
|
|
2521
|
+
|
|
2522
|
+
auto* c = compact_->compaction;
|
|
2523
|
+
assert(c->column_family_data() != nullptr);
|
|
2524
|
+
assert(c->column_family_data()->current()->storage_info()->NumLevelFiles(
|
|
2525
|
+
compact_->compaction->level()) > 0);
|
|
2526
|
+
|
|
2527
|
+
write_hint_ =
|
|
2528
|
+
c->column_family_data()->CalculateSSTWriteHint(c->output_level());
|
|
2529
|
+
bottommost_level_ = c->bottommost_level();
|
|
2530
|
+
|
|
2531
|
+
Slice begin = compaction_input_.begin;
|
|
2532
|
+
Slice end = compaction_input_.end;
|
|
2533
|
+
compact_->sub_compact_states.emplace_back(
|
|
2534
|
+
c, compaction_input_.has_begin ? &begin : nullptr,
|
|
2535
|
+
compaction_input_.has_end ? &end : nullptr, compaction_input_.approx_size,
|
|
2536
|
+
/*sub_job_id*/ 0);
|
|
2537
|
+
|
|
2538
|
+
log_buffer_->FlushBufferToLog();
|
|
2539
|
+
LogCompaction();
|
|
2540
|
+
const uint64_t start_micros = db_options_.clock->NowMicros();
|
|
2541
|
+
// Pick the only sub-compaction we should have
|
|
2542
|
+
assert(compact_->sub_compact_states.size() == 1);
|
|
2543
|
+
SubcompactionState* sub_compact = compact_->sub_compact_states.data();
|
|
2544
|
+
|
|
2545
|
+
ProcessKeyValueCompaction(sub_compact);
|
|
2546
|
+
|
|
2547
|
+
compaction_stats_.micros = db_options_.clock->NowMicros() - start_micros;
|
|
2548
|
+
compaction_stats_.cpu_micros = sub_compact->compaction_job_stats.cpu_micros;
|
|
2549
|
+
|
|
2550
|
+
RecordTimeToHistogram(stats_, COMPACTION_TIME, compaction_stats_.micros);
|
|
2551
|
+
RecordTimeToHistogram(stats_, COMPACTION_CPU_TIME,
|
|
2552
|
+
compaction_stats_.cpu_micros);
|
|
2553
|
+
|
|
2554
|
+
Status status = sub_compact->status;
|
|
2555
|
+
IOStatus io_s = sub_compact->io_status;
|
|
2556
|
+
|
|
2557
|
+
if (io_status_.ok()) {
|
|
2558
|
+
io_status_ = io_s;
|
|
2559
|
+
}
|
|
2560
|
+
|
|
2561
|
+
if (status.ok()) {
|
|
2562
|
+
constexpr IODebugContext* dbg = nullptr;
|
|
2563
|
+
|
|
2564
|
+
if (output_directory_) {
|
|
2565
|
+
io_s = output_directory_->FsyncWithDirOptions(IOOptions(), dbg,
|
|
2566
|
+
DirFsyncOptions());
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
if (io_status_.ok()) {
|
|
2570
|
+
io_status_ = io_s;
|
|
2571
|
+
}
|
|
2572
|
+
if (status.ok()) {
|
|
2573
|
+
status = io_s;
|
|
2574
|
+
}
|
|
2575
|
+
if (status.ok()) {
|
|
2576
|
+
// TODO: Add verify_table()
|
|
2577
|
+
}
|
|
2578
|
+
|
|
2579
|
+
// Finish up all book-keeping to unify the subcompaction results
|
|
2580
|
+
AggregateStatistics();
|
|
2581
|
+
UpdateCompactionStats();
|
|
2582
|
+
RecordCompactionIOStats();
|
|
2583
|
+
|
|
2584
|
+
LogFlush(db_options_.info_log);
|
|
2585
|
+
compact_->status = status;
|
|
2586
|
+
compact_->status.PermitUncheckedError();
|
|
2587
|
+
|
|
2588
|
+
// Build compaction result
|
|
2589
|
+
compaction_result_->output_level = compact_->compaction->output_level();
|
|
2590
|
+
compaction_result_->output_path = output_path_;
|
|
2591
|
+
for (const auto& output_file : sub_compact->outputs) {
|
|
2592
|
+
auto& meta = output_file.meta;
|
|
2593
|
+
compaction_result_->output_files.emplace_back(
|
|
2594
|
+
MakeTableFileName(meta.fd.GetNumber()), meta.fd.smallest_seqno,
|
|
2595
|
+
meta.fd.largest_seqno, meta.smallest.Encode().ToString(),
|
|
2596
|
+
meta.largest.Encode().ToString(), meta.oldest_ancester_time,
|
|
2597
|
+
meta.file_creation_time, output_file.validator.GetHash(),
|
|
2598
|
+
meta.marked_for_compaction);
|
|
2599
|
+
}
|
|
2600
|
+
compaction_result_->num_output_records = sub_compact->num_output_records;
|
|
2601
|
+
compaction_result_->total_bytes = sub_compact->total_bytes;
|
|
2602
|
+
|
|
2603
|
+
return status;
|
|
2604
|
+
}
|
|
2605
|
+
|
|
2606
|
+
void CompactionServiceCompactionJob::CleanupCompaction() {
|
|
2607
|
+
CompactionJob::CleanupCompaction();
|
|
2608
|
+
}
|
|
2609
|
+
|
|
2610
|
+
// Internal binary format for the input and result data
|
|
2611
|
+
enum BinaryFormatVersion : uint32_t {
|
|
2612
|
+
kOptionsString = 1, // Use string format similar to Option string format
|
|
2613
|
+
};
|
|
2614
|
+
|
|
2615
|
+
static std::unordered_map<std::string, OptionTypeInfo> cfd_type_info = {
|
|
2616
|
+
{"name",
|
|
2617
|
+
{offsetof(struct ColumnFamilyDescriptor, name), OptionType::kEncodedString,
|
|
2618
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2619
|
+
{"options",
|
|
2620
|
+
{offsetof(struct ColumnFamilyDescriptor, options),
|
|
2621
|
+
OptionType::kConfigurable, OptionVerificationType::kNormal,
|
|
2622
|
+
OptionTypeFlags::kNone,
|
|
2623
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2624
|
+
const std::string& value, void* addr) {
|
|
2625
|
+
auto cf_options = static_cast<ColumnFamilyOptions*>(addr);
|
|
2626
|
+
return GetColumnFamilyOptionsFromString(opts, ColumnFamilyOptions(),
|
|
2627
|
+
value, cf_options);
|
|
2628
|
+
},
|
|
2629
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2630
|
+
const void* addr, std::string* value) {
|
|
2631
|
+
const auto cf_options = static_cast<const ColumnFamilyOptions*>(addr);
|
|
2632
|
+
std::string result;
|
|
2633
|
+
auto status =
|
|
2634
|
+
GetStringFromColumnFamilyOptions(opts, *cf_options, &result);
|
|
2635
|
+
*value = "{" + result + "}";
|
|
2636
|
+
return status;
|
|
2637
|
+
},
|
|
2638
|
+
[](const ConfigOptions& opts, const std::string& name, const void* addr1,
|
|
2639
|
+
const void* addr2, std::string* mismatch) {
|
|
2640
|
+
const auto this_one = static_cast<const ColumnFamilyOptions*>(addr1);
|
|
2641
|
+
const auto that_one = static_cast<const ColumnFamilyOptions*>(addr2);
|
|
2642
|
+
auto this_conf = CFOptionsAsConfigurable(*this_one);
|
|
2643
|
+
auto that_conf = CFOptionsAsConfigurable(*that_one);
|
|
2644
|
+
std::string mismatch_opt;
|
|
2645
|
+
bool result =
|
|
2646
|
+
this_conf->AreEquivalent(opts, that_conf.get(), &mismatch_opt);
|
|
2647
|
+
if (!result) {
|
|
2648
|
+
*mismatch = name + "." + mismatch_opt;
|
|
2649
|
+
}
|
|
2650
|
+
return result;
|
|
2651
|
+
}}},
|
|
2652
|
+
};
|
|
2653
|
+
|
|
2654
|
+
static std::unordered_map<std::string, OptionTypeInfo> cs_input_type_info = {
|
|
2655
|
+
{"column_family",
|
|
2656
|
+
OptionTypeInfo::Struct(
|
|
2657
|
+
"column_family", &cfd_type_info,
|
|
2658
|
+
offsetof(struct CompactionServiceInput, column_family),
|
|
2659
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
|
|
2660
|
+
{"db_options",
|
|
2661
|
+
{offsetof(struct CompactionServiceInput, db_options),
|
|
2662
|
+
OptionType::kConfigurable, OptionVerificationType::kNormal,
|
|
2663
|
+
OptionTypeFlags::kNone,
|
|
2664
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2665
|
+
const std::string& value, void* addr) {
|
|
2666
|
+
auto options = static_cast<DBOptions*>(addr);
|
|
2667
|
+
return GetDBOptionsFromString(opts, DBOptions(), value, options);
|
|
2668
|
+
},
|
|
2669
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2670
|
+
const void* addr, std::string* value) {
|
|
2671
|
+
const auto options = static_cast<const DBOptions*>(addr);
|
|
2672
|
+
std::string result;
|
|
2673
|
+
auto status = GetStringFromDBOptions(opts, *options, &result);
|
|
2674
|
+
*value = "{" + result + "}";
|
|
2675
|
+
return status;
|
|
2676
|
+
},
|
|
2677
|
+
[](const ConfigOptions& opts, const std::string& name, const void* addr1,
|
|
2678
|
+
const void* addr2, std::string* mismatch) {
|
|
2679
|
+
const auto this_one = static_cast<const DBOptions*>(addr1);
|
|
2680
|
+
const auto that_one = static_cast<const DBOptions*>(addr2);
|
|
2681
|
+
auto this_conf = DBOptionsAsConfigurable(*this_one);
|
|
2682
|
+
auto that_conf = DBOptionsAsConfigurable(*that_one);
|
|
2683
|
+
std::string mismatch_opt;
|
|
2684
|
+
bool result =
|
|
2685
|
+
this_conf->AreEquivalent(opts, that_conf.get(), &mismatch_opt);
|
|
2686
|
+
if (!result) {
|
|
2687
|
+
*mismatch = name + "." + mismatch_opt;
|
|
2688
|
+
}
|
|
2689
|
+
return result;
|
|
2690
|
+
}}},
|
|
2691
|
+
{"snapshots", OptionTypeInfo::Vector<uint64_t>(
|
|
2692
|
+
offsetof(struct CompactionServiceInput, snapshots),
|
|
2693
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone,
|
|
2694
|
+
{0, OptionType::kUInt64T})},
|
|
2695
|
+
{"input_files", OptionTypeInfo::Vector<std::string>(
|
|
2696
|
+
offsetof(struct CompactionServiceInput, input_files),
|
|
2697
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone,
|
|
2698
|
+
{0, OptionType::kEncodedString})},
|
|
2699
|
+
{"output_level",
|
|
2700
|
+
{offsetof(struct CompactionServiceInput, output_level), OptionType::kInt,
|
|
2701
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2702
|
+
{"has_begin",
|
|
2703
|
+
{offsetof(struct CompactionServiceInput, has_begin), OptionType::kBoolean,
|
|
2704
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2705
|
+
{"begin",
|
|
2706
|
+
{offsetof(struct CompactionServiceInput, begin),
|
|
2707
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2708
|
+
OptionTypeFlags::kNone}},
|
|
2709
|
+
{"has_end",
|
|
2710
|
+
{offsetof(struct CompactionServiceInput, has_end), OptionType::kBoolean,
|
|
2711
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2712
|
+
{"end",
|
|
2713
|
+
{offsetof(struct CompactionServiceInput, end), OptionType::kEncodedString,
|
|
2714
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2715
|
+
{"approx_size",
|
|
2716
|
+
{offsetof(struct CompactionServiceInput, approx_size),
|
|
2717
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2718
|
+
OptionTypeFlags::kNone}},
|
|
2719
|
+
};
|
|
2720
|
+
|
|
2721
|
+
static std::unordered_map<std::string, OptionTypeInfo>
|
|
2722
|
+
cs_output_file_type_info = {
|
|
2723
|
+
{"file_name",
|
|
2724
|
+
{offsetof(struct CompactionServiceOutputFile, file_name),
|
|
2725
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2726
|
+
OptionTypeFlags::kNone}},
|
|
2727
|
+
{"smallest_seqno",
|
|
2728
|
+
{offsetof(struct CompactionServiceOutputFile, smallest_seqno),
|
|
2729
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2730
|
+
OptionTypeFlags::kNone}},
|
|
2731
|
+
{"largest_seqno",
|
|
2732
|
+
{offsetof(struct CompactionServiceOutputFile, largest_seqno),
|
|
2733
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2734
|
+
OptionTypeFlags::kNone}},
|
|
2735
|
+
{"smallest_internal_key",
|
|
2736
|
+
{offsetof(struct CompactionServiceOutputFile, smallest_internal_key),
|
|
2737
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2738
|
+
OptionTypeFlags::kNone}},
|
|
2739
|
+
{"largest_internal_key",
|
|
2740
|
+
{offsetof(struct CompactionServiceOutputFile, largest_internal_key),
|
|
2741
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2742
|
+
OptionTypeFlags::kNone}},
|
|
2743
|
+
{"oldest_ancester_time",
|
|
2744
|
+
{offsetof(struct CompactionServiceOutputFile, oldest_ancester_time),
|
|
2745
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2746
|
+
OptionTypeFlags::kNone}},
|
|
2747
|
+
{"file_creation_time",
|
|
2748
|
+
{offsetof(struct CompactionServiceOutputFile, file_creation_time),
|
|
2749
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2750
|
+
OptionTypeFlags::kNone}},
|
|
2751
|
+
{"paranoid_hash",
|
|
2752
|
+
{offsetof(struct CompactionServiceOutputFile, paranoid_hash),
|
|
2753
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2754
|
+
OptionTypeFlags::kNone}},
|
|
2755
|
+
{"marked_for_compaction",
|
|
2756
|
+
{offsetof(struct CompactionServiceOutputFile, marked_for_compaction),
|
|
2757
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
2758
|
+
OptionTypeFlags::kNone}},
|
|
2759
|
+
};
|
|
2760
|
+
|
|
2761
|
+
static std::unordered_map<std::string, OptionTypeInfo>
|
|
2762
|
+
compaction_job_stats_type_info = {
|
|
2763
|
+
{"elapsed_micros",
|
|
2764
|
+
{offsetof(struct CompactionJobStats, elapsed_micros),
|
|
2765
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2766
|
+
OptionTypeFlags::kNone}},
|
|
2767
|
+
{"cpu_micros",
|
|
2768
|
+
{offsetof(struct CompactionJobStats, cpu_micros), OptionType::kUInt64T,
|
|
2769
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2770
|
+
{"num_input_records",
|
|
2771
|
+
{offsetof(struct CompactionJobStats, num_input_records),
|
|
2772
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2773
|
+
OptionTypeFlags::kNone}},
|
|
2774
|
+
{"num_blobs_read",
|
|
2775
|
+
{offsetof(struct CompactionJobStats, num_blobs_read),
|
|
2776
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2777
|
+
OptionTypeFlags::kNone}},
|
|
2778
|
+
{"num_input_files",
|
|
2779
|
+
{offsetof(struct CompactionJobStats, num_input_files),
|
|
2780
|
+
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
2781
|
+
OptionTypeFlags::kNone}},
|
|
2782
|
+
{"num_input_files_at_output_level",
|
|
2783
|
+
{offsetof(struct CompactionJobStats, num_input_files_at_output_level),
|
|
2784
|
+
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
2785
|
+
OptionTypeFlags::kNone}},
|
|
2786
|
+
{"num_output_records",
|
|
2787
|
+
{offsetof(struct CompactionJobStats, num_output_records),
|
|
2788
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2789
|
+
OptionTypeFlags::kNone}},
|
|
2790
|
+
{"num_output_files",
|
|
2791
|
+
{offsetof(struct CompactionJobStats, num_output_files),
|
|
2792
|
+
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
2793
|
+
OptionTypeFlags::kNone}},
|
|
2794
|
+
{"num_output_files_blob",
|
|
2795
|
+
{offsetof(struct CompactionJobStats, num_output_files_blob),
|
|
2796
|
+
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
2797
|
+
OptionTypeFlags::kNone}},
|
|
2798
|
+
{"is_full_compaction",
|
|
2799
|
+
{offsetof(struct CompactionJobStats, is_full_compaction),
|
|
2800
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
2801
|
+
OptionTypeFlags::kNone}},
|
|
2802
|
+
{"is_manual_compaction",
|
|
2803
|
+
{offsetof(struct CompactionJobStats, is_manual_compaction),
|
|
2804
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
2805
|
+
OptionTypeFlags::kNone}},
|
|
2806
|
+
{"total_input_bytes",
|
|
2807
|
+
{offsetof(struct CompactionJobStats, total_input_bytes),
|
|
2808
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2809
|
+
OptionTypeFlags::kNone}},
|
|
2810
|
+
{"total_blob_bytes_read",
|
|
2811
|
+
{offsetof(struct CompactionJobStats, total_blob_bytes_read),
|
|
2812
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2813
|
+
OptionTypeFlags::kNone}},
|
|
2814
|
+
{"total_output_bytes",
|
|
2815
|
+
{offsetof(struct CompactionJobStats, total_output_bytes),
|
|
2816
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2817
|
+
OptionTypeFlags::kNone}},
|
|
2818
|
+
{"total_output_bytes_blob",
|
|
2819
|
+
{offsetof(struct CompactionJobStats, total_output_bytes_blob),
|
|
2820
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2821
|
+
OptionTypeFlags::kNone}},
|
|
2822
|
+
{"num_records_replaced",
|
|
2823
|
+
{offsetof(struct CompactionJobStats, num_records_replaced),
|
|
2824
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2825
|
+
OptionTypeFlags::kNone}},
|
|
2826
|
+
{"total_input_raw_key_bytes",
|
|
2827
|
+
{offsetof(struct CompactionJobStats, total_input_raw_key_bytes),
|
|
2828
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2829
|
+
OptionTypeFlags::kNone}},
|
|
2830
|
+
{"total_input_raw_value_bytes",
|
|
2831
|
+
{offsetof(struct CompactionJobStats, total_input_raw_value_bytes),
|
|
2832
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2833
|
+
OptionTypeFlags::kNone}},
|
|
2834
|
+
{"num_input_deletion_records",
|
|
2835
|
+
{offsetof(struct CompactionJobStats, num_input_deletion_records),
|
|
2836
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2837
|
+
OptionTypeFlags::kNone}},
|
|
2838
|
+
{"num_expired_deletion_records",
|
|
2839
|
+
{offsetof(struct CompactionJobStats, num_expired_deletion_records),
|
|
2840
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2841
|
+
OptionTypeFlags::kNone}},
|
|
2842
|
+
{"num_corrupt_keys",
|
|
2843
|
+
{offsetof(struct CompactionJobStats, num_corrupt_keys),
|
|
2844
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2845
|
+
OptionTypeFlags::kNone}},
|
|
2846
|
+
{"file_write_nanos",
|
|
2847
|
+
{offsetof(struct CompactionJobStats, file_write_nanos),
|
|
2848
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2849
|
+
OptionTypeFlags::kNone}},
|
|
2850
|
+
{"file_range_sync_nanos",
|
|
2851
|
+
{offsetof(struct CompactionJobStats, file_range_sync_nanos),
|
|
2852
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2853
|
+
OptionTypeFlags::kNone}},
|
|
2854
|
+
{"file_fsync_nanos",
|
|
2855
|
+
{offsetof(struct CompactionJobStats, file_fsync_nanos),
|
|
2856
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2857
|
+
OptionTypeFlags::kNone}},
|
|
2858
|
+
{"file_prepare_write_nanos",
|
|
2859
|
+
{offsetof(struct CompactionJobStats, file_prepare_write_nanos),
|
|
2860
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2861
|
+
OptionTypeFlags::kNone}},
|
|
2862
|
+
{"smallest_output_key_prefix",
|
|
2863
|
+
{offsetof(struct CompactionJobStats, smallest_output_key_prefix),
|
|
2864
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2865
|
+
OptionTypeFlags::kNone}},
|
|
2866
|
+
{"largest_output_key_prefix",
|
|
2867
|
+
{offsetof(struct CompactionJobStats, largest_output_key_prefix),
|
|
2868
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2869
|
+
OptionTypeFlags::kNone}},
|
|
2870
|
+
{"num_single_del_fallthru",
|
|
2871
|
+
{offsetof(struct CompactionJobStats, num_single_del_fallthru),
|
|
2872
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2873
|
+
OptionTypeFlags::kNone}},
|
|
2874
|
+
{"num_single_del_mismatch",
|
|
2875
|
+
{offsetof(struct CompactionJobStats, num_single_del_mismatch),
|
|
2876
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2877
|
+
OptionTypeFlags::kNone}},
|
|
2878
|
+
};
|
|
2879
|
+
|
|
2880
|
+
namespace {
|
|
2881
|
+
// this is a helper struct to serialize and deserialize class Status, because
|
|
2882
|
+
// Status's members are not public.
|
|
2883
|
+
struct StatusSerializationAdapter {
|
|
2884
|
+
uint8_t code;
|
|
2885
|
+
uint8_t subcode;
|
|
2886
|
+
uint8_t severity;
|
|
2887
|
+
std::string message;
|
|
2888
|
+
|
|
2889
|
+
StatusSerializationAdapter() {}
|
|
2890
|
+
explicit StatusSerializationAdapter(const Status& s) {
|
|
2891
|
+
code = s.code();
|
|
2892
|
+
subcode = s.subcode();
|
|
2893
|
+
severity = s.severity();
|
|
2894
|
+
auto msg = s.getState();
|
|
2895
|
+
message = msg ? msg : "";
|
|
2896
|
+
}
|
|
2897
|
+
|
|
2898
|
+
Status GetStatus() {
|
|
2899
|
+
return Status(static_cast<Status::Code>(code),
|
|
2900
|
+
static_cast<Status::SubCode>(subcode),
|
|
2901
|
+
static_cast<Status::Severity>(severity), message);
|
|
2902
|
+
}
|
|
2903
|
+
};
|
|
2904
|
+
} // namespace
|
|
2905
|
+
|
|
2906
|
+
static std::unordered_map<std::string, OptionTypeInfo>
|
|
2907
|
+
status_adapter_type_info = {
|
|
2908
|
+
{"code",
|
|
2909
|
+
{offsetof(struct StatusSerializationAdapter, code),
|
|
2910
|
+
OptionType::kUInt8T, OptionVerificationType::kNormal,
|
|
2911
|
+
OptionTypeFlags::kNone}},
|
|
2912
|
+
{"subcode",
|
|
2913
|
+
{offsetof(struct StatusSerializationAdapter, subcode),
|
|
2914
|
+
OptionType::kUInt8T, OptionVerificationType::kNormal,
|
|
2915
|
+
OptionTypeFlags::kNone}},
|
|
2916
|
+
{"severity",
|
|
2917
|
+
{offsetof(struct StatusSerializationAdapter, severity),
|
|
2918
|
+
OptionType::kUInt8T, OptionVerificationType::kNormal,
|
|
2919
|
+
OptionTypeFlags::kNone}},
|
|
2920
|
+
{"message",
|
|
2921
|
+
{offsetof(struct StatusSerializationAdapter, message),
|
|
2922
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2923
|
+
OptionTypeFlags::kNone}},
|
|
2924
|
+
};
|
|
2925
|
+
|
|
2926
|
+
static std::unordered_map<std::string, OptionTypeInfo> cs_result_type_info = {
|
|
2927
|
+
{"status",
|
|
2928
|
+
{offsetof(struct CompactionServiceResult, status),
|
|
2929
|
+
OptionType::kCustomizable, OptionVerificationType::kNormal,
|
|
2930
|
+
OptionTypeFlags::kNone,
|
|
2931
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2932
|
+
const std::string& value, void* addr) {
|
|
2933
|
+
auto status_obj = static_cast<Status*>(addr);
|
|
2934
|
+
StatusSerializationAdapter adapter;
|
|
2935
|
+
Status s = OptionTypeInfo::ParseType(
|
|
2936
|
+
opts, value, status_adapter_type_info, &adapter);
|
|
2937
|
+
*status_obj = adapter.GetStatus();
|
|
2938
|
+
return s;
|
|
2939
|
+
},
|
|
2940
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2941
|
+
const void* addr, std::string* value) {
|
|
2942
|
+
const auto status_obj = static_cast<const Status*>(addr);
|
|
2943
|
+
StatusSerializationAdapter adapter(*status_obj);
|
|
2944
|
+
std::string result;
|
|
2945
|
+
Status s = OptionTypeInfo::SerializeType(opts, status_adapter_type_info,
|
|
2946
|
+
&adapter, &result);
|
|
2947
|
+
*value = "{" + result + "}";
|
|
2948
|
+
return s;
|
|
2949
|
+
},
|
|
2950
|
+
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
2951
|
+
const void* addr1, const void* addr2, std::string* mismatch) {
|
|
2952
|
+
const auto status1 = static_cast<const Status*>(addr1);
|
|
2953
|
+
const auto status2 = static_cast<const Status*>(addr2);
|
|
2954
|
+
StatusSerializationAdapter adatper1(*status1);
|
|
2955
|
+
StatusSerializationAdapter adapter2(*status2);
|
|
2956
|
+
return OptionTypeInfo::TypesAreEqual(opts, status_adapter_type_info,
|
|
2957
|
+
&adatper1, &adapter2, mismatch);
|
|
2958
|
+
}}},
|
|
2959
|
+
{"output_files",
|
|
2960
|
+
OptionTypeInfo::Vector<CompactionServiceOutputFile>(
|
|
2961
|
+
offsetof(struct CompactionServiceResult, output_files),
|
|
2962
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone,
|
|
2963
|
+
OptionTypeInfo::Struct("output_files", &cs_output_file_type_info, 0,
|
|
2964
|
+
OptionVerificationType::kNormal,
|
|
2965
|
+
OptionTypeFlags::kNone))},
|
|
2966
|
+
{"output_level",
|
|
2967
|
+
{offsetof(struct CompactionServiceResult, output_level), OptionType::kInt,
|
|
2968
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
2969
|
+
{"output_path",
|
|
2970
|
+
{offsetof(struct CompactionServiceResult, output_path),
|
|
2971
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
2972
|
+
OptionTypeFlags::kNone}},
|
|
2973
|
+
{"num_output_records",
|
|
2974
|
+
{offsetof(struct CompactionServiceResult, num_output_records),
|
|
2975
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2976
|
+
OptionTypeFlags::kNone}},
|
|
2977
|
+
{"total_bytes",
|
|
2978
|
+
{offsetof(struct CompactionServiceResult, total_bytes),
|
|
2979
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2980
|
+
OptionTypeFlags::kNone}},
|
|
2981
|
+
{"bytes_read",
|
|
2982
|
+
{offsetof(struct CompactionServiceResult, bytes_read),
|
|
2983
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2984
|
+
OptionTypeFlags::kNone}},
|
|
2985
|
+
{"bytes_written",
|
|
2986
|
+
{offsetof(struct CompactionServiceResult, bytes_written),
|
|
2987
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
2988
|
+
OptionTypeFlags::kNone}},
|
|
2989
|
+
{"stats", OptionTypeInfo::Struct(
|
|
2990
|
+
"stats", &compaction_job_stats_type_info,
|
|
2991
|
+
offsetof(struct CompactionServiceResult, stats),
|
|
2992
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
|
|
2993
|
+
};
|
|
2994
|
+
|
|
2995
|
+
Status CompactionServiceInput::Read(const std::string& data_str,
|
|
2996
|
+
CompactionServiceInput* obj) {
|
|
2997
|
+
if (data_str.size() <= sizeof(BinaryFormatVersion)) {
|
|
2998
|
+
return Status::InvalidArgument("Invalid CompactionServiceInput string");
|
|
2999
|
+
}
|
|
3000
|
+
auto format_version = DecodeFixed32(data_str.data());
|
|
3001
|
+
if (format_version == kOptionsString) {
|
|
3002
|
+
ConfigOptions cf;
|
|
3003
|
+
cf.invoke_prepare_options = false;
|
|
3004
|
+
cf.ignore_unknown_options = true;
|
|
3005
|
+
return OptionTypeInfo::ParseType(
|
|
3006
|
+
cf, data_str.substr(sizeof(BinaryFormatVersion)), cs_input_type_info,
|
|
3007
|
+
obj);
|
|
3008
|
+
} else {
|
|
3009
|
+
return Status::NotSupported(
|
|
3010
|
+
"Compaction Service Input data version not supported: " +
|
|
3011
|
+
ToString(format_version));
|
|
3012
|
+
}
|
|
3013
|
+
}
|
|
3014
|
+
|
|
3015
|
+
Status CompactionServiceInput::Write(std::string* output) {
|
|
3016
|
+
char buf[sizeof(BinaryFormatVersion)];
|
|
3017
|
+
EncodeFixed32(buf, kOptionsString);
|
|
3018
|
+
output->append(buf, sizeof(BinaryFormatVersion));
|
|
3019
|
+
ConfigOptions cf;
|
|
3020
|
+
cf.invoke_prepare_options = false;
|
|
3021
|
+
return OptionTypeInfo::SerializeType(cf, cs_input_type_info, this, output);
|
|
3022
|
+
}
|
|
3023
|
+
|
|
3024
|
+
Status CompactionServiceResult::Read(const std::string& data_str,
|
|
3025
|
+
CompactionServiceResult* obj) {
|
|
3026
|
+
if (data_str.size() <= sizeof(BinaryFormatVersion)) {
|
|
3027
|
+
return Status::InvalidArgument("Invalid CompactionServiceResult string");
|
|
3028
|
+
}
|
|
3029
|
+
auto format_version = DecodeFixed32(data_str.data());
|
|
3030
|
+
if (format_version == kOptionsString) {
|
|
3031
|
+
ConfigOptions cf;
|
|
3032
|
+
cf.invoke_prepare_options = false;
|
|
3033
|
+
cf.ignore_unknown_options = true;
|
|
3034
|
+
return OptionTypeInfo::ParseType(
|
|
3035
|
+
cf, data_str.substr(sizeof(BinaryFormatVersion)), cs_result_type_info,
|
|
3036
|
+
obj);
|
|
3037
|
+
} else {
|
|
3038
|
+
return Status::NotSupported(
|
|
3039
|
+
"Compaction Service Result data version not supported: " +
|
|
3040
|
+
ToString(format_version));
|
|
3041
|
+
}
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
Status CompactionServiceResult::Write(std::string* output) {
|
|
3045
|
+
char buf[sizeof(BinaryFormatVersion)];
|
|
3046
|
+
EncodeFixed32(buf, kOptionsString);
|
|
3047
|
+
output->append(buf, sizeof(BinaryFormatVersion));
|
|
3048
|
+
ConfigOptions cf;
|
|
3049
|
+
cf.invoke_prepare_options = false;
|
|
3050
|
+
return OptionTypeInfo::SerializeType(cf, cs_result_type_info, this, output);
|
|
3051
|
+
}
|
|
3052
|
+
|
|
3053
|
+
#ifndef NDEBUG
|
|
3054
|
+
bool CompactionServiceResult::TEST_Equals(CompactionServiceResult* other) {
|
|
3055
|
+
std::string mismatch;
|
|
3056
|
+
return TEST_Equals(other, &mismatch);
|
|
3057
|
+
}
|
|
3058
|
+
|
|
3059
|
+
bool CompactionServiceResult::TEST_Equals(CompactionServiceResult* other,
|
|
3060
|
+
std::string* mismatch) {
|
|
3061
|
+
ConfigOptions cf;
|
|
3062
|
+
cf.invoke_prepare_options = false;
|
|
3063
|
+
return OptionTypeInfo::TypesAreEqual(cf, cs_result_type_info, this, other,
|
|
3064
|
+
mismatch);
|
|
3065
|
+
}
|
|
3066
|
+
|
|
3067
|
+
bool CompactionServiceInput::TEST_Equals(CompactionServiceInput* other) {
|
|
3068
|
+
std::string mismatch;
|
|
3069
|
+
return TEST_Equals(other, &mismatch);
|
|
3070
|
+
}
|
|
3071
|
+
|
|
3072
|
+
bool CompactionServiceInput::TEST_Equals(CompactionServiceInput* other,
|
|
3073
|
+
std::string* mismatch) {
|
|
3074
|
+
ConfigOptions cf;
|
|
3075
|
+
cf.invoke_prepare_options = false;
|
|
3076
|
+
return OptionTypeInfo::TypesAreEqual(cf, cs_input_type_info, this, other,
|
|
3077
|
+
mismatch);
|
|
3078
|
+
}
|
|
3079
|
+
#endif // NDEBUG
|
|
3080
|
+
#endif // !ROCKSDB_LITE
|
|
3081
|
+
|
|
1917
3082
|
} // namespace ROCKSDB_NAMESPACE
|