@nxtedition/rocksdb 5.2.21 → 5.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +510 -967
- package/binding.gyp +78 -72
- package/chained-batch.js +1 -2
- package/deps/rocksdb/build_version.cc +70 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
- package/deps/rocksdb/rocksdb/Makefile +459 -469
- package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
- package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
- package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
- package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
- package/deps/rocksdb/rocksdb/db/builder.h +16 -37
- package/deps/rocksdb/rocksdb/db/c.cc +413 -208
- package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
- package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
- package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
- package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
- package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
- package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
- package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
- package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
- package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
- package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
- package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
- package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
- package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
- package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
- package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
- package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
- package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
- package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
- package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
- package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
- package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
- package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
- package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
- package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
- package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
- package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
- package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
- package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
- package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
- package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
- package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
- package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
- package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
- package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
- package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
- package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
- package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
- package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
- package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
- package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
- package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
- package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
- package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
- package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
- package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
- package/deps/rocksdb/rocksdb/env/env.cc +632 -42
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
- package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
- package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
- package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
- package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
- package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
- package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
- package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
- package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
- package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
- package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
- package/deps/rocksdb/rocksdb/file/filename.h +13 -8
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
- package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
- package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
- package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
- package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
- package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
- package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
- package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
- package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
- package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
- package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
- package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
- package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
- package/deps/rocksdb/rocksdb/options/options.cc +49 -17
- package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
- package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
- package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
- package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
- package/deps/rocksdb/rocksdb/port/lang.h +52 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
- package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
- package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
- package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
- package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
- package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
- package/deps/rocksdb/rocksdb/python.mk +9 -0
- package/deps/rocksdb/rocksdb/src.mk +82 -34
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
- package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
- package/deps/rocksdb/rocksdb/table/format.cc +258 -104
- package/deps/rocksdb/rocksdb/table/format.h +120 -109
- package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
- package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
- package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
- package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
- package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
- package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
- package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
- package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
- package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
- package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/channel.h +2 -0
- package/deps/rocksdb/rocksdb/util/coding.h +1 -33
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
- package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
- package/deps/rocksdb/rocksdb/util/compression.h +212 -7
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
- package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
- package/deps/rocksdb/rocksdb/util/defer.h +30 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
- package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
- package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
- package/deps/rocksdb/rocksdb/util/hash.h +31 -1
- package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
- package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
- package/deps/rocksdb/rocksdb/util/heap.h +6 -1
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/util/math.h +74 -7
- package/deps/rocksdb/rocksdb/util/math128.h +13 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
- package/deps/rocksdb/rocksdb/util/random.cc +9 -0
- package/deps/rocksdb/rocksdb/util/random.h +6 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
- package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
- package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
- package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
- package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
- package/deps/rocksdb/rocksdb/util/status.cc +32 -29
- package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
- package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
- package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
- package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
- package/deps/rocksdb/rocksdb/util/timer.h +55 -46
- package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
- package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
- package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
- package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
- package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
- package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
- package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
- package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
- package/deps/rocksdb/rocksdb.gyp +425 -446
- package/index.js +5 -87
- package/package-lock.json +23687 -0
- package/package.json +8 -9
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/README.md +0 -32
- package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
- package/deps/rocksdb/rocksdb/hdfs/README +0 -23
- package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
- package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
- package/deps/rocksdb/rocksdb/port/README +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
- package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
- package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
- package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
- package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
- package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
- package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
- package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
- package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
- package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
- package/deps/snappy/snappy-1.1.7/README.md +0 -149
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -10,18 +10,31 @@
|
|
|
10
10
|
#include "rocksdb/filter_policy.h"
|
|
11
11
|
|
|
12
12
|
#include <array>
|
|
13
|
+
#include <climits>
|
|
14
|
+
#include <cstring>
|
|
13
15
|
#include <deque>
|
|
14
16
|
#include <limits>
|
|
15
|
-
|
|
17
|
+
#include <memory>
|
|
18
|
+
|
|
19
|
+
#include "cache/cache_entry_roles.h"
|
|
20
|
+
#include "cache/cache_reservation_manager.h"
|
|
21
|
+
#include "logging/logging.h"
|
|
22
|
+
#include "port/lang.h"
|
|
23
|
+
#include "rocksdb/convenience.h"
|
|
24
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
16
25
|
#include "rocksdb/slice.h"
|
|
26
|
+
#include "rocksdb/utilities/object_registry.h"
|
|
17
27
|
#include "table/block_based/block_based_filter_block.h"
|
|
28
|
+
#include "table/block_based/block_based_table_reader.h"
|
|
18
29
|
#include "table/block_based/filter_policy_internal.h"
|
|
19
30
|
#include "table/block_based/full_filter_block.h"
|
|
20
|
-
#include "third-party/folly/folly/ConstexprMath.h"
|
|
21
31
|
#include "util/bloom_impl.h"
|
|
22
32
|
#include "util/coding.h"
|
|
23
33
|
#include "util/hash.h"
|
|
34
|
+
#include "util/math.h"
|
|
35
|
+
#include "util/ribbon_config.h"
|
|
24
36
|
#include "util/ribbon_impl.h"
|
|
37
|
+
#include "util/string_util.h"
|
|
25
38
|
|
|
26
39
|
namespace ROCKSDB_NAMESPACE {
|
|
27
40
|
|
|
@@ -41,15 +54,24 @@ Slice FinishAlwaysFalse(std::unique_ptr<const char[]>* /*buf*/) {
|
|
|
41
54
|
return Slice(nullptr, 0);
|
|
42
55
|
}
|
|
43
56
|
|
|
57
|
+
Slice FinishAlwaysTrue(std::unique_ptr<const char[]>* /*buf*/) {
|
|
58
|
+
return Slice("\0\0\0\0\0\0", 6);
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
// Base class for filter builders using the XXH3 preview hash,
|
|
45
62
|
// also known as Hash64 or GetSliceHash64.
|
|
46
|
-
class
|
|
63
|
+
class XXPH3FilterBitsBuilder : public BuiltinFilterBitsBuilder {
|
|
47
64
|
public:
|
|
48
|
-
explicit
|
|
49
|
-
std::atomic<int64_t>* aggregate_rounding_balance
|
|
50
|
-
|
|
65
|
+
explicit XXPH3FilterBitsBuilder(
|
|
66
|
+
std::atomic<int64_t>* aggregate_rounding_balance,
|
|
67
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr,
|
|
68
|
+
bool detect_filter_construct_corruption)
|
|
69
|
+
: aggregate_rounding_balance_(aggregate_rounding_balance),
|
|
70
|
+
cache_res_mgr_(cache_res_mgr),
|
|
71
|
+
detect_filter_construct_corruption_(
|
|
72
|
+
detect_filter_construct_corruption) {}
|
|
51
73
|
|
|
52
|
-
~
|
|
74
|
+
~XXPH3FilterBitsBuilder() override {}
|
|
53
75
|
|
|
54
76
|
virtual void AddKey(const Slice& key) override {
|
|
55
77
|
uint64_t hash = GetSliceHash64(key);
|
|
@@ -57,19 +79,50 @@ class XXH3pFilterBitsBuilder : public BuiltinFilterBitsBuilder {
|
|
|
57
79
|
// though only adjacent repetition, which we want to immediately
|
|
58
80
|
// recognize and collapse for estimating true filter space
|
|
59
81
|
// requirements.
|
|
60
|
-
if (
|
|
61
|
-
|
|
82
|
+
if (hash_entries_info_.entries.empty() ||
|
|
83
|
+
hash != hash_entries_info_.entries.back()) {
|
|
84
|
+
if (detect_filter_construct_corruption_) {
|
|
85
|
+
hash_entries_info_.xor_checksum ^= hash;
|
|
86
|
+
}
|
|
87
|
+
hash_entries_info_.entries.push_back(hash);
|
|
88
|
+
if (cache_res_mgr_ &&
|
|
89
|
+
// Traditional rounding to whole bucket size
|
|
90
|
+
((hash_entries_info_.entries.size() %
|
|
91
|
+
kUint64tHashEntryCacheResBucketSize) ==
|
|
92
|
+
kUint64tHashEntryCacheResBucketSize / 2)) {
|
|
93
|
+
hash_entries_info_.cache_res_bucket_handles.emplace_back(nullptr);
|
|
94
|
+
Status s = cache_res_mgr_->MakeCacheReservation(
|
|
95
|
+
kUint64tHashEntryCacheResBucketSize * sizeof(hash),
|
|
96
|
+
&hash_entries_info_.cache_res_bucket_handles.back());
|
|
97
|
+
s.PermitUncheckedError();
|
|
98
|
+
}
|
|
62
99
|
}
|
|
63
100
|
}
|
|
64
101
|
|
|
102
|
+
virtual size_t EstimateEntriesAdded() override {
|
|
103
|
+
return hash_entries_info_.entries.size();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
virtual Status MaybePostVerify(const Slice& filter_content) override;
|
|
107
|
+
|
|
65
108
|
protected:
|
|
66
109
|
static constexpr uint32_t kMetadataLen = 5;
|
|
67
110
|
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
111
|
+
// Number of hash entries to accumulate before charging their memory usage to
|
|
112
|
+
// the cache when cache reservation is available
|
|
113
|
+
static const std::size_t kUint64tHashEntryCacheResBucketSize =
|
|
114
|
+
CacheReservationManagerImpl<
|
|
115
|
+
CacheEntryRole::kFilterConstruction>::GetDummyEntrySize() /
|
|
116
|
+
sizeof(uint64_t);
|
|
117
|
+
|
|
118
|
+
// For delegating between XXPH3FilterBitsBuilders
|
|
119
|
+
void SwapEntriesWith(XXPH3FilterBitsBuilder* other) {
|
|
120
|
+
assert(other != nullptr);
|
|
121
|
+
hash_entries_info_.Swap(&(other->hash_entries_info_));
|
|
71
122
|
}
|
|
72
123
|
|
|
124
|
+
void ResetEntries() { hash_entries_info_.Reset(); }
|
|
125
|
+
|
|
73
126
|
virtual size_t RoundDownUsableSpace(size_t available_size) = 0;
|
|
74
127
|
|
|
75
128
|
// To choose size using malloc_usable_size, we have to actually allocate.
|
|
@@ -130,7 +183,7 @@ class XXH3pFilterBitsBuilder : public BuiltinFilterBitsBuilder {
|
|
|
130
183
|
// Filter blocks are loaded into block cache with their block trailer.
|
|
131
184
|
// We need to make sure that's accounted for in choosing a
|
|
132
185
|
// fragmentation-friendly size.
|
|
133
|
-
const size_t kExtraPadding = kBlockTrailerSize;
|
|
186
|
+
const size_t kExtraPadding = BlockBasedTable::kBlockTrailerSize;
|
|
134
187
|
size_t requested = rv + kExtraPadding;
|
|
135
188
|
|
|
136
189
|
// Allocate and get usable size
|
|
@@ -170,26 +223,95 @@ class XXH3pFilterBitsBuilder : public BuiltinFilterBitsBuilder {
|
|
|
170
223
|
return rv;
|
|
171
224
|
}
|
|
172
225
|
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
226
|
+
// TODO: Ideally we want to verify the hash entry
|
|
227
|
+
// as it is added to the filter and eliminate this function
|
|
228
|
+
// for speeding up and leaving fewer spaces for undetected memory/CPU
|
|
229
|
+
// corruption. For Ribbon Filter, it's bit harder.
|
|
230
|
+
// Possible solution:
|
|
231
|
+
// pass a custom iterator that tracks the xor checksum as
|
|
232
|
+
// it iterates to ResetAndFindSeedToSolve
|
|
233
|
+
Status MaybeVerifyHashEntriesChecksum() {
|
|
234
|
+
if (!detect_filter_construct_corruption_) {
|
|
235
|
+
return Status::OK();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
uint64_t actual_hash_entries_xor_checksum = 0;
|
|
239
|
+
for (uint64_t h : hash_entries_info_.entries) {
|
|
240
|
+
actual_hash_entries_xor_checksum ^= h;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (actual_hash_entries_xor_checksum == hash_entries_info_.xor_checksum) {
|
|
244
|
+
return Status::OK();
|
|
245
|
+
} else {
|
|
246
|
+
// Since these hash entries are corrupted and they will not be used
|
|
247
|
+
// anymore, we can reset them and release memory.
|
|
248
|
+
ResetEntries();
|
|
249
|
+
return Status::Corruption("Filter's hash entries checksum mismatched");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
176
252
|
|
|
177
253
|
// See BloomFilterPolicy::aggregate_rounding_balance_. If nullptr,
|
|
178
254
|
// always "round up" like historic behavior.
|
|
179
255
|
std::atomic<int64_t>* aggregate_rounding_balance_;
|
|
256
|
+
|
|
257
|
+
// For reserving memory used in (new) Bloom and Ribbon Filter construction
|
|
258
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr_;
|
|
259
|
+
|
|
260
|
+
// For managing cache reservation for final filter in (new) Bloom and Ribbon
|
|
261
|
+
// Filter construction
|
|
262
|
+
std::deque<std::unique_ptr<CacheReservationManager::CacheReservationHandle>>
|
|
263
|
+
final_filter_cache_res_handles_;
|
|
264
|
+
|
|
265
|
+
bool detect_filter_construct_corruption_;
|
|
266
|
+
|
|
267
|
+
struct HashEntriesInfo {
|
|
268
|
+
// A deque avoids unnecessary copying of already-saved values
|
|
269
|
+
// and has near-minimal peak memory use.
|
|
270
|
+
std::deque<uint64_t> entries;
|
|
271
|
+
|
|
272
|
+
// If cache_res_mgr_ != nullptr,
|
|
273
|
+
// it manages cache reservation for buckets of hash entries in (new) Bloom
|
|
274
|
+
// or Ribbon Filter construction.
|
|
275
|
+
// Otherwise, it is empty.
|
|
276
|
+
std::deque<std::unique_ptr<CacheReservationManager::CacheReservationHandle>>
|
|
277
|
+
cache_res_bucket_handles;
|
|
278
|
+
|
|
279
|
+
// If detect_filter_construct_corruption_ == true,
|
|
280
|
+
// it records the xor checksum of hash entries.
|
|
281
|
+
// Otherwise, it is 0.
|
|
282
|
+
uint64_t xor_checksum = 0;
|
|
283
|
+
|
|
284
|
+
void Swap(HashEntriesInfo* other) {
|
|
285
|
+
assert(other != nullptr);
|
|
286
|
+
std::swap(entries, other->entries);
|
|
287
|
+
std::swap(cache_res_bucket_handles, other->cache_res_bucket_handles);
|
|
288
|
+
std::swap(xor_checksum, other->xor_checksum);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
void Reset() {
|
|
292
|
+
entries.clear();
|
|
293
|
+
cache_res_bucket_handles.clear();
|
|
294
|
+
xor_checksum = 0;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
HashEntriesInfo hash_entries_info_;
|
|
180
299
|
};
|
|
181
300
|
|
|
182
301
|
// #################### FastLocalBloom implementation ################## //
|
|
183
302
|
// ############## also known as format_version=5 Bloom filter ########## //
|
|
184
303
|
|
|
185
304
|
// See description in FastLocalBloomImpl
|
|
186
|
-
class FastLocalBloomBitsBuilder : public
|
|
305
|
+
class FastLocalBloomBitsBuilder : public XXPH3FilterBitsBuilder {
|
|
187
306
|
public:
|
|
188
307
|
// Non-null aggregate_rounding_balance implies optimize_filters_for_memory
|
|
189
308
|
explicit FastLocalBloomBitsBuilder(
|
|
190
309
|
const int millibits_per_key,
|
|
191
|
-
std::atomic<int64_t>* aggregate_rounding_balance
|
|
192
|
-
|
|
310
|
+
std::atomic<int64_t>* aggregate_rounding_balance,
|
|
311
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr,
|
|
312
|
+
bool detect_filter_construct_corruption)
|
|
313
|
+
: XXPH3FilterBitsBuilder(aggregate_rounding_balance, cache_res_mgr,
|
|
314
|
+
detect_filter_construct_corruption),
|
|
193
315
|
millibits_per_key_(millibits_per_key) {
|
|
194
316
|
assert(millibits_per_key >= 1000);
|
|
195
317
|
}
|
|
@@ -200,13 +322,28 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
200
322
|
|
|
201
323
|
~FastLocalBloomBitsBuilder() override {}
|
|
202
324
|
|
|
325
|
+
using FilterBitsBuilder::Finish;
|
|
326
|
+
|
|
203
327
|
virtual Slice Finish(std::unique_ptr<const char[]>* buf) override {
|
|
204
|
-
|
|
328
|
+
return Finish(buf, nullptr);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
virtual Slice Finish(std::unique_ptr<const char[]>* buf,
|
|
332
|
+
Status* status) override {
|
|
333
|
+
size_t num_entries = hash_entries_info_.entries.size();
|
|
205
334
|
size_t len_with_metadata = CalculateSpace(num_entries);
|
|
206
335
|
|
|
207
336
|
std::unique_ptr<char[]> mutable_buf;
|
|
337
|
+
std::unique_ptr<CacheReservationManager::CacheReservationHandle>
|
|
338
|
+
final_filter_cache_res_handle;
|
|
208
339
|
len_with_metadata =
|
|
209
340
|
AllocateMaybeRounding(len_with_metadata, num_entries, &mutable_buf);
|
|
341
|
+
// Cache reservation for mutable_buf
|
|
342
|
+
if (cache_res_mgr_) {
|
|
343
|
+
Status s = cache_res_mgr_->MakeCacheReservation(
|
|
344
|
+
len_with_metadata * sizeof(char), &final_filter_cache_res_handle);
|
|
345
|
+
s.PermitUncheckedError();
|
|
346
|
+
}
|
|
210
347
|
|
|
211
348
|
assert(mutable_buf);
|
|
212
349
|
assert(len_with_metadata >= kMetadataLen);
|
|
@@ -219,10 +356,25 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
219
356
|
|
|
220
357
|
uint32_t len = static_cast<uint32_t>(len_with_metadata - kMetadataLen);
|
|
221
358
|
if (len > 0) {
|
|
359
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
360
|
+
"XXPH3FilterBitsBuilder::Finish::"
|
|
361
|
+
"TamperHashEntries",
|
|
362
|
+
&hash_entries_info_.entries);
|
|
222
363
|
AddAllEntries(mutable_buf.get(), len, num_probes);
|
|
364
|
+
Status verify_hash_entries_checksum_status =
|
|
365
|
+
MaybeVerifyHashEntriesChecksum();
|
|
366
|
+
if (!verify_hash_entries_checksum_status.ok()) {
|
|
367
|
+
if (status) {
|
|
368
|
+
*status = verify_hash_entries_checksum_status;
|
|
369
|
+
}
|
|
370
|
+
return FinishAlwaysTrue(buf);
|
|
371
|
+
}
|
|
223
372
|
}
|
|
224
373
|
|
|
225
|
-
|
|
374
|
+
bool keep_entries_for_postverify = detect_filter_construct_corruption_;
|
|
375
|
+
if (!keep_entries_for_postverify) {
|
|
376
|
+
ResetEntries();
|
|
377
|
+
}
|
|
226
378
|
|
|
227
379
|
// See BloomFilterPolicy::GetBloomBitsReader re: metadata
|
|
228
380
|
// -1 = Marker for newer Bloom implementations
|
|
@@ -233,8 +385,18 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
233
385
|
mutable_buf[len + 2] = static_cast<char>(num_probes);
|
|
234
386
|
// rest of metadata stays zero
|
|
235
387
|
|
|
388
|
+
auto TEST_arg_pair __attribute__((__unused__)) =
|
|
389
|
+
std::make_pair(&mutable_buf, len_with_metadata);
|
|
390
|
+
TEST_SYNC_POINT_CALLBACK("XXPH3FilterBitsBuilder::Finish::TamperFilter",
|
|
391
|
+
&TEST_arg_pair);
|
|
392
|
+
|
|
236
393
|
Slice rv(mutable_buf.get(), len_with_metadata);
|
|
237
394
|
*buf = std::move(mutable_buf);
|
|
395
|
+
final_filter_cache_res_handles_.push_back(
|
|
396
|
+
std::move(final_filter_cache_res_handle));
|
|
397
|
+
if (status) {
|
|
398
|
+
*status = Status::OK();
|
|
399
|
+
}
|
|
238
400
|
return rv;
|
|
239
401
|
}
|
|
240
402
|
|
|
@@ -301,12 +463,12 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
301
463
|
void AddAllEntries(char* data, uint32_t len, int num_probes) {
|
|
302
464
|
// Simple version without prefetching:
|
|
303
465
|
//
|
|
304
|
-
// for (auto h :
|
|
466
|
+
// for (auto h : hash_entries_info_.entries) {
|
|
305
467
|
// FastLocalBloomImpl::AddHash(Lower32of64(h), Upper32of64(h), len,
|
|
306
468
|
// num_probes, data);
|
|
307
469
|
// }
|
|
308
470
|
|
|
309
|
-
const size_t num_entries =
|
|
471
|
+
const size_t num_entries = hash_entries_info_.entries.size();
|
|
310
472
|
constexpr size_t kBufferMask = 7;
|
|
311
473
|
static_assert(((kBufferMask + 1) & kBufferMask) == 0,
|
|
312
474
|
"Must be power of 2 minus 1");
|
|
@@ -316,12 +478,14 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
316
478
|
|
|
317
479
|
// Prime the buffer
|
|
318
480
|
size_t i = 0;
|
|
481
|
+
std::deque<uint64_t>::iterator hash_entries_it =
|
|
482
|
+
hash_entries_info_.entries.begin();
|
|
319
483
|
for (; i <= kBufferMask && i < num_entries; ++i) {
|
|
320
|
-
uint64_t h =
|
|
321
|
-
hash_entries_.pop_front();
|
|
484
|
+
uint64_t h = *hash_entries_it;
|
|
322
485
|
FastLocalBloomImpl::PrepareHash(Lower32of64(h), len, data,
|
|
323
486
|
/*out*/ &byte_offsets[i]);
|
|
324
487
|
hashes[i] = Upper32of64(h);
|
|
488
|
+
++hash_entries_it;
|
|
325
489
|
}
|
|
326
490
|
|
|
327
491
|
// Process and buffer
|
|
@@ -332,11 +496,11 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
332
496
|
FastLocalBloomImpl::AddHashPrepared(hash_ref, num_probes,
|
|
333
497
|
data + byte_offset_ref);
|
|
334
498
|
// And buffer
|
|
335
|
-
uint64_t h =
|
|
336
|
-
hash_entries_.pop_front();
|
|
499
|
+
uint64_t h = *hash_entries_it;
|
|
337
500
|
FastLocalBloomImpl::PrepareHash(Lower32of64(h), len, data,
|
|
338
501
|
/*out*/ &byte_offset_ref);
|
|
339
502
|
hash_ref = Upper32of64(h);
|
|
503
|
+
++hash_entries_it;
|
|
340
504
|
}
|
|
341
505
|
|
|
342
506
|
// Finish processing
|
|
@@ -351,7 +515,7 @@ class FastLocalBloomBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
351
515
|
};
|
|
352
516
|
|
|
353
517
|
// See description in FastLocalBloomImpl
|
|
354
|
-
class FastLocalBloomBitsReader : public
|
|
518
|
+
class FastLocalBloomBitsReader : public BuiltinFilterBitsReader {
|
|
355
519
|
public:
|
|
356
520
|
FastLocalBloomBitsReader(const char* data, int num_probes, uint32_t len_bytes)
|
|
357
521
|
: data_(data), num_probes_(num_probes), len_bytes_(len_bytes) {}
|
|
@@ -386,6 +550,11 @@ class FastLocalBloomBitsReader : public FilterBitsReader {
|
|
|
386
550
|
}
|
|
387
551
|
}
|
|
388
552
|
|
|
553
|
+
bool HashMayMatch(const uint64_t h) override {
|
|
554
|
+
return FastLocalBloomImpl::HashMayMatch(Lower32of64(h), Upper32of64(h),
|
|
555
|
+
len_bytes_, num_probes_, data_);
|
|
556
|
+
}
|
|
557
|
+
|
|
389
558
|
private:
|
|
390
559
|
const char* data_;
|
|
391
560
|
const int num_probes_;
|
|
@@ -399,6 +568,7 @@ struct Standard128RibbonRehasherTypesAndSettings {
|
|
|
399
568
|
// These are schema-critical. Any change almost certainly changes
|
|
400
569
|
// underlying data.
|
|
401
570
|
static constexpr bool kIsFilter = true;
|
|
571
|
+
static constexpr bool kHomogeneous = false;
|
|
402
572
|
static constexpr bool kFirstCoeffAlwaysOne = true;
|
|
403
573
|
static constexpr bool kUseSmash = false;
|
|
404
574
|
using CoeffRow = ROCKSDB_NAMESPACE::Unsigned128;
|
|
@@ -415,15 +585,19 @@ struct Standard128RibbonRehasherTypesAndSettings {
|
|
|
415
585
|
using Standard128RibbonTypesAndSettings =
|
|
416
586
|
ribbon::StandardRehasherAdapter<Standard128RibbonRehasherTypesAndSettings>;
|
|
417
587
|
|
|
418
|
-
class Standard128RibbonBitsBuilder : public
|
|
588
|
+
class Standard128RibbonBitsBuilder : public XXPH3FilterBitsBuilder {
|
|
419
589
|
public:
|
|
420
590
|
explicit Standard128RibbonBitsBuilder(
|
|
421
591
|
double desired_one_in_fp_rate, int bloom_millibits_per_key,
|
|
422
|
-
std::atomic<int64_t>* aggregate_rounding_balance,
|
|
423
|
-
|
|
592
|
+
std::atomic<int64_t>* aggregate_rounding_balance,
|
|
593
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr,
|
|
594
|
+
bool detect_filter_construct_corruption, Logger* info_log)
|
|
595
|
+
: XXPH3FilterBitsBuilder(aggregate_rounding_balance, cache_res_mgr,
|
|
596
|
+
detect_filter_construct_corruption),
|
|
424
597
|
desired_one_in_fp_rate_(desired_one_in_fp_rate),
|
|
425
598
|
info_log_(info_log),
|
|
426
|
-
bloom_fallback_(bloom_millibits_per_key, aggregate_rounding_balance
|
|
599
|
+
bloom_fallback_(bloom_millibits_per_key, aggregate_rounding_balance,
|
|
600
|
+
cache_res_mgr, detect_filter_construct_corruption) {
|
|
427
601
|
assert(desired_one_in_fp_rate >= 1.0);
|
|
428
602
|
}
|
|
429
603
|
|
|
@@ -433,20 +607,32 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
433
607
|
|
|
434
608
|
~Standard128RibbonBitsBuilder() override {}
|
|
435
609
|
|
|
610
|
+
using FilterBitsBuilder::Finish;
|
|
611
|
+
|
|
436
612
|
virtual Slice Finish(std::unique_ptr<const char[]>* buf) override {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
613
|
+
return Finish(buf, nullptr);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
virtual Slice Finish(std::unique_ptr<const char[]>* buf,
|
|
617
|
+
Status* status) override {
|
|
618
|
+
if (hash_entries_info_.entries.size() > kMaxRibbonEntries) {
|
|
619
|
+
ROCKS_LOG_WARN(
|
|
620
|
+
info_log_, "Too many keys for Ribbon filter: %llu",
|
|
621
|
+
static_cast<unsigned long long>(hash_entries_info_.entries.size()));
|
|
440
622
|
SwapEntriesWith(&bloom_fallback_);
|
|
441
|
-
assert(
|
|
442
|
-
return bloom_fallback_.Finish(buf);
|
|
623
|
+
assert(hash_entries_info_.entries.empty());
|
|
624
|
+
return bloom_fallback_.Finish(buf, status);
|
|
443
625
|
}
|
|
444
|
-
if (
|
|
626
|
+
if (hash_entries_info_.entries.size() == 0) {
|
|
445
627
|
// Save a conditional in Ribbon queries by using alternate reader
|
|
446
628
|
// for zero entries added.
|
|
629
|
+
if (status) {
|
|
630
|
+
*status = Status::OK();
|
|
631
|
+
}
|
|
447
632
|
return FinishAlwaysFalse(buf);
|
|
448
633
|
}
|
|
449
|
-
uint32_t num_entries =
|
|
634
|
+
uint32_t num_entries =
|
|
635
|
+
static_cast<uint32_t>(hash_entries_info_.entries.size());
|
|
450
636
|
uint32_t num_slots;
|
|
451
637
|
size_t len_with_metadata;
|
|
452
638
|
|
|
@@ -455,36 +641,88 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
455
641
|
// Bloom fall-back indicator
|
|
456
642
|
if (num_slots == 0) {
|
|
457
643
|
SwapEntriesWith(&bloom_fallback_);
|
|
458
|
-
assert(
|
|
459
|
-
return bloom_fallback_.Finish(buf);
|
|
644
|
+
assert(hash_entries_info_.entries.empty());
|
|
645
|
+
return bloom_fallback_.Finish(buf, status);
|
|
460
646
|
}
|
|
461
647
|
|
|
462
648
|
uint32_t entropy = 0;
|
|
463
|
-
if (!
|
|
464
|
-
entropy = Lower32of64(
|
|
649
|
+
if (!hash_entries_info_.entries.empty()) {
|
|
650
|
+
entropy = Lower32of64(hash_entries_info_.entries.front());
|
|
465
651
|
}
|
|
466
652
|
|
|
467
653
|
BandingType banding;
|
|
654
|
+
std::size_t bytes_banding = ribbon::StandardBanding<
|
|
655
|
+
Standard128RibbonTypesAndSettings>::EstimateMemoryUsage(num_slots);
|
|
656
|
+
Status status_banding_cache_res = Status::OK();
|
|
657
|
+
|
|
658
|
+
// Cache reservation for banding
|
|
659
|
+
std::unique_ptr<CacheReservationManager::CacheReservationHandle>
|
|
660
|
+
banding_res_handle;
|
|
661
|
+
if (cache_res_mgr_) {
|
|
662
|
+
status_banding_cache_res = cache_res_mgr_->MakeCacheReservation(
|
|
663
|
+
bytes_banding, &banding_res_handle);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
if (status_banding_cache_res.IsIncomplete()) {
|
|
667
|
+
ROCKS_LOG_WARN(info_log_,
|
|
668
|
+
"Cache reservation for Ribbon filter banding failed due "
|
|
669
|
+
"to cache full");
|
|
670
|
+
SwapEntriesWith(&bloom_fallback_);
|
|
671
|
+
assert(hash_entries_info_.entries.empty());
|
|
672
|
+
// Release cache for banding since the banding won't be allocated
|
|
673
|
+
banding_res_handle.reset();
|
|
674
|
+
return bloom_fallback_.Finish(buf, status);
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
678
|
+
"XXPH3FilterBitsBuilder::Finish::"
|
|
679
|
+
"TamperHashEntries",
|
|
680
|
+
&hash_entries_info_.entries);
|
|
681
|
+
|
|
468
682
|
bool success = banding.ResetAndFindSeedToSolve(
|
|
469
|
-
num_slots,
|
|
683
|
+
num_slots, hash_entries_info_.entries.begin(),
|
|
684
|
+
hash_entries_info_.entries.end(),
|
|
470
685
|
/*starting seed*/ entropy & 255, /*seed mask*/ 255);
|
|
471
686
|
if (!success) {
|
|
472
|
-
ROCKS_LOG_WARN(
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
687
|
+
ROCKS_LOG_WARN(
|
|
688
|
+
info_log_, "Too many re-seeds (256) for Ribbon filter, %llu / %llu",
|
|
689
|
+
static_cast<unsigned long long>(hash_entries_info_.entries.size()),
|
|
690
|
+
static_cast<unsigned long long>(num_slots));
|
|
476
691
|
SwapEntriesWith(&bloom_fallback_);
|
|
477
|
-
assert(
|
|
478
|
-
return bloom_fallback_.Finish(buf);
|
|
692
|
+
assert(hash_entries_info_.entries.empty());
|
|
693
|
+
return bloom_fallback_.Finish(buf, status);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
Status verify_hash_entries_checksum_status =
|
|
697
|
+
MaybeVerifyHashEntriesChecksum();
|
|
698
|
+
if (!verify_hash_entries_checksum_status.ok()) {
|
|
699
|
+
ROCKS_LOG_WARN(info_log_, "Verify hash entries checksum error: %s",
|
|
700
|
+
verify_hash_entries_checksum_status.getState());
|
|
701
|
+
if (status) {
|
|
702
|
+
*status = verify_hash_entries_checksum_status;
|
|
703
|
+
}
|
|
704
|
+
return FinishAlwaysTrue(buf);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
bool keep_entries_for_postverify = detect_filter_construct_corruption_;
|
|
708
|
+
if (!keep_entries_for_postverify) {
|
|
709
|
+
ResetEntries();
|
|
479
710
|
}
|
|
480
|
-
hash_entries_.clear();
|
|
481
711
|
|
|
482
712
|
uint32_t seed = banding.GetOrdinalSeed();
|
|
483
713
|
assert(seed < 256);
|
|
484
714
|
|
|
485
715
|
std::unique_ptr<char[]> mutable_buf;
|
|
716
|
+
std::unique_ptr<CacheReservationManager::CacheReservationHandle>
|
|
717
|
+
final_filter_cache_res_handle;
|
|
486
718
|
len_with_metadata =
|
|
487
719
|
AllocateMaybeRounding(len_with_metadata, num_entries, &mutable_buf);
|
|
720
|
+
// Cache reservation for mutable_buf
|
|
721
|
+
if (cache_res_mgr_) {
|
|
722
|
+
Status s = cache_res_mgr_->MakeCacheReservation(
|
|
723
|
+
len_with_metadata * sizeof(char), &final_filter_cache_res_handle);
|
|
724
|
+
s.PermitUncheckedError();
|
|
725
|
+
}
|
|
488
726
|
|
|
489
727
|
SolnType soln(mutable_buf.get(), len_with_metadata);
|
|
490
728
|
soln.BackSubstFrom(banding);
|
|
@@ -510,8 +748,18 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
510
748
|
mutable_buf[len_with_metadata - 1] =
|
|
511
749
|
static_cast<char>((num_blocks >> 16) & 255);
|
|
512
750
|
|
|
751
|
+
auto TEST_arg_pair __attribute__((__unused__)) =
|
|
752
|
+
std::make_pair(&mutable_buf, len_with_metadata);
|
|
753
|
+
TEST_SYNC_POINT_CALLBACK("XXPH3FilterBitsBuilder::Finish::TamperFilter",
|
|
754
|
+
&TEST_arg_pair);
|
|
755
|
+
|
|
513
756
|
Slice rv(mutable_buf.get(), len_with_metadata);
|
|
514
757
|
*buf = std::move(mutable_buf);
|
|
758
|
+
final_filter_cache_res_handles_.push_back(
|
|
759
|
+
std::move(final_filter_cache_res_handle));
|
|
760
|
+
if (status) {
|
|
761
|
+
*status = Status::OK();
|
|
762
|
+
}
|
|
515
763
|
return rv;
|
|
516
764
|
}
|
|
517
765
|
|
|
@@ -528,8 +776,8 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
528
776
|
return;
|
|
529
777
|
}
|
|
530
778
|
uint32_t entropy = 0;
|
|
531
|
-
if (!
|
|
532
|
-
entropy = Upper32of64(
|
|
779
|
+
if (!hash_entries_info_.entries.empty()) {
|
|
780
|
+
entropy = Upper32of64(hash_entries_info_.entries.front());
|
|
533
781
|
}
|
|
534
782
|
|
|
535
783
|
*num_slots = NumEntriesToNumSlots(static_cast<uint32_t>(num_entries));
|
|
@@ -598,8 +846,7 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
598
846
|
|
|
599
847
|
// Let's not bother accounting for overflow to Bloom filter
|
|
600
848
|
// (Includes NaN case)
|
|
601
|
-
if (!(max_slots <
|
|
602
|
-
BandingType::GetNumSlotsFor95PctSuccess(kMaxRibbonEntries))) {
|
|
849
|
+
if (!(max_slots < ConfigHelper::GetNumSlots(kMaxRibbonEntries))) {
|
|
603
850
|
return kMaxRibbonEntries;
|
|
604
851
|
}
|
|
605
852
|
|
|
@@ -628,12 +875,7 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
628
875
|
slots = SolnType::RoundDownNumSlots(slots - 1);
|
|
629
876
|
}
|
|
630
877
|
|
|
631
|
-
|
|
632
|
-
double f = BandingType::GetFactorFor95PctSuccess(slots);
|
|
633
|
-
uint32_t num_entries = static_cast<uint32_t>(slots / f);
|
|
634
|
-
// Improve precision with another round
|
|
635
|
-
f = BandingType::GetFactorFor95PctSuccess(num_entries);
|
|
636
|
-
num_entries = static_cast<uint32_t>(slots / f + 0.999999999);
|
|
878
|
+
uint32_t num_entries = ConfigHelper::GetNumToAdd(slots);
|
|
637
879
|
|
|
638
880
|
// Consider possible Bloom fallback for small filters
|
|
639
881
|
if (slots < 1024) {
|
|
@@ -661,6 +903,12 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
661
903
|
return fake_soln.ExpectedFpRate();
|
|
662
904
|
}
|
|
663
905
|
|
|
906
|
+
Status MaybePostVerify(const Slice& filter_content) override {
|
|
907
|
+
bool fall_back = (bloom_fallback_.EstimateEntriesAdded() > 0);
|
|
908
|
+
return fall_back ? bloom_fallback_.MaybePostVerify(filter_content)
|
|
909
|
+
: XXPH3FilterBitsBuilder::MaybePostVerify(filter_content);
|
|
910
|
+
}
|
|
911
|
+
|
|
664
912
|
protected:
|
|
665
913
|
size_t RoundDownUsableSpace(size_t available_size) override {
|
|
666
914
|
size_t rv = available_size - kMetadataLen;
|
|
@@ -675,9 +923,10 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
675
923
|
using TS = Standard128RibbonTypesAndSettings;
|
|
676
924
|
using SolnType = ribbon::SerializableInterleavedSolution<TS>;
|
|
677
925
|
using BandingType = ribbon::StandardBanding<TS>;
|
|
926
|
+
using ConfigHelper = ribbon::BandingConfigHelper1TS<ribbon::kOneIn20, TS>;
|
|
678
927
|
|
|
679
928
|
static uint32_t NumEntriesToNumSlots(uint32_t num_entries) {
|
|
680
|
-
uint32_t num_slots1 =
|
|
929
|
+
uint32_t num_slots1 = ConfigHelper::GetNumSlots(num_entries);
|
|
681
930
|
return SolnType::RoundUpNumSlots(num_slots1);
|
|
682
931
|
}
|
|
683
932
|
|
|
@@ -704,7 +953,7 @@ class Standard128RibbonBitsBuilder : public XXH3pFilterBitsBuilder {
|
|
|
704
953
|
// for the linker, at least with DEBUG_LEVEL=2
|
|
705
954
|
constexpr uint32_t Standard128RibbonBitsBuilder::kMaxRibbonEntries;
|
|
706
955
|
|
|
707
|
-
class Standard128RibbonBitsReader : public
|
|
956
|
+
class Standard128RibbonBitsReader : public BuiltinFilterBitsReader {
|
|
708
957
|
public:
|
|
709
958
|
Standard128RibbonBitsReader(const char* data, size_t len_bytes,
|
|
710
959
|
uint32_t num_blocks, uint32_t seed)
|
|
@@ -725,16 +974,29 @@ class Standard128RibbonBitsReader : public FilterBitsReader {
|
|
|
725
974
|
}
|
|
726
975
|
|
|
727
976
|
virtual void MayMatch(int num_keys, Slice** keys, bool* may_match) override {
|
|
728
|
-
|
|
977
|
+
struct SavedData {
|
|
978
|
+
uint64_t seeded_hash;
|
|
979
|
+
uint32_t segment_num;
|
|
980
|
+
uint32_t num_columns;
|
|
981
|
+
uint32_t start_bits;
|
|
982
|
+
};
|
|
983
|
+
std::array<SavedData, MultiGetContext::MAX_BATCH_SIZE> saved;
|
|
729
984
|
for (int i = 0; i < num_keys; ++i) {
|
|
730
|
-
|
|
731
|
-
|
|
985
|
+
ribbon::InterleavedPrepareQuery(
|
|
986
|
+
GetSliceHash64(*keys[i]), hasher_, soln_, &saved[i].seeded_hash,
|
|
987
|
+
&saved[i].segment_num, &saved[i].num_columns, &saved[i].start_bits);
|
|
732
988
|
}
|
|
733
989
|
for (int i = 0; i < num_keys; ++i) {
|
|
734
|
-
may_match[i] =
|
|
990
|
+
may_match[i] = ribbon::InterleavedFilterQuery(
|
|
991
|
+
saved[i].seeded_hash, saved[i].segment_num, saved[i].num_columns,
|
|
992
|
+
saved[i].start_bits, hasher_, soln_);
|
|
735
993
|
}
|
|
736
994
|
}
|
|
737
995
|
|
|
996
|
+
bool HashMayMatch(const uint64_t h) override {
|
|
997
|
+
return soln_.FilterQuery(h, hasher_);
|
|
998
|
+
}
|
|
999
|
+
|
|
738
1000
|
private:
|
|
739
1001
|
using TS = Standard128RibbonTypesAndSettings;
|
|
740
1002
|
ribbon::SerializableInterleavedSolution<TS> soln_;
|
|
@@ -757,6 +1019,12 @@ class LegacyBloomBitsBuilder : public BuiltinFilterBitsBuilder {
|
|
|
757
1019
|
|
|
758
1020
|
void AddKey(const Slice& key) override;
|
|
759
1021
|
|
|
1022
|
+
virtual size_t EstimateEntriesAdded() override {
|
|
1023
|
+
return hash_entries_.size();
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
using FilterBitsBuilder::Finish;
|
|
1027
|
+
|
|
760
1028
|
Slice Finish(std::unique_ptr<const char[]>* buf) override;
|
|
761
1029
|
|
|
762
1030
|
size_t CalculateSpace(size_t num_entries) override {
|
|
@@ -935,10 +1203,10 @@ inline void LegacyBloomBitsBuilder::AddHash(uint32_t h, char* data,
|
|
|
935
1203
|
assert(num_lines > 0 && total_bits > 0);
|
|
936
1204
|
|
|
937
1205
|
LegacyBloomImpl::AddHash(h, num_lines, num_probes_, data,
|
|
938
|
-
|
|
1206
|
+
ConstexprFloorLog2(CACHE_LINE_SIZE));
|
|
939
1207
|
}
|
|
940
1208
|
|
|
941
|
-
class LegacyBloomBitsReader : public
|
|
1209
|
+
class LegacyBloomBitsReader : public BuiltinFilterBitsReader {
|
|
942
1210
|
public:
|
|
943
1211
|
LegacyBloomBitsReader(const char* data, int num_probes, uint32_t num_lines,
|
|
944
1212
|
uint32_t log2_cache_line_size)
|
|
@@ -983,6 +1251,8 @@ class LegacyBloomBitsReader : public FilterBitsReader {
|
|
|
983
1251
|
}
|
|
984
1252
|
}
|
|
985
1253
|
|
|
1254
|
+
bool HashMayMatch(const uint64_t /* h */) override { return false; }
|
|
1255
|
+
|
|
986
1256
|
private:
|
|
987
1257
|
const char* data_;
|
|
988
1258
|
const int num_probes_;
|
|
@@ -990,37 +1260,79 @@ class LegacyBloomBitsReader : public FilterBitsReader {
|
|
|
990
1260
|
const uint32_t log2_cache_line_size_;
|
|
991
1261
|
};
|
|
992
1262
|
|
|
993
|
-
class AlwaysTrueFilter : public
|
|
1263
|
+
class AlwaysTrueFilter : public BuiltinFilterBitsReader {
|
|
994
1264
|
public:
|
|
995
1265
|
bool MayMatch(const Slice&) override { return true; }
|
|
996
1266
|
using FilterBitsReader::MayMatch; // inherit overload
|
|
1267
|
+
bool HashMayMatch(const uint64_t) override { return true; }
|
|
1268
|
+
using BuiltinFilterBitsReader::HashMayMatch; // inherit overload
|
|
997
1269
|
};
|
|
998
1270
|
|
|
999
|
-
class AlwaysFalseFilter : public
|
|
1271
|
+
class AlwaysFalseFilter : public BuiltinFilterBitsReader {
|
|
1000
1272
|
public:
|
|
1001
1273
|
bool MayMatch(const Slice&) override { return false; }
|
|
1002
1274
|
using FilterBitsReader::MayMatch; // inherit overload
|
|
1275
|
+
bool HashMayMatch(const uint64_t) override { return false; }
|
|
1276
|
+
using BuiltinFilterBitsReader::HashMayMatch; // inherit overload
|
|
1003
1277
|
};
|
|
1004
1278
|
|
|
1279
|
+
Status XXPH3FilterBitsBuilder::MaybePostVerify(const Slice& filter_content) {
|
|
1280
|
+
Status s = Status::OK();
|
|
1281
|
+
|
|
1282
|
+
if (!detect_filter_construct_corruption_) {
|
|
1283
|
+
return s;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
std::unique_ptr<BuiltinFilterBitsReader> bits_reader(
|
|
1287
|
+
BuiltinFilterPolicy::GetBuiltinFilterBitsReader(filter_content));
|
|
1288
|
+
|
|
1289
|
+
for (uint64_t h : hash_entries_info_.entries) {
|
|
1290
|
+
// The current approach will not detect corruption from XXPH3Filter to
|
|
1291
|
+
// AlwaysTrueFilter, which can lead to performance cost later due to
|
|
1292
|
+
// AlwaysTrueFilter not filtering anything. But this cost is acceptable
|
|
1293
|
+
// given the extra implementation complixity to detect such case.
|
|
1294
|
+
bool may_match = bits_reader->HashMayMatch(h);
|
|
1295
|
+
if (!may_match) {
|
|
1296
|
+
s = Status::Corruption("Corrupted filter content");
|
|
1297
|
+
break;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
ResetEntries();
|
|
1302
|
+
return s;
|
|
1303
|
+
}
|
|
1005
1304
|
} // namespace
|
|
1006
1305
|
|
|
1007
|
-
const
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
kFastLocalBloom,
|
|
1011
|
-
kStandard128Ribbon,
|
|
1012
|
-
};
|
|
1306
|
+
const char* BuiltinFilterPolicy::kClassName() {
|
|
1307
|
+
return "rocksdb.internal.BuiltinFilter";
|
|
1308
|
+
}
|
|
1013
1309
|
|
|
1014
|
-
const std::
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1310
|
+
bool BuiltinFilterPolicy::IsInstanceOf(const std::string& name) const {
|
|
1311
|
+
if (name == kClassName()) {
|
|
1312
|
+
return true;
|
|
1313
|
+
} else {
|
|
1314
|
+
return FilterPolicy::IsInstanceOf(name);
|
|
1315
|
+
}
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
static const char* kBuiltinFilterMetadataName = "rocksdb.BuiltinBloomFilter";
|
|
1319
|
+
|
|
1320
|
+
const char* BuiltinFilterPolicy::kCompatibilityName() {
|
|
1321
|
+
return kBuiltinFilterMetadataName;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
const char* BuiltinFilterPolicy::CompatibilityName() const {
|
|
1325
|
+
return kBuiltinFilterMetadataName;
|
|
1326
|
+
}
|
|
1019
1327
|
|
|
1020
|
-
|
|
1021
|
-
:
|
|
1328
|
+
BloomLikeFilterPolicy::BloomLikeFilterPolicy(double bits_per_key)
|
|
1329
|
+
: warned_(false), aggregate_rounding_balance_(0) {
|
|
1022
1330
|
// Sanitize bits_per_key
|
|
1023
|
-
if (bits_per_key <
|
|
1331
|
+
if (bits_per_key < 0.5) {
|
|
1332
|
+
// Round down to no filter
|
|
1333
|
+
bits_per_key = 0;
|
|
1334
|
+
} else if (bits_per_key < 1.0) {
|
|
1335
|
+
// Minimum 1 bit per key (equiv) when creating filter
|
|
1024
1336
|
bits_per_key = 1.0;
|
|
1025
1337
|
} else if (!(bits_per_key < 100.0)) { // including NaN
|
|
1026
1338
|
bits_per_key = 100.0;
|
|
@@ -1046,20 +1358,61 @@ BloomFilterPolicy::BloomFilterPolicy(double bits_per_key, Mode mode)
|
|
|
1046
1358
|
whole_bits_per_key_ = (millibits_per_key_ + 500) / 1000;
|
|
1047
1359
|
}
|
|
1048
1360
|
|
|
1049
|
-
|
|
1361
|
+
BloomLikeFilterPolicy::~BloomLikeFilterPolicy() {}
|
|
1362
|
+
const char* BloomLikeFilterPolicy::kClassName() {
|
|
1363
|
+
return "rocksdb.internal.BloomLikeFilter";
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
bool BloomLikeFilterPolicy::IsInstanceOf(const std::string& name) const {
|
|
1367
|
+
if (name == kClassName()) {
|
|
1368
|
+
return true;
|
|
1369
|
+
} else {
|
|
1370
|
+
return BuiltinFilterPolicy::IsInstanceOf(name);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
const char* ReadOnlyBuiltinFilterPolicy::kClassName() {
|
|
1375
|
+
return kBuiltinFilterMetadataName;
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
const char* DeprecatedBlockBasedBloomFilterPolicy::kClassName() {
|
|
1379
|
+
return "rocksdb.internal.DeprecatedBlockBasedBloomFilter";
|
|
1380
|
+
}
|
|
1050
1381
|
|
|
1051
|
-
|
|
1052
|
-
return
|
|
1382
|
+
std::string BloomLikeFilterPolicy::GetId() const {
|
|
1383
|
+
return Name() + GetBitsPerKeySuffix();
|
|
1053
1384
|
}
|
|
1054
1385
|
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1386
|
+
DeprecatedBlockBasedBloomFilterPolicy::DeprecatedBlockBasedBloomFilterPolicy(
|
|
1387
|
+
double bits_per_key)
|
|
1388
|
+
: BloomLikeFilterPolicy(bits_per_key) {}
|
|
1389
|
+
|
|
1390
|
+
FilterBitsBuilder* DeprecatedBlockBasedBloomFilterPolicy::GetBuilderWithContext(
|
|
1391
|
+
const FilterBuildingContext&) const {
|
|
1392
|
+
if (GetWholeBitsPerKey() == 0) {
|
|
1393
|
+
// "No filter" special case
|
|
1394
|
+
return nullptr;
|
|
1395
|
+
}
|
|
1396
|
+
// Internal contract: returns a new fake builder that encodes bits per key
|
|
1397
|
+
// into a special value from EstimateEntriesAdded()
|
|
1398
|
+
struct B : public FilterBitsBuilder {
|
|
1399
|
+
explicit B(int bits_per_key) : est(kSecretBitsPerKeyStart + bits_per_key) {}
|
|
1400
|
+
size_t est;
|
|
1401
|
+
size_t EstimateEntriesAdded() override { return est; }
|
|
1402
|
+
void AddKey(const Slice&) override {}
|
|
1403
|
+
using FilterBitsBuilder::Finish; // FIXME
|
|
1404
|
+
Slice Finish(std::unique_ptr<const char[]>*) override { return Slice(); }
|
|
1405
|
+
size_t ApproximateNumEntries(size_t) override { return 0; }
|
|
1406
|
+
};
|
|
1407
|
+
return new B(GetWholeBitsPerKey());
|
|
1408
|
+
}
|
|
1060
1409
|
|
|
1410
|
+
void DeprecatedBlockBasedBloomFilterPolicy::CreateFilter(const Slice* keys,
|
|
1411
|
+
int n,
|
|
1412
|
+
int bits_per_key,
|
|
1413
|
+
std::string* dst) {
|
|
1061
1414
|
// Compute bloom filter size (in both bits and bytes)
|
|
1062
|
-
uint32_t bits = static_cast<uint32_t>(n *
|
|
1415
|
+
uint32_t bits = static_cast<uint32_t>(n * bits_per_key);
|
|
1063
1416
|
|
|
1064
1417
|
// For small n, we can see a very high false positive rate. Fix it
|
|
1065
1418
|
// by enforcing a minimum bloom filter length.
|
|
@@ -1068,8 +1421,7 @@ void BloomFilterPolicy::CreateFilter(const Slice* keys, int n,
|
|
|
1068
1421
|
uint32_t bytes = (bits + 7) / 8;
|
|
1069
1422
|
bits = bytes * 8;
|
|
1070
1423
|
|
|
1071
|
-
int num_probes =
|
|
1072
|
-
LegacyNoLocalityBloomImpl::ChooseNumProbes(whole_bits_per_key_);
|
|
1424
|
+
int num_probes = LegacyNoLocalityBloomImpl::ChooseNumProbes(bits_per_key);
|
|
1073
1425
|
|
|
1074
1426
|
const size_t init_size = dst->size();
|
|
1075
1427
|
dst->resize(init_size + bytes, 0);
|
|
@@ -1081,8 +1433,8 @@ void BloomFilterPolicy::CreateFilter(const Slice* keys, int n,
|
|
|
1081
1433
|
}
|
|
1082
1434
|
}
|
|
1083
1435
|
|
|
1084
|
-
bool
|
|
1085
|
-
|
|
1436
|
+
bool DeprecatedBlockBasedBloomFilterPolicy::KeyMayMatch(
|
|
1437
|
+
const Slice& key, const Slice& bloom_filter) {
|
|
1086
1438
|
const size_t len = bloom_filter.size();
|
|
1087
1439
|
if (len < 2 || len > 0xffffffffU) {
|
|
1088
1440
|
return false;
|
|
@@ -1104,70 +1456,110 @@ bool BloomFilterPolicy::KeyMayMatch(const Slice& key,
|
|
|
1104
1456
|
array);
|
|
1105
1457
|
}
|
|
1106
1458
|
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
// BloomFilterPolicy. Internal to RocksDB and outside
|
|
1110
|
-
// BloomFilterPolicy, only get a FilterBitsBuilder with
|
|
1111
|
-
// BloomFilterPolicy::GetBuilderFromContext(), which will call
|
|
1112
|
-
// BloomFilterPolicy::GetBuilderWithContext(). RocksDB users have
|
|
1113
|
-
// been warned (HISTORY.md) that they can no longer call this on
|
|
1114
|
-
// the built-in BloomFilterPolicy (unlikely).
|
|
1115
|
-
assert(false);
|
|
1116
|
-
return GetBuilderWithContext(FilterBuildingContext(BlockBasedTableOptions()));
|
|
1117
|
-
}
|
|
1459
|
+
BloomFilterPolicy::BloomFilterPolicy(double bits_per_key)
|
|
1460
|
+
: BloomLikeFilterPolicy(bits_per_key) {}
|
|
1118
1461
|
|
|
1119
1462
|
FilterBitsBuilder* BloomFilterPolicy::GetBuilderWithContext(
|
|
1120
1463
|
const FilterBuildingContext& context) const {
|
|
1121
|
-
|
|
1464
|
+
if (GetMillibitsPerKey() == 0) {
|
|
1465
|
+
// "No filter" special case
|
|
1466
|
+
return nullptr;
|
|
1467
|
+
} else if (context.table_options.format_version < 5) {
|
|
1468
|
+
return GetLegacyBloomBuilderWithContext(context);
|
|
1469
|
+
} else {
|
|
1470
|
+
return GetFastLocalBloomBuilderWithContext(context);
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
const char* BloomFilterPolicy::kClassName() { return "bloomfilter"; }
|
|
1475
|
+
const char* BloomFilterPolicy::kNickName() { return "rocksdb.BloomFilter"; }
|
|
1476
|
+
|
|
1477
|
+
std::string BloomFilterPolicy::GetId() const {
|
|
1478
|
+
// Including ":false" for better forward-compatibility with 6.29 and earlier
|
|
1479
|
+
// which required a boolean `use_block_based_builder` parameter
|
|
1480
|
+
return BloomLikeFilterPolicy::GetId() + ":false";
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
FilterBitsBuilder* BloomLikeFilterPolicy::GetFastLocalBloomBuilderWithContext(
|
|
1484
|
+
const FilterBuildingContext& context) const {
|
|
1122
1485
|
bool offm = context.table_options.optimize_filters_for_memory;
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
}
|
|
1133
|
-
break;
|
|
1134
|
-
case kDeprecatedBlock:
|
|
1135
|
-
return nullptr;
|
|
1136
|
-
case kFastLocalBloom:
|
|
1486
|
+
bool reserve_filter_construction_mem =
|
|
1487
|
+
(context.table_options.reserve_table_builder_memory &&
|
|
1488
|
+
context.table_options.block_cache);
|
|
1489
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr;
|
|
1490
|
+
if (reserve_filter_construction_mem) {
|
|
1491
|
+
cache_res_mgr = std::make_shared<
|
|
1492
|
+
CacheReservationManagerImpl<CacheEntryRole::kFilterConstruction>>(
|
|
1493
|
+
context.table_options.block_cache);
|
|
1494
|
+
}
|
|
1137
1495
|
return new FastLocalBloomBitsBuilder(
|
|
1138
|
-
millibits_per_key_, offm ? &aggregate_rounding_balance_ : nullptr
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
"Using legacy Bloom filter with high (%d) bits/key. "
|
|
1154
|
-
"%s filter space and/or accuracy improvement is available "
|
|
1155
|
-
"with format_version>=5.",
|
|
1156
|
-
whole_bits_per_key_, adjective);
|
|
1157
|
-
}
|
|
1158
|
-
return new LegacyBloomBitsBuilder(whole_bits_per_key_,
|
|
1159
|
-
context.info_log);
|
|
1160
|
-
case kStandard128Ribbon:
|
|
1161
|
-
return new Standard128RibbonBitsBuilder(
|
|
1162
|
-
desired_one_in_fp_rate_, millibits_per_key_,
|
|
1163
|
-
offm ? &aggregate_rounding_balance_ : nullptr, context.info_log);
|
|
1496
|
+
millibits_per_key_, offm ? &aggregate_rounding_balance_ : nullptr,
|
|
1497
|
+
cache_res_mgr,
|
|
1498
|
+
context.table_options.detect_filter_construct_corruption);
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
FilterBitsBuilder* BloomLikeFilterPolicy::GetLegacyBloomBuilderWithContext(
|
|
1502
|
+
const FilterBuildingContext& context) const {
|
|
1503
|
+
if (whole_bits_per_key_ >= 14 && context.info_log &&
|
|
1504
|
+
!warned_.load(std::memory_order_relaxed)) {
|
|
1505
|
+
warned_ = true;
|
|
1506
|
+
const char* adjective;
|
|
1507
|
+
if (whole_bits_per_key_ >= 20) {
|
|
1508
|
+
adjective = "Dramatic";
|
|
1509
|
+
} else {
|
|
1510
|
+
adjective = "Significant";
|
|
1164
1511
|
}
|
|
1512
|
+
// For more details, see
|
|
1513
|
+
// https://github.com/facebook/rocksdb/wiki/RocksDB-Bloom-Filter
|
|
1514
|
+
ROCKS_LOG_WARN(context.info_log,
|
|
1515
|
+
"Using legacy Bloom filter with high (%d) bits/key. "
|
|
1516
|
+
"%s filter space and/or accuracy improvement is available "
|
|
1517
|
+
"with format_version>=5.",
|
|
1518
|
+
whole_bits_per_key_, adjective);
|
|
1519
|
+
}
|
|
1520
|
+
return new LegacyBloomBitsBuilder(whole_bits_per_key_, context.info_log);
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
FilterBitsBuilder*
|
|
1524
|
+
BloomLikeFilterPolicy::GetStandard128RibbonBuilderWithContext(
|
|
1525
|
+
const FilterBuildingContext& context) const {
|
|
1526
|
+
// FIXME: code duplication with GetFastLocalBloomBuilderWithContext
|
|
1527
|
+
bool offm = context.table_options.optimize_filters_for_memory;
|
|
1528
|
+
bool reserve_filter_construction_mem =
|
|
1529
|
+
(context.table_options.reserve_table_builder_memory &&
|
|
1530
|
+
context.table_options.block_cache);
|
|
1531
|
+
std::shared_ptr<CacheReservationManager> cache_res_mgr;
|
|
1532
|
+
if (reserve_filter_construction_mem) {
|
|
1533
|
+
cache_res_mgr = std::make_shared<
|
|
1534
|
+
CacheReservationManagerImpl<CacheEntryRole::kFilterConstruction>>(
|
|
1535
|
+
context.table_options.block_cache);
|
|
1165
1536
|
}
|
|
1166
|
-
|
|
1167
|
-
|
|
1537
|
+
return new Standard128RibbonBitsBuilder(
|
|
1538
|
+
desired_one_in_fp_rate_, millibits_per_key_,
|
|
1539
|
+
offm ? &aggregate_rounding_balance_ : nullptr, cache_res_mgr,
|
|
1540
|
+
context.table_options.detect_filter_construct_corruption,
|
|
1541
|
+
context.info_log);
|
|
1168
1542
|
}
|
|
1169
1543
|
|
|
1170
|
-
|
|
1544
|
+
std::string BloomLikeFilterPolicy::GetBitsPerKeySuffix() const {
|
|
1545
|
+
std::string rv = ":" + ROCKSDB_NAMESPACE::ToString(millibits_per_key_ / 1000);
|
|
1546
|
+
int frac = millibits_per_key_ % 1000;
|
|
1547
|
+
if (frac > 0) {
|
|
1548
|
+
rv.push_back('.');
|
|
1549
|
+
rv.push_back(static_cast<char>('0' + (frac / 100)));
|
|
1550
|
+
frac %= 100;
|
|
1551
|
+
if (frac > 0) {
|
|
1552
|
+
rv.push_back(static_cast<char>('0' + (frac / 10)));
|
|
1553
|
+
frac %= 10;
|
|
1554
|
+
if (frac > 0) {
|
|
1555
|
+
rv.push_back(static_cast<char>('0' + frac));
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
return rv;
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
FilterBitsBuilder* BuiltinFilterPolicy::GetBuilderFromContext(
|
|
1171
1563
|
const FilterBuildingContext& context) {
|
|
1172
1564
|
if (context.table_options.filter_policy) {
|
|
1173
1565
|
return context.table_options.filter_policy->GetBuilderWithContext(context);
|
|
@@ -1176,10 +1568,52 @@ FilterBitsBuilder* BloomFilterPolicy::GetBuilderFromContext(
|
|
|
1176
1568
|
}
|
|
1177
1569
|
}
|
|
1178
1570
|
|
|
1179
|
-
//
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1571
|
+
// For testing only, but always constructable with internal names
|
|
1572
|
+
namespace test {
|
|
1573
|
+
|
|
1574
|
+
const char* LegacyBloomFilterPolicy::kClassName() {
|
|
1575
|
+
return "rocksdb.internal.LegacyBloomFilter";
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
FilterBitsBuilder* LegacyBloomFilterPolicy::GetBuilderWithContext(
|
|
1579
|
+
const FilterBuildingContext& context) const {
|
|
1580
|
+
if (GetMillibitsPerKey() == 0) {
|
|
1581
|
+
// "No filter" special case
|
|
1582
|
+
return nullptr;
|
|
1583
|
+
}
|
|
1584
|
+
return GetLegacyBloomBuilderWithContext(context);
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
const char* FastLocalBloomFilterPolicy::kClassName() {
|
|
1588
|
+
return "rocksdb.internal.FastLocalBloomFilter";
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
FilterBitsBuilder* FastLocalBloomFilterPolicy::GetBuilderWithContext(
|
|
1592
|
+
const FilterBuildingContext& context) const {
|
|
1593
|
+
if (GetMillibitsPerKey() == 0) {
|
|
1594
|
+
// "No filter" special case
|
|
1595
|
+
return nullptr;
|
|
1596
|
+
}
|
|
1597
|
+
return GetFastLocalBloomBuilderWithContext(context);
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
const char* Standard128RibbonFilterPolicy::kClassName() {
|
|
1601
|
+
return "rocksdb.internal.Standard128RibbonFilter";
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
FilterBitsBuilder* Standard128RibbonFilterPolicy::GetBuilderWithContext(
|
|
1605
|
+
const FilterBuildingContext& context) const {
|
|
1606
|
+
if (GetMillibitsPerKey() == 0) {
|
|
1607
|
+
// "No filter" special case
|
|
1608
|
+
return nullptr;
|
|
1609
|
+
}
|
|
1610
|
+
return GetStandard128RibbonBuilderWithContext(context);
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
} // namespace test
|
|
1614
|
+
|
|
1615
|
+
BuiltinFilterBitsReader* BuiltinFilterPolicy::GetBuiltinFilterBitsReader(
|
|
1616
|
+
const Slice& contents) {
|
|
1183
1617
|
uint32_t len_with_meta = static_cast<uint32_t>(contents.size());
|
|
1184
1618
|
if (len_with_meta <= kMetadataLen) {
|
|
1185
1619
|
// filter is empty or broken. Treat like zero keys added.
|
|
@@ -1237,7 +1671,7 @@ FilterBitsReader* BloomFilterPolicy::GetFilterBitsReader(
|
|
|
1237
1671
|
|
|
1238
1672
|
if (num_lines * CACHE_LINE_SIZE == len) {
|
|
1239
1673
|
// Common case
|
|
1240
|
-
log2_cache_line_size =
|
|
1674
|
+
log2_cache_line_size = ConstexprFloorLog2(CACHE_LINE_SIZE);
|
|
1241
1675
|
} else if (num_lines == 0 || len % num_lines != 0) {
|
|
1242
1676
|
// Invalid (no solution to num_lines * x == len)
|
|
1243
1677
|
// Treat as zero probes (always FP) for now.
|
|
@@ -1259,8 +1693,15 @@ FilterBitsReader* BloomFilterPolicy::GetFilterBitsReader(
|
|
|
1259
1693
|
log2_cache_line_size);
|
|
1260
1694
|
}
|
|
1261
1695
|
|
|
1262
|
-
FilterBitsReader
|
|
1696
|
+
// Read metadata to determine what kind of FilterBitsReader is needed
|
|
1697
|
+
// and return a new one.
|
|
1698
|
+
FilterBitsReader* BuiltinFilterPolicy::GetFilterBitsReader(
|
|
1263
1699
|
const Slice& contents) const {
|
|
1700
|
+
return BuiltinFilterPolicy::GetBuiltinFilterBitsReader(contents);
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
BuiltinFilterBitsReader* BuiltinFilterPolicy::GetRibbonBitsReader(
|
|
1704
|
+
const Slice& contents) {
|
|
1264
1705
|
uint32_t len_with_meta = static_cast<uint32_t>(contents.size());
|
|
1265
1706
|
uint32_t len = len_with_meta - kMetadataLen;
|
|
1266
1707
|
|
|
@@ -1283,8 +1724,8 @@ FilterBitsReader* BloomFilterPolicy::GetRibbonBitsReader(
|
|
|
1283
1724
|
}
|
|
1284
1725
|
|
|
1285
1726
|
// For newer Bloom filter implementations
|
|
1286
|
-
|
|
1287
|
-
const Slice& contents)
|
|
1727
|
+
BuiltinFilterBitsReader* BuiltinFilterPolicy::GetBloomBitsReader(
|
|
1728
|
+
const Slice& contents) {
|
|
1288
1729
|
uint32_t len_with_meta = static_cast<uint32_t>(contents.size());
|
|
1289
1730
|
uint32_t len = len_with_meta - kMetadataLen;
|
|
1290
1731
|
|
|
@@ -1343,23 +1784,66 @@ FilterBitsReader* BloomFilterPolicy::GetBloomBitsReader(
|
|
|
1343
1784
|
}
|
|
1344
1785
|
|
|
1345
1786
|
const FilterPolicy* NewBloomFilterPolicy(double bits_per_key,
|
|
1346
|
-
bool use_block_based_builder) {
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1787
|
+
bool /*use_block_based_builder*/) {
|
|
1788
|
+
// NOTE: use_block_based_builder now ignored so block-based filter is no
|
|
1789
|
+
// longer accessible in public API.
|
|
1790
|
+
return new BloomFilterPolicy(bits_per_key);
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
RibbonFilterPolicy::RibbonFilterPolicy(double bloom_equivalent_bits_per_key,
|
|
1794
|
+
int bloom_before_level)
|
|
1795
|
+
: BloomLikeFilterPolicy(bloom_equivalent_bits_per_key),
|
|
1796
|
+
bloom_before_level_(bloom_before_level) {}
|
|
1797
|
+
|
|
1798
|
+
FilterBitsBuilder* RibbonFilterPolicy::GetBuilderWithContext(
|
|
1799
|
+
const FilterBuildingContext& context) const {
|
|
1800
|
+
if (GetMillibitsPerKey() == 0) {
|
|
1801
|
+
// "No filter" special case
|
|
1802
|
+
return nullptr;
|
|
1803
|
+
}
|
|
1804
|
+
// Treat unknown same as bottommost
|
|
1805
|
+
int levelish = INT_MAX;
|
|
1806
|
+
|
|
1807
|
+
switch (context.compaction_style) {
|
|
1808
|
+
case kCompactionStyleLevel:
|
|
1809
|
+
case kCompactionStyleUniversal: {
|
|
1810
|
+
if (context.reason == TableFileCreationReason::kFlush) {
|
|
1811
|
+
// Treat flush as level -1
|
|
1812
|
+
assert(context.level_at_creation == 0);
|
|
1813
|
+
levelish = -1;
|
|
1814
|
+
} else if (context.level_at_creation == -1) {
|
|
1815
|
+
// Unknown level
|
|
1816
|
+
assert(levelish == INT_MAX);
|
|
1817
|
+
} else {
|
|
1818
|
+
levelish = context.level_at_creation;
|
|
1819
|
+
}
|
|
1820
|
+
break;
|
|
1821
|
+
}
|
|
1822
|
+
case kCompactionStyleFIFO:
|
|
1823
|
+
case kCompactionStyleNone:
|
|
1824
|
+
// Treat as bottommost
|
|
1825
|
+
assert(levelish == INT_MAX);
|
|
1826
|
+
break;
|
|
1827
|
+
}
|
|
1828
|
+
if (levelish < bloom_before_level_) {
|
|
1829
|
+
return GetFastLocalBloomBuilderWithContext(context);
|
|
1350
1830
|
} else {
|
|
1351
|
-
|
|
1831
|
+
return GetStandard128RibbonBuilderWithContext(context);
|
|
1352
1832
|
}
|
|
1353
|
-
assert(std::find(BloomFilterPolicy::kAllUserModes.begin(),
|
|
1354
|
-
BloomFilterPolicy::kAllUserModes.end(),
|
|
1355
|
-
m) != BloomFilterPolicy::kAllUserModes.end());
|
|
1356
|
-
return new BloomFilterPolicy(bits_per_key, m);
|
|
1357
1833
|
}
|
|
1358
1834
|
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1835
|
+
const char* RibbonFilterPolicy::kClassName() { return "ribbonfilter"; }
|
|
1836
|
+
const char* RibbonFilterPolicy::kNickName() { return "rocksdb.RibbonFilter"; }
|
|
1837
|
+
|
|
1838
|
+
std::string RibbonFilterPolicy::GetId() const {
|
|
1839
|
+
return BloomLikeFilterPolicy::GetId() + ":" +
|
|
1840
|
+
ROCKSDB_NAMESPACE::ToString(bloom_before_level_);
|
|
1841
|
+
}
|
|
1842
|
+
|
|
1843
|
+
const FilterPolicy* NewRibbonFilterPolicy(double bloom_equivalent_bits_per_key,
|
|
1844
|
+
int bloom_before_level) {
|
|
1845
|
+
return new RibbonFilterPolicy(bloom_equivalent_bits_per_key,
|
|
1846
|
+
bloom_before_level);
|
|
1363
1847
|
}
|
|
1364
1848
|
|
|
1365
1849
|
FilterBuildingContext::FilterBuildingContext(
|
|
@@ -1368,40 +1852,198 @@ FilterBuildingContext::FilterBuildingContext(
|
|
|
1368
1852
|
|
|
1369
1853
|
FilterPolicy::~FilterPolicy() { }
|
|
1370
1854
|
|
|
1855
|
+
std::shared_ptr<const FilterPolicy> BloomLikeFilterPolicy::Create(
|
|
1856
|
+
const std::string& name, double bits_per_key) {
|
|
1857
|
+
if (name == test::LegacyBloomFilterPolicy::kClassName()) {
|
|
1858
|
+
return std::make_shared<test::LegacyBloomFilterPolicy>(bits_per_key);
|
|
1859
|
+
} else if (name == test::FastLocalBloomFilterPolicy::kClassName()) {
|
|
1860
|
+
return std::make_shared<test::FastLocalBloomFilterPolicy>(bits_per_key);
|
|
1861
|
+
} else if (name == test::Standard128RibbonFilterPolicy::kClassName()) {
|
|
1862
|
+
return std::make_shared<test::Standard128RibbonFilterPolicy>(bits_per_key);
|
|
1863
|
+
} else if (name == DeprecatedBlockBasedBloomFilterPolicy::kClassName()) {
|
|
1864
|
+
return std::make_shared<DeprecatedBlockBasedBloomFilterPolicy>(
|
|
1865
|
+
bits_per_key);
|
|
1866
|
+
} else if (name == BloomFilterPolicy::kClassName()) {
|
|
1867
|
+
// For testing
|
|
1868
|
+
return std::make_shared<BloomFilterPolicy>(bits_per_key);
|
|
1869
|
+
} else if (name == RibbonFilterPolicy::kClassName()) {
|
|
1870
|
+
// For testing
|
|
1871
|
+
return std::make_shared<RibbonFilterPolicy>(bits_per_key,
|
|
1872
|
+
/*bloom_before_level*/ 0);
|
|
1873
|
+
} else {
|
|
1874
|
+
return nullptr;
|
|
1875
|
+
}
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1878
|
+
#ifndef ROCKSDB_LITE
|
|
1879
|
+
namespace {
|
|
1880
|
+
static ObjectLibrary::PatternEntry FilterPatternEntryWithBits(
|
|
1881
|
+
const char* name) {
|
|
1882
|
+
return ObjectLibrary::PatternEntry(name, false).AddNumber(":", false);
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
template <typename T>
|
|
1886
|
+
T* NewBuiltinFilterPolicyWithBits(const std::string& uri) {
|
|
1887
|
+
const std::vector<std::string> vals = StringSplit(uri, ':');
|
|
1888
|
+
double bits_per_key = ParseDouble(vals[1]);
|
|
1889
|
+
return new T(bits_per_key);
|
|
1890
|
+
}
|
|
1891
|
+
static int RegisterBuiltinFilterPolicies(ObjectLibrary& library,
|
|
1892
|
+
const std::string& /*arg*/) {
|
|
1893
|
+
library.AddFactory<const FilterPolicy>(
|
|
1894
|
+
ReadOnlyBuiltinFilterPolicy::kClassName(),
|
|
1895
|
+
[](const std::string& /*uri*/, std::unique_ptr<const FilterPolicy>* guard,
|
|
1896
|
+
std::string* /* errmsg */) {
|
|
1897
|
+
guard->reset(new ReadOnlyBuiltinFilterPolicy());
|
|
1898
|
+
return guard->get();
|
|
1899
|
+
});
|
|
1900
|
+
|
|
1901
|
+
library.AddFactory<const FilterPolicy>(
|
|
1902
|
+
FilterPatternEntryWithBits(BloomFilterPolicy::kClassName())
|
|
1903
|
+
.AnotherName(BloomFilterPolicy::kNickName()),
|
|
1904
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1905
|
+
std::string* /* errmsg */) {
|
|
1906
|
+
guard->reset(NewBuiltinFilterPolicyWithBits<BloomFilterPolicy>(uri));
|
|
1907
|
+
return guard->get();
|
|
1908
|
+
});
|
|
1909
|
+
library.AddFactory<const FilterPolicy>(
|
|
1910
|
+
FilterPatternEntryWithBits(BloomFilterPolicy::kClassName())
|
|
1911
|
+
.AnotherName(BloomFilterPolicy::kNickName())
|
|
1912
|
+
.AddSuffix(":false"),
|
|
1913
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1914
|
+
std::string* /* errmsg */) {
|
|
1915
|
+
guard->reset(NewBuiltinFilterPolicyWithBits<BloomFilterPolicy>(uri));
|
|
1916
|
+
return guard->get();
|
|
1917
|
+
});
|
|
1918
|
+
library.AddFactory<const FilterPolicy>(
|
|
1919
|
+
FilterPatternEntryWithBits(BloomFilterPolicy::kClassName())
|
|
1920
|
+
.AnotherName(BloomFilterPolicy::kNickName())
|
|
1921
|
+
.AddSuffix(":true"),
|
|
1922
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1923
|
+
std::string* /* errmsg */) {
|
|
1924
|
+
const std::vector<std::string> vals = StringSplit(uri, ':');
|
|
1925
|
+
double bits_per_key = ParseDouble(vals[1]);
|
|
1926
|
+
// NOTE: This case previously configured the deprecated block-based
|
|
1927
|
+
// filter, but old ways of configuring that now map to full filter. We
|
|
1928
|
+
// defer to the corresponding API to ensure consistency in case that
|
|
1929
|
+
// change is reverted.
|
|
1930
|
+
guard->reset(NewBloomFilterPolicy(bits_per_key, true));
|
|
1931
|
+
return guard->get();
|
|
1932
|
+
});
|
|
1933
|
+
library.AddFactory<const FilterPolicy>(
|
|
1934
|
+
FilterPatternEntryWithBits(RibbonFilterPolicy::kClassName())
|
|
1935
|
+
.AnotherName(RibbonFilterPolicy::kNickName()),
|
|
1936
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1937
|
+
std::string* /* errmsg */) {
|
|
1938
|
+
const std::vector<std::string> vals = StringSplit(uri, ':');
|
|
1939
|
+
double bits_per_key = ParseDouble(vals[1]);
|
|
1940
|
+
guard->reset(NewRibbonFilterPolicy(bits_per_key));
|
|
1941
|
+
return guard->get();
|
|
1942
|
+
});
|
|
1943
|
+
library.AddFactory<const FilterPolicy>(
|
|
1944
|
+
FilterPatternEntryWithBits(RibbonFilterPolicy::kClassName())
|
|
1945
|
+
.AnotherName(RibbonFilterPolicy::kNickName())
|
|
1946
|
+
.AddNumber(":", true),
|
|
1947
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1948
|
+
std::string* /* errmsg */) {
|
|
1949
|
+
const std::vector<std::string> vals = StringSplit(uri, ':');
|
|
1950
|
+
double bits_per_key = ParseDouble(vals[1]);
|
|
1951
|
+
int bloom_before_level = ParseInt(vals[2]);
|
|
1952
|
+
guard->reset(NewRibbonFilterPolicy(bits_per_key, bloom_before_level));
|
|
1953
|
+
return guard->get();
|
|
1954
|
+
});
|
|
1955
|
+
library.AddFactory<const FilterPolicy>(
|
|
1956
|
+
FilterPatternEntryWithBits(test::LegacyBloomFilterPolicy::kClassName()),
|
|
1957
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1958
|
+
std::string* /* errmsg */) {
|
|
1959
|
+
guard->reset(
|
|
1960
|
+
NewBuiltinFilterPolicyWithBits<test::LegacyBloomFilterPolicy>(uri));
|
|
1961
|
+
return guard->get();
|
|
1962
|
+
});
|
|
1963
|
+
library.AddFactory<const FilterPolicy>(
|
|
1964
|
+
FilterPatternEntryWithBits(
|
|
1965
|
+
test::FastLocalBloomFilterPolicy::kClassName()),
|
|
1966
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1967
|
+
std::string* /* errmsg */) {
|
|
1968
|
+
guard->reset(
|
|
1969
|
+
NewBuiltinFilterPolicyWithBits<test::FastLocalBloomFilterPolicy>(
|
|
1970
|
+
uri));
|
|
1971
|
+
return guard->get();
|
|
1972
|
+
});
|
|
1973
|
+
library.AddFactory<const FilterPolicy>(
|
|
1974
|
+
FilterPatternEntryWithBits(
|
|
1975
|
+
test::Standard128RibbonFilterPolicy::kClassName()),
|
|
1976
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1977
|
+
std::string* /* errmsg */) {
|
|
1978
|
+
guard->reset(
|
|
1979
|
+
NewBuiltinFilterPolicyWithBits<test::Standard128RibbonFilterPolicy>(
|
|
1980
|
+
uri));
|
|
1981
|
+
return guard->get();
|
|
1982
|
+
});
|
|
1983
|
+
library.AddFactory<const FilterPolicy>(
|
|
1984
|
+
FilterPatternEntryWithBits(
|
|
1985
|
+
DeprecatedBlockBasedBloomFilterPolicy::kClassName()),
|
|
1986
|
+
[](const std::string& uri, std::unique_ptr<const FilterPolicy>* guard,
|
|
1987
|
+
std::string* /* errmsg */) {
|
|
1988
|
+
guard->reset(NewBuiltinFilterPolicyWithBits<
|
|
1989
|
+
DeprecatedBlockBasedBloomFilterPolicy>(uri));
|
|
1990
|
+
return guard->get();
|
|
1991
|
+
});
|
|
1992
|
+
size_t num_types;
|
|
1993
|
+
return static_cast<int>(library.GetFactoryCount(&num_types));
|
|
1994
|
+
}
|
|
1995
|
+
} // namespace
|
|
1996
|
+
#endif // ROCKSDB_LITE
|
|
1997
|
+
|
|
1371
1998
|
Status FilterPolicy::CreateFromString(
|
|
1372
|
-
const ConfigOptions&
|
|
1999
|
+
const ConfigOptions& options, const std::string& value,
|
|
1373
2000
|
std::shared_ptr<const FilterPolicy>* policy) {
|
|
1374
|
-
|
|
1375
|
-
const std::string kExpRibbonName = "experimental_ribbon:";
|
|
1376
|
-
if (value == kNullptrString || value == "rocksdb.BuiltinBloomFilter") {
|
|
2001
|
+
if (value == kNullptrString || value.empty()) {
|
|
1377
2002
|
policy->reset();
|
|
1378
|
-
|
|
1379
|
-
} else if (value
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
} else if (value.compare(0, kExpRibbonName.size(), kExpRibbonName) == 0) {
|
|
1393
|
-
double bloom_equivalent_bits_per_key =
|
|
1394
|
-
ParseDouble(trim(value.substr(kExpRibbonName.size())));
|
|
1395
|
-
policy->reset(
|
|
1396
|
-
NewExperimentalRibbonFilterPolicy(bloom_equivalent_bits_per_key));
|
|
2003
|
+
return Status::OK();
|
|
2004
|
+
} else if (value == ReadOnlyBuiltinFilterPolicy::kClassName()) {
|
|
2005
|
+
*policy = std::make_shared<ReadOnlyBuiltinFilterPolicy>();
|
|
2006
|
+
return Status::OK();
|
|
2007
|
+
}
|
|
2008
|
+
|
|
2009
|
+
std::string id;
|
|
2010
|
+
std::unordered_map<std::string, std::string> opt_map;
|
|
2011
|
+
Status status =
|
|
2012
|
+
Customizable::GetOptionsMap(options, policy->get(), value, &id, &opt_map);
|
|
2013
|
+
if (!status.ok()) { // GetOptionsMap failed
|
|
2014
|
+
return status;
|
|
2015
|
+
} else if (id.empty()) { // We have no Id but have options. Not good
|
|
2016
|
+
return Status::NotSupported("Cannot reset object ", id);
|
|
1397
2017
|
} else {
|
|
1398
|
-
|
|
2018
|
+
#ifndef ROCKSDB_LITE
|
|
2019
|
+
static std::once_flag loaded;
|
|
2020
|
+
std::call_once(loaded, [&]() {
|
|
2021
|
+
RegisterBuiltinFilterPolicies(*(ObjectLibrary::Default().get()), "");
|
|
2022
|
+
});
|
|
2023
|
+
status = options.registry->NewSharedObject(id, policy);
|
|
1399
2024
|
#else
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
value);
|
|
2025
|
+
status =
|
|
2026
|
+
Status::NotSupported("Cannot load filter policy in LITE mode ", value);
|
|
1403
2027
|
#endif // ROCKSDB_LITE
|
|
1404
2028
|
}
|
|
1405
|
-
|
|
2029
|
+
if (options.ignore_unsupported_options && status.IsNotSupported()) {
|
|
2030
|
+
return Status::OK();
|
|
2031
|
+
} else if (status.ok()) {
|
|
2032
|
+
status = Customizable::ConfigureNewObject(
|
|
2033
|
+
options, const_cast<FilterPolicy*>(policy->get()), opt_map);
|
|
2034
|
+
}
|
|
2035
|
+
return status;
|
|
1406
2036
|
}
|
|
2037
|
+
|
|
2038
|
+
const std::vector<std::string>& BloomLikeFilterPolicy::GetAllFixedImpls() {
|
|
2039
|
+
STATIC_AVOID_DESTRUCTION(std::vector<std::string>, impls){
|
|
2040
|
+
// Match filter_bench -impl=x ordering
|
|
2041
|
+
test::LegacyBloomFilterPolicy::kClassName(),
|
|
2042
|
+
DeprecatedBlockBasedBloomFilterPolicy::kClassName(),
|
|
2043
|
+
test::FastLocalBloomFilterPolicy::kClassName(),
|
|
2044
|
+
test::Standard128RibbonFilterPolicy::kClassName(),
|
|
2045
|
+
};
|
|
2046
|
+
return impls;
|
|
2047
|
+
}
|
|
2048
|
+
|
|
1407
2049
|
} // namespace ROCKSDB_NAMESPACE
|