@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
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "port/port.h"
|
|
20
20
|
#include "rocksdb/cache.h"
|
|
21
21
|
#include "rocksdb/convenience.h"
|
|
22
|
+
#include "rocksdb/file_checksum.h"
|
|
22
23
|
#include "rocksdb/memtablerep.h"
|
|
23
24
|
#include "rocksdb/utilities/leveldb_options.h"
|
|
24
25
|
#include "rocksdb/utilities/object_registry.h"
|
|
@@ -30,6 +31,9 @@
|
|
|
30
31
|
#include "util/stderr_logger.h"
|
|
31
32
|
#include "util/string_util.h"
|
|
32
33
|
#include "utilities/merge_operators/bytesxor.h"
|
|
34
|
+
#include "utilities/merge_operators/sortlist.h"
|
|
35
|
+
#include "utilities/merge_operators/string_append/stringappend.h"
|
|
36
|
+
#include "utilities/merge_operators/string_append/stringappend2.h"
|
|
33
37
|
|
|
34
38
|
#ifndef GFLAGS
|
|
35
39
|
bool FLAGS_enable_print = false;
|
|
@@ -76,8 +80,6 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
76
80
|
{"max_bytes_for_level_multiplier", "15.0"},
|
|
77
81
|
{"max_bytes_for_level_multiplier_additional", "16:17:18"},
|
|
78
82
|
{"max_compaction_bytes", "21"},
|
|
79
|
-
{"soft_rate_limit", "1.1"},
|
|
80
|
-
{"hard_rate_limit", "2.1"},
|
|
81
83
|
{"hard_pending_compaction_bytes_limit", "211"},
|
|
82
84
|
{"arena_block_size", "22"},
|
|
83
85
|
{"disable_auto_compactions", "true"},
|
|
@@ -89,6 +91,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
89
91
|
{"inplace_update_support", "true"},
|
|
90
92
|
{"report_bg_io_stats", "true"},
|
|
91
93
|
{"compaction_measure_io_stats", "false"},
|
|
94
|
+
{"purge_redundant_kvs_while_flush", "false"},
|
|
92
95
|
{"inplace_update_num_locks", "25"},
|
|
93
96
|
{"memtable_prefix_bloom_size_ratio", "0.26"},
|
|
94
97
|
{"memtable_whole_key_filtering", "true"},
|
|
@@ -104,6 +107,9 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
104
107
|
{"blob_compression_type", "kZSTD"},
|
|
105
108
|
{"enable_blob_garbage_collection", "true"},
|
|
106
109
|
{"blob_garbage_collection_age_cutoff", "0.5"},
|
|
110
|
+
{"blob_garbage_collection_force_threshold", "0.75"},
|
|
111
|
+
{"blob_compaction_readahead_size", "256K"},
|
|
112
|
+
{"bottommost_temperature", "kWarm"},
|
|
107
113
|
};
|
|
108
114
|
|
|
109
115
|
std::unordered_map<std::string, std::string> db_options_map = {
|
|
@@ -140,14 +146,15 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
140
146
|
{"persist_stats_to_disk", "false"},
|
|
141
147
|
{"stats_history_buffer_size", "69"},
|
|
142
148
|
{"advise_random_on_open", "true"},
|
|
149
|
+
{"experimental_mempurge_threshold", "0.0"},
|
|
143
150
|
{"use_adaptive_mutex", "false"},
|
|
144
|
-
{"new_table_reader_for_compaction_inputs", "true"},
|
|
145
151
|
{"compaction_readahead_size", "100"},
|
|
146
152
|
{"random_access_max_buffer_size", "3145728"},
|
|
147
153
|
{"writable_file_max_buffer_size", "314159"},
|
|
148
154
|
{"bytes_per_sync", "47"},
|
|
149
155
|
{"wal_bytes_per_sync", "48"},
|
|
150
156
|
{"strict_bytes_per_sync", "true"},
|
|
157
|
+
{"preserve_deletes", "false"},
|
|
151
158
|
};
|
|
152
159
|
|
|
153
160
|
ColumnFamilyOptions base_cf_opt;
|
|
@@ -227,14 +234,16 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
227
234
|
ASSERT_EQ(new_cf_opt.max_successive_merges, 30U);
|
|
228
235
|
ASSERT_TRUE(new_cf_opt.prefix_extractor != nullptr);
|
|
229
236
|
ASSERT_EQ(new_cf_opt.optimize_filters_for_hits, true);
|
|
230
|
-
ASSERT_EQ(
|
|
231
|
-
"rocksdb.FixedPrefix.31");
|
|
237
|
+
ASSERT_EQ(new_cf_opt.prefix_extractor->AsString(), "rocksdb.FixedPrefix.31");
|
|
232
238
|
ASSERT_EQ(new_cf_opt.enable_blob_files, true);
|
|
233
239
|
ASSERT_EQ(new_cf_opt.min_blob_size, 1ULL << 10);
|
|
234
240
|
ASSERT_EQ(new_cf_opt.blob_file_size, 1ULL << 30);
|
|
235
241
|
ASSERT_EQ(new_cf_opt.blob_compression_type, kZSTD);
|
|
236
242
|
ASSERT_EQ(new_cf_opt.enable_blob_garbage_collection, true);
|
|
237
243
|
ASSERT_EQ(new_cf_opt.blob_garbage_collection_age_cutoff, 0.5);
|
|
244
|
+
ASSERT_EQ(new_cf_opt.blob_garbage_collection_force_threshold, 0.75);
|
|
245
|
+
ASSERT_EQ(new_cf_opt.blob_compaction_readahead_size, 262144);
|
|
246
|
+
ASSERT_EQ(new_cf_opt.bottommost_temperature, Temperature::kWarm);
|
|
238
247
|
|
|
239
248
|
cf_options_map["write_buffer_size"] = "hello";
|
|
240
249
|
ASSERT_NOK(GetColumnFamilyOptionsFromMap(exact, base_cf_opt, cf_options_map,
|
|
@@ -292,14 +301,13 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
|
292
301
|
ASSERT_EQ(new_db_opt.use_direct_reads, false);
|
|
293
302
|
ASSERT_EQ(new_db_opt.use_direct_io_for_flush_and_compaction, false);
|
|
294
303
|
ASSERT_EQ(new_db_opt.is_fd_close_on_exec, true);
|
|
295
|
-
ASSERT_EQ(new_db_opt.skip_log_error_on_recovery, false);
|
|
296
304
|
ASSERT_EQ(new_db_opt.stats_dump_period_sec, 46U);
|
|
297
305
|
ASSERT_EQ(new_db_opt.stats_persist_period_sec, 57U);
|
|
298
306
|
ASSERT_EQ(new_db_opt.persist_stats_to_disk, false);
|
|
299
307
|
ASSERT_EQ(new_db_opt.stats_history_buffer_size, 69U);
|
|
300
308
|
ASSERT_EQ(new_db_opt.advise_random_on_open, true);
|
|
309
|
+
ASSERT_EQ(new_db_opt.experimental_mempurge_threshold, 0.0);
|
|
301
310
|
ASSERT_EQ(new_db_opt.use_adaptive_mutex, false);
|
|
302
|
-
ASSERT_EQ(new_db_opt.new_table_reader_for_compaction_inputs, true);
|
|
303
311
|
ASSERT_EQ(new_db_opt.compaction_readahead_size, 100);
|
|
304
312
|
ASSERT_EQ(new_db_opt.random_access_max_buffer_size, 3145728);
|
|
305
313
|
ASSERT_EQ(new_db_opt.writable_file_max_buffer_size, 314159);
|
|
@@ -379,7 +387,7 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
379
387
|
|
|
380
388
|
// Comparator from object registry
|
|
381
389
|
std::string kCompName = "reverse_comp";
|
|
382
|
-
ObjectLibrary::Default()->
|
|
390
|
+
ObjectLibrary::Default()->AddFactory<const Comparator>(
|
|
383
391
|
kCompName,
|
|
384
392
|
[](const std::string& /*name*/,
|
|
385
393
|
std::unique_ptr<const Comparator>* /*guard*/,
|
|
@@ -393,13 +401,6 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
393
401
|
// MergeOperator from object registry
|
|
394
402
|
std::unique_ptr<BytesXOROperator> bxo(new BytesXOROperator());
|
|
395
403
|
std::string kMoName = bxo->Name();
|
|
396
|
-
ObjectLibrary::Default()->Register<MergeOperator>(
|
|
397
|
-
kMoName,
|
|
398
|
-
[](const std::string& /*name*/, std::unique_ptr<MergeOperator>* guard,
|
|
399
|
-
std::string* /* errmsg */) {
|
|
400
|
-
guard->reset(new BytesXOROperator());
|
|
401
|
-
return guard->get();
|
|
402
|
-
});
|
|
403
404
|
|
|
404
405
|
ASSERT_OK(GetColumnFamilyOptionsFromString(config_options, base_cf_opt,
|
|
405
406
|
"merge_operator=" + kMoName + ";",
|
|
@@ -458,8 +459,7 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
458
459
|
ASSERT_EQ(new_cf_opt.write_buffer_size, 18 * giga);
|
|
459
460
|
ASSERT_EQ(new_cf_opt.arena_block_size, 19 * giga);
|
|
460
461
|
ASSERT_TRUE(new_cf_opt.prefix_extractor.get() != nullptr);
|
|
461
|
-
|
|
462
|
-
ASSERT_EQ(prefix_name, "rocksdb.CappedPrefix.8");
|
|
462
|
+
ASSERT_EQ(new_cf_opt.prefix_extractor->AsString(), "rocksdb.CappedPrefix.8");
|
|
463
463
|
|
|
464
464
|
// Units (t)
|
|
465
465
|
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
@@ -577,6 +577,7 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
577
577
|
&new_cf_opt));
|
|
578
578
|
ASSERT_TRUE(new_cf_opt.memtable_factory != nullptr);
|
|
579
579
|
ASSERT_EQ(std::string(new_cf_opt.memtable_factory->Name()), "SkipListFactory");
|
|
580
|
+
ASSERT_TRUE(new_cf_opt.memtable_factory->IsInstanceOf("SkipListFactory"));
|
|
580
581
|
}
|
|
581
582
|
|
|
582
583
|
TEST_F(OptionsTest, CompressionOptionsFromString) {
|
|
@@ -725,12 +726,18 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
|
|
|
725
726
|
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
726
727
|
ignore, ColumnFamilyOptions(), "compression_opts=5:6:7:8:9:x:false",
|
|
727
728
|
&base_cf_opt));
|
|
728
|
-
|
|
729
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
729
730
|
config_options, ColumnFamilyOptions(),
|
|
730
731
|
"compression_opts=1:2:3:4:5:6:true:8", &base_cf_opt));
|
|
731
732
|
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
732
733
|
ignore, ColumnFamilyOptions(), "compression_opts=1:2:3:4:5:6:true:8",
|
|
733
734
|
&base_cf_opt));
|
|
735
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromString(
|
|
736
|
+
config_options, ColumnFamilyOptions(),
|
|
737
|
+
"compression_opts=1:2:3:4:5:6:true:8:9", &base_cf_opt));
|
|
738
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
739
|
+
ignore, ColumnFamilyOptions(), "compression_opts=1:2:3:4:5:6:true:8:9",
|
|
740
|
+
&base_cf_opt));
|
|
734
741
|
ASSERT_NOK(GetColumnFamilyOptionsFromString(
|
|
735
742
|
config_options, ColumnFamilyOptions(), "compression_opts={unknown=bad;}",
|
|
736
743
|
&base_cf_opt));
|
|
@@ -837,16 +844,20 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
837
844
|
ConfigOptions config_options;
|
|
838
845
|
config_options.input_strings_escaped = false;
|
|
839
846
|
config_options.ignore_unknown_options = false;
|
|
847
|
+
config_options.ignore_unsupported_options = false;
|
|
840
848
|
|
|
841
849
|
// make sure default values are overwritten by something else
|
|
842
850
|
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
843
851
|
config_options, table_opt,
|
|
844
852
|
"cache_index_and_filter_blocks=1;index_type=kHashSearch;"
|
|
845
|
-
"checksum=kxxHash;
|
|
853
|
+
"checksum=kxxHash;"
|
|
846
854
|
"block_cache=1M;block_cache_compressed=1k;block_size=1024;"
|
|
847
855
|
"block_size_deviation=8;block_restart_interval=4;"
|
|
848
856
|
"format_version=5;whole_key_filtering=1;"
|
|
849
|
-
"
|
|
857
|
+
"reserve_table_builder_memory=true;"
|
|
858
|
+
"reserve_table_reader_memory=true;"
|
|
859
|
+
"filter_policy=bloomfilter:4.567:false;detect_filter_construct_"
|
|
860
|
+
"corruption=true;"
|
|
850
861
|
// A bug caused read_amp_bytes_per_bit to be a large integer in OPTIONS
|
|
851
862
|
// file generated by 6.10 to 6.14. Though bug is fixed in these releases,
|
|
852
863
|
// we need to handle the case of loading OPTIONS file generated before the
|
|
@@ -856,7 +867,6 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
856
867
|
ASSERT_TRUE(new_opt.cache_index_and_filter_blocks);
|
|
857
868
|
ASSERT_EQ(new_opt.index_type, BlockBasedTableOptions::kHashSearch);
|
|
858
869
|
ASSERT_EQ(new_opt.checksum, ChecksumType::kxxHash);
|
|
859
|
-
ASSERT_TRUE(new_opt.hash_index_allow_collision);
|
|
860
870
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
861
871
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
862
872
|
ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
|
|
@@ -866,12 +876,14 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
866
876
|
ASSERT_EQ(new_opt.block_restart_interval, 4);
|
|
867
877
|
ASSERT_EQ(new_opt.format_version, 5U);
|
|
868
878
|
ASSERT_EQ(new_opt.whole_key_filtering, true);
|
|
879
|
+
ASSERT_EQ(new_opt.detect_filter_construct_corruption, true);
|
|
880
|
+
ASSERT_EQ(new_opt.reserve_table_builder_memory, true);
|
|
881
|
+
ASSERT_EQ(new_opt.reserve_table_reader_memory, true);
|
|
869
882
|
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
870
|
-
|
|
871
|
-
|
|
883
|
+
auto bfp = new_opt.filter_policy->CheckedCast<BloomFilterPolicy>();
|
|
884
|
+
ASSERT_NE(bfp, nullptr);
|
|
872
885
|
EXPECT_EQ(bfp->GetMillibitsPerKey(), 4567);
|
|
873
886
|
EXPECT_EQ(bfp->GetWholeBitsPerKey(), 5);
|
|
874
|
-
EXPECT_EQ(bfp->GetMode(), BloomFilterPolicy::kAutoBloom);
|
|
875
887
|
// Verify that only the lower 32bits are stored in
|
|
876
888
|
// new_opt.read_amp_bytes_per_bit.
|
|
877
889
|
EXPECT_EQ(1U, new_opt.read_amp_bytes_per_bit);
|
|
@@ -908,34 +920,91 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
908
920
|
|
|
909
921
|
// unrecognized filter policy name
|
|
910
922
|
s = GetBlockBasedTableOptionsFromString(config_options, table_opt,
|
|
911
|
-
"cache_index_and_filter_blocks=1;"
|
|
912
923
|
"filter_policy=bloomfilterxx:4:true",
|
|
913
924
|
&new_opt);
|
|
914
925
|
ASSERT_NOK(s);
|
|
915
926
|
ASSERT_TRUE(s.IsInvalidArgument());
|
|
916
|
-
ASSERT_EQ(table_opt.cache_index_and_filter_blocks,
|
|
917
|
-
new_opt.cache_index_and_filter_blocks);
|
|
918
|
-
ASSERT_EQ(table_opt.filter_policy, new_opt.filter_policy);
|
|
919
927
|
|
|
920
|
-
//
|
|
921
|
-
s = GetBlockBasedTableOptionsFromString(
|
|
922
|
-
|
|
923
|
-
"filter_policy=bloomfilter:4",
|
|
924
|
-
&new_opt);
|
|
928
|
+
// missing bits per key
|
|
929
|
+
s = GetBlockBasedTableOptionsFromString(
|
|
930
|
+
config_options, table_opt, "filter_policy=bloomfilter", &new_opt);
|
|
925
931
|
ASSERT_NOK(s);
|
|
926
932
|
ASSERT_TRUE(s.IsInvalidArgument());
|
|
927
|
-
ASSERT_EQ(table_opt.cache_index_and_filter_blocks,
|
|
928
|
-
new_opt.cache_index_and_filter_blocks);
|
|
929
|
-
ASSERT_EQ(table_opt.filter_policy, new_opt.filter_policy);
|
|
930
933
|
|
|
931
|
-
//
|
|
934
|
+
// Used to be rejected, now accepted
|
|
932
935
|
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
933
|
-
config_options, table_opt, "filter_policy=
|
|
936
|
+
config_options, table_opt, "filter_policy=bloomfilter:4", &new_opt));
|
|
937
|
+
bfp = dynamic_cast<const BloomFilterPolicy*>(new_opt.filter_policy.get());
|
|
938
|
+
EXPECT_EQ(bfp->GetMillibitsPerKey(), 4000);
|
|
939
|
+
EXPECT_EQ(bfp->GetWholeBitsPerKey(), 4);
|
|
940
|
+
|
|
941
|
+
// use_block_based_builder=true now ignored in public API (same as false)
|
|
942
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
943
|
+
config_options, table_opt, "filter_policy=bloomfilter:4:true", &new_opt));
|
|
944
|
+
bfp = dynamic_cast<const BloomFilterPolicy*>(new_opt.filter_policy.get());
|
|
945
|
+
EXPECT_EQ(bfp->GetMillibitsPerKey(), 4000);
|
|
946
|
+
EXPECT_EQ(bfp->GetWholeBitsPerKey(), 4);
|
|
947
|
+
|
|
948
|
+
// Back door way of enabling deprecated block-based Bloom
|
|
949
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
950
|
+
config_options, table_opt,
|
|
951
|
+
"filter_policy=rocksdb.internal.DeprecatedBlockBasedBloomFilter:4",
|
|
952
|
+
&new_opt));
|
|
953
|
+
auto builtin =
|
|
954
|
+
dynamic_cast<const BuiltinFilterPolicy*>(new_opt.filter_policy.get());
|
|
955
|
+
EXPECT_EQ(builtin->GetId(),
|
|
956
|
+
"rocksdb.internal.DeprecatedBlockBasedBloomFilter:4");
|
|
957
|
+
|
|
958
|
+
// Test configuring using other internal names
|
|
959
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
960
|
+
config_options, table_opt,
|
|
961
|
+
"filter_policy=rocksdb.internal.LegacyBloomFilter:3", &new_opt));
|
|
962
|
+
builtin =
|
|
963
|
+
dynamic_cast<const BuiltinFilterPolicy*>(new_opt.filter_policy.get());
|
|
964
|
+
EXPECT_EQ(builtin->GetId(), "rocksdb.internal.LegacyBloomFilter:3");
|
|
965
|
+
|
|
966
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
967
|
+
config_options, table_opt,
|
|
968
|
+
"filter_policy=rocksdb.internal.FastLocalBloomFilter:1.234", &new_opt));
|
|
969
|
+
builtin =
|
|
970
|
+
dynamic_cast<const BuiltinFilterPolicy*>(new_opt.filter_policy.get());
|
|
971
|
+
EXPECT_EQ(builtin->GetId(), "rocksdb.internal.FastLocalBloomFilter:1.234");
|
|
972
|
+
|
|
973
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
974
|
+
config_options, table_opt,
|
|
975
|
+
"filter_policy=rocksdb.internal.Standard128RibbonFilter:1.234",
|
|
976
|
+
&new_opt));
|
|
977
|
+
builtin =
|
|
978
|
+
dynamic_cast<const BuiltinFilterPolicy*>(new_opt.filter_policy.get());
|
|
979
|
+
EXPECT_EQ(builtin->GetId(), "rocksdb.internal.Standard128RibbonFilter:1.234");
|
|
980
|
+
|
|
981
|
+
// Ribbon filter policy (no Bloom hybrid)
|
|
982
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
983
|
+
config_options, table_opt, "filter_policy=ribbonfilter:5.678:-1;",
|
|
934
984
|
&new_opt));
|
|
935
985
|
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
EXPECT_EQ(
|
|
986
|
+
auto rfp =
|
|
987
|
+
dynamic_cast<const RibbonFilterPolicy*>(new_opt.filter_policy.get());
|
|
988
|
+
EXPECT_EQ(rfp->GetMillibitsPerKey(), 5678);
|
|
989
|
+
EXPECT_EQ(rfp->GetBloomBeforeLevel(), -1);
|
|
990
|
+
|
|
991
|
+
// Ribbon filter policy (default Bloom hybrid)
|
|
992
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
993
|
+
config_options, table_opt, "filter_policy=ribbonfilter:6.789;",
|
|
994
|
+
&new_opt));
|
|
995
|
+
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
996
|
+
rfp = dynamic_cast<const RibbonFilterPolicy*>(new_opt.filter_policy.get());
|
|
997
|
+
EXPECT_EQ(rfp->GetMillibitsPerKey(), 6789);
|
|
998
|
+
EXPECT_EQ(rfp->GetBloomBeforeLevel(), 0);
|
|
999
|
+
|
|
1000
|
+
// Ribbon filter policy (custom Bloom hybrid)
|
|
1001
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
1002
|
+
config_options, table_opt, "filter_policy=ribbonfilter:6.789:5;",
|
|
1003
|
+
&new_opt));
|
|
1004
|
+
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
1005
|
+
rfp = dynamic_cast<const RibbonFilterPolicy*>(new_opt.filter_policy.get());
|
|
1006
|
+
EXPECT_EQ(rfp->GetMillibitsPerKey(), 6789);
|
|
1007
|
+
EXPECT_EQ(rfp->GetBloomBeforeLevel(), 5);
|
|
939
1008
|
|
|
940
1009
|
// Check block cache options are overwritten when specified
|
|
941
1010
|
// in new format as a struct.
|
|
@@ -1037,6 +1106,25 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
|
|
|
1037
1106
|
ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
|
|
1038
1107
|
->GetHighPriPoolRatio(),
|
|
1039
1108
|
0.5);
|
|
1109
|
+
|
|
1110
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
1111
|
+
config_options, table_opt, "filter_policy=rocksdb.BloomFilter:1.234",
|
|
1112
|
+
&new_opt));
|
|
1113
|
+
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
1114
|
+
ASSERT_TRUE(
|
|
1115
|
+
new_opt.filter_policy->IsInstanceOf(BloomFilterPolicy::kClassName()));
|
|
1116
|
+
ASSERT_TRUE(
|
|
1117
|
+
new_opt.filter_policy->IsInstanceOf(BloomFilterPolicy::kNickName()));
|
|
1118
|
+
|
|
1119
|
+
// Ribbon filter policy alternative name
|
|
1120
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
1121
|
+
config_options, table_opt, "filter_policy=rocksdb.RibbonFilter:6.789:5;",
|
|
1122
|
+
&new_opt));
|
|
1123
|
+
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
1124
|
+
ASSERT_TRUE(
|
|
1125
|
+
new_opt.filter_policy->IsInstanceOf(RibbonFilterPolicy::kClassName()));
|
|
1126
|
+
ASSERT_TRUE(
|
|
1127
|
+
new_opt.filter_policy->IsInstanceOf(RibbonFilterPolicy::kNickName()));
|
|
1040
1128
|
}
|
|
1041
1129
|
#endif // !ROCKSDB_LITE
|
|
1042
1130
|
|
|
@@ -1090,14 +1178,14 @@ TEST_F(OptionsTest, GetMemTableRepFactoryFromString) {
|
|
|
1090
1178
|
|
|
1091
1179
|
ASSERT_OK(GetMemTableRepFactoryFromString("skip_list", &new_mem_factory));
|
|
1092
1180
|
ASSERT_OK(GetMemTableRepFactoryFromString("skip_list:16", &new_mem_factory));
|
|
1093
|
-
|
|
1181
|
+
ASSERT_STREQ(new_mem_factory->Name(), "SkipListFactory");
|
|
1094
1182
|
ASSERT_NOK(GetMemTableRepFactoryFromString("skip_list:16:invalid_opt",
|
|
1095
1183
|
&new_mem_factory));
|
|
1096
1184
|
|
|
1097
1185
|
ASSERT_OK(GetMemTableRepFactoryFromString("prefix_hash", &new_mem_factory));
|
|
1098
1186
|
ASSERT_OK(GetMemTableRepFactoryFromString("prefix_hash:1000",
|
|
1099
1187
|
&new_mem_factory));
|
|
1100
|
-
|
|
1188
|
+
ASSERT_STREQ(new_mem_factory->Name(), "HashSkipListRepFactory");
|
|
1101
1189
|
ASSERT_NOK(GetMemTableRepFactoryFromString("prefix_hash:1000:invalid_opt",
|
|
1102
1190
|
&new_mem_factory));
|
|
1103
1191
|
|
|
@@ -1123,7 +1211,107 @@ TEST_F(OptionsTest, GetMemTableRepFactoryFromString) {
|
|
|
1123
1211
|
}
|
|
1124
1212
|
#endif // !ROCKSDB_LITE
|
|
1125
1213
|
|
|
1214
|
+
TEST_F(OptionsTest, MemTableRepFactoryCreateFromString) {
|
|
1215
|
+
std::unique_ptr<MemTableRepFactory> new_mem_factory = nullptr;
|
|
1216
|
+
ConfigOptions config_options;
|
|
1217
|
+
config_options.ignore_unsupported_options = false;
|
|
1218
|
+
config_options.ignore_unknown_options = false;
|
|
1219
|
+
|
|
1220
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "skip_list",
|
|
1221
|
+
&new_mem_factory));
|
|
1222
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "skip_list:16",
|
|
1223
|
+
&new_mem_factory));
|
|
1224
|
+
ASSERT_STREQ(new_mem_factory->Name(), "SkipListFactory");
|
|
1225
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("skip_list"));
|
|
1226
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("SkipListFactory"));
|
|
1227
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1228
|
+
config_options, "skip_list:16:invalid_opt", &new_mem_factory));
|
|
1229
|
+
|
|
1230
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1231
|
+
config_options, "invalid_opt=10", &new_mem_factory));
|
|
1232
|
+
|
|
1233
|
+
// Test a reset
|
|
1234
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "",
|
|
1235
|
+
&new_mem_factory));
|
|
1236
|
+
ASSERT_EQ(new_mem_factory, nullptr);
|
|
1237
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1238
|
+
config_options, "invalid_opt=10", &new_mem_factory));
|
|
1239
|
+
|
|
1240
|
+
#ifndef ROCKSDB_LITE
|
|
1241
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1242
|
+
config_options, "id=skip_list; lookahead=32", &new_mem_factory));
|
|
1243
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "prefix_hash",
|
|
1244
|
+
&new_mem_factory));
|
|
1245
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1246
|
+
config_options, "prefix_hash:1000", &new_mem_factory));
|
|
1247
|
+
ASSERT_STREQ(new_mem_factory->Name(), "HashSkipListRepFactory");
|
|
1248
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("prefix_hash"));
|
|
1249
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("HashSkipListRepFactory"));
|
|
1250
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1251
|
+
config_options, "prefix_hash:1000:invalid_opt", &new_mem_factory));
|
|
1252
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1253
|
+
config_options,
|
|
1254
|
+
"id=prefix_hash; bucket_count=32; skiplist_height=64; "
|
|
1255
|
+
"branching_factor=16",
|
|
1256
|
+
&new_mem_factory));
|
|
1257
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1258
|
+
config_options,
|
|
1259
|
+
"id=prefix_hash; bucket_count=32; skiplist_height=64; "
|
|
1260
|
+
"branching_factor=16; invalid=unknown",
|
|
1261
|
+
&new_mem_factory));
|
|
1262
|
+
|
|
1263
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1264
|
+
config_options, "hash_linkedlist", &new_mem_factory));
|
|
1265
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1266
|
+
config_options, "hash_linkedlist:1000", &new_mem_factory));
|
|
1267
|
+
ASSERT_STREQ(new_mem_factory->Name(), "HashLinkListRepFactory");
|
|
1268
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("hash_linkedlist"));
|
|
1269
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("HashLinkListRepFactory"));
|
|
1270
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1271
|
+
config_options, "hash_linkedlist:1000:invalid_opt", &new_mem_factory));
|
|
1272
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1273
|
+
config_options,
|
|
1274
|
+
"id=hash_linkedlist; bucket_count=32; threshold=64; huge_page_size=16; "
|
|
1275
|
+
"logging_threshold=12; log_when_flash=true",
|
|
1276
|
+
&new_mem_factory));
|
|
1277
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1278
|
+
config_options,
|
|
1279
|
+
"id=hash_linkedlist; bucket_count=32; threshold=64; huge_page_size=16; "
|
|
1280
|
+
"logging_threshold=12; log_when_flash=true; invalid=unknown",
|
|
1281
|
+
&new_mem_factory));
|
|
1282
|
+
|
|
1283
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "vector",
|
|
1284
|
+
&new_mem_factory));
|
|
1285
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(config_options, "vector:1024",
|
|
1286
|
+
&new_mem_factory));
|
|
1287
|
+
ASSERT_STREQ(new_mem_factory->Name(), "VectorRepFactory");
|
|
1288
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("vector"));
|
|
1289
|
+
ASSERT_TRUE(new_mem_factory->IsInstanceOf("VectorRepFactory"));
|
|
1290
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1291
|
+
config_options, "vector:1024:invalid_opt", &new_mem_factory));
|
|
1292
|
+
ASSERT_OK(MemTableRepFactory::CreateFromString(
|
|
1293
|
+
config_options, "id=vector; count=42", &new_mem_factory));
|
|
1294
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(
|
|
1295
|
+
config_options, "id=vector; invalid=unknown", &new_mem_factory));
|
|
1296
|
+
#endif // ROCKSDB_LITE
|
|
1297
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(config_options, "cuckoo",
|
|
1298
|
+
&new_mem_factory));
|
|
1299
|
+
// CuckooHash memtable is already removed.
|
|
1300
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(config_options, "cuckoo:1024",
|
|
1301
|
+
&new_mem_factory));
|
|
1302
|
+
|
|
1303
|
+
ASSERT_NOK(MemTableRepFactory::CreateFromString(config_options, "bad_factory",
|
|
1304
|
+
&new_mem_factory));
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1126
1307
|
#ifndef ROCKSDB_LITE // GetOptionsFromString is not supported in RocksDB Lite
|
|
1308
|
+
class CustomEnv : public EnvWrapper {
|
|
1309
|
+
public:
|
|
1310
|
+
explicit CustomEnv(Env* _target) : EnvWrapper(_target) {}
|
|
1311
|
+
static const char* kClassName() { return "CustomEnv"; }
|
|
1312
|
+
const char* Name() const override { return kClassName(); }
|
|
1313
|
+
};
|
|
1314
|
+
|
|
1127
1315
|
TEST_F(OptionsTest, GetOptionsFromStringTest) {
|
|
1128
1316
|
Options base_options, new_options;
|
|
1129
1317
|
ConfigOptions config_options;
|
|
@@ -1138,14 +1326,8 @@ TEST_F(OptionsTest, GetOptionsFromStringTest) {
|
|
|
1138
1326
|
NewBlockBasedTableFactory(block_based_table_options));
|
|
1139
1327
|
|
|
1140
1328
|
// Register an Env with object registry.
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
public:
|
|
1144
|
-
explicit CustomEnv(Env* _target) : EnvWrapper(_target) {}
|
|
1145
|
-
};
|
|
1146
|
-
|
|
1147
|
-
ObjectLibrary::Default()->Register<Env>(
|
|
1148
|
-
kCustomEnvName,
|
|
1329
|
+
ObjectLibrary::Default()->AddFactory<Env>(
|
|
1330
|
+
CustomEnv::kClassName(),
|
|
1149
1331
|
[](const std::string& /*name*/, std::unique_ptr<Env>* /*env_guard*/,
|
|
1150
1332
|
std::string* /* errmsg */) {
|
|
1151
1333
|
static CustomEnv env(Env::Default());
|
|
@@ -1191,7 +1373,7 @@ TEST_F(OptionsTest, GetOptionsFromStringTest) {
|
|
|
1191
1373
|
ASSERT_EQ(new_options.max_open_files, 1);
|
|
1192
1374
|
ASSERT_TRUE(new_options.rate_limiter.get() != nullptr);
|
|
1193
1375
|
Env* newEnv = new_options.env;
|
|
1194
|
-
ASSERT_OK(Env::LoadEnv(
|
|
1376
|
+
ASSERT_OK(Env::LoadEnv(CustomEnv::kClassName(), &newEnv));
|
|
1195
1377
|
ASSERT_EQ(newEnv, new_options.env);
|
|
1196
1378
|
|
|
1197
1379
|
config_options.ignore_unknown_options = false;
|
|
@@ -1292,6 +1474,77 @@ TEST_F(OptionsTest, OptionsComposeDecompose) {
|
|
|
1292
1474
|
delete new_cf_opts.compaction_filter;
|
|
1293
1475
|
}
|
|
1294
1476
|
|
|
1477
|
+
TEST_F(OptionsTest, DBOptionsComposeImmutable) {
|
|
1478
|
+
// Build a DBOptions from an Immutable/Mutable one and verify that
|
|
1479
|
+
// we get same constituent options.
|
|
1480
|
+
ConfigOptions config_options;
|
|
1481
|
+
Random rnd(301);
|
|
1482
|
+
DBOptions base_opts, new_opts;
|
|
1483
|
+
test::RandomInitDBOptions(&base_opts, &rnd);
|
|
1484
|
+
MutableDBOptions m_opts(base_opts);
|
|
1485
|
+
ImmutableDBOptions i_opts(base_opts);
|
|
1486
|
+
new_opts = BuildDBOptions(i_opts, m_opts);
|
|
1487
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyDBOptions(config_options, base_opts,
|
|
1488
|
+
new_opts));
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
TEST_F(OptionsTest, GetMutableDBOptions) {
|
|
1492
|
+
Random rnd(228);
|
|
1493
|
+
DBOptions base_opts;
|
|
1494
|
+
std::string opts_str;
|
|
1495
|
+
std::unordered_map<std::string, std::string> opts_map;
|
|
1496
|
+
ConfigOptions config_options;
|
|
1497
|
+
|
|
1498
|
+
test::RandomInitDBOptions(&base_opts, &rnd);
|
|
1499
|
+
ImmutableDBOptions i_opts(base_opts);
|
|
1500
|
+
MutableDBOptions m_opts(base_opts);
|
|
1501
|
+
MutableDBOptions new_opts;
|
|
1502
|
+
ASSERT_OK(GetStringFromMutableDBOptions(config_options, m_opts, &opts_str));
|
|
1503
|
+
ASSERT_OK(StringToMap(opts_str, &opts_map));
|
|
1504
|
+
ASSERT_OK(GetMutableDBOptionsFromStrings(m_opts, opts_map, &new_opts));
|
|
1505
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyDBOptions(
|
|
1506
|
+
config_options, base_opts, BuildDBOptions(i_opts, new_opts)));
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
TEST_F(OptionsTest, CFOptionsComposeImmutable) {
|
|
1510
|
+
// Build a DBOptions from an Immutable/Mutable one and verify that
|
|
1511
|
+
// we get same constituent options.
|
|
1512
|
+
ConfigOptions config_options;
|
|
1513
|
+
Random rnd(301);
|
|
1514
|
+
ColumnFamilyOptions base_opts, new_opts;
|
|
1515
|
+
DBOptions dummy; // Needed to create ImmutableCFOptions
|
|
1516
|
+
test::RandomInitCFOptions(&base_opts, dummy, &rnd);
|
|
1517
|
+
MutableCFOptions m_opts(base_opts);
|
|
1518
|
+
ImmutableCFOptions i_opts(base_opts);
|
|
1519
|
+
UpdateColumnFamilyOptions(i_opts, &new_opts);
|
|
1520
|
+
UpdateColumnFamilyOptions(m_opts, &new_opts);
|
|
1521
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyCFOptions(config_options, base_opts,
|
|
1522
|
+
new_opts));
|
|
1523
|
+
delete new_opts.compaction_filter;
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
TEST_F(OptionsTest, GetMutableCFOptions) {
|
|
1527
|
+
Random rnd(228);
|
|
1528
|
+
ColumnFamilyOptions base, copy;
|
|
1529
|
+
std::string opts_str;
|
|
1530
|
+
std::unordered_map<std::string, std::string> opts_map;
|
|
1531
|
+
ConfigOptions config_options;
|
|
1532
|
+
DBOptions dummy; // Needed to create ImmutableCFOptions
|
|
1533
|
+
|
|
1534
|
+
test::RandomInitCFOptions(&base, dummy, &rnd);
|
|
1535
|
+
ColumnFamilyOptions result;
|
|
1536
|
+
MutableCFOptions m_opts(base), new_opts;
|
|
1537
|
+
|
|
1538
|
+
ASSERT_OK(GetStringFromMutableCFOptions(config_options, m_opts, &opts_str));
|
|
1539
|
+
ASSERT_OK(StringToMap(opts_str, &opts_map));
|
|
1540
|
+
ASSERT_OK(GetMutableOptionsFromStrings(m_opts, opts_map, nullptr, &new_opts));
|
|
1541
|
+
UpdateColumnFamilyOptions(ImmutableCFOptions(base), ©);
|
|
1542
|
+
UpdateColumnFamilyOptions(new_opts, ©);
|
|
1543
|
+
|
|
1544
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyCFOptions(config_options, base, copy));
|
|
1545
|
+
delete copy.compaction_filter;
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1295
1548
|
TEST_F(OptionsTest, ColumnFamilyOptionsSerialization) {
|
|
1296
1549
|
Options options;
|
|
1297
1550
|
ColumnFamilyOptions base_opt, new_opt;
|
|
@@ -1364,13 +1617,12 @@ TEST_F(OptionsTest, MutableTableOptions) {
|
|
|
1364
1617
|
bbtf.reset(NewBlockBasedTableFactory());
|
|
1365
1618
|
auto bbto = bbtf->GetOptions<BlockBasedTableOptions>();
|
|
1366
1619
|
ASSERT_NE(bbto, nullptr);
|
|
1367
|
-
ASSERT_FALSE(bbtf->IsPrepared());
|
|
1368
1620
|
ASSERT_OK(bbtf->ConfigureOption(config_options, "block_align", "true"));
|
|
1369
1621
|
ASSERT_OK(bbtf->ConfigureOption(config_options, "block_size", "1024"));
|
|
1370
1622
|
ASSERT_EQ(bbto->block_align, true);
|
|
1371
1623
|
ASSERT_EQ(bbto->block_size, 1024);
|
|
1372
1624
|
ASSERT_OK(bbtf->PrepareOptions(config_options));
|
|
1373
|
-
|
|
1625
|
+
config_options.mutable_options_only = true;
|
|
1374
1626
|
ASSERT_OK(bbtf->ConfigureOption(config_options, "block_size", "1024"));
|
|
1375
1627
|
ASSERT_EQ(bbto->block_align, true);
|
|
1376
1628
|
ASSERT_NOK(bbtf->ConfigureOption(config_options, "block_align", "false"));
|
|
@@ -1390,6 +1642,79 @@ TEST_F(OptionsTest, MutableTableOptions) {
|
|
|
1390
1642
|
ASSERT_EQ(bbto->block_size, 8192);
|
|
1391
1643
|
}
|
|
1392
1644
|
|
|
1645
|
+
TEST_F(OptionsTest, MutableCFOptions) {
|
|
1646
|
+
ConfigOptions config_options;
|
|
1647
|
+
ColumnFamilyOptions cf_opts;
|
|
1648
|
+
|
|
1649
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
1650
|
+
config_options, cf_opts,
|
|
1651
|
+
"paranoid_file_checks=true; block_based_table_factory.block_align=false; "
|
|
1652
|
+
"block_based_table_factory.block_size=8192;",
|
|
1653
|
+
&cf_opts));
|
|
1654
|
+
ASSERT_TRUE(cf_opts.paranoid_file_checks);
|
|
1655
|
+
ASSERT_NE(cf_opts.table_factory.get(), nullptr);
|
|
1656
|
+
const auto bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1657
|
+
ASSERT_NE(bbto, nullptr);
|
|
1658
|
+
ASSERT_EQ(bbto->block_size, 8192);
|
|
1659
|
+
ASSERT_EQ(bbto->block_align, false);
|
|
1660
|
+
std::unordered_map<std::string, std::string> unused_opts;
|
|
1661
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1662
|
+
config_options, cf_opts, {{"paranoid_file_checks", "false"}}, &cf_opts));
|
|
1663
|
+
ASSERT_EQ(cf_opts.paranoid_file_checks, false);
|
|
1664
|
+
|
|
1665
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1666
|
+
config_options, cf_opts,
|
|
1667
|
+
{{"block_based_table_factory.block_size", "16384"}}, &cf_opts));
|
|
1668
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1669
|
+
ASSERT_EQ(bbto->block_size, 16384);
|
|
1670
|
+
|
|
1671
|
+
config_options.mutable_options_only = true;
|
|
1672
|
+
// Force consistency checks is not mutable
|
|
1673
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1674
|
+
config_options, cf_opts, {{"force_consistency_checks", "true"}},
|
|
1675
|
+
&cf_opts));
|
|
1676
|
+
|
|
1677
|
+
// Attempt to change the table. It is not mutable, so this should fail and
|
|
1678
|
+
// leave the original intact
|
|
1679
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1680
|
+
config_options, cf_opts, {{"table_factory", "PlainTable"}}, &cf_opts));
|
|
1681
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1682
|
+
config_options, cf_opts, {{"table_factory.id", "PlainTable"}}, &cf_opts));
|
|
1683
|
+
ASSERT_NE(cf_opts.table_factory.get(), nullptr);
|
|
1684
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1685
|
+
|
|
1686
|
+
// Change the block size. Should update the value in the current table
|
|
1687
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1688
|
+
config_options, cf_opts,
|
|
1689
|
+
{{"block_based_table_factory.block_size", "8192"}}, &cf_opts));
|
|
1690
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1691
|
+
ASSERT_EQ(bbto->block_size, 8192);
|
|
1692
|
+
|
|
1693
|
+
// Attempt to turn off block cache fails, as this option is not mutable
|
|
1694
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1695
|
+
config_options, cf_opts,
|
|
1696
|
+
{{"block_based_table_factory.no_block_cache", "true"}}, &cf_opts));
|
|
1697
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1698
|
+
|
|
1699
|
+
// Attempt to change the block size via a config string/map. Should update
|
|
1700
|
+
// the current value
|
|
1701
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1702
|
+
config_options, cf_opts,
|
|
1703
|
+
{{"block_based_table_factory", "{block_size=32768}"}}, &cf_opts));
|
|
1704
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1705
|
+
ASSERT_EQ(bbto->block_size, 32768);
|
|
1706
|
+
|
|
1707
|
+
// Attempt to change the block size and no cache through the map. Should
|
|
1708
|
+
// fail, leaving the old values intact
|
|
1709
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1710
|
+
config_options, cf_opts,
|
|
1711
|
+
{{"block_based_table_factory",
|
|
1712
|
+
"{block_size=16384; no_block_cache=true}"}},
|
|
1713
|
+
&cf_opts));
|
|
1714
|
+
ASSERT_EQ(bbto, cf_opts.table_factory->GetOptions<BlockBasedTableOptions>());
|
|
1715
|
+
ASSERT_EQ(bbto->block_size, 32768);
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1393
1718
|
#endif // !ROCKSDB_LITE
|
|
1394
1719
|
|
|
1395
1720
|
Status StringToMap(
|
|
@@ -1582,6 +1907,230 @@ TEST_F(OptionsTest, GetStringFromCompressionType) {
|
|
|
1582
1907
|
ASSERT_NOK(
|
|
1583
1908
|
GetStringFromCompressionType(&res, static_cast<CompressionType>(-10)));
|
|
1584
1909
|
}
|
|
1910
|
+
|
|
1911
|
+
TEST_F(OptionsTest, OnlyMutableDBOptions) {
|
|
1912
|
+
std::string opt_str;
|
|
1913
|
+
Random rnd(302);
|
|
1914
|
+
ConfigOptions cfg_opts;
|
|
1915
|
+
DBOptions db_opts;
|
|
1916
|
+
DBOptions mdb_opts;
|
|
1917
|
+
std::unordered_set<std::string> m_names;
|
|
1918
|
+
std::unordered_set<std::string> a_names;
|
|
1919
|
+
|
|
1920
|
+
test::RandomInitDBOptions(&db_opts, &rnd);
|
|
1921
|
+
auto db_config = DBOptionsAsConfigurable(db_opts);
|
|
1922
|
+
|
|
1923
|
+
// Get all of the DB Option names (mutable or not)
|
|
1924
|
+
ASSERT_OK(db_config->GetOptionNames(cfg_opts, &a_names));
|
|
1925
|
+
|
|
1926
|
+
// Get only the mutable options from db_opts and set those in mdb_opts
|
|
1927
|
+
cfg_opts.mutable_options_only = true;
|
|
1928
|
+
|
|
1929
|
+
// Get only the Mutable DB Option names
|
|
1930
|
+
ASSERT_OK(db_config->GetOptionNames(cfg_opts, &m_names));
|
|
1931
|
+
ASSERT_OK(GetStringFromDBOptions(cfg_opts, db_opts, &opt_str));
|
|
1932
|
+
ASSERT_OK(GetDBOptionsFromString(cfg_opts, mdb_opts, opt_str, &mdb_opts));
|
|
1933
|
+
std::string mismatch;
|
|
1934
|
+
// Comparing only the mutable options, the two are equivalent
|
|
1935
|
+
auto mdb_config = DBOptionsAsConfigurable(mdb_opts);
|
|
1936
|
+
ASSERT_TRUE(mdb_config->AreEquivalent(cfg_opts, db_config.get(), &mismatch));
|
|
1937
|
+
ASSERT_TRUE(db_config->AreEquivalent(cfg_opts, mdb_config.get(), &mismatch));
|
|
1938
|
+
|
|
1939
|
+
ASSERT_GT(a_names.size(), m_names.size());
|
|
1940
|
+
for (const auto& n : m_names) {
|
|
1941
|
+
std::string m, d;
|
|
1942
|
+
ASSERT_OK(mdb_config->GetOption(cfg_opts, n, &m));
|
|
1943
|
+
ASSERT_OK(db_config->GetOption(cfg_opts, n, &d));
|
|
1944
|
+
ASSERT_EQ(m, d);
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
cfg_opts.mutable_options_only = false;
|
|
1948
|
+
// Comparing all of the options, the two are not equivalent
|
|
1949
|
+
ASSERT_FALSE(mdb_config->AreEquivalent(cfg_opts, db_config.get(), &mismatch));
|
|
1950
|
+
ASSERT_FALSE(db_config->AreEquivalent(cfg_opts, mdb_config.get(), &mismatch));
|
|
1951
|
+
|
|
1952
|
+
// Make sure there are only mutable options being configured
|
|
1953
|
+
ASSERT_OK(GetDBOptionsFromString(cfg_opts, DBOptions(), opt_str, &db_opts));
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
TEST_F(OptionsTest, OnlyMutableCFOptions) {
|
|
1957
|
+
std::string opt_str;
|
|
1958
|
+
Random rnd(302);
|
|
1959
|
+
ConfigOptions cfg_opts;
|
|
1960
|
+
DBOptions db_opts;
|
|
1961
|
+
ColumnFamilyOptions mcf_opts;
|
|
1962
|
+
ColumnFamilyOptions cf_opts;
|
|
1963
|
+
std::unordered_set<std::string> m_names;
|
|
1964
|
+
std::unordered_set<std::string> a_names;
|
|
1965
|
+
|
|
1966
|
+
test::RandomInitCFOptions(&cf_opts, db_opts, &rnd);
|
|
1967
|
+
cf_opts.comparator = ReverseBytewiseComparator();
|
|
1968
|
+
auto cf_config = CFOptionsAsConfigurable(cf_opts);
|
|
1969
|
+
|
|
1970
|
+
// Get all of the CF Option names (mutable or not)
|
|
1971
|
+
ASSERT_OK(cf_config->GetOptionNames(cfg_opts, &a_names));
|
|
1972
|
+
|
|
1973
|
+
// Get only the mutable options from cf_opts and set those in mcf_opts
|
|
1974
|
+
cfg_opts.mutable_options_only = true;
|
|
1975
|
+
// Get only the Mutable CF Option names
|
|
1976
|
+
ASSERT_OK(cf_config->GetOptionNames(cfg_opts, &m_names));
|
|
1977
|
+
ASSERT_OK(GetStringFromColumnFamilyOptions(cfg_opts, cf_opts, &opt_str));
|
|
1978
|
+
ASSERT_OK(
|
|
1979
|
+
GetColumnFamilyOptionsFromString(cfg_opts, mcf_opts, opt_str, &mcf_opts));
|
|
1980
|
+
std::string mismatch;
|
|
1981
|
+
|
|
1982
|
+
auto mcf_config = CFOptionsAsConfigurable(mcf_opts);
|
|
1983
|
+
// Comparing only the mutable options, the two are equivalent
|
|
1984
|
+
ASSERT_TRUE(mcf_config->AreEquivalent(cfg_opts, cf_config.get(), &mismatch));
|
|
1985
|
+
ASSERT_TRUE(cf_config->AreEquivalent(cfg_opts, mcf_config.get(), &mismatch));
|
|
1986
|
+
|
|
1987
|
+
ASSERT_GT(a_names.size(), m_names.size());
|
|
1988
|
+
for (const auto& n : m_names) {
|
|
1989
|
+
std::string m, d;
|
|
1990
|
+
ASSERT_OK(mcf_config->GetOption(cfg_opts, n, &m));
|
|
1991
|
+
ASSERT_OK(cf_config->GetOption(cfg_opts, n, &d));
|
|
1992
|
+
ASSERT_EQ(m, d);
|
|
1993
|
+
}
|
|
1994
|
+
|
|
1995
|
+
cfg_opts.mutable_options_only = false;
|
|
1996
|
+
// Comparing all of the options, the two are not equivalent
|
|
1997
|
+
ASSERT_FALSE(mcf_config->AreEquivalent(cfg_opts, cf_config.get(), &mismatch));
|
|
1998
|
+
ASSERT_FALSE(cf_config->AreEquivalent(cfg_opts, mcf_config.get(), &mismatch));
|
|
1999
|
+
delete cf_opts.compaction_filter;
|
|
2000
|
+
|
|
2001
|
+
// Make sure the options string contains only mutable options
|
|
2002
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(cfg_opts, ColumnFamilyOptions(),
|
|
2003
|
+
opt_str, &cf_opts));
|
|
2004
|
+
delete cf_opts.compaction_filter;
|
|
2005
|
+
}
|
|
2006
|
+
|
|
2007
|
+
TEST_F(OptionsTest, SstPartitionerTest) {
|
|
2008
|
+
ConfigOptions cfg_opts;
|
|
2009
|
+
ColumnFamilyOptions cf_opts, new_opt;
|
|
2010
|
+
std::string opts_str, mismatch;
|
|
2011
|
+
|
|
2012
|
+
ASSERT_OK(SstPartitionerFactory::CreateFromString(
|
|
2013
|
+
cfg_opts, SstPartitionerFixedPrefixFactory::kClassName(),
|
|
2014
|
+
&cf_opts.sst_partitioner_factory));
|
|
2015
|
+
ASSERT_NE(cf_opts.sst_partitioner_factory, nullptr);
|
|
2016
|
+
ASSERT_STREQ(cf_opts.sst_partitioner_factory->Name(),
|
|
2017
|
+
SstPartitionerFixedPrefixFactory::kClassName());
|
|
2018
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromString(
|
|
2019
|
+
cfg_opts, ColumnFamilyOptions(),
|
|
2020
|
+
std::string("sst_partitioner_factory={id=") +
|
|
2021
|
+
SstPartitionerFixedPrefixFactory::kClassName() + "; unknown=10;}",
|
|
2022
|
+
&cf_opts));
|
|
2023
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
2024
|
+
cfg_opts, ColumnFamilyOptions(),
|
|
2025
|
+
std::string("sst_partitioner_factory={id=") +
|
|
2026
|
+
SstPartitionerFixedPrefixFactory::kClassName() + "; length=10;}",
|
|
2027
|
+
&cf_opts));
|
|
2028
|
+
ASSERT_NE(cf_opts.sst_partitioner_factory, nullptr);
|
|
2029
|
+
ASSERT_STREQ(cf_opts.sst_partitioner_factory->Name(),
|
|
2030
|
+
SstPartitionerFixedPrefixFactory::kClassName());
|
|
2031
|
+
ASSERT_OK(GetStringFromColumnFamilyOptions(cfg_opts, cf_opts, &opts_str));
|
|
2032
|
+
ASSERT_OK(
|
|
2033
|
+
GetColumnFamilyOptionsFromString(cfg_opts, cf_opts, opts_str, &new_opt));
|
|
2034
|
+
ASSERT_NE(new_opt.sst_partitioner_factory, nullptr);
|
|
2035
|
+
ASSERT_STREQ(new_opt.sst_partitioner_factory->Name(),
|
|
2036
|
+
SstPartitionerFixedPrefixFactory::kClassName());
|
|
2037
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyCFOptions(cfg_opts, cf_opts, new_opt));
|
|
2038
|
+
ASSERT_TRUE(cf_opts.sst_partitioner_factory->AreEquivalent(
|
|
2039
|
+
cfg_opts, new_opt.sst_partitioner_factory.get(), &mismatch));
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
TEST_F(OptionsTest, FileChecksumGenFactoryTest) {
|
|
2043
|
+
ConfigOptions cfg_opts;
|
|
2044
|
+
DBOptions db_opts, new_opt;
|
|
2045
|
+
std::string opts_str, mismatch;
|
|
2046
|
+
auto factory = GetFileChecksumGenCrc32cFactory();
|
|
2047
|
+
|
|
2048
|
+
cfg_opts.ignore_unsupported_options = false;
|
|
2049
|
+
|
|
2050
|
+
ASSERT_OK(GetStringFromDBOptions(cfg_opts, db_opts, &opts_str));
|
|
2051
|
+
ASSERT_OK(GetDBOptionsFromString(cfg_opts, db_opts, opts_str, &new_opt));
|
|
2052
|
+
|
|
2053
|
+
ASSERT_NE(factory, nullptr);
|
|
2054
|
+
ASSERT_OK(FileChecksumGenFactory::CreateFromString(
|
|
2055
|
+
cfg_opts, factory->Name(), &db_opts.file_checksum_gen_factory));
|
|
2056
|
+
ASSERT_NE(db_opts.file_checksum_gen_factory, nullptr);
|
|
2057
|
+
ASSERT_STREQ(db_opts.file_checksum_gen_factory->Name(), factory->Name());
|
|
2058
|
+
ASSERT_NOK(GetDBOptionsFromString(
|
|
2059
|
+
cfg_opts, DBOptions(), "file_checksum_gen_factory=unknown", &db_opts));
|
|
2060
|
+
ASSERT_OK(GetDBOptionsFromString(
|
|
2061
|
+
cfg_opts, DBOptions(),
|
|
2062
|
+
std::string("file_checksum_gen_factory=") + factory->Name(), &db_opts));
|
|
2063
|
+
ASSERT_NE(db_opts.file_checksum_gen_factory, nullptr);
|
|
2064
|
+
ASSERT_STREQ(db_opts.file_checksum_gen_factory->Name(), factory->Name());
|
|
2065
|
+
|
|
2066
|
+
ASSERT_OK(GetStringFromDBOptions(cfg_opts, db_opts, &opts_str));
|
|
2067
|
+
ASSERT_OK(GetDBOptionsFromString(cfg_opts, db_opts, opts_str, &new_opt));
|
|
2068
|
+
ASSERT_NE(new_opt.file_checksum_gen_factory, nullptr);
|
|
2069
|
+
ASSERT_STREQ(new_opt.file_checksum_gen_factory->Name(), factory->Name());
|
|
2070
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyDBOptions(cfg_opts, db_opts, new_opt));
|
|
2071
|
+
ASSERT_TRUE(factory->AreEquivalent(
|
|
2072
|
+
cfg_opts, new_opt.file_checksum_gen_factory.get(), &mismatch));
|
|
2073
|
+
ASSERT_TRUE(db_opts.file_checksum_gen_factory->AreEquivalent(
|
|
2074
|
+
cfg_opts, new_opt.file_checksum_gen_factory.get(), &mismatch));
|
|
2075
|
+
}
|
|
2076
|
+
|
|
2077
|
+
class TestTablePropertiesCollectorFactory
|
|
2078
|
+
: public TablePropertiesCollectorFactory {
|
|
2079
|
+
private:
|
|
2080
|
+
std::string id_;
|
|
2081
|
+
|
|
2082
|
+
public:
|
|
2083
|
+
explicit TestTablePropertiesCollectorFactory(const std::string& id)
|
|
2084
|
+
: id_(id) {}
|
|
2085
|
+
TablePropertiesCollector* CreateTablePropertiesCollector(
|
|
2086
|
+
TablePropertiesCollectorFactory::Context /*context*/) override {
|
|
2087
|
+
return nullptr;
|
|
2088
|
+
}
|
|
2089
|
+
static const char* kClassName() { return "TestCollector"; }
|
|
2090
|
+
const char* Name() const override { return kClassName(); }
|
|
2091
|
+
std::string GetId() const override {
|
|
2092
|
+
return std::string(kClassName()) + ":" + id_;
|
|
2093
|
+
}
|
|
2094
|
+
};
|
|
2095
|
+
|
|
2096
|
+
TEST_F(OptionsTest, OptionTablePropertiesTest) {
|
|
2097
|
+
ConfigOptions cfg_opts;
|
|
2098
|
+
ColumnFamilyOptions orig, copy;
|
|
2099
|
+
orig.table_properties_collector_factories.push_back(
|
|
2100
|
+
std::make_shared<TestTablePropertiesCollectorFactory>("1"));
|
|
2101
|
+
orig.table_properties_collector_factories.push_back(
|
|
2102
|
+
std::make_shared<TestTablePropertiesCollectorFactory>("2"));
|
|
2103
|
+
|
|
2104
|
+
// Push two TablePropertiesCollectorFactories then create a new
|
|
2105
|
+
// ColumnFamilyOptions based on those settings. The copy should
|
|
2106
|
+
// have no properties but still match the original
|
|
2107
|
+
std::string opts_str;
|
|
2108
|
+
ASSERT_OK(GetStringFromColumnFamilyOptions(cfg_opts, orig, &opts_str));
|
|
2109
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(cfg_opts, orig, opts_str, ©));
|
|
2110
|
+
ASSERT_EQ(copy.table_properties_collector_factories.size(), 0);
|
|
2111
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyCFOptions(cfg_opts, orig, copy));
|
|
2112
|
+
|
|
2113
|
+
// Now register a TablePropertiesCollectorFactory
|
|
2114
|
+
// Repeat the experiment. The copy should have the same
|
|
2115
|
+
// properties as the original
|
|
2116
|
+
cfg_opts.registry->AddLibrary("collector")
|
|
2117
|
+
->AddFactory<TablePropertiesCollectorFactory>(
|
|
2118
|
+
ObjectLibrary::PatternEntry(
|
|
2119
|
+
TestTablePropertiesCollectorFactory::kClassName(), false)
|
|
2120
|
+
.AddSeparator(":"),
|
|
2121
|
+
[](const std::string& name,
|
|
2122
|
+
std::unique_ptr<TablePropertiesCollectorFactory>* guard,
|
|
2123
|
+
std::string* /* errmsg */) {
|
|
2124
|
+
std::string id = name.substr(
|
|
2125
|
+
strlen(TestTablePropertiesCollectorFactory::kClassName()) + 1);
|
|
2126
|
+
guard->reset(new TestTablePropertiesCollectorFactory(id));
|
|
2127
|
+
return guard->get();
|
|
2128
|
+
});
|
|
2129
|
+
|
|
2130
|
+
ASSERT_OK(GetColumnFamilyOptionsFromString(cfg_opts, orig, opts_str, ©));
|
|
2131
|
+
ASSERT_EQ(copy.table_properties_collector_factories.size(), 2);
|
|
2132
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyCFOptions(cfg_opts, orig, copy));
|
|
2133
|
+
}
|
|
1585
2134
|
#endif // !ROCKSDB_LITE
|
|
1586
2135
|
|
|
1587
2136
|
TEST_F(OptionsTest, ConvertOptionsTest) {
|
|
@@ -1607,8 +2156,89 @@ TEST_F(OptionsTest, ConvertOptionsTest) {
|
|
|
1607
2156
|
leveldb_opt.block_restart_interval);
|
|
1608
2157
|
ASSERT_EQ(table_opt->filter_policy.get(), leveldb_opt.filter_policy);
|
|
1609
2158
|
}
|
|
2159
|
+
#ifndef ROCKSDB_LITE
|
|
2160
|
+
class TestEventListener : public EventListener {
|
|
2161
|
+
private:
|
|
2162
|
+
std::string id_;
|
|
2163
|
+
|
|
2164
|
+
public:
|
|
2165
|
+
explicit TestEventListener(const std::string& id) : id_("Test" + id) {}
|
|
2166
|
+
const char* Name() const override { return id_.c_str(); }
|
|
2167
|
+
};
|
|
2168
|
+
|
|
2169
|
+
static std::unordered_map<std::string, OptionTypeInfo>
|
|
2170
|
+
test_listener_option_info = {
|
|
2171
|
+
{"s",
|
|
2172
|
+
{0, OptionType::kString, OptionVerificationType::kNormal,
|
|
2173
|
+
OptionTypeFlags::kNone}},
|
|
2174
|
+
|
|
2175
|
+
};
|
|
2176
|
+
|
|
2177
|
+
class TestConfigEventListener : public TestEventListener {
|
|
2178
|
+
private:
|
|
2179
|
+
std::string s_;
|
|
2180
|
+
|
|
2181
|
+
public:
|
|
2182
|
+
explicit TestConfigEventListener(const std::string& id)
|
|
2183
|
+
: TestEventListener("Config" + id) {
|
|
2184
|
+
s_ = id;
|
|
2185
|
+
RegisterOptions("Test", &s_, &test_listener_option_info);
|
|
2186
|
+
}
|
|
2187
|
+
};
|
|
2188
|
+
|
|
2189
|
+
static int RegisterTestEventListener(ObjectLibrary& library,
|
|
2190
|
+
const std::string& arg) {
|
|
2191
|
+
library.AddFactory<EventListener>(
|
|
2192
|
+
"Test" + arg,
|
|
2193
|
+
[](const std::string& name, std::unique_ptr<EventListener>* guard,
|
|
2194
|
+
std::string* /* errmsg */) {
|
|
2195
|
+
guard->reset(new TestEventListener(name.substr(4)));
|
|
2196
|
+
return guard->get();
|
|
2197
|
+
});
|
|
2198
|
+
library.AddFactory<EventListener>(
|
|
2199
|
+
"TestConfig" + arg,
|
|
2200
|
+
[](const std::string& name, std::unique_ptr<EventListener>* guard,
|
|
2201
|
+
std::string* /* errmsg */) {
|
|
2202
|
+
guard->reset(new TestConfigEventListener(name.substr(10)));
|
|
2203
|
+
return guard->get();
|
|
2204
|
+
});
|
|
2205
|
+
return 1;
|
|
2206
|
+
}
|
|
2207
|
+
TEST_F(OptionsTest, OptionsListenerTest) {
|
|
2208
|
+
DBOptions orig, copy;
|
|
2209
|
+
orig.listeners.push_back(std::make_shared<TestEventListener>("1"));
|
|
2210
|
+
orig.listeners.push_back(std::make_shared<TestEventListener>("2"));
|
|
2211
|
+
orig.listeners.push_back(std::make_shared<TestEventListener>(""));
|
|
2212
|
+
orig.listeners.push_back(std::make_shared<TestConfigEventListener>("1"));
|
|
2213
|
+
orig.listeners.push_back(std::make_shared<TestConfigEventListener>("2"));
|
|
2214
|
+
orig.listeners.push_back(std::make_shared<TestConfigEventListener>(""));
|
|
2215
|
+
ConfigOptions config_opts(orig);
|
|
2216
|
+
config_opts.registry->AddLibrary("listener", RegisterTestEventListener, "1");
|
|
2217
|
+
std::string opts_str;
|
|
2218
|
+
ASSERT_OK(GetStringFromDBOptions(config_opts, orig, &opts_str));
|
|
2219
|
+
ASSERT_OK(GetDBOptionsFromString(config_opts, orig, opts_str, ©));
|
|
2220
|
+
ASSERT_OK(GetStringFromDBOptions(config_opts, copy, &opts_str));
|
|
2221
|
+
ASSERT_EQ(
|
|
2222
|
+
copy.listeners.size(),
|
|
2223
|
+
2); // The Test{Config}1 Listeners could be loaded but not the others
|
|
2224
|
+
ASSERT_OK(RocksDBOptionsParser::VerifyDBOptions(config_opts, orig, copy));
|
|
2225
|
+
}
|
|
2226
|
+
#endif // ROCKSDB_LITE
|
|
1610
2227
|
|
|
1611
2228
|
#ifndef ROCKSDB_LITE
|
|
2229
|
+
const static std::string kCustomEnvName = "Custom";
|
|
2230
|
+
const static std::string kCustomEnvProp = "env=" + kCustomEnvName;
|
|
2231
|
+
|
|
2232
|
+
static int RegisterCustomEnv(ObjectLibrary& library, const std::string& arg) {
|
|
2233
|
+
library.AddFactory<Env>(
|
|
2234
|
+
arg, [](const std::string& /*name*/, std::unique_ptr<Env>* /*env_guard*/,
|
|
2235
|
+
std::string* /* errmsg */) {
|
|
2236
|
+
static CustomEnv env(Env::Default());
|
|
2237
|
+
return &env;
|
|
2238
|
+
});
|
|
2239
|
+
return 1;
|
|
2240
|
+
}
|
|
2241
|
+
|
|
1612
2242
|
// This test suite tests the old APIs into the Configure options methods.
|
|
1613
2243
|
// Once those APIs are officially deprecated, this test suite can be deleted.
|
|
1614
2244
|
class OptionsOldApiTest : public testing::Test {};
|
|
@@ -1647,6 +2277,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1647
2277
|
{"max_compaction_bytes", "21"},
|
|
1648
2278
|
{"soft_rate_limit", "1.1"},
|
|
1649
2279
|
{"hard_rate_limit", "2.1"},
|
|
2280
|
+
{"rate_limit_delay_max_milliseconds", "100"},
|
|
1650
2281
|
{"hard_pending_compaction_bytes_limit", "211"},
|
|
1651
2282
|
{"arena_block_size", "22"},
|
|
1652
2283
|
{"disable_auto_compactions", "true"},
|
|
@@ -1658,6 +2289,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1658
2289
|
{"inplace_update_support", "true"},
|
|
1659
2290
|
{"report_bg_io_stats", "true"},
|
|
1660
2291
|
{"compaction_measure_io_stats", "false"},
|
|
2292
|
+
{"purge_redundant_kvs_while_flush", "false"},
|
|
1661
2293
|
{"inplace_update_num_locks", "25"},
|
|
1662
2294
|
{"memtable_prefix_bloom_size_ratio", "0.26"},
|
|
1663
2295
|
{"memtable_whole_key_filtering", "true"},
|
|
@@ -1673,6 +2305,9 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1673
2305
|
{"blob_compression_type", "kZSTD"},
|
|
1674
2306
|
{"enable_blob_garbage_collection", "true"},
|
|
1675
2307
|
{"blob_garbage_collection_age_cutoff", "0.5"},
|
|
2308
|
+
{"blob_garbage_collection_force_threshold", "0.75"},
|
|
2309
|
+
{"blob_compaction_readahead_size", "256K"},
|
|
2310
|
+
{"bottommost_temperature", "kWarm"},
|
|
1676
2311
|
};
|
|
1677
2312
|
|
|
1678
2313
|
std::unordered_map<std::string, std::string> db_options_map = {
|
|
@@ -1709,14 +2344,15 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1709
2344
|
{"persist_stats_to_disk", "false"},
|
|
1710
2345
|
{"stats_history_buffer_size", "69"},
|
|
1711
2346
|
{"advise_random_on_open", "true"},
|
|
2347
|
+
{"experimental_mempurge_threshold", "0.0"},
|
|
1712
2348
|
{"use_adaptive_mutex", "false"},
|
|
1713
|
-
{"new_table_reader_for_compaction_inputs", "true"},
|
|
1714
2349
|
{"compaction_readahead_size", "100"},
|
|
1715
2350
|
{"random_access_max_buffer_size", "3145728"},
|
|
1716
2351
|
{"writable_file_max_buffer_size", "314159"},
|
|
1717
2352
|
{"bytes_per_sync", "47"},
|
|
1718
2353
|
{"wal_bytes_per_sync", "48"},
|
|
1719
2354
|
{"strict_bytes_per_sync", "true"},
|
|
2355
|
+
{"preserve_deletes", "false"},
|
|
1720
2356
|
};
|
|
1721
2357
|
|
|
1722
2358
|
ColumnFamilyOptions base_cf_opt;
|
|
@@ -1788,14 +2424,16 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1788
2424
|
ASSERT_EQ(new_cf_opt.max_successive_merges, 30U);
|
|
1789
2425
|
ASSERT_TRUE(new_cf_opt.prefix_extractor != nullptr);
|
|
1790
2426
|
ASSERT_EQ(new_cf_opt.optimize_filters_for_hits, true);
|
|
1791
|
-
ASSERT_EQ(
|
|
1792
|
-
"rocksdb.FixedPrefix.31");
|
|
2427
|
+
ASSERT_EQ(new_cf_opt.prefix_extractor->AsString(), "rocksdb.FixedPrefix.31");
|
|
1793
2428
|
ASSERT_EQ(new_cf_opt.enable_blob_files, true);
|
|
1794
2429
|
ASSERT_EQ(new_cf_opt.min_blob_size, 1ULL << 10);
|
|
1795
2430
|
ASSERT_EQ(new_cf_opt.blob_file_size, 1ULL << 30);
|
|
1796
2431
|
ASSERT_EQ(new_cf_opt.blob_compression_type, kZSTD);
|
|
1797
2432
|
ASSERT_EQ(new_cf_opt.enable_blob_garbage_collection, true);
|
|
1798
2433
|
ASSERT_EQ(new_cf_opt.blob_garbage_collection_age_cutoff, 0.5);
|
|
2434
|
+
ASSERT_EQ(new_cf_opt.blob_garbage_collection_force_threshold, 0.75);
|
|
2435
|
+
ASSERT_EQ(new_cf_opt.blob_compaction_readahead_size, 262144);
|
|
2436
|
+
ASSERT_EQ(new_cf_opt.bottommost_temperature, Temperature::kWarm);
|
|
1799
2437
|
|
|
1800
2438
|
cf_options_map["write_buffer_size"] = "hello";
|
|
1801
2439
|
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
@@ -1855,14 +2493,13 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
|
|
|
1855
2493
|
ASSERT_EQ(new_db_opt.use_direct_reads, false);
|
|
1856
2494
|
ASSERT_EQ(new_db_opt.use_direct_io_for_flush_and_compaction, false);
|
|
1857
2495
|
ASSERT_EQ(new_db_opt.is_fd_close_on_exec, true);
|
|
1858
|
-
ASSERT_EQ(new_db_opt.skip_log_error_on_recovery, false);
|
|
1859
2496
|
ASSERT_EQ(new_db_opt.stats_dump_period_sec, 46U);
|
|
1860
2497
|
ASSERT_EQ(new_db_opt.stats_persist_period_sec, 57U);
|
|
1861
2498
|
ASSERT_EQ(new_db_opt.persist_stats_to_disk, false);
|
|
1862
2499
|
ASSERT_EQ(new_db_opt.stats_history_buffer_size, 69U);
|
|
1863
2500
|
ASSERT_EQ(new_db_opt.advise_random_on_open, true);
|
|
2501
|
+
ASSERT_EQ(new_db_opt.experimental_mempurge_threshold, 0.0);
|
|
1864
2502
|
ASSERT_EQ(new_db_opt.use_adaptive_mutex, false);
|
|
1865
|
-
ASSERT_EQ(new_db_opt.new_table_reader_for_compaction_inputs, true);
|
|
1866
2503
|
ASSERT_EQ(new_db_opt.compaction_readahead_size, 100);
|
|
1867
2504
|
ASSERT_EQ(new_db_opt.random_access_max_buffer_size, 3145728);
|
|
1868
2505
|
ASSERT_EQ(new_db_opt.writable_file_max_buffer_size, 314159);
|
|
@@ -1924,7 +2561,7 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
1924
2561
|
|
|
1925
2562
|
// Comparator from object registry
|
|
1926
2563
|
std::string kCompName = "reverse_comp";
|
|
1927
|
-
ObjectLibrary::Default()->
|
|
2564
|
+
ObjectLibrary::Default()->AddFactory<const Comparator>(
|
|
1928
2565
|
kCompName,
|
|
1929
2566
|
[](const std::string& /*name*/,
|
|
1930
2567
|
std::unique_ptr<const Comparator>* /*guard*/,
|
|
@@ -1937,14 +2574,6 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
1937
2574
|
// MergeOperator from object registry
|
|
1938
2575
|
std::unique_ptr<BytesXOROperator> bxo(new BytesXOROperator());
|
|
1939
2576
|
std::string kMoName = bxo->Name();
|
|
1940
|
-
ObjectLibrary::Default()->Register<MergeOperator>(
|
|
1941
|
-
kMoName,
|
|
1942
|
-
[](const std::string& /*name*/, std::unique_ptr<MergeOperator>* guard,
|
|
1943
|
-
std::string* /* errmsg */) {
|
|
1944
|
-
guard->reset(new BytesXOROperator());
|
|
1945
|
-
return guard->get();
|
|
1946
|
-
});
|
|
1947
|
-
|
|
1948
2577
|
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
1949
2578
|
base_cf_opt, "merge_operator=" + kMoName + ";", &new_cf_opt));
|
|
1950
2579
|
ASSERT_EQ(kMoName, std::string(new_cf_opt.merge_operator->Name()));
|
|
@@ -1989,8 +2618,7 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
1989
2618
|
ASSERT_EQ(new_cf_opt.write_buffer_size, 18 * giga);
|
|
1990
2619
|
ASSERT_EQ(new_cf_opt.arena_block_size, 19 * giga);
|
|
1991
2620
|
ASSERT_TRUE(new_cf_opt.prefix_extractor.get() != nullptr);
|
|
1992
|
-
|
|
1993
|
-
ASSERT_EQ(prefix_name, "rocksdb.CappedPrefix.8");
|
|
2621
|
+
ASSERT_EQ(new_cf_opt.prefix_extractor->AsString(), "rocksdb.CappedPrefix.8");
|
|
1994
2622
|
|
|
1995
2623
|
// Units (t)
|
|
1996
2624
|
ASSERT_OK(GetColumnFamilyOptionsFromString(base_cf_opt,
|
|
@@ -2089,7 +2717,95 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
|
|
|
2089
2717
|
"memtable=skip_list:10;arena_block_size=1024",
|
|
2090
2718
|
&new_cf_opt));
|
|
2091
2719
|
ASSERT_TRUE(new_cf_opt.memtable_factory != nullptr);
|
|
2092
|
-
|
|
2720
|
+
ASSERT_TRUE(new_cf_opt.memtable_factory->IsInstanceOf("SkipListFactory"));
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
TEST_F(OptionsTest, SliceTransformCreateFromString) {
|
|
2724
|
+
std::shared_ptr<const SliceTransform> transform = nullptr;
|
|
2725
|
+
ConfigOptions config_options;
|
|
2726
|
+
config_options.ignore_unsupported_options = false;
|
|
2727
|
+
config_options.ignore_unknown_options = false;
|
|
2728
|
+
|
|
2729
|
+
ASSERT_OK(
|
|
2730
|
+
SliceTransform::CreateFromString(config_options, "fixed:31", &transform));
|
|
2731
|
+
ASSERT_NE(transform, nullptr);
|
|
2732
|
+
ASSERT_FALSE(transform->IsInstanceOf("capped"));
|
|
2733
|
+
ASSERT_TRUE(transform->IsInstanceOf("fixed"));
|
|
2734
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.FixedPrefix"));
|
|
2735
|
+
ASSERT_EQ(transform->GetId(), "rocksdb.FixedPrefix.31");
|
|
2736
|
+
ASSERT_OK(SliceTransform::CreateFromString(
|
|
2737
|
+
config_options, "rocksdb.FixedPrefix.42", &transform));
|
|
2738
|
+
ASSERT_NE(transform, nullptr);
|
|
2739
|
+
ASSERT_EQ(transform->GetId(), "rocksdb.FixedPrefix.42");
|
|
2740
|
+
|
|
2741
|
+
ASSERT_OK(SliceTransform::CreateFromString(config_options, "capped:16",
|
|
2742
|
+
&transform));
|
|
2743
|
+
ASSERT_NE(transform, nullptr);
|
|
2744
|
+
ASSERT_FALSE(transform->IsInstanceOf("fixed"));
|
|
2745
|
+
ASSERT_TRUE(transform->IsInstanceOf("capped"));
|
|
2746
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.CappedPrefix"));
|
|
2747
|
+
ASSERT_EQ(transform->GetId(), "rocksdb.CappedPrefix.16");
|
|
2748
|
+
ASSERT_OK(SliceTransform::CreateFromString(
|
|
2749
|
+
config_options, "rocksdb.CappedPrefix.42", &transform));
|
|
2750
|
+
ASSERT_NE(transform, nullptr);
|
|
2751
|
+
ASSERT_EQ(transform->GetId(), "rocksdb.CappedPrefix.42");
|
|
2752
|
+
|
|
2753
|
+
ASSERT_OK(SliceTransform::CreateFromString(config_options, "rocksdb.Noop",
|
|
2754
|
+
&transform));
|
|
2755
|
+
ASSERT_NE(transform, nullptr);
|
|
2756
|
+
|
|
2757
|
+
ASSERT_NOK(SliceTransform::CreateFromString(config_options,
|
|
2758
|
+
"fixed:21:invalid", &transform));
|
|
2759
|
+
ASSERT_NOK(SliceTransform::CreateFromString(config_options,
|
|
2760
|
+
"capped:21:invalid", &transform));
|
|
2761
|
+
ASSERT_NOK(
|
|
2762
|
+
SliceTransform::CreateFromString(config_options, "fixed", &transform));
|
|
2763
|
+
ASSERT_NOK(
|
|
2764
|
+
SliceTransform::CreateFromString(config_options, "capped", &transform));
|
|
2765
|
+
ASSERT_NOK(
|
|
2766
|
+
SliceTransform::CreateFromString(config_options, "fixed:", &transform));
|
|
2767
|
+
ASSERT_NOK(
|
|
2768
|
+
SliceTransform::CreateFromString(config_options, "capped:", &transform));
|
|
2769
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2770
|
+
config_options, "rocksdb.FixedPrefix:42", &transform));
|
|
2771
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2772
|
+
config_options, "rocksdb.CappedPrefix:42", &transform));
|
|
2773
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2774
|
+
config_options, "rocksdb.FixedPrefix", &transform));
|
|
2775
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2776
|
+
config_options, "rocksdb.CappedPrefix", &transform));
|
|
2777
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2778
|
+
config_options, "rocksdb.FixedPrefix.", &transform));
|
|
2779
|
+
ASSERT_NOK(SliceTransform::CreateFromString(
|
|
2780
|
+
config_options, "rocksdb.CappedPrefix.", &transform));
|
|
2781
|
+
ASSERT_NOK(
|
|
2782
|
+
SliceTransform::CreateFromString(config_options, "invalid", &transform));
|
|
2783
|
+
|
|
2784
|
+
#ifndef ROCKSDB_LITE
|
|
2785
|
+
ASSERT_OK(SliceTransform::CreateFromString(
|
|
2786
|
+
config_options, "rocksdb.CappedPrefix.11", &transform));
|
|
2787
|
+
ASSERT_NE(transform, nullptr);
|
|
2788
|
+
ASSERT_EQ(transform->GetId(), "rocksdb.CappedPrefix.11");
|
|
2789
|
+
ASSERT_TRUE(transform->IsInstanceOf("capped"));
|
|
2790
|
+
ASSERT_TRUE(transform->IsInstanceOf("capped:11"));
|
|
2791
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.CappedPrefix"));
|
|
2792
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.CappedPrefix.11"));
|
|
2793
|
+
ASSERT_FALSE(transform->IsInstanceOf("fixed"));
|
|
2794
|
+
ASSERT_FALSE(transform->IsInstanceOf("fixed:11"));
|
|
2795
|
+
ASSERT_FALSE(transform->IsInstanceOf("rocksdb.FixedPrefix"));
|
|
2796
|
+
ASSERT_FALSE(transform->IsInstanceOf("rocksdb.FixedPrefix.11"));
|
|
2797
|
+
|
|
2798
|
+
ASSERT_OK(SliceTransform::CreateFromString(
|
|
2799
|
+
config_options, "rocksdb.FixedPrefix.11", &transform));
|
|
2800
|
+
ASSERT_TRUE(transform->IsInstanceOf("fixed"));
|
|
2801
|
+
ASSERT_TRUE(transform->IsInstanceOf("fixed:11"));
|
|
2802
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.FixedPrefix"));
|
|
2803
|
+
ASSERT_TRUE(transform->IsInstanceOf("rocksdb.FixedPrefix.11"));
|
|
2804
|
+
ASSERT_FALSE(transform->IsInstanceOf("capped"));
|
|
2805
|
+
ASSERT_FALSE(transform->IsInstanceOf("capped:11"));
|
|
2806
|
+
ASSERT_FALSE(transform->IsInstanceOf("rocksdb.CappedPrefix"));
|
|
2807
|
+
ASSERT_FALSE(transform->IsInstanceOf("rocksdb.CappedPrefix.11"));
|
|
2808
|
+
#endif // ROCKSDB_LITE
|
|
2093
2809
|
}
|
|
2094
2810
|
|
|
2095
2811
|
TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
@@ -2099,7 +2815,7 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2099
2815
|
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
2100
2816
|
table_opt,
|
|
2101
2817
|
"cache_index_and_filter_blocks=1;index_type=kHashSearch;"
|
|
2102
|
-
"checksum=kxxHash;
|
|
2818
|
+
"checksum=kxxHash;no_block_cache=1;"
|
|
2103
2819
|
"block_cache=1M;block_cache_compressed=1k;block_size=1024;"
|
|
2104
2820
|
"block_size_deviation=8;block_restart_interval=4;"
|
|
2105
2821
|
"format_version=5;whole_key_filtering=1;"
|
|
@@ -2108,7 +2824,6 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2108
2824
|
ASSERT_TRUE(new_opt.cache_index_and_filter_blocks);
|
|
2109
2825
|
ASSERT_EQ(new_opt.index_type, BlockBasedTableOptions::kHashSearch);
|
|
2110
2826
|
ASSERT_EQ(new_opt.checksum, ChecksumType::kxxHash);
|
|
2111
|
-
ASSERT_TRUE(new_opt.hash_index_allow_collision);
|
|
2112
2827
|
ASSERT_TRUE(new_opt.no_block_cache);
|
|
2113
2828
|
ASSERT_TRUE(new_opt.block_cache != nullptr);
|
|
2114
2829
|
ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
|
|
@@ -2120,10 +2835,10 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2120
2835
|
ASSERT_EQ(new_opt.format_version, 5U);
|
|
2121
2836
|
ASSERT_EQ(new_opt.whole_key_filtering, true);
|
|
2122
2837
|
ASSERT_TRUE(new_opt.filter_policy != nullptr);
|
|
2123
|
-
const BloomFilterPolicy
|
|
2124
|
-
dynamic_cast<const BloomFilterPolicy
|
|
2125
|
-
EXPECT_EQ(bfp
|
|
2126
|
-
EXPECT_EQ(bfp
|
|
2838
|
+
const BloomFilterPolicy* bfp =
|
|
2839
|
+
dynamic_cast<const BloomFilterPolicy*>(new_opt.filter_policy.get());
|
|
2840
|
+
EXPECT_EQ(bfp->GetMillibitsPerKey(), 4567);
|
|
2841
|
+
EXPECT_EQ(bfp->GetWholeBitsPerKey(), 5);
|
|
2127
2842
|
|
|
2128
2843
|
// unknown option
|
|
2129
2844
|
ASSERT_NOK(GetBlockBasedTableOptionsFromString(table_opt,
|
|
@@ -2159,14 +2874,12 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
|
|
|
2159
2874
|
new_opt.cache_index_and_filter_blocks);
|
|
2160
2875
|
ASSERT_EQ(table_opt.filter_policy, new_opt.filter_policy);
|
|
2161
2876
|
|
|
2162
|
-
//
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
new_opt.cache_index_and_filter_blocks);
|
|
2169
|
-
ASSERT_EQ(table_opt.filter_policy, new_opt.filter_policy);
|
|
2877
|
+
// Used to be rejected, now accepted
|
|
2878
|
+
ASSERT_OK(GetBlockBasedTableOptionsFromString(
|
|
2879
|
+
table_opt, "filter_policy=bloomfilter:4", &new_opt));
|
|
2880
|
+
bfp = dynamic_cast<const BloomFilterPolicy*>(new_opt.filter_policy.get());
|
|
2881
|
+
EXPECT_EQ(bfp->GetMillibitsPerKey(), 4000);
|
|
2882
|
+
EXPECT_EQ(bfp->GetWholeBitsPerKey(), 4);
|
|
2170
2883
|
|
|
2171
2884
|
// Check block cache options are overwritten when specified
|
|
2172
2885
|
// in new format as a struct.
|
|
@@ -2285,6 +2998,14 @@ TEST_F(OptionsOldApiTest, GetPlainTableOptionsFromString) {
|
|
|
2285
2998
|
ASSERT_TRUE(new_opt.full_scan_mode);
|
|
2286
2999
|
ASSERT_TRUE(new_opt.store_index_in_file);
|
|
2287
3000
|
|
|
3001
|
+
std::unordered_map<std::string, std::string> opt_map;
|
|
3002
|
+
ASSERT_OK(StringToMap(
|
|
3003
|
+
"user_key_len=55;bloom_bits_per_key=10;huge_page_tlb_size=8;", &opt_map));
|
|
3004
|
+
ASSERT_OK(GetPlainTableOptionsFromMap(table_opt, opt_map, &new_opt));
|
|
3005
|
+
ASSERT_EQ(new_opt.user_key_len, 55u);
|
|
3006
|
+
ASSERT_EQ(new_opt.bloom_bits_per_key, 10);
|
|
3007
|
+
ASSERT_EQ(new_opt.huge_page_tlb_size, 8);
|
|
3008
|
+
|
|
2288
3009
|
// unknown option
|
|
2289
3010
|
ASSERT_NOK(GetPlainTableOptionsFromString(table_opt,
|
|
2290
3011
|
"user_key_len=66;bloom_bits_per_key=20;hash_table_ratio=0.5;"
|
|
@@ -2308,14 +3029,8 @@ TEST_F(OptionsOldApiTest, GetOptionsFromStringTest) {
|
|
|
2308
3029
|
NewBlockBasedTableFactory(block_based_table_options));
|
|
2309
3030
|
|
|
2310
3031
|
// Register an Env with object registry.
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
public:
|
|
2314
|
-
explicit CustomEnv(Env* _target) : EnvWrapper(_target) {}
|
|
2315
|
-
};
|
|
2316
|
-
|
|
2317
|
-
ObjectLibrary::Default()->Register<Env>(
|
|
2318
|
-
kCustomEnvName,
|
|
3032
|
+
ObjectLibrary::Default()->AddFactory<Env>(
|
|
3033
|
+
"CustomEnvDefault",
|
|
2319
3034
|
[](const std::string& /*name*/, std::unique_ptr<Env>* /*env_guard*/,
|
|
2320
3035
|
std::string* /* errmsg */) {
|
|
2321
3036
|
static CustomEnv env(Env::Default());
|
|
@@ -2329,7 +3044,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromStringTest) {
|
|
|
2329
3044
|
"compression_opts=4:5:6;create_if_missing=true;max_open_files=1;"
|
|
2330
3045
|
"bottommost_compression_opts=5:6:7;create_if_missing=true;max_open_files="
|
|
2331
3046
|
"1;"
|
|
2332
|
-
"rate_limiter_bytes_per_sec=1024;env=
|
|
3047
|
+
"rate_limiter_bytes_per_sec=1024;env=CustomEnvDefault",
|
|
2333
3048
|
&new_options));
|
|
2334
3049
|
|
|
2335
3050
|
ASSERT_EQ(new_options.compression_opts.window_bits, 4);
|
|
@@ -2363,7 +3078,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromStringTest) {
|
|
|
2363
3078
|
ASSERT_EQ(new_options.max_open_files, 1);
|
|
2364
3079
|
ASSERT_TRUE(new_options.rate_limiter.get() != nullptr);
|
|
2365
3080
|
Env* newEnv = new_options.env;
|
|
2366
|
-
ASSERT_OK(Env::LoadEnv(
|
|
3081
|
+
ASSERT_OK(Env::LoadEnv("CustomEnvDefault", &newEnv));
|
|
2367
3082
|
ASSERT_EQ(newEnv, new_options.env);
|
|
2368
3083
|
}
|
|
2369
3084
|
|
|
@@ -2758,8 +3473,8 @@ void VerifyCFPointerTypedOptions(
|
|
|
2758
3473
|
|
|
2759
3474
|
// change the name of merge operator back-and-forth
|
|
2760
3475
|
{
|
|
2761
|
-
auto* merge_operator =
|
|
2762
|
-
|
|
3476
|
+
auto* merge_operator = base_cf_opt->merge_operator
|
|
3477
|
+
->CheckedCast<test::ChanglingMergeOperator>();
|
|
2763
3478
|
if (merge_operator != nullptr) {
|
|
2764
3479
|
name_buffer = merge_operator->Name();
|
|
2765
3480
|
// change the name and expect non-ok status
|
|
@@ -2776,8 +3491,8 @@ void VerifyCFPointerTypedOptions(
|
|
|
2776
3491
|
// change the name of the compaction filter factory back-and-forth
|
|
2777
3492
|
{
|
|
2778
3493
|
auto* compaction_filter_factory =
|
|
2779
|
-
|
|
2780
|
-
|
|
3494
|
+
base_cf_opt->compaction_filter_factory
|
|
3495
|
+
->CheckedCast<test::ChanglingCompactionFilterFactory>();
|
|
2781
3496
|
if (compaction_filter_factory != nullptr) {
|
|
2782
3497
|
name_buffer = compaction_filter_factory->Name();
|
|
2783
3498
|
// change the name and expect non-ok status
|
|
@@ -3060,37 +3775,86 @@ TEST_F(OptionsParserTest, DifferentDefault) {
|
|
|
3060
3775
|
ASSERT_EQ(5000, small_opts.max_open_files);
|
|
3061
3776
|
}
|
|
3062
3777
|
|
|
3063
|
-
class OptionsSanityCheckTest : public OptionsParserTest
|
|
3778
|
+
class OptionsSanityCheckTest : public OptionsParserTest,
|
|
3779
|
+
public ::testing::WithParamInterface<bool> {
|
|
3780
|
+
protected:
|
|
3781
|
+
ConfigOptions config_options_;
|
|
3782
|
+
|
|
3064
3783
|
public:
|
|
3065
|
-
OptionsSanityCheckTest() {
|
|
3784
|
+
OptionsSanityCheckTest() {
|
|
3785
|
+
config_options_.ignore_unknown_options = false;
|
|
3786
|
+
config_options_.ignore_unsupported_options = GetParam();
|
|
3787
|
+
config_options_.input_strings_escaped = true;
|
|
3788
|
+
}
|
|
3066
3789
|
|
|
3067
3790
|
protected:
|
|
3068
|
-
Status
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
config_options.sanity_level = level;
|
|
3073
|
-
config_options.ignore_unknown_options = false;
|
|
3074
|
-
config_options.input_strings_escaped = input_strings_escaped;
|
|
3075
|
-
|
|
3791
|
+
Status SanityCheckOptions(const DBOptions& db_opts,
|
|
3792
|
+
const ColumnFamilyOptions& cf_opts,
|
|
3793
|
+
ConfigOptions::SanityLevel level) {
|
|
3794
|
+
config_options_.sanity_level = level;
|
|
3076
3795
|
return RocksDBOptionsParser::VerifyRocksDBOptionsFromFile(
|
|
3077
|
-
|
|
3796
|
+
config_options_, db_opts, {"default"}, {cf_opts}, kOptionsFileName,
|
|
3078
3797
|
fs_.get());
|
|
3079
3798
|
}
|
|
3080
3799
|
|
|
3081
|
-
Status
|
|
3800
|
+
Status SanityCheckCFOptions(const ColumnFamilyOptions& cf_opts,
|
|
3801
|
+
ConfigOptions::SanityLevel level) {
|
|
3802
|
+
return SanityCheckOptions(DBOptions(), cf_opts, level);
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3805
|
+
void SanityCheckCFOptions(const ColumnFamilyOptions& opts, bool exact) {
|
|
3806
|
+
ASSERT_OK(SanityCheckCFOptions(
|
|
3807
|
+
opts, ConfigOptions::kSanityLevelLooselyCompatible));
|
|
3808
|
+
ASSERT_OK(SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelNone));
|
|
3809
|
+
if (exact) {
|
|
3810
|
+
ASSERT_OK(
|
|
3811
|
+
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3812
|
+
} else {
|
|
3813
|
+
ASSERT_NOK(
|
|
3814
|
+
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3815
|
+
}
|
|
3816
|
+
}
|
|
3817
|
+
|
|
3818
|
+
Status SanityCheckDBOptions(const DBOptions& db_opts,
|
|
3819
|
+
ConfigOptions::SanityLevel level) {
|
|
3820
|
+
return SanityCheckOptions(db_opts, ColumnFamilyOptions(), level);
|
|
3821
|
+
}
|
|
3822
|
+
|
|
3823
|
+
void SanityCheckDBOptions(const DBOptions& opts, bool exact) {
|
|
3824
|
+
ASSERT_OK(SanityCheckDBOptions(
|
|
3825
|
+
opts, ConfigOptions::kSanityLevelLooselyCompatible));
|
|
3826
|
+
ASSERT_OK(SanityCheckDBOptions(opts, ConfigOptions::kSanityLevelNone));
|
|
3827
|
+
if (exact) {
|
|
3828
|
+
ASSERT_OK(
|
|
3829
|
+
SanityCheckDBOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3830
|
+
} else {
|
|
3831
|
+
ASSERT_NOK(
|
|
3832
|
+
SanityCheckDBOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3835
|
+
|
|
3836
|
+
Status PersistOptions(const DBOptions& db_opts,
|
|
3837
|
+
const ColumnFamilyOptions& cf_opts) {
|
|
3082
3838
|
Status s = fs_->DeleteFile(kOptionsFileName, IOOptions(), nullptr);
|
|
3083
3839
|
if (!s.ok()) {
|
|
3084
3840
|
return s;
|
|
3085
3841
|
}
|
|
3086
|
-
return PersistRocksDBOptions(
|
|
3842
|
+
return PersistRocksDBOptions(db_opts, {"default"}, {cf_opts},
|
|
3087
3843
|
kOptionsFileName, fs_.get());
|
|
3088
3844
|
}
|
|
3089
3845
|
|
|
3846
|
+
Status PersistCFOptions(const ColumnFamilyOptions& cf_opts) {
|
|
3847
|
+
return PersistOptions(DBOptions(), cf_opts);
|
|
3848
|
+
}
|
|
3849
|
+
|
|
3850
|
+
Status PersistDBOptions(const DBOptions& db_opts) {
|
|
3851
|
+
return PersistOptions(db_opts, ColumnFamilyOptions());
|
|
3852
|
+
}
|
|
3853
|
+
|
|
3090
3854
|
const std::string kOptionsFileName = "OPTIONS";
|
|
3091
3855
|
};
|
|
3092
3856
|
|
|
3093
|
-
|
|
3857
|
+
TEST_P(OptionsSanityCheckTest, CFOptionsSanityCheck) {
|
|
3094
3858
|
ColumnFamilyOptions opts;
|
|
3095
3859
|
Random rnd(301);
|
|
3096
3860
|
|
|
@@ -3142,11 +3906,7 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3142
3906
|
opts.prefix_extractor.reset(NewFixedPrefixTransform(15));
|
|
3143
3907
|
// expect pass only in
|
|
3144
3908
|
// ConfigOptions::kSanityLevelLooselyCompatible
|
|
3145
|
-
|
|
3146
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3147
|
-
ASSERT_OK(SanityCheckCFOptions(
|
|
3148
|
-
opts, ConfigOptions::kSanityLevelLooselyCompatible));
|
|
3149
|
-
ASSERT_OK(SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelNone));
|
|
3909
|
+
SanityCheckCFOptions(opts, false);
|
|
3150
3910
|
|
|
3151
3911
|
// Change prefix extractor from non-nullptr to nullptr
|
|
3152
3912
|
opts.prefix_extractor.reset();
|
|
@@ -3186,8 +3946,7 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3186
3946
|
|
|
3187
3947
|
// persist the change
|
|
3188
3948
|
ASSERT_OK(PersistCFOptions(opts));
|
|
3189
|
-
|
|
3190
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3949
|
+
SanityCheckCFOptions(opts, config_options_.ignore_unsupported_options);
|
|
3191
3950
|
|
|
3192
3951
|
for (int test = 0; test < 5; ++test) {
|
|
3193
3952
|
// change the merge operator
|
|
@@ -3198,8 +3957,7 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3198
3957
|
|
|
3199
3958
|
// persist the change
|
|
3200
3959
|
ASSERT_OK(PersistCFOptions(opts));
|
|
3201
|
-
|
|
3202
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3960
|
+
SanityCheckCFOptions(opts, config_options_.ignore_unsupported_options);
|
|
3203
3961
|
}
|
|
3204
3962
|
|
|
3205
3963
|
// Test when going from merge operator -> nullptr
|
|
@@ -3210,8 +3968,7 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3210
3968
|
|
|
3211
3969
|
// persist the change
|
|
3212
3970
|
ASSERT_OK(PersistCFOptions(opts));
|
|
3213
|
-
|
|
3214
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3971
|
+
SanityCheckCFOptions(opts, true);
|
|
3215
3972
|
}
|
|
3216
3973
|
|
|
3217
3974
|
// compaction_filter
|
|
@@ -3219,15 +3976,11 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3219
3976
|
for (int test = 0; test < 5; ++test) {
|
|
3220
3977
|
// change the compaction filter
|
|
3221
3978
|
opts.compaction_filter = test::RandomCompactionFilter(&rnd);
|
|
3222
|
-
|
|
3223
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3224
|
-
ASSERT_OK(SanityCheckCFOptions(
|
|
3225
|
-
opts, ConfigOptions::kSanityLevelLooselyCompatible));
|
|
3979
|
+
SanityCheckCFOptions(opts, false);
|
|
3226
3980
|
|
|
3227
3981
|
// persist the change
|
|
3228
3982
|
ASSERT_OK(PersistCFOptions(opts));
|
|
3229
|
-
|
|
3230
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3983
|
+
SanityCheckCFOptions(opts, config_options_.ignore_unsupported_options);
|
|
3231
3984
|
delete opts.compaction_filter;
|
|
3232
3985
|
opts.compaction_filter = nullptr;
|
|
3233
3986
|
}
|
|
@@ -3239,19 +3992,57 @@ TEST_F(OptionsSanityCheckTest, SanityCheck) {
|
|
|
3239
3992
|
// change the compaction filter factory
|
|
3240
3993
|
opts.compaction_filter_factory.reset(
|
|
3241
3994
|
test::RandomCompactionFilterFactory(&rnd));
|
|
3242
|
-
|
|
3243
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3244
|
-
ASSERT_OK(SanityCheckCFOptions(
|
|
3245
|
-
opts, ConfigOptions::kSanityLevelLooselyCompatible));
|
|
3995
|
+
SanityCheckCFOptions(opts, false);
|
|
3246
3996
|
|
|
3247
3997
|
// persist the change
|
|
3248
3998
|
ASSERT_OK(PersistCFOptions(opts));
|
|
3249
|
-
|
|
3250
|
-
SanityCheckCFOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
3999
|
+
SanityCheckCFOptions(opts, config_options_.ignore_unsupported_options);
|
|
3251
4000
|
}
|
|
3252
4001
|
}
|
|
3253
4002
|
}
|
|
3254
4003
|
|
|
4004
|
+
TEST_P(OptionsSanityCheckTest, DBOptionsSanityCheck) {
|
|
4005
|
+
DBOptions opts;
|
|
4006
|
+
Random rnd(301);
|
|
4007
|
+
|
|
4008
|
+
// default DBOptions
|
|
4009
|
+
{
|
|
4010
|
+
ASSERT_OK(PersistDBOptions(opts));
|
|
4011
|
+
ASSERT_OK(
|
|
4012
|
+
SanityCheckDBOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
4013
|
+
}
|
|
4014
|
+
|
|
4015
|
+
// File checksum generator
|
|
4016
|
+
{
|
|
4017
|
+
class MockFileChecksumGenFactory : public FileChecksumGenFactory {
|
|
4018
|
+
public:
|
|
4019
|
+
static const char* kClassName() { return "Mock"; }
|
|
4020
|
+
const char* Name() const override { return kClassName(); }
|
|
4021
|
+
std::unique_ptr<FileChecksumGenerator> CreateFileChecksumGenerator(
|
|
4022
|
+
const FileChecksumGenContext& /*context*/) override {
|
|
4023
|
+
return nullptr;
|
|
4024
|
+
}
|
|
4025
|
+
};
|
|
4026
|
+
|
|
4027
|
+
// Okay to change file_checksum_gen_factory form nullptr to non-nullptr
|
|
4028
|
+
ASSERT_EQ(opts.file_checksum_gen_factory.get(), nullptr);
|
|
4029
|
+
opts.file_checksum_gen_factory.reset(new MockFileChecksumGenFactory());
|
|
4030
|
+
|
|
4031
|
+
// persist the change
|
|
4032
|
+
ASSERT_OK(PersistDBOptions(opts));
|
|
4033
|
+
SanityCheckDBOptions(opts, config_options_.ignore_unsupported_options);
|
|
4034
|
+
|
|
4035
|
+
// Change file_checksum_gen_factory from non-nullptr to nullptr
|
|
4036
|
+
opts.file_checksum_gen_factory.reset();
|
|
4037
|
+
// expect pass as it's safe to change file_checksum_gen_factory
|
|
4038
|
+
// from non-null to null
|
|
4039
|
+
SanityCheckDBOptions(opts, false);
|
|
4040
|
+
}
|
|
4041
|
+
// persist the change
|
|
4042
|
+
ASSERT_OK(PersistDBOptions(opts));
|
|
4043
|
+
ASSERT_OK(SanityCheckDBOptions(opts, ConfigOptions::kSanityLevelExactMatch));
|
|
4044
|
+
}
|
|
4045
|
+
|
|
3255
4046
|
namespace {
|
|
3256
4047
|
bool IsEscapedString(const std::string& str) {
|
|
3257
4048
|
for (size_t i = 0; i < str.size(); ++i) {
|
|
@@ -3342,21 +4133,28 @@ TEST_F(OptionsParserTest, EscapeOptionString) {
|
|
|
3342
4133
|
static void TestAndCompareOption(const ConfigOptions& config_options,
|
|
3343
4134
|
const OptionTypeInfo& opt_info,
|
|
3344
4135
|
const std::string& opt_name, void* base_ptr,
|
|
3345
|
-
void* comp_ptr) {
|
|
4136
|
+
void* comp_ptr, bool strip = false) {
|
|
3346
4137
|
std::string result, mismatch;
|
|
3347
4138
|
ASSERT_OK(opt_info.Serialize(config_options, opt_name, base_ptr, &result));
|
|
4139
|
+
if (strip) {
|
|
4140
|
+
ASSERT_EQ(result.at(0), '{');
|
|
4141
|
+
ASSERT_EQ(result.at(result.size() - 1), '}');
|
|
4142
|
+
result = result.substr(1, result.size() - 2);
|
|
4143
|
+
}
|
|
3348
4144
|
ASSERT_OK(opt_info.Parse(config_options, opt_name, result, comp_ptr));
|
|
3349
4145
|
ASSERT_TRUE(opt_info.AreEqual(config_options, opt_name, base_ptr, comp_ptr,
|
|
3350
4146
|
&mismatch));
|
|
3351
4147
|
}
|
|
3352
4148
|
|
|
3353
|
-
static void
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
4149
|
+
static void TestParseAndCompareOption(const ConfigOptions& config_options,
|
|
4150
|
+
const OptionTypeInfo& opt_info,
|
|
4151
|
+
const std::string& opt_name,
|
|
4152
|
+
const std::string& opt_value,
|
|
4153
|
+
void* base_ptr, void* comp_ptr,
|
|
4154
|
+
bool strip = false) {
|
|
3358
4155
|
ASSERT_OK(opt_info.Parse(config_options, opt_name, opt_value, base_ptr));
|
|
3359
|
-
TestAndCompareOption(config_options, opt_info, opt_name, base_ptr, comp_ptr
|
|
4156
|
+
TestAndCompareOption(config_options, opt_info, opt_name, base_ptr, comp_ptr,
|
|
4157
|
+
strip);
|
|
3360
4158
|
}
|
|
3361
4159
|
|
|
3362
4160
|
template <typename T>
|
|
@@ -3457,8 +4255,8 @@ TEST_F(OptionTypeInfoTest, TestInvalidArgs) {
|
|
|
3457
4255
|
OptionVerificationType::kNormal,
|
|
3458
4256
|
OptionTypeFlags::kNone,
|
|
3459
4257
|
[](const ConfigOptions&, const std::string&,
|
|
3460
|
-
const std::string& value,
|
|
3461
|
-
auto ptr =
|
|
4258
|
+
const std::string& value, void* addr) {
|
|
4259
|
+
auto ptr = static_cast<int*>(addr);
|
|
3462
4260
|
*ptr = ParseInt(value);
|
|
3463
4261
|
return Status::OK();
|
|
3464
4262
|
});
|
|
@@ -3471,8 +4269,8 @@ TEST_F(OptionTypeInfoTest, TestParseFunc) {
|
|
|
3471
4269
|
0, OptionType::kUnknown, OptionVerificationType::kNormal,
|
|
3472
4270
|
OptionTypeFlags::kNone,
|
|
3473
4271
|
[](const ConfigOptions& /*opts*/, const std::string& name,
|
|
3474
|
-
const std::string& value,
|
|
3475
|
-
auto ptr =
|
|
4272
|
+
const std::string& value, void* addr) {
|
|
4273
|
+
auto ptr = static_cast<std::string*>(addr);
|
|
3476
4274
|
if (name == "Oops") {
|
|
3477
4275
|
return Status::InvalidArgument(value);
|
|
3478
4276
|
} else {
|
|
@@ -3492,7 +4290,7 @@ TEST_F(OptionTypeInfoTest, TestSerializeFunc) {
|
|
|
3492
4290
|
0, OptionType::kString, OptionVerificationType::kNormal,
|
|
3493
4291
|
OptionTypeFlags::kNone, nullptr,
|
|
3494
4292
|
[](const ConfigOptions& /*opts*/, const std::string& name,
|
|
3495
|
-
const
|
|
4293
|
+
const void* /*addr*/, std::string* value) {
|
|
3496
4294
|
if (name == "Oops") {
|
|
3497
4295
|
return Status::InvalidArgument(name);
|
|
3498
4296
|
} else {
|
|
@@ -3514,9 +4312,9 @@ TEST_F(OptionTypeInfoTest, TestEqualsFunc) {
|
|
|
3514
4312
|
0, OptionType::kInt, OptionVerificationType::kNormal,
|
|
3515
4313
|
OptionTypeFlags::kNone, nullptr, nullptr,
|
|
3516
4314
|
[](const ConfigOptions& /*opts*/, const std::string& name,
|
|
3517
|
-
const
|
|
3518
|
-
auto i1 = *(
|
|
3519
|
-
auto i2 = *(
|
|
4315
|
+
const void* addr1, const void* addr2, std::string* mismatch) {
|
|
4316
|
+
auto i1 = *(static_cast<const int*>(addr1));
|
|
4317
|
+
auto i2 = *(static_cast<const int*>(addr2));
|
|
3520
4318
|
if (name == "LT") {
|
|
3521
4319
|
return i1 < i2;
|
|
3522
4320
|
} else if (name == "GT") {
|
|
@@ -3570,8 +4368,7 @@ TEST_F(OptionTypeInfoTest, TestOptionFlags) {
|
|
|
3570
4368
|
// An alias can change the value via parse, but does nothing on serialize on
|
|
3571
4369
|
// match
|
|
3572
4370
|
std::string result;
|
|
3573
|
-
ASSERT_OK(opt_alias.Parse(config_options, "Alias", "Alias",
|
|
3574
|
-
reinterpret_cast<char*>(&base)));
|
|
4371
|
+
ASSERT_OK(opt_alias.Parse(config_options, "Alias", "Alias", &base));
|
|
3575
4372
|
ASSERT_OK(opt_alias.Serialize(config_options, "Alias", &base, &result));
|
|
3576
4373
|
ASSERT_TRUE(
|
|
3577
4374
|
opt_alias.AreEqual(config_options, "Alias", &base, &comp, &result));
|
|
@@ -3609,7 +4406,7 @@ TEST_F(OptionTypeInfoTest, TestCustomEnum) {
|
|
|
3609
4406
|
ASSERT_FALSE(opt_info.AreEqual(config_options, "Enum", &e1, &e2, &mismatch));
|
|
3610
4407
|
ASSERT_EQ(mismatch, "Enum");
|
|
3611
4408
|
|
|
3612
|
-
|
|
4409
|
+
TestParseAndCompareOption(config_options, opt_info, "", "C", &e1, &e2);
|
|
3613
4410
|
ASSERT_EQ(e2, TestEnum::kC);
|
|
3614
4411
|
|
|
3615
4412
|
ASSERT_NOK(opt_info.Parse(config_options, "", "D", &e1));
|
|
@@ -3620,44 +4417,44 @@ TEST_F(OptionTypeInfoTest, TestBuiltinEnum) {
|
|
|
3620
4417
|
ConfigOptions config_options;
|
|
3621
4418
|
for (auto iter : OptionsHelper::compaction_style_string_map) {
|
|
3622
4419
|
CompactionStyle e1, e2;
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
4420
|
+
TestParseAndCompareOption(config_options,
|
|
4421
|
+
OptionTypeInfo(0, OptionType::kCompactionStyle),
|
|
4422
|
+
"CompactionStyle", iter.first, &e1, &e2);
|
|
3626
4423
|
ASSERT_EQ(e1, iter.second);
|
|
3627
4424
|
}
|
|
3628
4425
|
for (auto iter : OptionsHelper::compaction_pri_string_map) {
|
|
3629
4426
|
CompactionPri e1, e2;
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
4427
|
+
TestParseAndCompareOption(config_options,
|
|
4428
|
+
OptionTypeInfo(0, OptionType::kCompactionPri),
|
|
4429
|
+
"CompactionPri", iter.first, &e1, &e2);
|
|
3633
4430
|
ASSERT_EQ(e1, iter.second);
|
|
3634
4431
|
}
|
|
3635
4432
|
for (auto iter : OptionsHelper::compression_type_string_map) {
|
|
3636
4433
|
CompressionType e1, e2;
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
4434
|
+
TestParseAndCompareOption(config_options,
|
|
4435
|
+
OptionTypeInfo(0, OptionType::kCompressionType),
|
|
4436
|
+
"CompressionType", iter.first, &e1, &e2);
|
|
3640
4437
|
ASSERT_EQ(e1, iter.second);
|
|
3641
4438
|
}
|
|
3642
4439
|
for (auto iter : OptionsHelper::compaction_stop_style_string_map) {
|
|
3643
4440
|
CompactionStopStyle e1, e2;
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
4441
|
+
TestParseAndCompareOption(
|
|
4442
|
+
config_options, OptionTypeInfo(0, OptionType::kCompactionStopStyle),
|
|
4443
|
+
"CompactionStopStyle", iter.first, &e1, &e2);
|
|
3647
4444
|
ASSERT_EQ(e1, iter.second);
|
|
3648
4445
|
}
|
|
3649
4446
|
for (auto iter : OptionsHelper::checksum_type_string_map) {
|
|
3650
4447
|
ChecksumType e1, e2;
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
4448
|
+
TestParseAndCompareOption(config_options,
|
|
4449
|
+
OptionTypeInfo(0, OptionType::kChecksumType),
|
|
4450
|
+
"CheckSumType", iter.first, &e1, &e2);
|
|
3654
4451
|
ASSERT_EQ(e1, iter.second);
|
|
3655
4452
|
}
|
|
3656
4453
|
for (auto iter : OptionsHelper::encoding_type_string_map) {
|
|
3657
4454
|
EncodingType e1, e2;
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
4455
|
+
TestParseAndCompareOption(config_options,
|
|
4456
|
+
OptionTypeInfo(0, OptionType::kEncodingType),
|
|
4457
|
+
"EncodingType", iter.first, &e1, &e2);
|
|
3661
4458
|
ASSERT_EQ(e1, iter.second);
|
|
3662
4459
|
}
|
|
3663
4460
|
}
|
|
@@ -3696,15 +4493,17 @@ TEST_F(OptionTypeInfoTest, TestStruct) {
|
|
|
3696
4493
|
Extended e1, e2;
|
|
3697
4494
|
ConfigOptions config_options;
|
|
3698
4495
|
std::string mismatch;
|
|
3699
|
-
|
|
3700
|
-
|
|
4496
|
+
TestParseAndCompareOption(config_options, basic_info, "b", "{i=33;s=33}",
|
|
4497
|
+
&e1.b, &e2.b);
|
|
3701
4498
|
ASSERT_EQ(e1.b.i, 33);
|
|
3702
4499
|
ASSERT_EQ(e1.b.s, "33");
|
|
3703
4500
|
|
|
3704
|
-
|
|
4501
|
+
TestParseAndCompareOption(config_options, basic_info, "b.i", "44", &e1.b,
|
|
4502
|
+
&e2.b);
|
|
3705
4503
|
ASSERT_EQ(e1.b.i, 44);
|
|
3706
4504
|
|
|
3707
|
-
|
|
4505
|
+
TestParseAndCompareOption(config_options, basic_info, "i", "55", &e1.b,
|
|
4506
|
+
&e2.b);
|
|
3708
4507
|
ASSERT_EQ(e1.b.i, 55);
|
|
3709
4508
|
|
|
3710
4509
|
e1.b.i = 0;
|
|
@@ -3727,17 +4526,18 @@ TEST_F(OptionTypeInfoTest, TestStruct) {
|
|
|
3727
4526
|
ASSERT_NOK(basic_info.Parse(config_options, "b.j", "44", &e1.b));
|
|
3728
4527
|
ASSERT_NOK(basic_info.Parse(config_options, "j", "44", &e1.b));
|
|
3729
4528
|
|
|
3730
|
-
|
|
3731
|
-
|
|
4529
|
+
TestParseAndCompareOption(config_options, extended_info, "e",
|
|
4530
|
+
"b={i=55;s=55}; j=22;", &e1, &e2);
|
|
3732
4531
|
ASSERT_EQ(e1.b.i, 55);
|
|
3733
4532
|
ASSERT_EQ(e1.j, 22);
|
|
3734
4533
|
ASSERT_EQ(e1.b.s, "55");
|
|
3735
|
-
|
|
3736
|
-
|
|
4534
|
+
TestParseAndCompareOption(config_options, extended_info, "e.b",
|
|
4535
|
+
"{i=66;s=66;}", &e1, &e2);
|
|
3737
4536
|
ASSERT_EQ(e1.b.i, 66);
|
|
3738
4537
|
ASSERT_EQ(e1.j, 22);
|
|
3739
4538
|
ASSERT_EQ(e1.b.s, "66");
|
|
3740
|
-
|
|
4539
|
+
TestParseAndCompareOption(config_options, extended_info, "e.b.i", "77", &e1,
|
|
4540
|
+
&e2);
|
|
3741
4541
|
ASSERT_EQ(e1.b.i, 77);
|
|
3742
4542
|
ASSERT_EQ(e1.j, 22);
|
|
3743
4543
|
ASSERT_EQ(e1.b.s, "66");
|
|
@@ -3751,7 +4551,8 @@ TEST_F(OptionTypeInfoTest, TestVectorType) {
|
|
|
3751
4551
|
std::string mismatch;
|
|
3752
4552
|
|
|
3753
4553
|
ConfigOptions config_options;
|
|
3754
|
-
|
|
4554
|
+
TestParseAndCompareOption(config_options, vec_info, "v", "a:b:c:d", &vec1,
|
|
4555
|
+
&vec2);
|
|
3755
4556
|
ASSERT_EQ(vec1.size(), 4);
|
|
3756
4557
|
ASSERT_EQ(vec1[0], "a");
|
|
3757
4558
|
ASSERT_EQ(vec1[1], "b");
|
|
@@ -3762,8 +4563,8 @@ TEST_F(OptionTypeInfoTest, TestVectorType) {
|
|
|
3762
4563
|
ASSERT_EQ(mismatch, "v");
|
|
3763
4564
|
|
|
3764
4565
|
// Test vectors with inner brackets
|
|
3765
|
-
|
|
3766
|
-
|
|
4566
|
+
TestParseAndCompareOption(config_options, vec_info, "v", "a:{b}:c:d", &vec1,
|
|
4567
|
+
&vec2);
|
|
3767
4568
|
ASSERT_EQ(vec1.size(), 4);
|
|
3768
4569
|
ASSERT_EQ(vec1[0], "a");
|
|
3769
4570
|
ASSERT_EQ(vec1[1], "b");
|
|
@@ -3773,16 +4574,190 @@ TEST_F(OptionTypeInfoTest, TestVectorType) {
|
|
|
3773
4574
|
OptionTypeInfo bar_info = OptionTypeInfo::Vector<std::string>(
|
|
3774
4575
|
0, OptionVerificationType::kNormal, OptionTypeFlags::kNone,
|
|
3775
4576
|
{0, OptionType::kString}, '|');
|
|
3776
|
-
|
|
4577
|
+
TestParseAndCompareOption(config_options, vec_info, "v", "x|y|z", &vec1,
|
|
4578
|
+
&vec2);
|
|
3777
4579
|
// Test vectors with inner vector
|
|
3778
|
-
|
|
3779
|
-
|
|
4580
|
+
TestParseAndCompareOption(config_options, bar_info, "v",
|
|
4581
|
+
"a|{b1|b2}|{c1|c2|{d1|d2}}", &vec1, &vec2, false);
|
|
3780
4582
|
ASSERT_EQ(vec1.size(), 3);
|
|
3781
4583
|
ASSERT_EQ(vec1[0], "a");
|
|
3782
4584
|
ASSERT_EQ(vec1[1], "b1|b2");
|
|
3783
4585
|
ASSERT_EQ(vec1[2], "c1|c2|{d1|d2}");
|
|
4586
|
+
|
|
4587
|
+
TestParseAndCompareOption(config_options, bar_info, "v",
|
|
4588
|
+
"{a1|a2}|{b1|{c1|c2}}|d1", &vec1, &vec2, true);
|
|
4589
|
+
ASSERT_EQ(vec1.size(), 3);
|
|
4590
|
+
ASSERT_EQ(vec1[0], "a1|a2");
|
|
4591
|
+
ASSERT_EQ(vec1[1], "b1|{c1|c2}");
|
|
4592
|
+
ASSERT_EQ(vec1[2], "d1");
|
|
4593
|
+
|
|
4594
|
+
TestParseAndCompareOption(config_options, bar_info, "v", "{a1}", &vec1, &vec2,
|
|
4595
|
+
false);
|
|
4596
|
+
ASSERT_EQ(vec1.size(), 1);
|
|
4597
|
+
ASSERT_EQ(vec1[0], "a1");
|
|
4598
|
+
|
|
4599
|
+
TestParseAndCompareOption(config_options, bar_info, "v", "{a1|a2}|{b1|b2}",
|
|
4600
|
+
&vec1, &vec2, true);
|
|
4601
|
+
ASSERT_EQ(vec1.size(), 2);
|
|
4602
|
+
ASSERT_EQ(vec1[0], "a1|a2");
|
|
4603
|
+
ASSERT_EQ(vec1[1], "b1|b2");
|
|
4604
|
+
}
|
|
4605
|
+
|
|
4606
|
+
TEST_F(OptionTypeInfoTest, TestStaticType) {
|
|
4607
|
+
struct SimpleOptions {
|
|
4608
|
+
size_t size = 0;
|
|
4609
|
+
bool verify = true;
|
|
4610
|
+
};
|
|
4611
|
+
|
|
4612
|
+
static std::unordered_map<std::string, OptionTypeInfo> type_map = {
|
|
4613
|
+
{"size", {offsetof(struct SimpleOptions, size), OptionType::kSizeT}},
|
|
4614
|
+
{"verify",
|
|
4615
|
+
{offsetof(struct SimpleOptions, verify), OptionType::kBoolean}},
|
|
4616
|
+
};
|
|
4617
|
+
|
|
4618
|
+
ConfigOptions config_options;
|
|
4619
|
+
SimpleOptions opts, copy;
|
|
4620
|
+
opts.size = 12345;
|
|
4621
|
+
opts.verify = false;
|
|
4622
|
+
std::string str, mismatch;
|
|
4623
|
+
|
|
4624
|
+
ASSERT_OK(
|
|
4625
|
+
OptionTypeInfo::SerializeType(config_options, type_map, &opts, &str));
|
|
4626
|
+
ASSERT_FALSE(OptionTypeInfo::TypesAreEqual(config_options, type_map, &opts,
|
|
4627
|
+
©, &mismatch));
|
|
4628
|
+
ASSERT_OK(OptionTypeInfo::ParseType(config_options, str, type_map, ©));
|
|
4629
|
+
ASSERT_TRUE(OptionTypeInfo::TypesAreEqual(config_options, type_map, &opts,
|
|
4630
|
+
©, &mismatch));
|
|
4631
|
+
}
|
|
4632
|
+
|
|
4633
|
+
class ConfigOptionsTest : public testing::Test {};
|
|
4634
|
+
|
|
4635
|
+
TEST_F(ConfigOptionsTest, EnvFromConfigOptions) {
|
|
4636
|
+
ConfigOptions config_options;
|
|
4637
|
+
DBOptions db_opts;
|
|
4638
|
+
Options opts;
|
|
4639
|
+
Env* mem_env = NewMemEnv(Env::Default());
|
|
4640
|
+
config_options.registry->AddLibrary("custom-env", RegisterCustomEnv,
|
|
4641
|
+
kCustomEnvName);
|
|
4642
|
+
|
|
4643
|
+
config_options.env = mem_env;
|
|
4644
|
+
// First test that we can get the env as expected
|
|
4645
|
+
ASSERT_OK(GetDBOptionsFromString(config_options, DBOptions(), kCustomEnvProp,
|
|
4646
|
+
&db_opts));
|
|
4647
|
+
ASSERT_OK(
|
|
4648
|
+
GetOptionsFromString(config_options, Options(), kCustomEnvProp, &opts));
|
|
4649
|
+
ASSERT_NE(config_options.env, db_opts.env);
|
|
4650
|
+
ASSERT_EQ(opts.env, db_opts.env);
|
|
4651
|
+
Env* custom_env = db_opts.env;
|
|
4652
|
+
|
|
4653
|
+
// Now try a "bad" env" and check that nothing changed
|
|
4654
|
+
config_options.ignore_unsupported_options = true;
|
|
4655
|
+
ASSERT_OK(
|
|
4656
|
+
GetDBOptionsFromString(config_options, db_opts, "env=unknown", &db_opts));
|
|
4657
|
+
ASSERT_OK(GetOptionsFromString(config_options, opts, "env=unknown", &opts));
|
|
4658
|
+
ASSERT_EQ(config_options.env, mem_env);
|
|
4659
|
+
ASSERT_EQ(db_opts.env, custom_env);
|
|
4660
|
+
ASSERT_EQ(opts.env, db_opts.env);
|
|
4661
|
+
|
|
4662
|
+
// Now try a "bad" env" ignoring unknown objects
|
|
4663
|
+
config_options.ignore_unsupported_options = false;
|
|
4664
|
+
ASSERT_NOK(
|
|
4665
|
+
GetDBOptionsFromString(config_options, db_opts, "env=unknown", &db_opts));
|
|
4666
|
+
ASSERT_EQ(config_options.env, mem_env);
|
|
4667
|
+
ASSERT_EQ(db_opts.env, custom_env);
|
|
4668
|
+
ASSERT_EQ(opts.env, db_opts.env);
|
|
4669
|
+
|
|
4670
|
+
delete mem_env;
|
|
4671
|
+
}
|
|
4672
|
+
TEST_F(ConfigOptionsTest, MergeOperatorFromString) {
|
|
4673
|
+
ConfigOptions config_options;
|
|
4674
|
+
std::shared_ptr<MergeOperator> merge_op;
|
|
4675
|
+
|
|
4676
|
+
ASSERT_OK(MergeOperator::CreateFromString(config_options, "put", &merge_op));
|
|
4677
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4678
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("put"));
|
|
4679
|
+
ASSERT_STREQ(merge_op->Name(), "PutOperator");
|
|
4680
|
+
|
|
4681
|
+
ASSERT_OK(
|
|
4682
|
+
MergeOperator::CreateFromString(config_options, "put_v1", &merge_op));
|
|
4683
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4684
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("PutOperator"));
|
|
4685
|
+
|
|
4686
|
+
ASSERT_OK(
|
|
4687
|
+
MergeOperator::CreateFromString(config_options, "uint64add", &merge_op));
|
|
4688
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4689
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("uint64add"));
|
|
4690
|
+
ASSERT_STREQ(merge_op->Name(), "UInt64AddOperator");
|
|
4691
|
+
|
|
4692
|
+
ASSERT_OK(MergeOperator::CreateFromString(config_options, "max", &merge_op));
|
|
4693
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4694
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("max"));
|
|
4695
|
+
ASSERT_STREQ(merge_op->Name(), "MaxOperator");
|
|
4696
|
+
|
|
4697
|
+
ASSERT_OK(
|
|
4698
|
+
MergeOperator::CreateFromString(config_options, "bytesxor", &merge_op));
|
|
4699
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4700
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("bytesxor"));
|
|
4701
|
+
ASSERT_STREQ(merge_op->Name(), BytesXOROperator::kClassName());
|
|
4702
|
+
|
|
4703
|
+
ASSERT_OK(
|
|
4704
|
+
MergeOperator::CreateFromString(config_options, "sortlist", &merge_op));
|
|
4705
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4706
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("sortlist"));
|
|
4707
|
+
ASSERT_STREQ(merge_op->Name(), SortList::kClassName());
|
|
4708
|
+
|
|
4709
|
+
ASSERT_OK(MergeOperator::CreateFromString(config_options, "stringappend",
|
|
4710
|
+
&merge_op));
|
|
4711
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4712
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("stringappend"));
|
|
4713
|
+
ASSERT_STREQ(merge_op->Name(), StringAppendOperator::kClassName());
|
|
4714
|
+
auto delimiter = merge_op->GetOptions<std::string>("Delimiter");
|
|
4715
|
+
ASSERT_NE(delimiter, nullptr);
|
|
4716
|
+
ASSERT_EQ(*delimiter, ",");
|
|
4717
|
+
|
|
4718
|
+
ASSERT_OK(MergeOperator::CreateFromString(config_options, "stringappendtest",
|
|
4719
|
+
&merge_op));
|
|
4720
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4721
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("stringappendtest"));
|
|
4722
|
+
ASSERT_STREQ(merge_op->Name(), StringAppendTESTOperator::kClassName());
|
|
4723
|
+
delimiter = merge_op->GetOptions<std::string>("Delimiter");
|
|
4724
|
+
ASSERT_NE(delimiter, nullptr);
|
|
4725
|
+
ASSERT_EQ(*delimiter, ",");
|
|
4726
|
+
|
|
4727
|
+
ASSERT_OK(MergeOperator::CreateFromString(
|
|
4728
|
+
config_options, "id=stringappend; delimiter=||", &merge_op));
|
|
4729
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4730
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("stringappend"));
|
|
4731
|
+
ASSERT_STREQ(merge_op->Name(), StringAppendOperator::kClassName());
|
|
4732
|
+
delimiter = merge_op->GetOptions<std::string>("Delimiter");
|
|
4733
|
+
ASSERT_NE(delimiter, nullptr);
|
|
4734
|
+
ASSERT_EQ(*delimiter, "||");
|
|
4735
|
+
|
|
4736
|
+
ASSERT_OK(MergeOperator::CreateFromString(
|
|
4737
|
+
config_options, "id=stringappendtest; delimiter=&&", &merge_op));
|
|
4738
|
+
ASSERT_NE(merge_op, nullptr);
|
|
4739
|
+
ASSERT_TRUE(merge_op->IsInstanceOf("stringappendtest"));
|
|
4740
|
+
ASSERT_STREQ(merge_op->Name(), StringAppendTESTOperator::kClassName());
|
|
4741
|
+
delimiter = merge_op->GetOptions<std::string>("Delimiter");
|
|
4742
|
+
ASSERT_NE(delimiter, nullptr);
|
|
4743
|
+
ASSERT_EQ(*delimiter, "&&");
|
|
4744
|
+
|
|
4745
|
+
std::shared_ptr<MergeOperator> copy;
|
|
4746
|
+
std::string mismatch;
|
|
4747
|
+
std::string opts_str = merge_op->ToString(config_options);
|
|
4748
|
+
|
|
4749
|
+
ASSERT_OK(MergeOperator::CreateFromString(config_options, opts_str, ©));
|
|
4750
|
+
ASSERT_TRUE(merge_op->AreEquivalent(config_options, copy.get(), &mismatch));
|
|
4751
|
+
ASSERT_NE(copy, nullptr);
|
|
4752
|
+
delimiter = copy->GetOptions<std::string>("Delimiter");
|
|
4753
|
+
ASSERT_NE(delimiter, nullptr);
|
|
4754
|
+
ASSERT_EQ(*delimiter, "&&");
|
|
3784
4755
|
}
|
|
4756
|
+
|
|
4757
|
+
INSTANTIATE_TEST_CASE_P(OptionsSanityCheckTest, OptionsSanityCheckTest,
|
|
4758
|
+
::testing::Bool());
|
|
3785
4759
|
#endif // !ROCKSDB_LITE
|
|
4760
|
+
|
|
3786
4761
|
} // namespace ROCKSDB_NAMESPACE
|
|
3787
4762
|
|
|
3788
4763
|
int main(int argc, char** argv) {
|