@nxtedition/rocksdb 5.2.21 → 5.2.26
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 +216 -252
- package/binding.gyp +78 -72
- 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/README.md +4 -4
- 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/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/README.md +60 -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/plugin/README.md +43 -0
- 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/package.json +8 -8
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x86/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- 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/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/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#include "cache/cache_key.h"
|
|
7
|
+
|
|
8
|
+
#include <algorithm>
|
|
9
|
+
#include <atomic>
|
|
10
|
+
|
|
11
|
+
#include "rocksdb/cache.h"
|
|
12
|
+
#include "table/unique_id_impl.h"
|
|
13
|
+
#include "util/hash.h"
|
|
14
|
+
#include "util/math.h"
|
|
15
|
+
|
|
16
|
+
namespace ROCKSDB_NAMESPACE {
|
|
17
|
+
|
|
18
|
+
// Value space plan for CacheKey:
|
|
19
|
+
//
|
|
20
|
+
// session_etc64_ | offset_etc64_ | Only generated by
|
|
21
|
+
// ---------------+---------------+------------------------------------------
|
|
22
|
+
// 0 | 0 | Reserved for "empty" CacheKey()
|
|
23
|
+
// 0 | > 0, < 1<<63 | CreateUniqueForCacheLifetime
|
|
24
|
+
// 0 | >= 1<<63 | CreateUniqueForProcessLifetime
|
|
25
|
+
// > 0 | any | OffsetableCacheKey.WithOffset
|
|
26
|
+
|
|
27
|
+
CacheKey CacheKey::CreateUniqueForCacheLifetime(Cache *cache) {
|
|
28
|
+
// +1 so that we can reserve all zeros for "unset" cache key
|
|
29
|
+
uint64_t id = cache->NewId() + 1;
|
|
30
|
+
// Ensure we don't collide with CreateUniqueForProcessLifetime
|
|
31
|
+
assert((id >> 63) == 0U);
|
|
32
|
+
return CacheKey(0, id);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
CacheKey CacheKey::CreateUniqueForProcessLifetime() {
|
|
36
|
+
// To avoid colliding with CreateUniqueForCacheLifetime, assuming
|
|
37
|
+
// Cache::NewId counts up from zero, here we count down from UINT64_MAX.
|
|
38
|
+
// If this ever becomes a point of contention, we could sub-divide the
|
|
39
|
+
// space and use CoreLocalArray.
|
|
40
|
+
static std::atomic<uint64_t> counter{UINT64_MAX};
|
|
41
|
+
uint64_t id = counter.fetch_sub(1, std::memory_order_relaxed);
|
|
42
|
+
// Ensure we don't collide with CreateUniqueForCacheLifetime
|
|
43
|
+
assert((id >> 63) == 1U);
|
|
44
|
+
return CacheKey(0, id);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Value plan for CacheKeys from OffsetableCacheKey, assuming that
|
|
48
|
+
// db_session_ids are generated from a base_session_id and
|
|
49
|
+
// session_id_counter (by SemiStructuredUniqueIdGen+EncodeSessionId
|
|
50
|
+
// in DBImpl::GenerateDbSessionId):
|
|
51
|
+
//
|
|
52
|
+
// Conceptual inputs:
|
|
53
|
+
// db_id (unstructured, from GenerateRawUniqueId or equiv)
|
|
54
|
+
// * could be shared between cloned DBs but rare
|
|
55
|
+
// * could be constant, if session id suffices
|
|
56
|
+
// base_session_id (unstructured, from GenerateRawUniqueId)
|
|
57
|
+
// session_id_counter (structured)
|
|
58
|
+
// * usually much smaller than 2**24
|
|
59
|
+
// file_number (structured)
|
|
60
|
+
// * usually smaller than 2**24
|
|
61
|
+
// offset_in_file (structured, might skip lots of values)
|
|
62
|
+
// * usually smaller than 2**32
|
|
63
|
+
// max_offset determines placement of file_number to prevent
|
|
64
|
+
// overlapping with offset
|
|
65
|
+
//
|
|
66
|
+
// Outputs come from bitwise-xor of the constituent pieces, low bits on left:
|
|
67
|
+
//
|
|
68
|
+
// |------------------------- session_etc64 -------------------------|
|
|
69
|
+
// | +++++++++++++++ base_session_id (lower 64 bits) +++++++++++++++ |
|
|
70
|
+
// |-----------------------------------------------------------------|
|
|
71
|
+
// | session_id_counter ...| |
|
|
72
|
+
// |-----------------------------------------------------------------|
|
|
73
|
+
// | | ... file_number |
|
|
74
|
+
// | | overflow & meta |
|
|
75
|
+
// |-----------------------------------------------------------------|
|
|
76
|
+
//
|
|
77
|
+
//
|
|
78
|
+
// |------------------------- offset_etc64 --------------------------|
|
|
79
|
+
// | hash of: ++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
|
80
|
+
// | * base_session_id (upper ~39 bits) |
|
|
81
|
+
// | * db_id (~122 bits entropy) |
|
|
82
|
+
// |-----------------------------------------------------------------|
|
|
83
|
+
// | offset_in_file ............... | |
|
|
84
|
+
// |-----------------------------------------------------------------|
|
|
85
|
+
// | | file_number, 0-3 |
|
|
86
|
+
// | | lower bytes |
|
|
87
|
+
// |-----------------------------------------------------------------|
|
|
88
|
+
//
|
|
89
|
+
// Based on max_offset, a maximal number of bytes 0..3 is chosen for
|
|
90
|
+
// including from lower bits of file_number in offset_etc64. The choice
|
|
91
|
+
// is encoded in two bits of metadata going into session_etc64, though
|
|
92
|
+
// the common case of 3 bytes is encoded as 0 so that session_etc64
|
|
93
|
+
// is unmodified by file_number concerns in the common case.
|
|
94
|
+
//
|
|
95
|
+
// There is nothing preventing "file number overflow & meta" from meeting
|
|
96
|
+
// and overlapping with session_id_counter, but reaching such a case requires
|
|
97
|
+
// an intractable combination of large file offsets (thus at least some large
|
|
98
|
+
// files), large file numbers (thus large number of files generated), and
|
|
99
|
+
// large number of session IDs generated in a single process. A trillion each
|
|
100
|
+
// (2**40) of session ids, offsets, and file numbers comes to 120 bits.
|
|
101
|
+
// With two bits of metadata and byte granularity, this is on the verge of
|
|
102
|
+
// overlap, but even in the overlap case, it doesn't seem likely that
|
|
103
|
+
// a file from billions of files or session ids ago will still be live
|
|
104
|
+
// or cached.
|
|
105
|
+
//
|
|
106
|
+
// In fact, if our SST files are all < 4TB (see
|
|
107
|
+
// BlockBasedTable::kMaxFileSizeStandardEncoding), then SST files generated
|
|
108
|
+
// in a single process are guaranteed to have unique cache keys, unless/until
|
|
109
|
+
// number session ids * max file number = 2**86, e.g. 1 trillion DB::Open in
|
|
110
|
+
// a single process and 64 trillion files generated. Even at that point, to
|
|
111
|
+
// see a collision we would need a miraculous re-synchronization of session
|
|
112
|
+
// id and file number, along with a live file or stale cache entry from
|
|
113
|
+
// trillions of files ago.
|
|
114
|
+
//
|
|
115
|
+
// How https://github.com/pdillinger/unique_id applies here:
|
|
116
|
+
// Every bit of output always includes "unstructured" uniqueness bits and
|
|
117
|
+
// often combines with "structured" uniqueness bits. The "unstructured" bits
|
|
118
|
+
// change infrequently: only when we cannot guarantee our state tracking for
|
|
119
|
+
// "structured" uniqueness hasn't been cloned. Using a static
|
|
120
|
+
// SemiStructuredUniqueIdGen for db_session_ids, this means we only get an
|
|
121
|
+
// "all new" session id when a new process uses RocksDB. (Between processes,
|
|
122
|
+
// we don't know if a DB or other persistent storage has been cloned. We
|
|
123
|
+
// assume that if VM hot cloning is used, subsequently generated SST files
|
|
124
|
+
// do not interact.) Within a process, only the session_lower of the
|
|
125
|
+
// db_session_id changes incrementally ("structured" uniqueness).
|
|
126
|
+
//
|
|
127
|
+
// This basically means that our offsets, counters and file numbers allow us
|
|
128
|
+
// to do somewhat "better than random" (birthday paradox) while in the
|
|
129
|
+
// degenerate case of completely new session for each tiny file, we still
|
|
130
|
+
// have strong uniqueness properties from the birthday paradox, with ~103
|
|
131
|
+
// bit session IDs or up to 128 bits entropy with different DB IDs sharing a
|
|
132
|
+
// cache.
|
|
133
|
+
//
|
|
134
|
+
// More collision probability analysis:
|
|
135
|
+
// Suppose a RocksDB host generates (generously) 2 GB/s (10TB data, 17 DWPD)
|
|
136
|
+
// with average process/session lifetime of (pessimistically) 4 minutes.
|
|
137
|
+
// In 180 days (generous allowable data lifespan), we generate 31 million GB
|
|
138
|
+
// of data, or 2^55 bytes, and 2^16 "all new" session IDs.
|
|
139
|
+
//
|
|
140
|
+
// First, suppose this is in a single DB (lifetime 180 days):
|
|
141
|
+
// 128 bits cache key size
|
|
142
|
+
// - 55 <- ideal size for byte offsets + file numbers
|
|
143
|
+
// - 2 <- bits for offsets and file numbers not exactly powers of two
|
|
144
|
+
// - 2 <- bits for file number encoding metadata
|
|
145
|
+
// + 2 <- bits saved not using byte offsets in BlockBasedTable::GetCacheKey
|
|
146
|
+
// ----
|
|
147
|
+
// 71 <- bits remaining for distinguishing session IDs
|
|
148
|
+
// The probability of a collision in 71 bits of session ID data is less than
|
|
149
|
+
// 1 in 2**(71 - (2 * 16)), or roughly 1 in a trillion. And this assumes all
|
|
150
|
+
// data from the last 180 days is in cache for potential collision, and that
|
|
151
|
+
// cache keys under each session id exhaustively cover the remaining 57 bits
|
|
152
|
+
// while in reality they'll only cover a small fraction of it.
|
|
153
|
+
//
|
|
154
|
+
// Although data could be transferred between hosts, each host has its own
|
|
155
|
+
// cache and we are already assuming a high rate of "all new" session ids.
|
|
156
|
+
// So this doesn't really change the collision calculation. Across a fleet
|
|
157
|
+
// of 1 million, each with <1 in a trillion collision possibility,
|
|
158
|
+
// fleetwide collision probability is <1 in a million.
|
|
159
|
+
//
|
|
160
|
+
// Now suppose we have many DBs per host, say 2**10, with same host-wide write
|
|
161
|
+
// rate and process/session lifetime. File numbers will be ~10 bits smaller
|
|
162
|
+
// and we will have 2**10 times as many session IDs because of simultaneous
|
|
163
|
+
// lifetimes. So now collision chance is less than 1 in 2**(81 - (2 * 26)),
|
|
164
|
+
// or roughly 1 in a billion.
|
|
165
|
+
//
|
|
166
|
+
// Suppose instead we generated random or hashed cache keys for each
|
|
167
|
+
// (compressed) block. For 1KB compressed block size, that is 2^45 cache keys
|
|
168
|
+
// in 180 days. Collision probability is more easily estimated at roughly
|
|
169
|
+
// 1 in 2**(128 - (2 * 45)) or roughly 1 in a trillion (assuming all
|
|
170
|
+
// data from the last 180 days is in cache, but NOT the other assumption
|
|
171
|
+
// for the 1 in a trillion estimate above).
|
|
172
|
+
//
|
|
173
|
+
//
|
|
174
|
+
// Collision probability estimation through simulation:
|
|
175
|
+
// A tool ./cache_bench -stress_cache_key broadly simulates host-wide cache
|
|
176
|
+
// activity over many months, by making some pessimistic simplifying
|
|
177
|
+
// assumptions. See class StressCacheKey in cache_bench_tool.cc for details.
|
|
178
|
+
// Here is some sample output with
|
|
179
|
+
// `./cache_bench -stress_cache_key -sck_keep_bits=40`:
|
|
180
|
+
//
|
|
181
|
+
// Total cache or DBs size: 32TiB Writing 925.926 MiB/s or 76.2939TiB/day
|
|
182
|
+
// Multiply by 9.22337e+18 to correct for simulation losses (but still
|
|
183
|
+
// assume whole file cached)
|
|
184
|
+
//
|
|
185
|
+
// These come from default settings of 2.5M files per day of 32 MB each, and
|
|
186
|
+
// `-sck_keep_bits=40` means that to represent a single file, we are only
|
|
187
|
+
// keeping 40 bits of the 128-bit (base) cache key. With file size of 2**25
|
|
188
|
+
// contiguous keys (pessimistic), our simulation is about 2\*\*(128-40-25) or
|
|
189
|
+
// about 9 billion billion times more prone to collision than reality.
|
|
190
|
+
//
|
|
191
|
+
// More default assumptions, relatively pessimistic:
|
|
192
|
+
// * 100 DBs in same process (doesn't matter much)
|
|
193
|
+
// * Re-open DB in same process (new session ID related to old session ID) on
|
|
194
|
+
// average every 100 files generated
|
|
195
|
+
// * Restart process (all new session IDs unrelated to old) 24 times per day
|
|
196
|
+
//
|
|
197
|
+
// After enough data, we get a result at the end (-sck_keep_bits=40):
|
|
198
|
+
//
|
|
199
|
+
// (keep 40 bits) 17 collisions after 2 x 90 days, est 10.5882 days between
|
|
200
|
+
// (9.76592e+19 corrected)
|
|
201
|
+
//
|
|
202
|
+
// If we believe the (pessimistic) simulation and the mathematical
|
|
203
|
+
// extrapolation, we would need to run a billion machines all for 97 billion
|
|
204
|
+
// days to expect a cache key collision. To help verify that our extrapolation
|
|
205
|
+
// ("corrected") is robust, we can make our simulation more precise with
|
|
206
|
+
// `-sck_keep_bits=41` and `42`, which takes more running time to get enough
|
|
207
|
+
// collision data:
|
|
208
|
+
//
|
|
209
|
+
// (keep 41 bits) 16 collisions after 4 x 90 days, est 22.5 days between
|
|
210
|
+
// (1.03763e+20 corrected)
|
|
211
|
+
// (keep 42 bits) 19 collisions after 10 x 90 days, est 47.3684 days between
|
|
212
|
+
// (1.09224e+20 corrected)
|
|
213
|
+
//
|
|
214
|
+
// The extrapolated prediction is very close. If anything, we might have some
|
|
215
|
+
// very small losses of structured data (see class StressCacheKey in
|
|
216
|
+
// cache_bench_tool.cc) leading to more accurate & more attractive prediction
|
|
217
|
+
// with more bits kept.
|
|
218
|
+
//
|
|
219
|
+
// With the `-sck_randomize` option, we can see that typical workloads like
|
|
220
|
+
// above have lower collision probability than "random" cache keys (note:
|
|
221
|
+
// offsets still non-randomized) by a modest amount (roughly 20x less collision
|
|
222
|
+
// prone than random), which should make us reasonably comfortable even in
|
|
223
|
+
// "degenerate" cases (e.g. repeatedly launch a process to generate 1 file
|
|
224
|
+
// with SstFileWriter):
|
|
225
|
+
//
|
|
226
|
+
// (rand 40 bits) 197 collisions after 1 x 90 days, est 0.456853 days between
|
|
227
|
+
// (4.21372e+18 corrected)
|
|
228
|
+
//
|
|
229
|
+
// We can see that with more frequent process restarts (all new session IDs),
|
|
230
|
+
// we get closer to the "random" cache key performance:
|
|
231
|
+
//
|
|
232
|
+
// (-sck_restarts_per_day=5000): 140 collisions after 1 x 90 days, ...
|
|
233
|
+
// (5.92931e+18 corrected)
|
|
234
|
+
//
|
|
235
|
+
// Other tests have been run to validate other conditions behave as expected,
|
|
236
|
+
// never behaving "worse than random" unless we start chopping off structured
|
|
237
|
+
// data.
|
|
238
|
+
//
|
|
239
|
+
//
|
|
240
|
+
// Conclusion: Even in extreme cases, rapidly burning through "all new" IDs
|
|
241
|
+
// that only arise when a new process is started, the chance of any cache key
|
|
242
|
+
// collisions in a giant fleet of machines is negligible. Especially when
|
|
243
|
+
// processes live for hours or days, the chance of a cache key collision is
|
|
244
|
+
// likely more plausibly due to bad hardware than to bad luck in random
|
|
245
|
+
// session ID data. Software defects are surely more likely to cause corruption
|
|
246
|
+
// than both of those.
|
|
247
|
+
//
|
|
248
|
+
// TODO: Nevertheless / regardless, an efficient way to detect (and thus
|
|
249
|
+
// quantify) block cache corruptions, including collisions, should be added.
|
|
250
|
+
OffsetableCacheKey::OffsetableCacheKey(const std::string &db_id,
|
|
251
|
+
const std::string &db_session_id,
|
|
252
|
+
uint64_t file_number,
|
|
253
|
+
uint64_t max_offset) {
|
|
254
|
+
#ifndef NDEBUG
|
|
255
|
+
max_offset_ = max_offset;
|
|
256
|
+
#endif
|
|
257
|
+
// Closely related to GetSstInternalUniqueId, but only need 128 bits and
|
|
258
|
+
// need to include an offset within the file.
|
|
259
|
+
// See also https://github.com/pdillinger/unique_id for background.
|
|
260
|
+
uint64_t session_upper = 0; // Assignment to appease clang-analyze
|
|
261
|
+
uint64_t session_lower = 0; // Assignment to appease clang-analyze
|
|
262
|
+
{
|
|
263
|
+
Status s = DecodeSessionId(db_session_id, &session_upper, &session_lower);
|
|
264
|
+
if (!s.ok()) {
|
|
265
|
+
// A reasonable fallback in case malformed
|
|
266
|
+
Hash2x64(db_session_id.data(), db_session_id.size(), &session_upper,
|
|
267
|
+
&session_lower);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Hash the session upper (~39 bits entropy) and DB id (120+ bits entropy)
|
|
272
|
+
// for more global uniqueness entropy.
|
|
273
|
+
// (It is possible that many DBs descended from one common DB id are copied
|
|
274
|
+
// around and proliferate, in which case session id is critical, but it is
|
|
275
|
+
// more common for different DBs to have different DB ids.)
|
|
276
|
+
uint64_t db_hash = Hash64(db_id.data(), db_id.size(), session_upper);
|
|
277
|
+
|
|
278
|
+
// This establishes the db+session id part of the cache key.
|
|
279
|
+
//
|
|
280
|
+
// Exactly preserve (in common cases; see modifiers below) session lower to
|
|
281
|
+
// ensure that session ids generated during the same process lifetime are
|
|
282
|
+
// guaranteed unique.
|
|
283
|
+
//
|
|
284
|
+
// We put this first for CommonPrefixSlice(), so that a small-ish set of
|
|
285
|
+
// cache key prefixes to cover entries relevant to any DB.
|
|
286
|
+
session_etc64_ = session_lower;
|
|
287
|
+
// This provides extra entopy in case of different DB id or process
|
|
288
|
+
// generating a session id, but is also partly/variably obscured by
|
|
289
|
+
// file_number and offset (see below).
|
|
290
|
+
offset_etc64_ = db_hash;
|
|
291
|
+
|
|
292
|
+
// Into offset_etc64_ we are (eventually) going to pack & xor in an offset and
|
|
293
|
+
// a file_number, but we might need the file_number to overflow into
|
|
294
|
+
// session_etc64_. (There must only be one session_etc64_ value per
|
|
295
|
+
// file, and preferably shared among many files.)
|
|
296
|
+
//
|
|
297
|
+
// Figure out how many bytes of file_number we are going to be able to
|
|
298
|
+
// pack in with max_offset, though our encoding will only support packing
|
|
299
|
+
// in up to 3 bytes of file_number. (16M file numbers is enough for a new
|
|
300
|
+
// file number every second for half a year.)
|
|
301
|
+
int file_number_bytes_in_offset_etc =
|
|
302
|
+
(63 - FloorLog2(max_offset | 0x100000000U)) / 8;
|
|
303
|
+
int file_number_bits_in_offset_etc = file_number_bytes_in_offset_etc * 8;
|
|
304
|
+
|
|
305
|
+
// Assert two bits of metadata
|
|
306
|
+
assert(file_number_bytes_in_offset_etc >= 0 &&
|
|
307
|
+
file_number_bytes_in_offset_etc <= 3);
|
|
308
|
+
// Assert we couldn't have used a larger allowed number of bytes (shift
|
|
309
|
+
// would chop off bytes).
|
|
310
|
+
assert(file_number_bytes_in_offset_etc == 3 ||
|
|
311
|
+
(max_offset << (file_number_bits_in_offset_etc + 8) >>
|
|
312
|
+
(file_number_bits_in_offset_etc + 8)) != max_offset);
|
|
313
|
+
|
|
314
|
+
uint64_t mask = (uint64_t{1} << (file_number_bits_in_offset_etc)) - 1;
|
|
315
|
+
// Pack into high bits of etc so that offset can go in low bits of etc
|
|
316
|
+
// TODO: could be EndianSwapValue?
|
|
317
|
+
uint64_t offset_etc_modifier = ReverseBits(file_number & mask);
|
|
318
|
+
assert(offset_etc_modifier << file_number_bits_in_offset_etc == 0U);
|
|
319
|
+
|
|
320
|
+
// Overflow and 3 - byte count (likely both zero) go into session_id part
|
|
321
|
+
uint64_t session_etc_modifier =
|
|
322
|
+
(file_number >> file_number_bits_in_offset_etc << 2) |
|
|
323
|
+
static_cast<uint64_t>(3 - file_number_bytes_in_offset_etc);
|
|
324
|
+
// Packed into high bits to minimize interference with session id counter.
|
|
325
|
+
session_etc_modifier = ReverseBits(session_etc_modifier);
|
|
326
|
+
|
|
327
|
+
// Assert session_id part is only modified in extreme cases
|
|
328
|
+
assert(session_etc_modifier == 0 || file_number > /*3 bytes*/ 0xffffffU ||
|
|
329
|
+
max_offset > /*5 bytes*/ 0xffffffffffU);
|
|
330
|
+
|
|
331
|
+
// Xor in the modifiers
|
|
332
|
+
session_etc64_ ^= session_etc_modifier;
|
|
333
|
+
offset_etc64_ ^= offset_etc_modifier;
|
|
334
|
+
|
|
335
|
+
// Although DBImpl guarantees (in recent versions) that session_lower is not
|
|
336
|
+
// zero, that's not entirely sufficient to guarantee that session_etc64_ is
|
|
337
|
+
// not zero (so that the 0 case can be used by CacheKey::CreateUnique*)
|
|
338
|
+
if (session_etc64_ == 0U) {
|
|
339
|
+
session_etc64_ = session_upper | 1U;
|
|
340
|
+
}
|
|
341
|
+
assert(session_etc64_ != 0);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include <cstdint>
|
|
9
|
+
|
|
10
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
11
|
+
#include "rocksdb/slice.h"
|
|
12
|
+
|
|
13
|
+
namespace ROCKSDB_NAMESPACE {
|
|
14
|
+
|
|
15
|
+
class Cache;
|
|
16
|
+
|
|
17
|
+
// A standard holder for fixed-size block cache keys (and for related caches).
|
|
18
|
+
// They are created through one of these, each using its own range of values:
|
|
19
|
+
// * CacheKey::CreateUniqueForCacheLifetime
|
|
20
|
+
// * CacheKey::CreateUniqueForProcessLifetime
|
|
21
|
+
// * Default ctor ("empty" cache key)
|
|
22
|
+
// * OffsetableCacheKey->WithOffset
|
|
23
|
+
//
|
|
24
|
+
// The first two use atomic counters to guarantee uniqueness over the given
|
|
25
|
+
// lifetime and the last uses a form of universally unique identifier for
|
|
26
|
+
// uniqueness with very high probabilty (and guaranteed for files generated
|
|
27
|
+
// during a single process lifetime).
|
|
28
|
+
//
|
|
29
|
+
// CacheKeys are currently used by calling AsSlice() to pass as a key to
|
|
30
|
+
// Cache. For performance, the keys are endianness-dependent (though otherwise
|
|
31
|
+
// portable). (Persistable cache entries are not intended to cross platforms.)
|
|
32
|
+
class CacheKey {
|
|
33
|
+
public:
|
|
34
|
+
// For convenience, constructs an "empty" cache key that is never returned
|
|
35
|
+
// by other means.
|
|
36
|
+
inline CacheKey() : session_etc64_(), offset_etc64_() {}
|
|
37
|
+
|
|
38
|
+
inline bool IsEmpty() const {
|
|
39
|
+
return (session_etc64_ == 0) & (offset_etc64_ == 0);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Use this cache key as a Slice (byte order is endianness-dependent)
|
|
43
|
+
inline Slice AsSlice() const {
|
|
44
|
+
static_assert(sizeof(*this) == 16, "Standardized on 16-byte cache key");
|
|
45
|
+
assert(!IsEmpty());
|
|
46
|
+
return Slice(reinterpret_cast<const char *>(this), sizeof(*this));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Create a CacheKey that is unique among others associated with this Cache
|
|
50
|
+
// instance. Depends on Cache::NewId. This is useful for block cache
|
|
51
|
+
// "reservations".
|
|
52
|
+
static CacheKey CreateUniqueForCacheLifetime(Cache *cache);
|
|
53
|
+
|
|
54
|
+
// Create a CacheKey that is unique among others for the lifetime of this
|
|
55
|
+
// process. This is useful for saving in a static data member so that
|
|
56
|
+
// different DB instances can agree on a cache key for shared entities,
|
|
57
|
+
// such as for CacheEntryStatsCollector.
|
|
58
|
+
static CacheKey CreateUniqueForProcessLifetime();
|
|
59
|
+
|
|
60
|
+
protected:
|
|
61
|
+
friend class OffsetableCacheKey;
|
|
62
|
+
CacheKey(uint64_t session_etc64, uint64_t offset_etc64)
|
|
63
|
+
: session_etc64_(session_etc64), offset_etc64_(offset_etc64) {}
|
|
64
|
+
uint64_t session_etc64_;
|
|
65
|
+
uint64_t offset_etc64_;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// A file-specific generator of cache keys, sometimes referred to as the
|
|
69
|
+
// "base" cache key for a file because all the cache keys for various offsets
|
|
70
|
+
// within the file are computed using simple arithmetic. The basis for the
|
|
71
|
+
// general approach is dicussed here: https://github.com/pdillinger/unique_id
|
|
72
|
+
// Heavily related to GetUniqueIdFromTableProperties.
|
|
73
|
+
//
|
|
74
|
+
// If the db_id, db_session_id, and file_number come from the file's table
|
|
75
|
+
// properties, then the keys will be stable across DB::Open/Close, backup/
|
|
76
|
+
// restore, import/export, etc.
|
|
77
|
+
//
|
|
78
|
+
// This class "is a" CacheKey only privately so that it is not misused as
|
|
79
|
+
// a ready-to-use CacheKey.
|
|
80
|
+
class OffsetableCacheKey : private CacheKey {
|
|
81
|
+
public:
|
|
82
|
+
// For convenience, constructs an "empty" cache key that should not be used.
|
|
83
|
+
inline OffsetableCacheKey() : CacheKey() {}
|
|
84
|
+
|
|
85
|
+
// Constructs an OffsetableCacheKey with the given information about a file.
|
|
86
|
+
// max_offset is based on file size (see WithOffset) and is required here to
|
|
87
|
+
// choose an appropriate (sub-)encoding. This constructor never generates an
|
|
88
|
+
// "empty" base key.
|
|
89
|
+
OffsetableCacheKey(const std::string &db_id, const std::string &db_session_id,
|
|
90
|
+
uint64_t file_number, uint64_t max_offset);
|
|
91
|
+
|
|
92
|
+
inline bool IsEmpty() const {
|
|
93
|
+
bool result = session_etc64_ == 0;
|
|
94
|
+
assert(!(offset_etc64_ > 0 && result));
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Construct a CacheKey for an offset within a file, which must be
|
|
99
|
+
// <= max_offset provided in constructor. An offset is not necessarily a
|
|
100
|
+
// byte offset if a smaller unique identifier of keyable offsets is used.
|
|
101
|
+
//
|
|
102
|
+
// This class was designed to make this hot code extremely fast.
|
|
103
|
+
inline CacheKey WithOffset(uint64_t offset) const {
|
|
104
|
+
assert(!IsEmpty());
|
|
105
|
+
assert(offset <= max_offset_);
|
|
106
|
+
return CacheKey(session_etc64_, offset_etc64_ ^ offset);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// The "common prefix" is a shared prefix for all the returned CacheKeys,
|
|
110
|
+
// that also happens to usually be the same among many files in the same DB,
|
|
111
|
+
// so is efficient and highly accurate (not perfectly) for DB-specific cache
|
|
112
|
+
// dump selection (but not file-specific).
|
|
113
|
+
static constexpr size_t kCommonPrefixSize = 8;
|
|
114
|
+
inline Slice CommonPrefixSlice() const {
|
|
115
|
+
static_assert(sizeof(session_etc64_) == kCommonPrefixSize,
|
|
116
|
+
"8 byte common prefix expected");
|
|
117
|
+
assert(!IsEmpty());
|
|
118
|
+
assert(&this->session_etc64_ == static_cast<const void *>(this));
|
|
119
|
+
|
|
120
|
+
return Slice(reinterpret_cast<const char *>(this), kCommonPrefixSize);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// For any max_offset <= this value, the same encoding scheme is guaranteed.
|
|
124
|
+
static constexpr uint64_t kMaxOffsetStandardEncoding = 0xffffffffffU;
|
|
125
|
+
|
|
126
|
+
private:
|
|
127
|
+
#ifndef NDEBUG
|
|
128
|
+
uint64_t max_offset_ = 0;
|
|
129
|
+
#endif
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
//
|
|
6
|
+
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
7
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
8
|
+
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
9
|
+
#include "cache/cache_reservation_manager.h"
|
|
10
|
+
|
|
11
|
+
#include <cassert>
|
|
12
|
+
#include <cstddef>
|
|
13
|
+
#include <cstring>
|
|
14
|
+
#include <memory>
|
|
15
|
+
|
|
16
|
+
#include "cache/cache_entry_roles.h"
|
|
17
|
+
#include "rocksdb/cache.h"
|
|
18
|
+
#include "rocksdb/slice.h"
|
|
19
|
+
#include "rocksdb/status.h"
|
|
20
|
+
#include "table/block_based/reader_common.h"
|
|
21
|
+
#include "util/coding.h"
|
|
22
|
+
|
|
23
|
+
namespace ROCKSDB_NAMESPACE {
|
|
24
|
+
|
|
25
|
+
template <CacheEntryRole R>
|
|
26
|
+
CacheReservationManagerImpl<R>::CacheReservationHandle::CacheReservationHandle(
|
|
27
|
+
std::size_t incremental_memory_used,
|
|
28
|
+
std::shared_ptr<CacheReservationManagerImpl> cache_res_mgr)
|
|
29
|
+
: incremental_memory_used_(incremental_memory_used) {
|
|
30
|
+
assert(cache_res_mgr);
|
|
31
|
+
cache_res_mgr_ = cache_res_mgr;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
template <CacheEntryRole R>
|
|
35
|
+
CacheReservationManagerImpl<
|
|
36
|
+
R>::CacheReservationHandle::~CacheReservationHandle() {
|
|
37
|
+
Status s = cache_res_mgr_->ReleaseCacheReservation(incremental_memory_used_);
|
|
38
|
+
s.PermitUncheckedError();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
template <CacheEntryRole R>
|
|
42
|
+
CacheReservationManagerImpl<R>::CacheReservationManagerImpl(
|
|
43
|
+
std::shared_ptr<Cache> cache, bool delayed_decrease)
|
|
44
|
+
: delayed_decrease_(delayed_decrease),
|
|
45
|
+
cache_allocated_size_(0),
|
|
46
|
+
memory_used_(0) {
|
|
47
|
+
assert(cache != nullptr);
|
|
48
|
+
cache_ = cache;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
template <CacheEntryRole R>
|
|
52
|
+
CacheReservationManagerImpl<R>::~CacheReservationManagerImpl() {
|
|
53
|
+
for (auto* handle : dummy_handles_) {
|
|
54
|
+
cache_->Release(handle, true);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
template <CacheEntryRole R>
|
|
59
|
+
Status CacheReservationManagerImpl<R>::UpdateCacheReservation(
|
|
60
|
+
std::size_t new_mem_used) {
|
|
61
|
+
memory_used_ = new_mem_used;
|
|
62
|
+
std::size_t cur_cache_allocated_size =
|
|
63
|
+
cache_allocated_size_.load(std::memory_order_relaxed);
|
|
64
|
+
if (new_mem_used == cur_cache_allocated_size) {
|
|
65
|
+
return Status::OK();
|
|
66
|
+
} else if (new_mem_used > cur_cache_allocated_size) {
|
|
67
|
+
Status s = IncreaseCacheReservation(new_mem_used);
|
|
68
|
+
return s;
|
|
69
|
+
} else {
|
|
70
|
+
// In delayed decrease mode, we don't decrease cache reservation
|
|
71
|
+
// untill the memory usage is less than 3/4 of what we reserve
|
|
72
|
+
// in the cache.
|
|
73
|
+
// We do this because
|
|
74
|
+
// (1) Dummy entry insertion is expensive in block cache
|
|
75
|
+
// (2) Delayed releasing previously inserted dummy entries can save such
|
|
76
|
+
// expensive dummy entry insertion on memory increase in the near future,
|
|
77
|
+
// which is likely to happen when the memory usage is greater than or equal
|
|
78
|
+
// to 3/4 of what we reserve
|
|
79
|
+
if (delayed_decrease_ && new_mem_used >= cur_cache_allocated_size / 4 * 3) {
|
|
80
|
+
return Status::OK();
|
|
81
|
+
} else {
|
|
82
|
+
Status s = DecreaseCacheReservation(new_mem_used);
|
|
83
|
+
return s;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
template <CacheEntryRole R>
|
|
89
|
+
Status CacheReservationManagerImpl<R>::MakeCacheReservation(
|
|
90
|
+
std::size_t incremental_memory_used,
|
|
91
|
+
std::unique_ptr<CacheReservationManager::CacheReservationHandle>* handle) {
|
|
92
|
+
assert(handle);
|
|
93
|
+
Status s =
|
|
94
|
+
UpdateCacheReservation(GetTotalMemoryUsed() + incremental_memory_used);
|
|
95
|
+
(*handle).reset(new CacheReservationManagerImpl::CacheReservationHandle(
|
|
96
|
+
incremental_memory_used,
|
|
97
|
+
std::enable_shared_from_this<
|
|
98
|
+
CacheReservationManagerImpl<R>>::shared_from_this()));
|
|
99
|
+
return s;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
template <CacheEntryRole R>
|
|
103
|
+
Status CacheReservationManagerImpl<R>::ReleaseCacheReservation(
|
|
104
|
+
std::size_t incremental_memory_used) {
|
|
105
|
+
assert(GetTotalMemoryUsed() >= incremental_memory_used);
|
|
106
|
+
std::size_t updated_total_mem_used =
|
|
107
|
+
GetTotalMemoryUsed() - incremental_memory_used;
|
|
108
|
+
Status s = UpdateCacheReservation(updated_total_mem_used);
|
|
109
|
+
return s;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
template <CacheEntryRole R>
|
|
113
|
+
Status CacheReservationManagerImpl<R>::IncreaseCacheReservation(
|
|
114
|
+
std::size_t new_mem_used) {
|
|
115
|
+
Status return_status = Status::OK();
|
|
116
|
+
while (new_mem_used > cache_allocated_size_.load(std::memory_order_relaxed)) {
|
|
117
|
+
Cache::Handle* handle = nullptr;
|
|
118
|
+
return_status = cache_->Insert(GetNextCacheKey(), nullptr, kSizeDummyEntry,
|
|
119
|
+
GetNoopDeleterForRole<R>(), &handle);
|
|
120
|
+
|
|
121
|
+
if (return_status != Status::OK()) {
|
|
122
|
+
return return_status;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
dummy_handles_.push_back(handle);
|
|
126
|
+
cache_allocated_size_ += kSizeDummyEntry;
|
|
127
|
+
}
|
|
128
|
+
return return_status;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
template <CacheEntryRole R>
|
|
132
|
+
Status CacheReservationManagerImpl<R>::DecreaseCacheReservation(
|
|
133
|
+
std::size_t new_mem_used) {
|
|
134
|
+
Status return_status = Status::OK();
|
|
135
|
+
|
|
136
|
+
// Decrease to the smallest multiple of kSizeDummyEntry that is greater than
|
|
137
|
+
// or equal to new_mem_used We do addition instead of new_mem_used <=
|
|
138
|
+
// cache_allocated_size_.load(std::memory_order_relaxed) - kSizeDummyEntry to
|
|
139
|
+
// avoid underflow of size_t when cache_allocated_size_ = 0
|
|
140
|
+
while (new_mem_used + kSizeDummyEntry <=
|
|
141
|
+
cache_allocated_size_.load(std::memory_order_relaxed)) {
|
|
142
|
+
assert(!dummy_handles_.empty());
|
|
143
|
+
auto* handle = dummy_handles_.back();
|
|
144
|
+
cache_->Release(handle, true);
|
|
145
|
+
dummy_handles_.pop_back();
|
|
146
|
+
cache_allocated_size_ -= kSizeDummyEntry;
|
|
147
|
+
}
|
|
148
|
+
return return_status;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
template <CacheEntryRole R>
|
|
152
|
+
std::size_t CacheReservationManagerImpl<R>::GetTotalReservedCacheSize() {
|
|
153
|
+
return cache_allocated_size_.load(std::memory_order_relaxed);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
template <CacheEntryRole R>
|
|
157
|
+
std::size_t CacheReservationManagerImpl<R>::GetTotalMemoryUsed() {
|
|
158
|
+
return memory_used_;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
template <CacheEntryRole R>
|
|
162
|
+
Slice CacheReservationManagerImpl<R>::GetNextCacheKey() {
|
|
163
|
+
// Calling this function will have the side-effect of changing the
|
|
164
|
+
// underlying cache_key_ that is shared among other keys generated from this
|
|
165
|
+
// fucntion. Therefore please make sure the previous keys are saved/copied
|
|
166
|
+
// before calling this function.
|
|
167
|
+
cache_key_ = CacheKey::CreateUniqueForCacheLifetime(cache_.get());
|
|
168
|
+
return cache_key_.AsSlice();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
template <CacheEntryRole R>
|
|
172
|
+
Cache::DeleterFn CacheReservationManagerImpl<R>::TEST_GetNoopDeleterForRole() {
|
|
173
|
+
return GetNoopDeleterForRole<R>();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
template class CacheReservationManagerImpl<
|
|
177
|
+
CacheEntryRole::kBlockBasedTableReader>;
|
|
178
|
+
template class CacheReservationManagerImpl<
|
|
179
|
+
CacheEntryRole::kCompressionDictionaryBuildingBuffer>;
|
|
180
|
+
template class CacheReservationManagerImpl<CacheEntryRole::kFilterConstruction>;
|
|
181
|
+
template class CacheReservationManagerImpl<CacheEntryRole::kMisc>;
|
|
182
|
+
template class CacheReservationManagerImpl<CacheEntryRole::kWriteBuffer>;
|
|
183
|
+
} // namespace ROCKSDB_NAMESPACE
|