@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
|
@@ -75,29 +75,29 @@ const char* GetFlushReasonString (FlushReason flush_reason) {
|
|
|
75
75
|
return "Manual Flush";
|
|
76
76
|
case FlushReason::kErrorRecovery:
|
|
77
77
|
return "Error Recovery";
|
|
78
|
+
case FlushReason::kWalFull:
|
|
79
|
+
return "WAL Full";
|
|
78
80
|
default:
|
|
79
81
|
return "Invalid";
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
|
|
83
|
-
FlushJob::FlushJob(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const std::string& db_id, const std::string& db_session_id,
|
|
100
|
-
std::string full_history_ts_low)
|
|
85
|
+
FlushJob::FlushJob(
|
|
86
|
+
const std::string& dbname, ColumnFamilyData* cfd,
|
|
87
|
+
const ImmutableDBOptions& db_options,
|
|
88
|
+
const MutableCFOptions& mutable_cf_options, uint64_t max_memtable_id,
|
|
89
|
+
const FileOptions& file_options, VersionSet* versions,
|
|
90
|
+
InstrumentedMutex* db_mutex, std::atomic<bool>* shutting_down,
|
|
91
|
+
std::vector<SequenceNumber> existing_snapshots,
|
|
92
|
+
SequenceNumber earliest_write_conflict_snapshot,
|
|
93
|
+
SnapshotChecker* snapshot_checker, JobContext* job_context,
|
|
94
|
+
LogBuffer* log_buffer, FSDirectory* db_directory,
|
|
95
|
+
FSDirectory* output_file_directory, CompressionType output_compression,
|
|
96
|
+
Statistics* stats, EventLogger* event_logger, bool measure_io_stats,
|
|
97
|
+
const bool sync_output_directory, const bool write_manifest,
|
|
98
|
+
Env::Priority thread_pri, const std::shared_ptr<IOTracer>& io_tracer,
|
|
99
|
+
const std::string& db_id, const std::string& db_session_id,
|
|
100
|
+
std::string full_history_ts_low, BlobFileCompletionCallback* blob_callback)
|
|
101
101
|
: dbname_(dbname),
|
|
102
102
|
db_id_(db_id),
|
|
103
103
|
db_session_id_(db_session_id),
|
|
@@ -127,14 +127,15 @@ FlushJob::FlushJob(const std::string& dbname, ColumnFamilyData* cfd,
|
|
|
127
127
|
pick_memtable_called(false),
|
|
128
128
|
thread_pri_(thread_pri),
|
|
129
129
|
io_tracer_(io_tracer),
|
|
130
|
-
|
|
130
|
+
clock_(db_options_.clock),
|
|
131
|
+
full_history_ts_low_(std::move(full_history_ts_low)),
|
|
132
|
+
blob_callback_(blob_callback) {
|
|
131
133
|
// Update the thread status to indicate flush.
|
|
132
134
|
ReportStartedFlush();
|
|
133
135
|
TEST_SYNC_POINT("FlushJob::FlushJob()");
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
FlushJob::~FlushJob() {
|
|
137
|
-
io_status_.PermitUncheckedError();
|
|
138
139
|
ThreadStatusUtil::ResetThreadStatus();
|
|
139
140
|
}
|
|
140
141
|
|
|
@@ -164,13 +165,24 @@ void FlushJob::RecordFlushIOStats() {
|
|
|
164
165
|
ThreadStatus::FLUSH_BYTES_WRITTEN, IOSTATS(bytes_written));
|
|
165
166
|
IOSTATS_RESET(bytes_written);
|
|
166
167
|
}
|
|
167
|
-
|
|
168
168
|
void FlushJob::PickMemTable() {
|
|
169
169
|
db_mutex_->AssertHeld();
|
|
170
170
|
assert(!pick_memtable_called);
|
|
171
171
|
pick_memtable_called = true;
|
|
172
|
+
|
|
173
|
+
// Maximum "NextLogNumber" of the memtables to flush.
|
|
174
|
+
// When mempurge feature is turned off, this variable is useless
|
|
175
|
+
// because the memtables are implicitly sorted by increasing order of creation
|
|
176
|
+
// time. Therefore mems_->back()->GetNextLogNumber() is already equal to
|
|
177
|
+
// max_next_log_number. However when Mempurge is on, the memtables are no
|
|
178
|
+
// longer sorted by increasing order of creation time. Therefore this variable
|
|
179
|
+
// becomes necessary because mems_->back()->GetNextLogNumber() is no longer
|
|
180
|
+
// necessarily equal to max_next_log_number.
|
|
181
|
+
uint64_t max_next_log_number = 0;
|
|
182
|
+
|
|
172
183
|
// Save the contents of the earliest memtable as a new Table
|
|
173
|
-
cfd_->imm()->PickMemtablesToFlush(max_memtable_id_, &mems_
|
|
184
|
+
cfd_->imm()->PickMemtablesToFlush(max_memtable_id_, &mems_,
|
|
185
|
+
&max_next_log_number);
|
|
174
186
|
if (mems_.empty()) {
|
|
175
187
|
return;
|
|
176
188
|
}
|
|
@@ -185,7 +197,7 @@ void FlushJob::PickMemTable() {
|
|
|
185
197
|
edit_->SetPrevLogNumber(0);
|
|
186
198
|
// SetLogNumber(log_num) indicates logs with number smaller than log_num
|
|
187
199
|
// will no longer be picked up for recovery.
|
|
188
|
-
edit_->SetLogNumber(
|
|
200
|
+
edit_->SetLogNumber(max_next_log_number);
|
|
189
201
|
edit_->SetColumnFamily(cfd_->GetID());
|
|
190
202
|
|
|
191
203
|
// path 0 for level 0 file.
|
|
@@ -195,8 +207,8 @@ void FlushJob::PickMemTable() {
|
|
|
195
207
|
base_->Ref(); // it is likely that we do not need this reference
|
|
196
208
|
}
|
|
197
209
|
|
|
198
|
-
Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
|
|
199
|
-
|
|
210
|
+
Status FlushJob::Run(LogsWithPrepTracker* prep_tracker, FileMetaData* file_meta,
|
|
211
|
+
bool* switched_to_mempurge) {
|
|
200
212
|
TEST_SYNC_POINT("FlushJob::Start");
|
|
201
213
|
db_mutex_->AssertHeld();
|
|
202
214
|
assert(pick_memtable_called);
|
|
@@ -226,9 +238,43 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
|
|
|
226
238
|
prev_cpu_write_nanos = IOSTATS(cpu_write_nanos);
|
|
227
239
|
prev_cpu_read_nanos = IOSTATS(cpu_read_nanos);
|
|
228
240
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
241
|
+
Status mempurge_s = Status::NotFound("No MemPurge.");
|
|
242
|
+
if ((db_options_.experimental_mempurge_threshold > 0.0) &&
|
|
243
|
+
(cfd_->GetFlushReason() == FlushReason::kWriteBufferFull) &&
|
|
244
|
+
(!mems_.empty()) && MemPurgeDecider()) {
|
|
245
|
+
mempurge_s = MemPurge();
|
|
246
|
+
if (!mempurge_s.ok()) {
|
|
247
|
+
// Mempurge is typically aborted when the output
|
|
248
|
+
// bytes cannot be contained onto a single output memtable.
|
|
249
|
+
if (mempurge_s.IsAborted()) {
|
|
250
|
+
ROCKS_LOG_INFO(db_options_.info_log, "Mempurge process aborted: %s\n",
|
|
251
|
+
mempurge_s.ToString().c_str());
|
|
252
|
+
} else {
|
|
253
|
+
// However the mempurge process can also fail for
|
|
254
|
+
// other reasons (eg: new_mem->Add() fails).
|
|
255
|
+
ROCKS_LOG_WARN(db_options_.info_log, "Mempurge process failed: %s\n",
|
|
256
|
+
mempurge_s.ToString().c_str());
|
|
257
|
+
}
|
|
258
|
+
} else {
|
|
259
|
+
if (switched_to_mempurge) {
|
|
260
|
+
*switched_to_mempurge = true;
|
|
261
|
+
} else {
|
|
262
|
+
// The mempurge process was successful, but no switch_to_mempurge
|
|
263
|
+
// pointer provided so no way to propagate the state of flush job.
|
|
264
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
265
|
+
"Mempurge process succeeded"
|
|
266
|
+
"but no 'switched_to_mempurge' ptr provided.\n");
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
Status s;
|
|
271
|
+
if (mempurge_s.ok()) {
|
|
272
|
+
base_->Unref();
|
|
273
|
+
s = Status::OK();
|
|
274
|
+
} else {
|
|
275
|
+
// This will release and re-acquire the mutex.
|
|
276
|
+
s = WriteLevel0Table();
|
|
277
|
+
}
|
|
232
278
|
|
|
233
279
|
if (s.ok() && cfd_->IsDropped()) {
|
|
234
280
|
s = Status::ColumnFamilyDropped("Column family dropped during compaction");
|
|
@@ -243,14 +289,13 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
|
|
|
243
289
|
} else if (write_manifest_) {
|
|
244
290
|
TEST_SYNC_POINT("FlushJob::InstallResults");
|
|
245
291
|
// Replace immutable memtable with the generated Table
|
|
246
|
-
IOStatus tmp_io_s;
|
|
247
292
|
s = cfd_->imm()->TryInstallMemtableFlushResults(
|
|
248
293
|
cfd_, mutable_cf_options_, mems_, prep_tracker, versions_, db_mutex_,
|
|
249
294
|
meta_.fd.GetNumber(), &job_context_->memtables_to_free, db_directory_,
|
|
250
|
-
log_buffer_, &committed_flush_jobs_info_,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
295
|
+
log_buffer_, &committed_flush_jobs_info_,
|
|
296
|
+
!(mempurge_s.ok()) /* write_edit : true if no mempurge happened (or if aborted),
|
|
297
|
+
but 'false' if mempurge successful: no new min log number
|
|
298
|
+
or new level 0 file path to write to manifest. */);
|
|
254
299
|
}
|
|
255
300
|
|
|
256
301
|
if (s.ok() && file_meta != nullptr) {
|
|
@@ -274,8 +319,11 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
|
|
|
274
319
|
|
|
275
320
|
const auto& blob_files = vstorage->GetBlobFiles();
|
|
276
321
|
if (!blob_files.empty()) {
|
|
277
|
-
|
|
278
|
-
stream << "
|
|
322
|
+
assert(blob_files.front());
|
|
323
|
+
stream << "blob_file_head" << blob_files.front()->GetBlobFileNumber();
|
|
324
|
+
|
|
325
|
+
assert(blob_files.back());
|
|
326
|
+
stream << "blob_file_tail" << blob_files.back()->GetBlobFileNumber();
|
|
279
327
|
}
|
|
280
328
|
|
|
281
329
|
stream << "immutable_memtables" << cfd_->imm()->NumNotFlushed();
|
|
@@ -305,12 +353,456 @@ void FlushJob::Cancel() {
|
|
|
305
353
|
base_->Unref();
|
|
306
354
|
}
|
|
307
355
|
|
|
356
|
+
Status FlushJob::MemPurge() {
|
|
357
|
+
Status s;
|
|
358
|
+
db_mutex_->AssertHeld();
|
|
359
|
+
db_mutex_->Unlock();
|
|
360
|
+
assert(!mems_.empty());
|
|
361
|
+
|
|
362
|
+
// Measure purging time.
|
|
363
|
+
const uint64_t start_micros = clock_->NowMicros();
|
|
364
|
+
const uint64_t start_cpu_micros = clock_->CPUMicros();
|
|
365
|
+
|
|
366
|
+
MemTable* new_mem = nullptr;
|
|
367
|
+
// For performance/log investigation purposes:
|
|
368
|
+
// look at how much useful payload we harvest in the new_mem.
|
|
369
|
+
// This value is then printed to the DB log.
|
|
370
|
+
double new_mem_capacity = 0.0;
|
|
371
|
+
|
|
372
|
+
// Create two iterators, one for the memtable data (contains
|
|
373
|
+
// info from puts + deletes), and one for the memtable
|
|
374
|
+
// Range Tombstones (from DeleteRanges).
|
|
375
|
+
ReadOptions ro;
|
|
376
|
+
ro.total_order_seek = true;
|
|
377
|
+
Arena arena;
|
|
378
|
+
std::vector<InternalIterator*> memtables;
|
|
379
|
+
std::vector<std::unique_ptr<FragmentedRangeTombstoneIterator>>
|
|
380
|
+
range_del_iters;
|
|
381
|
+
for (MemTable* m : mems_) {
|
|
382
|
+
memtables.push_back(m->NewIterator(ro, &arena));
|
|
383
|
+
auto* range_del_iter = m->NewRangeTombstoneIterator(ro, kMaxSequenceNumber);
|
|
384
|
+
if (range_del_iter != nullptr) {
|
|
385
|
+
range_del_iters.emplace_back(range_del_iter);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
assert(!memtables.empty());
|
|
390
|
+
SequenceNumber first_seqno = kMaxSequenceNumber;
|
|
391
|
+
SequenceNumber earliest_seqno = kMaxSequenceNumber;
|
|
392
|
+
// Pick first and earliest seqno as min of all first_seqno
|
|
393
|
+
// and earliest_seqno of the mempurged memtables.
|
|
394
|
+
for (const auto& mem : mems_) {
|
|
395
|
+
first_seqno = mem->GetFirstSequenceNumber() < first_seqno
|
|
396
|
+
? mem->GetFirstSequenceNumber()
|
|
397
|
+
: first_seqno;
|
|
398
|
+
earliest_seqno = mem->GetEarliestSequenceNumber() < earliest_seqno
|
|
399
|
+
? mem->GetEarliestSequenceNumber()
|
|
400
|
+
: earliest_seqno;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
ScopedArenaIterator iter(
|
|
404
|
+
NewMergingIterator(&(cfd_->internal_comparator()), memtables.data(),
|
|
405
|
+
static_cast<int>(memtables.size()), &arena));
|
|
406
|
+
|
|
407
|
+
auto* ioptions = cfd_->ioptions();
|
|
408
|
+
|
|
409
|
+
// Place iterator at the First (meaning most recent) key node.
|
|
410
|
+
iter->SeekToFirst();
|
|
411
|
+
|
|
412
|
+
std::unique_ptr<CompactionRangeDelAggregator> range_del_agg(
|
|
413
|
+
new CompactionRangeDelAggregator(&(cfd_->internal_comparator()),
|
|
414
|
+
existing_snapshots_));
|
|
415
|
+
for (auto& rd_iter : range_del_iters) {
|
|
416
|
+
range_del_agg->AddTombstones(std::move(rd_iter));
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// If there is valid data in the memtable,
|
|
420
|
+
// or at least range tombstones, copy over the info
|
|
421
|
+
// to the new memtable.
|
|
422
|
+
if (iter->Valid() || !range_del_agg->IsEmpty()) {
|
|
423
|
+
// MaxSize is the size of a memtable.
|
|
424
|
+
size_t maxSize = mutable_cf_options_.write_buffer_size;
|
|
425
|
+
std::unique_ptr<CompactionFilter> compaction_filter;
|
|
426
|
+
if (ioptions->compaction_filter_factory != nullptr &&
|
|
427
|
+
ioptions->compaction_filter_factory->ShouldFilterTableFileCreation(
|
|
428
|
+
TableFileCreationReason::kFlush)) {
|
|
429
|
+
CompactionFilter::Context ctx;
|
|
430
|
+
ctx.is_full_compaction = false;
|
|
431
|
+
ctx.is_manual_compaction = false;
|
|
432
|
+
ctx.column_family_id = cfd_->GetID();
|
|
433
|
+
ctx.reason = TableFileCreationReason::kFlush;
|
|
434
|
+
compaction_filter =
|
|
435
|
+
ioptions->compaction_filter_factory->CreateCompactionFilter(ctx);
|
|
436
|
+
if (compaction_filter != nullptr &&
|
|
437
|
+
!compaction_filter->IgnoreSnapshots()) {
|
|
438
|
+
s = Status::NotSupported(
|
|
439
|
+
"CompactionFilter::IgnoreSnapshots() = false is not supported "
|
|
440
|
+
"anymore.");
|
|
441
|
+
return s;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
new_mem = new MemTable((cfd_->internal_comparator()), *(cfd_->ioptions()),
|
|
446
|
+
mutable_cf_options_, cfd_->write_buffer_mgr(),
|
|
447
|
+
earliest_seqno, cfd_->GetID());
|
|
448
|
+
assert(new_mem != nullptr);
|
|
449
|
+
|
|
450
|
+
Env* env = db_options_.env;
|
|
451
|
+
assert(env);
|
|
452
|
+
MergeHelper merge(
|
|
453
|
+
env, (cfd_->internal_comparator()).user_comparator(),
|
|
454
|
+
(ioptions->merge_operator).get(), compaction_filter.get(),
|
|
455
|
+
ioptions->logger, true /* internal key corruption is not ok */,
|
|
456
|
+
existing_snapshots_.empty() ? 0 : existing_snapshots_.back(),
|
|
457
|
+
snapshot_checker_);
|
|
458
|
+
assert(job_context_);
|
|
459
|
+
SequenceNumber job_snapshot_seq = job_context_->GetJobSnapshotSequence();
|
|
460
|
+
CompactionIterator c_iter(
|
|
461
|
+
iter.get(), (cfd_->internal_comparator()).user_comparator(), &merge,
|
|
462
|
+
kMaxSequenceNumber, &existing_snapshots_,
|
|
463
|
+
earliest_write_conflict_snapshot_, job_snapshot_seq, snapshot_checker_,
|
|
464
|
+
env, ShouldReportDetailedTime(env, ioptions->stats),
|
|
465
|
+
true /* internal key corruption is not ok */, range_del_agg.get(),
|
|
466
|
+
nullptr, ioptions->allow_data_in_errors,
|
|
467
|
+
/*compaction=*/nullptr, compaction_filter.get(),
|
|
468
|
+
/*shutting_down=*/nullptr,
|
|
469
|
+
/*manual_compaction_paused=*/nullptr,
|
|
470
|
+
/*manual_compaction_canceled=*/nullptr, ioptions->info_log,
|
|
471
|
+
&(cfd_->GetFullHistoryTsLow()));
|
|
472
|
+
|
|
473
|
+
// Set earliest sequence number in the new memtable
|
|
474
|
+
// to be equal to the earliest sequence number of the
|
|
475
|
+
// memtable being flushed (See later if there is a need
|
|
476
|
+
// to update this number!).
|
|
477
|
+
new_mem->SetEarliestSequenceNumber(earliest_seqno);
|
|
478
|
+
// Likewise for first seq number.
|
|
479
|
+
new_mem->SetFirstSequenceNumber(first_seqno);
|
|
480
|
+
SequenceNumber new_first_seqno = kMaxSequenceNumber;
|
|
481
|
+
|
|
482
|
+
c_iter.SeekToFirst();
|
|
483
|
+
|
|
484
|
+
// Key transfer
|
|
485
|
+
for (; c_iter.Valid(); c_iter.Next()) {
|
|
486
|
+
const ParsedInternalKey ikey = c_iter.ikey();
|
|
487
|
+
const Slice value = c_iter.value();
|
|
488
|
+
new_first_seqno =
|
|
489
|
+
ikey.sequence < new_first_seqno ? ikey.sequence : new_first_seqno;
|
|
490
|
+
|
|
491
|
+
// Should we update "OldestKeyTime" ???? -> timestamp appear
|
|
492
|
+
// to still be an "experimental" feature.
|
|
493
|
+
s = new_mem->Add(
|
|
494
|
+
ikey.sequence, ikey.type, ikey.user_key, value,
|
|
495
|
+
nullptr, // KV protection info set as nullptr since it
|
|
496
|
+
// should only be useful for the first add to
|
|
497
|
+
// the original memtable.
|
|
498
|
+
false, // : allow concurrent_memtable_writes_
|
|
499
|
+
// Not seen as necessary for now.
|
|
500
|
+
nullptr, // get_post_process_info(m) must be nullptr
|
|
501
|
+
// when concurrent_memtable_writes is switched off.
|
|
502
|
+
nullptr); // hint, only used when concurrent_memtable_writes_
|
|
503
|
+
// is switched on.
|
|
504
|
+
if (!s.ok()) {
|
|
505
|
+
break;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// If new_mem has size greater than maxSize,
|
|
509
|
+
// then rollback to regular flush operation,
|
|
510
|
+
// and destroy new_mem.
|
|
511
|
+
if (new_mem->ApproximateMemoryUsage() > maxSize) {
|
|
512
|
+
s = Status::Aborted("Mempurge filled more than one memtable.");
|
|
513
|
+
new_mem_capacity = 1.0;
|
|
514
|
+
break;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// Check status and propagate
|
|
519
|
+
// potential error status from c_iter
|
|
520
|
+
if (!s.ok()) {
|
|
521
|
+
c_iter.status().PermitUncheckedError();
|
|
522
|
+
} else if (!c_iter.status().ok()) {
|
|
523
|
+
s = c_iter.status();
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Range tombstone transfer.
|
|
527
|
+
if (s.ok()) {
|
|
528
|
+
auto range_del_it = range_del_agg->NewIterator();
|
|
529
|
+
for (range_del_it->SeekToFirst(); range_del_it->Valid();
|
|
530
|
+
range_del_it->Next()) {
|
|
531
|
+
auto tombstone = range_del_it->Tombstone();
|
|
532
|
+
new_first_seqno =
|
|
533
|
+
tombstone.seq_ < new_first_seqno ? tombstone.seq_ : new_first_seqno;
|
|
534
|
+
s = new_mem->Add(
|
|
535
|
+
tombstone.seq_, // Sequence number
|
|
536
|
+
kTypeRangeDeletion, // KV type
|
|
537
|
+
tombstone.start_key_, // Key is start key.
|
|
538
|
+
tombstone.end_key_, // Value is end key.
|
|
539
|
+
nullptr, // KV protection info set as nullptr since it
|
|
540
|
+
// should only be useful for the first add to
|
|
541
|
+
// the original memtable.
|
|
542
|
+
false, // : allow concurrent_memtable_writes_
|
|
543
|
+
// Not seen as necessary for now.
|
|
544
|
+
nullptr, // get_post_process_info(m) must be nullptr
|
|
545
|
+
// when concurrent_memtable_writes is switched off.
|
|
546
|
+
nullptr); // hint, only used when concurrent_memtable_writes_
|
|
547
|
+
// is switched on.
|
|
548
|
+
|
|
549
|
+
if (!s.ok()) {
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// If new_mem has size greater than maxSize,
|
|
554
|
+
// then rollback to regular flush operation,
|
|
555
|
+
// and destroy new_mem.
|
|
556
|
+
if (new_mem->ApproximateMemoryUsage() > maxSize) {
|
|
557
|
+
s = Status::Aborted(Slice("Mempurge filled more than one memtable."));
|
|
558
|
+
new_mem_capacity = 1.0;
|
|
559
|
+
break;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// If everything happened smoothly and new_mem contains valid data,
|
|
565
|
+
// decide if it is flushed to storage or kept in the imm()
|
|
566
|
+
// memtable list (memory).
|
|
567
|
+
if (s.ok() && (new_first_seqno != kMaxSequenceNumber)) {
|
|
568
|
+
// Rectify the first sequence number, which (unlike the earliest seq
|
|
569
|
+
// number) needs to be present in the new memtable.
|
|
570
|
+
new_mem->SetFirstSequenceNumber(new_first_seqno);
|
|
571
|
+
|
|
572
|
+
// The new_mem is added to the list of immutable memtables
|
|
573
|
+
// only if it filled at less than 100% capacity and isn't flagged
|
|
574
|
+
// as in need of being flushed.
|
|
575
|
+
if (new_mem->ApproximateMemoryUsage() < maxSize &&
|
|
576
|
+
!(new_mem->ShouldFlushNow())) {
|
|
577
|
+
db_mutex_->Lock();
|
|
578
|
+
uint64_t new_mem_id = mems_[0]->GetID();
|
|
579
|
+
|
|
580
|
+
new_mem->SetID(new_mem_id);
|
|
581
|
+
new_mem->SetNextLogNumber(mems_[0]->GetNextLogNumber());
|
|
582
|
+
|
|
583
|
+
// This addition will not trigger another flush, because
|
|
584
|
+
// we do not call SchedulePendingFlush().
|
|
585
|
+
cfd_->imm()->Add(new_mem, &job_context_->memtables_to_free);
|
|
586
|
+
new_mem->Ref();
|
|
587
|
+
#ifndef ROCKSDB_LITE
|
|
588
|
+
// Piggyback FlushJobInfo on the first flushed memtable.
|
|
589
|
+
db_mutex_->AssertHeld();
|
|
590
|
+
meta_.fd.file_size = 0;
|
|
591
|
+
mems_[0]->SetFlushJobInfo(GetFlushJobInfo());
|
|
592
|
+
#endif // !ROCKSDB_LITE
|
|
593
|
+
db_mutex_->Unlock();
|
|
594
|
+
} else {
|
|
595
|
+
s = Status::Aborted(Slice("Mempurge filled more than one memtable."));
|
|
596
|
+
new_mem_capacity = 1.0;
|
|
597
|
+
if (new_mem) {
|
|
598
|
+
job_context_->memtables_to_free.push_back(new_mem);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
} else {
|
|
602
|
+
// In this case, the newly allocated new_mem is empty.
|
|
603
|
+
assert(new_mem != nullptr);
|
|
604
|
+
job_context_->memtables_to_free.push_back(new_mem);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// Reacquire the mutex for WriteLevel0 function.
|
|
609
|
+
db_mutex_->Lock();
|
|
610
|
+
|
|
611
|
+
// If mempurge successful, don't write input tables to level0,
|
|
612
|
+
// but write any full output table to level0.
|
|
613
|
+
if (s.ok()) {
|
|
614
|
+
TEST_SYNC_POINT("DBImpl::FlushJob:MemPurgeSuccessful");
|
|
615
|
+
} else {
|
|
616
|
+
TEST_SYNC_POINT("DBImpl::FlushJob:MemPurgeUnsuccessful");
|
|
617
|
+
}
|
|
618
|
+
const uint64_t micros = clock_->NowMicros() - start_micros;
|
|
619
|
+
const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros;
|
|
620
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
621
|
+
"[%s] [JOB %d] Mempurge lasted %" PRIu64
|
|
622
|
+
" microseconds, and %" PRIu64
|
|
623
|
+
" cpu "
|
|
624
|
+
"microseconds. Status is %s ok. Perc capacity: %f\n",
|
|
625
|
+
cfd_->GetName().c_str(), job_context_->job_id, micros,
|
|
626
|
+
cpu_micros, s.ok() ? "" : "not", new_mem_capacity);
|
|
627
|
+
|
|
628
|
+
return s;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
bool FlushJob::MemPurgeDecider() {
|
|
632
|
+
double threshold = db_options_.experimental_mempurge_threshold;
|
|
633
|
+
// Never trigger mempurge if threshold is not a strictly positive value.
|
|
634
|
+
if (!(threshold > 0.0)) {
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
if (threshold > (1.0 * mems_.size())) {
|
|
638
|
+
return true;
|
|
639
|
+
}
|
|
640
|
+
// Payload and useful_payload (in bytes).
|
|
641
|
+
// The useful payload ratio of a given MemTable
|
|
642
|
+
// is estimated to be useful_payload/payload.
|
|
643
|
+
uint64_t payload = 0, useful_payload = 0, entry_size = 0;
|
|
644
|
+
|
|
645
|
+
// Local variables used repetitively inside the for-loop
|
|
646
|
+
// when iterating over the sampled entries.
|
|
647
|
+
Slice key_slice, value_slice;
|
|
648
|
+
ParsedInternalKey res;
|
|
649
|
+
SnapshotImpl min_snapshot;
|
|
650
|
+
std::string vget;
|
|
651
|
+
Status mget_s, parse_s;
|
|
652
|
+
MergeContext merge_context;
|
|
653
|
+
SequenceNumber max_covering_tombstone_seq = 0, sqno = 0,
|
|
654
|
+
min_seqno_snapshot = 0;
|
|
655
|
+
bool get_res, can_be_useful_payload, not_in_next_mems;
|
|
656
|
+
|
|
657
|
+
// If estimated_useful_payload is > threshold,
|
|
658
|
+
// then flush to storage, else MemPurge.
|
|
659
|
+
double estimated_useful_payload = 0.0;
|
|
660
|
+
// Cochran formula for determining sample size.
|
|
661
|
+
// 95% confidence interval, 7% precision.
|
|
662
|
+
// n0 = (1.96*1.96)*0.25/(0.07*0.07) = 196.0
|
|
663
|
+
double n0 = 196.0;
|
|
664
|
+
ReadOptions ro;
|
|
665
|
+
ro.total_order_seek = true;
|
|
666
|
+
|
|
667
|
+
// Iterate over each memtable of the set.
|
|
668
|
+
for (auto mem_iter = std::begin(mems_); mem_iter != std::end(mems_);
|
|
669
|
+
mem_iter++) {
|
|
670
|
+
MemTable* mt = *mem_iter;
|
|
671
|
+
|
|
672
|
+
// Else sample from the table.
|
|
673
|
+
uint64_t nentries = mt->num_entries();
|
|
674
|
+
// Corrected Cochran formula for small populations
|
|
675
|
+
// (converges to n0 for large populations).
|
|
676
|
+
uint64_t target_sample_size =
|
|
677
|
+
static_cast<uint64_t>(ceil(n0 / (1.0 + (n0 / nentries))));
|
|
678
|
+
std::unordered_set<const char*> sentries = {};
|
|
679
|
+
// Populate sample entries set.
|
|
680
|
+
mt->UniqueRandomSample(target_sample_size, &sentries);
|
|
681
|
+
|
|
682
|
+
// Estimate the garbage ratio by comparing if
|
|
683
|
+
// each sample corresponds to a valid entry.
|
|
684
|
+
for (const char* ss : sentries) {
|
|
685
|
+
key_slice = GetLengthPrefixedSlice(ss);
|
|
686
|
+
parse_s = ParseInternalKey(key_slice, &res, true /*log_err_key*/);
|
|
687
|
+
if (!parse_s.ok()) {
|
|
688
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
689
|
+
"Memtable Decider: ParseInternalKey did not parse "
|
|
690
|
+
"key_slice %s successfully.",
|
|
691
|
+
key_slice.data());
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// Size of the entry is "key size (+ value size if KV entry)"
|
|
695
|
+
entry_size = key_slice.size();
|
|
696
|
+
if (res.type == kTypeValue) {
|
|
697
|
+
value_slice =
|
|
698
|
+
GetLengthPrefixedSlice(key_slice.data() + key_slice.size());
|
|
699
|
+
entry_size += value_slice.size();
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// Count entry bytes as payload.
|
|
703
|
+
payload += entry_size;
|
|
704
|
+
|
|
705
|
+
LookupKey lkey(res.user_key, kMaxSequenceNumber);
|
|
706
|
+
|
|
707
|
+
// Paranoia: zero out these values just in case.
|
|
708
|
+
max_covering_tombstone_seq = 0;
|
|
709
|
+
sqno = 0;
|
|
710
|
+
|
|
711
|
+
// Pick the oldest existing snapshot that is more recent
|
|
712
|
+
// than the sequence number of the sampled entry.
|
|
713
|
+
min_seqno_snapshot = kMaxSequenceNumber;
|
|
714
|
+
for (SequenceNumber seq_num : existing_snapshots_) {
|
|
715
|
+
if (seq_num > res.sequence && seq_num < min_seqno_snapshot) {
|
|
716
|
+
min_seqno_snapshot = seq_num;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
min_snapshot.number_ = min_seqno_snapshot;
|
|
720
|
+
ro.snapshot =
|
|
721
|
+
min_seqno_snapshot < kMaxSequenceNumber ? &min_snapshot : nullptr;
|
|
722
|
+
|
|
723
|
+
// Estimate if the sample entry is valid or not.
|
|
724
|
+
get_res = mt->Get(lkey, &vget, nullptr, &mget_s, &merge_context,
|
|
725
|
+
&max_covering_tombstone_seq, &sqno, ro);
|
|
726
|
+
if (!get_res) {
|
|
727
|
+
ROCKS_LOG_WARN(
|
|
728
|
+
db_options_.info_log,
|
|
729
|
+
"Memtable Get returned false when Get(sampled entry). "
|
|
730
|
+
"Yet each sample entry should exist somewhere in the memtable, "
|
|
731
|
+
"unrelated to whether it has been deleted or not.");
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
// TODO(bjlemaire): evaluate typeMerge.
|
|
735
|
+
// This is where the sampled entry is estimated to be
|
|
736
|
+
// garbage or not. Note that this is a garbage *estimation*
|
|
737
|
+
// because we do not include certain items such as
|
|
738
|
+
// CompactionFitlers triggered at flush, or if the same delete
|
|
739
|
+
// has been inserted twice or more in the memtable.
|
|
740
|
+
|
|
741
|
+
// Evaluate if the entry can be useful payload
|
|
742
|
+
// Situation #1: entry is a KV entry, was found in the memtable mt
|
|
743
|
+
// and the sequence numbers match.
|
|
744
|
+
can_be_useful_payload = (res.type == kTypeValue) && get_res &&
|
|
745
|
+
mget_s.ok() && (sqno == res.sequence);
|
|
746
|
+
|
|
747
|
+
// Situation #2: entry is a delete entry, was found in the memtable mt
|
|
748
|
+
// (because gres==true) and no valid KV entry is found.
|
|
749
|
+
// (note: duplicate delete entries are also taken into
|
|
750
|
+
// account here, because the sequence number 'sqno'
|
|
751
|
+
// in memtable->Get(&sqno) operation is set to be equal
|
|
752
|
+
// to the most recent delete entry as well).
|
|
753
|
+
can_be_useful_payload |=
|
|
754
|
+
((res.type == kTypeDeletion) || (res.type == kTypeSingleDeletion)) &&
|
|
755
|
+
mget_s.IsNotFound() && get_res && (sqno == res.sequence);
|
|
756
|
+
|
|
757
|
+
// If there is a chance that the entry is useful payload
|
|
758
|
+
// Verify that the entry does not appear in the following memtables
|
|
759
|
+
// (memtables with greater memtable ID/larger sequence numbers).
|
|
760
|
+
if (can_be_useful_payload) {
|
|
761
|
+
not_in_next_mems = true;
|
|
762
|
+
for (auto next_mem_iter = mem_iter + 1;
|
|
763
|
+
next_mem_iter != std::end(mems_); next_mem_iter++) {
|
|
764
|
+
if ((*next_mem_iter)
|
|
765
|
+
->Get(lkey, &vget, nullptr, &mget_s, &merge_context,
|
|
766
|
+
&max_covering_tombstone_seq, &sqno, ro)) {
|
|
767
|
+
not_in_next_mems = false;
|
|
768
|
+
break;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
if (not_in_next_mems) {
|
|
772
|
+
useful_payload += entry_size;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
if (payload > 0) {
|
|
777
|
+
// We use the estimated useful payload ratio to
|
|
778
|
+
// evaluate how many of the memtable bytes are useful bytes.
|
|
779
|
+
estimated_useful_payload +=
|
|
780
|
+
(mt->ApproximateMemoryUsage()) * (useful_payload * 1.0 / payload);
|
|
781
|
+
|
|
782
|
+
ROCKS_LOG_INFO(
|
|
783
|
+
db_options_.info_log,
|
|
784
|
+
"Mempurge sampling - found garbage ratio from sampling: %f.\n",
|
|
785
|
+
(payload - useful_payload) * 1.0 / payload);
|
|
786
|
+
} else {
|
|
787
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
788
|
+
"Mempurge sampling: null payload measured, and collected "
|
|
789
|
+
"sample size is %zu\n.",
|
|
790
|
+
sentries.size());
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
// We convert the total number of useful payload bytes
|
|
794
|
+
// into the proportion of memtable necessary to store all these bytes.
|
|
795
|
+
// We compare this proportion with the threshold value.
|
|
796
|
+
return ((estimated_useful_payload / mutable_cf_options_.write_buffer_size) <
|
|
797
|
+
threshold);
|
|
798
|
+
}
|
|
799
|
+
|
|
308
800
|
Status FlushJob::WriteLevel0Table() {
|
|
309
801
|
AutoThreadOperationStageUpdater stage_updater(
|
|
310
802
|
ThreadStatus::STAGE_FLUSH_WRITE_L0);
|
|
311
803
|
db_mutex_->AssertHeld();
|
|
312
|
-
const uint64_t start_micros =
|
|
313
|
-
const uint64_t start_cpu_micros =
|
|
804
|
+
const uint64_t start_micros = clock_->NowMicros();
|
|
805
|
+
const uint64_t start_cpu_micros = clock_->CPUMicros();
|
|
314
806
|
Status s;
|
|
315
807
|
|
|
316
808
|
std::vector<BlobFileAddition> blob_file_additions;
|
|
@@ -333,6 +825,13 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
333
825
|
uint64_t total_num_entries = 0, total_num_deletes = 0;
|
|
334
826
|
uint64_t total_data_size = 0;
|
|
335
827
|
size_t total_memory_usage = 0;
|
|
828
|
+
// Used for testing:
|
|
829
|
+
uint64_t mems_size = mems_.size();
|
|
830
|
+
(void)mems_size; // avoids unused variable error when
|
|
831
|
+
// TEST_SYNC_POINT_CALLBACK not used.
|
|
832
|
+
TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table:num_memtables",
|
|
833
|
+
&mems_size);
|
|
834
|
+
assert(job_context_);
|
|
336
835
|
for (MemTable* m : mems_) {
|
|
337
836
|
ROCKS_LOG_INFO(
|
|
338
837
|
db_options_.info_log,
|
|
@@ -361,7 +860,7 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
361
860
|
|
|
362
861
|
{
|
|
363
862
|
ScopedArenaIterator iter(
|
|
364
|
-
NewMergingIterator(&cfd_->internal_comparator(),
|
|
863
|
+
NewMergingIterator(&cfd_->internal_comparator(), memtables.data(),
|
|
365
864
|
static_cast<int>(memtables.size()), &arena));
|
|
366
865
|
ROCKS_LOG_INFO(db_options_.info_log,
|
|
367
866
|
"[%s] [JOB %d] Level-0 flush table #%" PRIu64 ": started",
|
|
@@ -371,7 +870,7 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
371
870
|
TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table:output_compression",
|
|
372
871
|
&output_compression_);
|
|
373
872
|
int64_t _current_time = 0;
|
|
374
|
-
auto status =
|
|
873
|
+
auto status = clock_->GetCurrentTime(&_current_time);
|
|
375
874
|
// Safe to proceed even if GetCurrentTime fails. So, log and proceed.
|
|
376
875
|
if (!status.ok()) {
|
|
377
876
|
ROCKS_LOG_WARN(
|
|
@@ -401,25 +900,53 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
401
900
|
? current_time
|
|
402
901
|
: meta_.oldest_ancester_time;
|
|
403
902
|
|
|
903
|
+
uint64_t num_input_entries = 0;
|
|
904
|
+
uint64_t memtable_payload_bytes = 0;
|
|
905
|
+
uint64_t memtable_garbage_bytes = 0;
|
|
404
906
|
IOStatus io_s;
|
|
405
907
|
const std::string* const full_history_ts_low =
|
|
406
908
|
(full_history_ts_low_.empty()) ? nullptr : &full_history_ts_low_;
|
|
909
|
+
TableBuilderOptions tboptions(
|
|
910
|
+
*cfd_->ioptions(), mutable_cf_options_, cfd_->internal_comparator(),
|
|
911
|
+
cfd_->int_tbl_prop_collector_factories(), output_compression_,
|
|
912
|
+
mutable_cf_options_.compression_opts, cfd_->GetID(), cfd_->GetName(),
|
|
913
|
+
0 /* level */, false /* is_bottommost */,
|
|
914
|
+
TableFileCreationReason::kFlush, creation_time, oldest_key_time,
|
|
915
|
+
current_time, db_id_, db_session_id_, 0 /* target_file_size */,
|
|
916
|
+
meta_.fd.GetNumber());
|
|
917
|
+
const SequenceNumber job_snapshot_seq =
|
|
918
|
+
job_context_->GetJobSnapshotSequence();
|
|
407
919
|
s = BuildTable(
|
|
408
|
-
dbname_, versions_, db_options_,
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
if (
|
|
422
|
-
|
|
920
|
+
dbname_, versions_, db_options_, tboptions, file_options_,
|
|
921
|
+
cfd_->table_cache(), iter.get(), std::move(range_del_iters), &meta_,
|
|
922
|
+
&blob_file_additions, existing_snapshots_,
|
|
923
|
+
earliest_write_conflict_snapshot_, job_snapshot_seq,
|
|
924
|
+
snapshot_checker_, mutable_cf_options_.paranoid_file_checks,
|
|
925
|
+
cfd_->internal_stats(), &io_s, io_tracer_,
|
|
926
|
+
BlobFileCreationReason::kFlush, event_logger_, job_context_->job_id,
|
|
927
|
+
Env::IO_HIGH, &table_properties_, write_hint, full_history_ts_low,
|
|
928
|
+
blob_callback_, &num_input_entries, &memtable_payload_bytes,
|
|
929
|
+
&memtable_garbage_bytes);
|
|
930
|
+
// TODO: Cleanup io_status in BuildTable and table builders
|
|
931
|
+
assert(!s.ok() || io_s.ok());
|
|
932
|
+
io_s.PermitUncheckedError();
|
|
933
|
+
if (num_input_entries != total_num_entries && s.ok()) {
|
|
934
|
+
std::string msg = "Expected " + ToString(total_num_entries) +
|
|
935
|
+
" entries in memtables, but read " +
|
|
936
|
+
ToString(num_input_entries);
|
|
937
|
+
ROCKS_LOG_WARN(db_options_.info_log, "[%s] [JOB %d] Level-0 flush %s",
|
|
938
|
+
cfd_->GetName().c_str(), job_context_->job_id,
|
|
939
|
+
msg.c_str());
|
|
940
|
+
if (db_options_.flush_verify_memtable_count) {
|
|
941
|
+
s = Status::Corruption(msg);
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
if (tboptions.reason == TableFileCreationReason::kFlush) {
|
|
945
|
+
TEST_SYNC_POINT("DBImpl::FlushJob:Flush");
|
|
946
|
+
RecordTick(stats_, MEMTABLE_PAYLOAD_BYTES_AT_FLUSH,
|
|
947
|
+
memtable_payload_bytes);
|
|
948
|
+
RecordTick(stats_, MEMTABLE_GARBAGE_BYTES_AT_FLUSH,
|
|
949
|
+
memtable_garbage_bytes);
|
|
423
950
|
}
|
|
424
951
|
LogFlush(db_options_.info_log);
|
|
425
952
|
}
|
|
@@ -433,7 +960,9 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
433
960
|
meta_.marked_for_compaction ? " (needs compaction)" : "");
|
|
434
961
|
|
|
435
962
|
if (s.ok() && output_file_directory_ != nullptr && sync_output_directory_) {
|
|
436
|
-
s = output_file_directory_->
|
|
963
|
+
s = output_file_directory_->FsyncWithDirOptions(
|
|
964
|
+
IOOptions(), nullptr,
|
|
965
|
+
DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
|
|
437
966
|
}
|
|
438
967
|
TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table", &mems_);
|
|
439
968
|
db_mutex_->Lock();
|
|
@@ -445,6 +974,7 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
445
974
|
const bool has_output = meta_.fd.GetFileSize() > 0;
|
|
446
975
|
|
|
447
976
|
if (s.ok() && has_output) {
|
|
977
|
+
TEST_SYNC_POINT("DBImpl::FlushJob:SSTFileCreated");
|
|
448
978
|
// if we have more than 1 background thread, then we cannot
|
|
449
979
|
// insert files directly into higher levels because some other
|
|
450
980
|
// threads could be concurrently producing compacted files for
|
|
@@ -453,9 +983,11 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
453
983
|
edit_->AddFile(0 /* level */, meta_.fd.GetNumber(), meta_.fd.GetPathId(),
|
|
454
984
|
meta_.fd.GetFileSize(), meta_.smallest, meta_.largest,
|
|
455
985
|
meta_.fd.smallest_seqno, meta_.fd.largest_seqno,
|
|
456
|
-
meta_.marked_for_compaction, meta_.
|
|
457
|
-
meta_.
|
|
458
|
-
meta_.
|
|
986
|
+
meta_.marked_for_compaction, meta_.temperature,
|
|
987
|
+
meta_.oldest_blob_file_number, meta_.oldest_ancester_time,
|
|
988
|
+
meta_.file_creation_time, meta_.file_checksum,
|
|
989
|
+
meta_.file_checksum_func_name, meta_.min_timestamp,
|
|
990
|
+
meta_.max_timestamp);
|
|
459
991
|
|
|
460
992
|
edit_->SetBlobFileAdditions(std::move(blob_file_additions));
|
|
461
993
|
}
|
|
@@ -466,8 +998,16 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
466
998
|
|
|
467
999
|
// Note that here we treat flush as level 0 compaction in internal stats
|
|
468
1000
|
InternalStats::CompactionStats stats(CompactionReason::kFlush, 1);
|
|
469
|
-
|
|
470
|
-
|
|
1001
|
+
const uint64_t micros = clock_->NowMicros() - start_micros;
|
|
1002
|
+
const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros;
|
|
1003
|
+
stats.micros = micros;
|
|
1004
|
+
stats.cpu_micros = cpu_micros;
|
|
1005
|
+
|
|
1006
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
1007
|
+
"[%s] [JOB %d] Flush lasted %" PRIu64
|
|
1008
|
+
" microseconds, and %" PRIu64 " cpu microseconds.\n",
|
|
1009
|
+
cfd_->GetName().c_str(), job_context_->job_id, micros,
|
|
1010
|
+
cpu_micros);
|
|
471
1011
|
|
|
472
1012
|
if (has_output) {
|
|
473
1013
|
stats.bytes_written = meta_.fd.GetFileSize();
|
|
@@ -476,16 +1016,18 @@ Status FlushJob::WriteLevel0Table() {
|
|
|
476
1016
|
|
|
477
1017
|
const auto& blobs = edit_->GetBlobFileAdditions();
|
|
478
1018
|
for (const auto& blob : blobs) {
|
|
479
|
-
stats.
|
|
1019
|
+
stats.bytes_written_blob += blob.GetTotalBlobBytes();
|
|
480
1020
|
}
|
|
481
1021
|
|
|
482
|
-
stats.
|
|
1022
|
+
stats.num_output_files_blob = static_cast<int>(blobs.size());
|
|
483
1023
|
|
|
484
1024
|
RecordTimeToHistogram(stats_, FLUSH_TIME, stats.micros);
|
|
485
1025
|
cfd_->internal_stats()->AddCompactionStats(0 /* level */, thread_pri_, stats);
|
|
486
|
-
cfd_->internal_stats()->AddCFStats(
|
|
487
|
-
|
|
1026
|
+
cfd_->internal_stats()->AddCFStats(
|
|
1027
|
+
InternalStats::BYTES_FLUSHED,
|
|
1028
|
+
stats.bytes_written + stats.bytes_written_blob);
|
|
488
1029
|
RecordFlushIOStats();
|
|
1030
|
+
|
|
489
1031
|
return s;
|
|
490
1032
|
}
|
|
491
1033
|
|
|
@@ -507,8 +1049,21 @@ std::unique_ptr<FlushJobInfo> FlushJob::GetFlushJobInfo() const {
|
|
|
507
1049
|
info->largest_seqno = meta_.fd.largest_seqno;
|
|
508
1050
|
info->table_properties = table_properties_;
|
|
509
1051
|
info->flush_reason = cfd_->GetFlushReason();
|
|
1052
|
+
info->blob_compression_type = mutable_cf_options_.blob_compression_type;
|
|
1053
|
+
|
|
1054
|
+
// Update BlobFilesInfo.
|
|
1055
|
+
for (const auto& blob_file : edit_->GetBlobFileAdditions()) {
|
|
1056
|
+
BlobFileAdditionInfo blob_file_addition_info(
|
|
1057
|
+
BlobFileName(cfd_->ioptions()->cf_paths.front().path,
|
|
1058
|
+
blob_file.GetBlobFileNumber()) /*blob_file_path*/,
|
|
1059
|
+
blob_file.GetBlobFileNumber(), blob_file.GetTotalBlobCount(),
|
|
1060
|
+
blob_file.GetTotalBlobBytes());
|
|
1061
|
+
info->blob_file_addition_infos.emplace_back(
|
|
1062
|
+
std::move(blob_file_addition_info));
|
|
1063
|
+
}
|
|
510
1064
|
return info;
|
|
511
1065
|
}
|
|
1066
|
+
|
|
512
1067
|
#endif // !ROCKSDB_LITE
|
|
513
1068
|
|
|
514
1069
|
} // namespace ROCKSDB_NAMESPACE
|