@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
|
@@ -7,53 +7,71 @@
|
|
|
7
7
|
// Use of this source code is governed by a BSD-style license that can be
|
|
8
8
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
9
9
|
|
|
10
|
+
#include "rocksdb/table.h"
|
|
11
|
+
|
|
12
|
+
#include <gtest/gtest.h>
|
|
13
|
+
#include <stddef.h>
|
|
10
14
|
#include <stdio.h>
|
|
15
|
+
|
|
11
16
|
#include <algorithm>
|
|
12
17
|
#include <iostream>
|
|
13
18
|
#include <map>
|
|
14
19
|
#include <memory>
|
|
15
20
|
#include <string>
|
|
21
|
+
#include <unordered_set>
|
|
16
22
|
#include <vector>
|
|
17
23
|
|
|
18
|
-
#include "block_fetcher.h"
|
|
19
24
|
#include "cache/lru_cache.h"
|
|
20
25
|
#include "db/dbformat.h"
|
|
21
26
|
#include "db/memtable.h"
|
|
22
27
|
#include "db/write_batch_internal.h"
|
|
23
28
|
#include "memtable/stl_wrappers.h"
|
|
24
|
-
#include "meta_blocks.h"
|
|
25
29
|
#include "monitoring/statistics.h"
|
|
30
|
+
#include "options/options_helper.h"
|
|
26
31
|
#include "port/port.h"
|
|
32
|
+
#include "port/stack_trace.h"
|
|
27
33
|
#include "rocksdb/cache.h"
|
|
34
|
+
#include "rocksdb/compression_type.h"
|
|
35
|
+
#include "rocksdb/convenience.h"
|
|
28
36
|
#include "rocksdb/db.h"
|
|
29
37
|
#include "rocksdb/env.h"
|
|
30
38
|
#include "rocksdb/file_checksum.h"
|
|
31
39
|
#include "rocksdb/file_system.h"
|
|
40
|
+
#include "rocksdb/filter_policy.h"
|
|
32
41
|
#include "rocksdb/iterator.h"
|
|
33
42
|
#include "rocksdb/memtablerep.h"
|
|
34
43
|
#include "rocksdb/perf_context.h"
|
|
35
44
|
#include "rocksdb/slice_transform.h"
|
|
36
45
|
#include "rocksdb/statistics.h"
|
|
46
|
+
#include "rocksdb/table_properties.h"
|
|
47
|
+
#include "rocksdb/trace_record.h"
|
|
48
|
+
#include "rocksdb/unique_id.h"
|
|
37
49
|
#include "rocksdb/write_buffer_manager.h"
|
|
38
50
|
#include "table/block_based/block.h"
|
|
39
51
|
#include "table/block_based/block_based_table_builder.h"
|
|
40
52
|
#include "table/block_based/block_based_table_factory.h"
|
|
41
53
|
#include "table/block_based/block_based_table_reader.h"
|
|
42
54
|
#include "table/block_based/block_builder.h"
|
|
55
|
+
#include "table/block_based/filter_policy_internal.h"
|
|
43
56
|
#include "table/block_based/flush_block_policy.h"
|
|
57
|
+
#include "table/block_fetcher.h"
|
|
44
58
|
#include "table/format.h"
|
|
45
59
|
#include "table/get_context.h"
|
|
46
60
|
#include "table/internal_iterator.h"
|
|
61
|
+
#include "table/meta_blocks.h"
|
|
47
62
|
#include "table/plain/plain_table_factory.h"
|
|
48
63
|
#include "table/scoped_arena_iterator.h"
|
|
49
64
|
#include "table/sst_file_writer_collectors.h"
|
|
65
|
+
#include "table/unique_id_impl.h"
|
|
50
66
|
#include "test_util/sync_point.h"
|
|
51
67
|
#include "test_util/testharness.h"
|
|
52
68
|
#include "test_util/testutil.h"
|
|
69
|
+
#include "util/coding_lean.h"
|
|
53
70
|
#include "util/compression.h"
|
|
54
71
|
#include "util/file_checksum_helper.h"
|
|
55
72
|
#include "util/random.h"
|
|
56
73
|
#include "util/string_util.h"
|
|
74
|
+
#include "utilities/memory_allocators.h"
|
|
57
75
|
#include "utilities/merge_operators.h"
|
|
58
76
|
|
|
59
77
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -155,6 +173,9 @@ void Increment(const Comparator* cmp, std::string* key) {
|
|
|
155
173
|
}
|
|
156
174
|
}
|
|
157
175
|
|
|
176
|
+
const auto kUnknownColumnFamily =
|
|
177
|
+
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily;
|
|
178
|
+
|
|
158
179
|
} // namespace
|
|
159
180
|
|
|
160
181
|
// Helper class for tests to unify the interface between
|
|
@@ -172,12 +193,12 @@ class Constructor {
|
|
|
172
193
|
// Finish constructing the data structure with all the keys that have
|
|
173
194
|
// been added so far. Returns the keys in sorted order in "*keys"
|
|
174
195
|
// and stores the key/value pairs in "*kvmap"
|
|
175
|
-
void Finish(const Options& options, const
|
|
196
|
+
void Finish(const Options& options, const ImmutableOptions& ioptions,
|
|
176
197
|
const MutableCFOptions& moptions,
|
|
177
198
|
const BlockBasedTableOptions& table_options,
|
|
178
199
|
const InternalKeyComparator& internal_comparator,
|
|
179
200
|
std::vector<std::string>* keys, stl_wrappers::KVMap* kvmap) {
|
|
180
|
-
|
|
201
|
+
last_internal_comparator_ = &internal_comparator;
|
|
181
202
|
*kvmap = data_;
|
|
182
203
|
keys->clear();
|
|
183
204
|
for (const auto& kv : data_) {
|
|
@@ -191,7 +212,7 @@ class Constructor {
|
|
|
191
212
|
|
|
192
213
|
// Construct the data structure from the data in "data"
|
|
193
214
|
virtual Status FinishImpl(const Options& options,
|
|
194
|
-
const
|
|
215
|
+
const ImmutableOptions& ioptions,
|
|
195
216
|
const MutableCFOptions& moptions,
|
|
196
217
|
const BlockBasedTableOptions& table_options,
|
|
197
218
|
const InternalKeyComparator& internal_comparator,
|
|
@@ -209,7 +230,7 @@ class Constructor {
|
|
|
209
230
|
virtual bool AnywayDeleteIterator() const { return false; }
|
|
210
231
|
|
|
211
232
|
protected:
|
|
212
|
-
const InternalKeyComparator*
|
|
233
|
+
const InternalKeyComparator* last_internal_comparator_;
|
|
213
234
|
|
|
214
235
|
private:
|
|
215
236
|
stl_wrappers::KVMap data_;
|
|
@@ -283,7 +304,7 @@ class BlockConstructor : public Constructor {
|
|
|
283
304
|
: Constructor(cmp), comparator_(cmp), block_(nullptr) {}
|
|
284
305
|
~BlockConstructor() override { delete block_; }
|
|
285
306
|
Status FinishImpl(const Options& /*options*/,
|
|
286
|
-
const
|
|
307
|
+
const ImmutableOptions& /*ioptions*/,
|
|
287
308
|
const MutableCFOptions& /*moptions*/,
|
|
288
309
|
const BlockBasedTableOptions& table_options,
|
|
289
310
|
const InternalKeyComparator& /*internal_comparator*/,
|
|
@@ -338,7 +359,7 @@ class TableConstructor : public Constructor {
|
|
|
338
359
|
}
|
|
339
360
|
~TableConstructor() override { Reset(); }
|
|
340
361
|
|
|
341
|
-
Status FinishImpl(const Options& options, const
|
|
362
|
+
Status FinishImpl(const Options& options, const ImmutableOptions& ioptions,
|
|
342
363
|
const MutableCFOptions& moptions,
|
|
343
364
|
const BlockBasedTableOptions& /*table_options*/,
|
|
344
365
|
const InternalKeyComparator& internal_comparator,
|
|
@@ -349,8 +370,7 @@ class TableConstructor : public Constructor {
|
|
|
349
370
|
file_writer_.reset(new WritableFileWriter(
|
|
350
371
|
std::move(sink), "" /* don't care */, FileOptions()));
|
|
351
372
|
std::unique_ptr<TableBuilder> builder;
|
|
352
|
-
|
|
353
|
-
int_tbl_prop_collector_factories;
|
|
373
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
354
374
|
|
|
355
375
|
if (largest_seqno_ != 0) {
|
|
356
376
|
// Pretend that it's an external file written by SstFileWriter.
|
|
@@ -363,10 +383,8 @@ class TableConstructor : public Constructor {
|
|
|
363
383
|
builder.reset(ioptions.table_factory->NewTableBuilder(
|
|
364
384
|
TableBuilderOptions(ioptions, moptions, internal_comparator,
|
|
365
385
|
&int_tbl_prop_collector_factories,
|
|
366
|
-
options.compression, options.
|
|
367
|
-
|
|
368
|
-
column_family_name, level_),
|
|
369
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
386
|
+
options.compression, options.compression_opts,
|
|
387
|
+
kUnknownColumnFamily, column_family_name, level_),
|
|
370
388
|
file_writer_.get()));
|
|
371
389
|
|
|
372
390
|
for (const auto& kv : kv_map) {
|
|
@@ -388,19 +406,8 @@ class TableConstructor : public Constructor {
|
|
|
388
406
|
|
|
389
407
|
// Open the table
|
|
390
408
|
uniq_id_ = cur_uniq_id_++;
|
|
391
|
-
std::unique_ptr<FSRandomAccessFile> source(new test::StringSource(
|
|
392
|
-
TEST_GetSink()->contents(), uniq_id_, ioptions.allow_mmap_reads));
|
|
393
409
|
|
|
394
|
-
|
|
395
|
-
const bool kSkipFilters = true;
|
|
396
|
-
const bool kImmortal = true;
|
|
397
|
-
return ioptions.table_factory->NewTableReader(
|
|
398
|
-
TableReaderOptions(ioptions, moptions.prefix_extractor.get(), soptions,
|
|
399
|
-
internal_comparator, !kSkipFilters, !kImmortal,
|
|
400
|
-
false, level_, largest_seqno_, &block_cache_tracer_,
|
|
401
|
-
moptions.write_buffer_size),
|
|
402
|
-
std::move(file_reader_), TEST_GetSink()->contents().size(),
|
|
403
|
-
&table_reader_);
|
|
410
|
+
return Reopen(ioptions, moptions);
|
|
404
411
|
}
|
|
405
412
|
|
|
406
413
|
InternalIterator* NewIterator(
|
|
@@ -426,15 +433,18 @@ class TableConstructor : public Constructor {
|
|
|
426
433
|
key, TableReaderCaller::kUncategorized);
|
|
427
434
|
}
|
|
428
435
|
|
|
429
|
-
virtual Status Reopen(const
|
|
436
|
+
virtual Status Reopen(const ImmutableOptions& ioptions,
|
|
430
437
|
const MutableCFOptions& moptions) {
|
|
431
438
|
std::unique_ptr<FSRandomAccessFile> source(new test::StringSource(
|
|
432
439
|
TEST_GetSink()->contents(), uniq_id_, ioptions.allow_mmap_reads));
|
|
433
440
|
|
|
434
441
|
file_reader_.reset(new RandomAccessFileReader(std::move(source), "test"));
|
|
435
442
|
return ioptions.table_factory->NewTableReader(
|
|
436
|
-
TableReaderOptions(ioptions, moptions.prefix_extractor
|
|
437
|
-
*
|
|
443
|
+
TableReaderOptions(ioptions, moptions.prefix_extractor, soptions,
|
|
444
|
+
*last_internal_comparator_, /*skip_filters*/ false,
|
|
445
|
+
/*immortal*/ false, false, level_, largest_seqno_,
|
|
446
|
+
&block_cache_tracer_, moptions.write_buffer_size, "",
|
|
447
|
+
uniq_id_),
|
|
438
448
|
std::move(file_reader_), TEST_GetSink()->contents().size(),
|
|
439
449
|
&table_reader_);
|
|
440
450
|
}
|
|
@@ -488,27 +498,28 @@ class MemTableConstructor: public Constructor {
|
|
|
488
498
|
write_buffer_manager_(wb),
|
|
489
499
|
table_factory_(new SkipListFactory) {
|
|
490
500
|
options_.memtable_factory = table_factory_;
|
|
491
|
-
|
|
501
|
+
ImmutableOptions ioptions(options_);
|
|
492
502
|
memtable_ =
|
|
493
503
|
new MemTable(internal_comparator_, ioptions, MutableCFOptions(options_),
|
|
494
504
|
wb, kMaxSequenceNumber, 0 /* column_family_id */);
|
|
495
505
|
memtable_->Ref();
|
|
496
506
|
}
|
|
497
507
|
~MemTableConstructor() override { delete memtable_->Unref(); }
|
|
498
|
-
Status FinishImpl(const Options&, const
|
|
508
|
+
Status FinishImpl(const Options&, const ImmutableOptions& ioptions,
|
|
499
509
|
const MutableCFOptions& /*moptions*/,
|
|
500
510
|
const BlockBasedTableOptions& /*table_options*/,
|
|
501
511
|
const InternalKeyComparator& /*internal_comparator*/,
|
|
502
512
|
const stl_wrappers::KVMap& kv_map) override {
|
|
503
513
|
delete memtable_->Unref();
|
|
504
|
-
|
|
514
|
+
ImmutableOptions mem_ioptions(ioptions);
|
|
505
515
|
memtable_ = new MemTable(internal_comparator_, mem_ioptions,
|
|
506
516
|
MutableCFOptions(options_), write_buffer_manager_,
|
|
507
517
|
kMaxSequenceNumber, 0 /* column_family_id */);
|
|
508
518
|
memtable_->Ref();
|
|
509
519
|
int seq = 1;
|
|
510
520
|
for (const auto& kv : kv_map) {
|
|
511
|
-
Status s = memtable_->Add(seq, kTypeValue, kv.first, kv.second
|
|
521
|
+
Status s = memtable_->Add(seq, kTypeValue, kv.first, kv.second,
|
|
522
|
+
nullptr /* kv_prot_info */);
|
|
512
523
|
if (!s.ok()) {
|
|
513
524
|
return s;
|
|
514
525
|
}
|
|
@@ -563,7 +574,7 @@ class DBConstructor: public Constructor {
|
|
|
563
574
|
}
|
|
564
575
|
~DBConstructor() override { delete db_; }
|
|
565
576
|
Status FinishImpl(const Options& /*options*/,
|
|
566
|
-
const
|
|
577
|
+
const ImmutableOptions& /*ioptions*/,
|
|
567
578
|
const MutableCFOptions& /*moptions*/,
|
|
568
579
|
const BlockBasedTableOptions& /*table_options*/,
|
|
569
580
|
const InternalKeyComparator& /*internal_comparator*/,
|
|
@@ -855,7 +866,7 @@ class HarnessTest : public testing::Test {
|
|
|
855
866
|
constructor_.reset(new DBConstructor(options_.comparator));
|
|
856
867
|
break;
|
|
857
868
|
}
|
|
858
|
-
ioptions_ =
|
|
869
|
+
ioptions_ = ImmutableOptions(options_);
|
|
859
870
|
moptions_ = MutableCFOptions(options_);
|
|
860
871
|
}
|
|
861
872
|
|
|
@@ -1058,7 +1069,7 @@ class HarnessTest : public testing::Test {
|
|
|
1058
1069
|
private:
|
|
1059
1070
|
TestArgs args_;
|
|
1060
1071
|
Options options_;
|
|
1061
|
-
|
|
1072
|
+
ImmutableOptions ioptions_;
|
|
1062
1073
|
MutableCFOptions moptions_;
|
|
1063
1074
|
BlockBasedTableOptions table_options_;
|
|
1064
1075
|
std::unique_ptr<Constructor> constructor_;
|
|
@@ -1139,7 +1150,8 @@ class BlockBasedTableTest
|
|
|
1139
1150
|
&trace_writer));
|
|
1140
1151
|
// Always return Status::OK().
|
|
1141
1152
|
assert(c->block_cache_tracer_
|
|
1142
|
-
.StartTrace(env_, trace_opt,
|
|
1153
|
+
.StartTrace(env_->GetSystemClock().get(), trace_opt,
|
|
1154
|
+
std::move(trace_writer))
|
|
1143
1155
|
.ok());
|
|
1144
1156
|
{
|
|
1145
1157
|
std::string user_key = "k01";
|
|
@@ -1307,7 +1319,7 @@ class FileChecksumTestHelper {
|
|
|
1307
1319
|
uint64_t offset = 0;
|
|
1308
1320
|
Status s;
|
|
1309
1321
|
s = file_reader_->Read(IOOptions(), offset, 2048, &result, scratch.get(),
|
|
1310
|
-
nullptr,
|
|
1322
|
+
nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
|
|
1311
1323
|
if (!s.ok()) {
|
|
1312
1324
|
return s;
|
|
1313
1325
|
}
|
|
@@ -1315,7 +1327,8 @@ class FileChecksumTestHelper {
|
|
|
1315
1327
|
file_checksum_generator->Update(scratch.get(), result.size());
|
|
1316
1328
|
offset += static_cast<uint64_t>(result.size());
|
|
1317
1329
|
s = file_reader_->Read(IOOptions(), offset, 2048, &result, scratch.get(),
|
|
1318
|
-
nullptr,
|
|
1330
|
+
nullptr,
|
|
1331
|
+
Env::IO_TOTAL /* rate_limiter_priority */);
|
|
1319
1332
|
if (!s.ok()) {
|
|
1320
1333
|
return s;
|
|
1321
1334
|
}
|
|
@@ -1340,10 +1353,8 @@ class FileChecksumTestHelper {
|
|
|
1340
1353
|
|
|
1341
1354
|
uint64_t FileChecksumTestHelper::checksum_uniq_id_ = 1;
|
|
1342
1355
|
|
|
1343
|
-
INSTANTIATE_TEST_CASE_P(
|
|
1344
|
-
testing::
|
|
1345
|
-
INSTANTIATE_TEST_CASE_P(FormatLatest, BlockBasedTableTest,
|
|
1346
|
-
testing::Values(test::kLatestFormatVersion));
|
|
1356
|
+
INSTANTIATE_TEST_CASE_P(FormatVersions, BlockBasedTableTest,
|
|
1357
|
+
testing::ValuesIn(test::kFooterFormatVersionsToTest));
|
|
1347
1358
|
|
|
1348
1359
|
// This test serves as the living tutorial for the prefix scan of user collected
|
|
1349
1360
|
// properties.
|
|
@@ -1359,7 +1370,7 @@ TEST_F(TablePropertyTest, PrefixScanTest) {
|
|
|
1359
1370
|
{"num.555.3", "3"}, };
|
|
1360
1371
|
|
|
1361
1372
|
// prefixes that exist
|
|
1362
|
-
for (const std::string
|
|
1373
|
+
for (const std::string prefix : {"num.111", "num.333", "num.555"}) {
|
|
1363
1374
|
int num = 0;
|
|
1364
1375
|
for (auto pos = props.lower_bound(prefix);
|
|
1365
1376
|
pos != props.end() &&
|
|
@@ -1374,7 +1385,7 @@ TEST_F(TablePropertyTest, PrefixScanTest) {
|
|
|
1374
1385
|
}
|
|
1375
1386
|
|
|
1376
1387
|
// prefixes that don't exist
|
|
1377
|
-
for (const std::string
|
|
1388
|
+
for (const std::string prefix :
|
|
1378
1389
|
{"num.000", "num.222", "num.444", "num.666"}) {
|
|
1379
1390
|
auto pos = props.lower_bound(prefix);
|
|
1380
1391
|
ASSERT_TRUE(pos == props.end() ||
|
|
@@ -1382,6 +1393,257 @@ TEST_F(TablePropertyTest, PrefixScanTest) {
|
|
|
1382
1393
|
}
|
|
1383
1394
|
}
|
|
1384
1395
|
|
|
1396
|
+
namespace {
|
|
1397
|
+
struct TestIds {
|
|
1398
|
+
UniqueId64x3 internal_id;
|
|
1399
|
+
UniqueId64x3 external_id;
|
|
1400
|
+
};
|
|
1401
|
+
|
|
1402
|
+
inline bool operator==(const TestIds& lhs, const TestIds& rhs) {
|
|
1403
|
+
return lhs.internal_id == rhs.internal_id &&
|
|
1404
|
+
lhs.external_id == rhs.external_id;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
std::ostream& operator<<(std::ostream& os, const TestIds& ids) {
|
|
1408
|
+
return os << std::hex << "{{{ 0x" << ids.internal_id[0] << "U, 0x"
|
|
1409
|
+
<< ids.internal_id[1] << "U, 0x" << ids.internal_id[2]
|
|
1410
|
+
<< "U }}, {{ 0x" << ids.external_id[0] << "U, 0x"
|
|
1411
|
+
<< ids.external_id[1] << "U, 0x" << ids.external_id[2] << "U }}}";
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
TestIds GetUniqueId(TableProperties* tp, std::unordered_set<uint64_t>* seen,
|
|
1415
|
+
const std::string& db_id, const std::string& db_session_id,
|
|
1416
|
+
uint64_t file_number) {
|
|
1417
|
+
// First test session id logic
|
|
1418
|
+
if (db_session_id.size() == 20) {
|
|
1419
|
+
uint64_t upper;
|
|
1420
|
+
uint64_t lower;
|
|
1421
|
+
EXPECT_OK(DecodeSessionId(db_session_id, &upper, &lower));
|
|
1422
|
+
EXPECT_EQ(EncodeSessionId(upper, lower), db_session_id);
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
// Get external using public API
|
|
1426
|
+
tp->db_id = db_id;
|
|
1427
|
+
tp->db_session_id = db_session_id;
|
|
1428
|
+
tp->orig_file_number = file_number;
|
|
1429
|
+
TestIds t;
|
|
1430
|
+
{
|
|
1431
|
+
std::string uid;
|
|
1432
|
+
EXPECT_OK(GetUniqueIdFromTableProperties(*tp, &uid));
|
|
1433
|
+
EXPECT_EQ(uid.size(), 24U);
|
|
1434
|
+
t.external_id[0] = DecodeFixed64(&uid[0]);
|
|
1435
|
+
t.external_id[1] = DecodeFixed64(&uid[8]);
|
|
1436
|
+
t.external_id[2] = DecodeFixed64(&uid[16]);
|
|
1437
|
+
}
|
|
1438
|
+
// All these should be effectively random
|
|
1439
|
+
EXPECT_TRUE(seen->insert(t.external_id[0]).second);
|
|
1440
|
+
EXPECT_TRUE(seen->insert(t.external_id[1]).second);
|
|
1441
|
+
EXPECT_TRUE(seen->insert(t.external_id[2]).second);
|
|
1442
|
+
|
|
1443
|
+
// Get internal with internal API
|
|
1444
|
+
EXPECT_OK(GetSstInternalUniqueId(db_id, db_session_id, file_number,
|
|
1445
|
+
&t.internal_id));
|
|
1446
|
+
|
|
1447
|
+
// Verify relationship
|
|
1448
|
+
UniqueId64x3 tmp = t.internal_id;
|
|
1449
|
+
InternalUniqueIdToExternal(&tmp);
|
|
1450
|
+
EXPECT_EQ(tmp, t.external_id);
|
|
1451
|
+
ExternalUniqueIdToInternal(&tmp);
|
|
1452
|
+
EXPECT_EQ(tmp, t.internal_id);
|
|
1453
|
+
return t;
|
|
1454
|
+
}
|
|
1455
|
+
} // namespace
|
|
1456
|
+
|
|
1457
|
+
TEST_F(TablePropertyTest, UniqueIdsSchemaAndQuality) {
|
|
1458
|
+
// To ensure the computation only depends on the expected entries, we set
|
|
1459
|
+
// the rest randomly
|
|
1460
|
+
TableProperties tp;
|
|
1461
|
+
TEST_SetRandomTableProperties(&tp);
|
|
1462
|
+
|
|
1463
|
+
// DB id is normally RFC-4122
|
|
1464
|
+
const std::string db_id1 = "7265b6eb-4e42-4aec-86a4-0dc5e73a228d";
|
|
1465
|
+
// Allow other forms of DB id
|
|
1466
|
+
const std::string db_id2 = "1728000184588763620";
|
|
1467
|
+
const std::string db_id3 = "x";
|
|
1468
|
+
|
|
1469
|
+
// DB session id is normally 20 chars in base-36, but 13 to 24 chars
|
|
1470
|
+
// is ok, roughly 64 to 128 bits.
|
|
1471
|
+
const std::string ses_id1 = "ABCDEFGHIJ0123456789";
|
|
1472
|
+
// Same trailing 13 digits
|
|
1473
|
+
const std::string ses_id2 = "HIJ0123456789";
|
|
1474
|
+
const std::string ses_id3 = "0123ABCDEFGHIJ0123456789";
|
|
1475
|
+
// Different trailing 12 digits
|
|
1476
|
+
const std::string ses_id4 = "ABCDEFGH888888888888";
|
|
1477
|
+
// And change length
|
|
1478
|
+
const std::string ses_id5 = "ABCDEFGHIJ012";
|
|
1479
|
+
const std::string ses_id6 = "ABCDEFGHIJ0123456789ABCD";
|
|
1480
|
+
|
|
1481
|
+
using T = TestIds;
|
|
1482
|
+
std::unordered_set<uint64_t> seen;
|
|
1483
|
+
// Establish a stable schema for the unique IDs. These values must not
|
|
1484
|
+
// change for existing table files.
|
|
1485
|
+
// (Note: parens needed for macro parsing, extra braces needed for some
|
|
1486
|
+
// compilers.)
|
|
1487
|
+
EXPECT_EQ(
|
|
1488
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id1, 1),
|
|
1489
|
+
T({{{0x61d7dcf415d9cf19U, 0x160d77aae90757fdU, 0x907f41dfd90724ffU}},
|
|
1490
|
+
{{0xf0bd230365df7464U, 0xca089303f3648eb4U, 0x4b44f7e7324b2817U}}}));
|
|
1491
|
+
// Only change internal_id[1] with file number
|
|
1492
|
+
EXPECT_EQ(
|
|
1493
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id1, 2),
|
|
1494
|
+
T({{{0x61d7dcf415d9cf19U, 0x160d77aae90757feU, 0x907f41dfd90724ffU}},
|
|
1495
|
+
{{0xf13fdf7adcfebb6dU, 0x97cd2226cc033ea2U, 0x198c438182091f0eU}}}));
|
|
1496
|
+
EXPECT_EQ(
|
|
1497
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id1, 123456789),
|
|
1498
|
+
T({{{0x61d7dcf415d9cf19U, 0x160d77aaee5c9ae9U, 0x907f41dfd90724ffU}},
|
|
1499
|
+
{{0x81fbcebe1ac6c4f0U, 0x6b14a64cfdc0f1c4U, 0x7d8fb6eaf18edbb3U}}}));
|
|
1500
|
+
// Change internal_id[1] and internal_id[2] with db_id
|
|
1501
|
+
EXPECT_EQ(
|
|
1502
|
+
GetUniqueId(&tp, &seen, db_id2, ses_id1, 1),
|
|
1503
|
+
T({{{0x61d7dcf415d9cf19U, 0xf89c471f572f0d25U, 0x1f0f2a5eb0e6257eU}},
|
|
1504
|
+
{{0x7f1d01d453616991U, 0x32ddf2afec804ab2U, 0xd10a1ee2f0c7d9c1U}}}));
|
|
1505
|
+
EXPECT_EQ(
|
|
1506
|
+
GetUniqueId(&tp, &seen, db_id3, ses_id1, 1),
|
|
1507
|
+
T({{{0x61d7dcf415d9cf19U, 0xfed297a8154a57d0U, 0x8b931b9cdebd9e8U}},
|
|
1508
|
+
{{0x62b2f43183f6894bU, 0x897ff2b460eefad1U, 0xf4ec189fb2d15e04U}}}));
|
|
1509
|
+
// Keeping same last 13 digits of ses_id keeps same internal_id[0]
|
|
1510
|
+
EXPECT_EQ(
|
|
1511
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id2, 1),
|
|
1512
|
+
T({{{0x61d7dcf415d9cf19U, 0x5f6cc4fa2d528c8U, 0x7b70845d5bfb5446U}},
|
|
1513
|
+
{{0x96d1c83ffcc94266U, 0x82663eac0ec6e14aU, 0x94a88b49678b77f6U}}}));
|
|
1514
|
+
EXPECT_EQ(
|
|
1515
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id3, 1),
|
|
1516
|
+
T({{{0x61d7dcf415d9cf19U, 0xfc7232879db37ea2U, 0xc0378d74ea4c89cdU}},
|
|
1517
|
+
{{0xdf2ef57e98776905U, 0xda5b31c987da833bU, 0x79c1b4bd0a9e760dU}}}));
|
|
1518
|
+
// Changing last 12 digits of ses_id only changes internal_id[0]
|
|
1519
|
+
// (vs. db_id1, ses_id1, 1)
|
|
1520
|
+
EXPECT_EQ(
|
|
1521
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id4, 1),
|
|
1522
|
+
T({{{0x4f07cc0d003a83a8U, 0x160d77aae90757fdU, 0x907f41dfd90724ffU}},
|
|
1523
|
+
{{0xbcf85336a9f71f04U, 0x4f2949e2f3adb60dU, 0x9ca0def976abfa10U}}}));
|
|
1524
|
+
// ses_id can change everything.
|
|
1525
|
+
EXPECT_EQ(
|
|
1526
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id5, 1),
|
|
1527
|
+
T({{{0x94b8768e43f87ce6U, 0xc2559653ac4e7c93U, 0xde6dff6bbb1223U}},
|
|
1528
|
+
{{0x5a9537af681817fbU, 0x1afcd1fecaead5eaU, 0x767077ad9ebe0008U}}}));
|
|
1529
|
+
EXPECT_EQ(
|
|
1530
|
+
GetUniqueId(&tp, &seen, db_id1, ses_id6, 1),
|
|
1531
|
+
T({{{0x43cfb0ffa3b710edU, 0x263c580426406a1bU, 0xfacc91379a80d29dU}},
|
|
1532
|
+
{{0xfa90547d84cb1cdbU, 0x2afe99c641992d4aU, 0x205b7f7b60e51cc2U}}}));
|
|
1533
|
+
|
|
1534
|
+
// Now verify more thoroughly that any small change in inputs completely
|
|
1535
|
+
// changes external unique id.
|
|
1536
|
+
// (Relying on 'seen' checks etc. in GetUniqueId)
|
|
1537
|
+
std::string db_id = "00000000-0000-0000-0000-000000000000";
|
|
1538
|
+
std::string ses_id = "000000000000000000000000";
|
|
1539
|
+
uint64_t file_num = 1;
|
|
1540
|
+
// change db_id
|
|
1541
|
+
for (size_t i = 0; i < db_id.size(); ++i) {
|
|
1542
|
+
if (db_id[i] == '-') {
|
|
1543
|
+
continue;
|
|
1544
|
+
}
|
|
1545
|
+
for (char alt : std::string("123456789abcdef")) {
|
|
1546
|
+
db_id[i] = alt;
|
|
1547
|
+
GetUniqueId(&tp, &seen, db_id, ses_id, file_num);
|
|
1548
|
+
}
|
|
1549
|
+
db_id[i] = '0';
|
|
1550
|
+
}
|
|
1551
|
+
// change ses_id
|
|
1552
|
+
for (size_t i = 0; i < ses_id.size(); ++i) {
|
|
1553
|
+
for (char alt : std::string("123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
|
|
1554
|
+
ses_id[i] = alt;
|
|
1555
|
+
GetUniqueId(&tp, &seen, db_id, ses_id, file_num);
|
|
1556
|
+
}
|
|
1557
|
+
ses_id[i] = '0';
|
|
1558
|
+
}
|
|
1559
|
+
// change file_num
|
|
1560
|
+
for (int i = 1; i < 64; ++i) {
|
|
1561
|
+
GetUniqueId(&tp, &seen, db_id, ses_id, file_num << i);
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
// Verify that "all zeros" in first 128 bits is equivalent for internal and
|
|
1565
|
+
// external IDs. This way, as long as we avoid "all zeros" in internal IDs,
|
|
1566
|
+
// we avoid it in external IDs.
|
|
1567
|
+
{
|
|
1568
|
+
UniqueId64x3 id1{{0, 0, Random::GetTLSInstance()->Next64()}};
|
|
1569
|
+
UniqueId64x3 id2 = id1;
|
|
1570
|
+
InternalUniqueIdToExternal(&id1);
|
|
1571
|
+
EXPECT_EQ(id1, id2);
|
|
1572
|
+
ExternalUniqueIdToInternal(&id2);
|
|
1573
|
+
EXPECT_EQ(id1, id2);
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
namespace {
|
|
1578
|
+
void SetGoodTableProperties(TableProperties* tp) {
|
|
1579
|
+
// To ensure the computation only depends on the expected entries, we set
|
|
1580
|
+
// the rest randomly
|
|
1581
|
+
TEST_SetRandomTableProperties(tp);
|
|
1582
|
+
tp->db_id = "7265b6eb-4e42-4aec-86a4-0dc5e73a228d";
|
|
1583
|
+
tp->db_session_id = "ABCDEFGHIJ0123456789";
|
|
1584
|
+
tp->orig_file_number = 1;
|
|
1585
|
+
}
|
|
1586
|
+
} // namespace
|
|
1587
|
+
|
|
1588
|
+
TEST_F(TablePropertyTest, UniqueIdHumanStrings) {
|
|
1589
|
+
TableProperties tp;
|
|
1590
|
+
SetGoodTableProperties(&tp);
|
|
1591
|
+
|
|
1592
|
+
std::string tmp;
|
|
1593
|
+
EXPECT_OK(GetUniqueIdFromTableProperties(tp, &tmp));
|
|
1594
|
+
EXPECT_EQ(tmp,
|
|
1595
|
+
(std::string{{'\x64', '\x74', '\xdf', '\x65', '\x03', '\x23',
|
|
1596
|
+
'\xbd', '\xf0', '\xb4', '\x8e', '\x64', '\xf3',
|
|
1597
|
+
'\x03', '\x93', '\x08', '\xca', '\x17', '\x28',
|
|
1598
|
+
'\x4b', '\x32', '\xe7', '\xf7', '\x44', '\x4b'}}));
|
|
1599
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp),
|
|
1600
|
+
"6474DF650323BDF0-B48E64F3039308CA-17284B32E7F7444B");
|
|
1601
|
+
|
|
1602
|
+
// including zero padding
|
|
1603
|
+
tmp = std::string(24U, '\0');
|
|
1604
|
+
tmp[15] = '\x12';
|
|
1605
|
+
tmp[23] = '\xAB';
|
|
1606
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp),
|
|
1607
|
+
"0000000000000000-0000000000000012-00000000000000AB");
|
|
1608
|
+
|
|
1609
|
+
// And shortened
|
|
1610
|
+
tmp = std::string(20U, '\0');
|
|
1611
|
+
tmp[5] = '\x12';
|
|
1612
|
+
tmp[10] = '\xAB';
|
|
1613
|
+
tmp[17] = '\xEF';
|
|
1614
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp),
|
|
1615
|
+
"0000000000120000-0000AB0000000000-00EF0000");
|
|
1616
|
+
|
|
1617
|
+
tmp.resize(16);
|
|
1618
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp), "0000000000120000-0000AB0000000000");
|
|
1619
|
+
|
|
1620
|
+
tmp.resize(11);
|
|
1621
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp), "0000000000120000-0000AB");
|
|
1622
|
+
|
|
1623
|
+
tmp.resize(6);
|
|
1624
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp), "000000000012");
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
TEST_F(TablePropertyTest, UniqueIdsFailure) {
|
|
1628
|
+
TableProperties tp;
|
|
1629
|
+
std::string tmp;
|
|
1630
|
+
|
|
1631
|
+
// Missing DB id
|
|
1632
|
+
SetGoodTableProperties(&tp);
|
|
1633
|
+
tp.db_id = "";
|
|
1634
|
+
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1635
|
+
|
|
1636
|
+
// Missing session id
|
|
1637
|
+
SetGoodTableProperties(&tp);
|
|
1638
|
+
tp.db_session_id = "";
|
|
1639
|
+
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1640
|
+
|
|
1641
|
+
// Missing file number
|
|
1642
|
+
SetGoodTableProperties(&tp);
|
|
1643
|
+
tp.orig_file_number = 0;
|
|
1644
|
+
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1385
1647
|
// This test include all the basic checks except those for index size and block
|
|
1386
1648
|
// size, which will be conducted in separated unit tests.
|
|
1387
1649
|
TEST_P(BlockBasedTableTest, BasicBlockBasedTableProperties) {
|
|
@@ -1408,9 +1670,8 @@ TEST_P(BlockBasedTableTest, BasicBlockBasedTableProperties) {
|
|
|
1408
1670
|
table_options.block_restart_interval = 1;
|
|
1409
1671
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1410
1672
|
|
|
1411
|
-
|
|
1673
|
+
ImmutableOptions ioptions(options);
|
|
1412
1674
|
MutableCFOptions moptions(options);
|
|
1413
|
-
ioptions.statistics = options.statistics.get();
|
|
1414
1675
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1415
1676
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
1416
1677
|
ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_NOT_COMPRESSED), 0);
|
|
@@ -1432,7 +1693,8 @@ TEST_P(BlockBasedTableTest, BasicBlockBasedTableProperties) {
|
|
|
1432
1693
|
block_builder.Add(item.first, item.second);
|
|
1433
1694
|
}
|
|
1434
1695
|
Slice content = block_builder.Finish();
|
|
1435
|
-
ASSERT_EQ(content.size() + kBlockTrailerSize +
|
|
1696
|
+
ASSERT_EQ(content.size() + BlockBasedTable::kBlockTrailerSize +
|
|
1697
|
+
diff_internal_user_bytes,
|
|
1436
1698
|
props.data_size);
|
|
1437
1699
|
c.ResetTableReader();
|
|
1438
1700
|
}
|
|
@@ -1457,9 +1719,8 @@ uint64_t BlockBasedTableTest::IndexUncompressedHelper(bool compressed) {
|
|
|
1457
1719
|
table_options.enable_index_compression = compressed;
|
|
1458
1720
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1459
1721
|
|
|
1460
|
-
|
|
1722
|
+
ImmutableOptions ioptions(options);
|
|
1461
1723
|
MutableCFOptions moptions(options);
|
|
1462
|
-
ioptions.statistics = options.statistics.get();
|
|
1463
1724
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1464
1725
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
1465
1726
|
c.ResetTableReader();
|
|
@@ -1484,7 +1745,7 @@ TEST_P(BlockBasedTableTest, BlockBasedTableProperties2) {
|
|
|
1484
1745
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
1485
1746
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1486
1747
|
|
|
1487
|
-
const
|
|
1748
|
+
const ImmutableOptions ioptions(options);
|
|
1488
1749
|
const MutableCFOptions moptions(options);
|
|
1489
1750
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1490
1751
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -1518,7 +1779,7 @@ TEST_P(BlockBasedTableTest, BlockBasedTableProperties2) {
|
|
|
1518
1779
|
options.table_properties_collector_factories.emplace_back(
|
|
1519
1780
|
new DummyPropertiesCollectorFactory2());
|
|
1520
1781
|
|
|
1521
|
-
const
|
|
1782
|
+
const ImmutableOptions ioptions(options);
|
|
1522
1783
|
const MutableCFOptions moptions(options);
|
|
1523
1784
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1524
1785
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -1562,7 +1823,7 @@ TEST_P(BlockBasedTableTest, RangeDelBlock) {
|
|
|
1562
1823
|
table_options.block_restart_interval = 1;
|
|
1563
1824
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1564
1825
|
|
|
1565
|
-
const
|
|
1826
|
+
const ImmutableOptions ioptions(options);
|
|
1566
1827
|
const MutableCFOptions moptions(options);
|
|
1567
1828
|
std::unique_ptr<InternalKeyComparator> internal_cmp(
|
|
1568
1829
|
new InternalKeyComparator(options.comparator));
|
|
@@ -1606,12 +1867,12 @@ TEST_P(BlockBasedTableTest, FilterPolicyNameProperties) {
|
|
|
1606
1867
|
Options options;
|
|
1607
1868
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1608
1869
|
|
|
1609
|
-
const
|
|
1870
|
+
const ImmutableOptions ioptions(options);
|
|
1610
1871
|
const MutableCFOptions moptions(options);
|
|
1611
1872
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1612
1873
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
1613
1874
|
auto& props = *c.GetTableReader()->GetTableProperties();
|
|
1614
|
-
ASSERT_EQ(
|
|
1875
|
+
ASSERT_EQ(table_options.filter_policy->Name(), props.filter_policy_name);
|
|
1615
1876
|
c.ResetTableReader();
|
|
1616
1877
|
}
|
|
1617
1878
|
|
|
@@ -1650,7 +1911,7 @@ void PrefetchRange(TableConstructor* c, Options* opt,
|
|
|
1650
1911
|
// reset the cache and reopen the table
|
|
1651
1912
|
table_options->block_cache = NewLRUCache(16 * 1024 * 1024, 4);
|
|
1652
1913
|
opt->table_factory.reset(NewBlockBasedTableFactory(*table_options));
|
|
1653
|
-
const
|
|
1914
|
+
const ImmutableOptions ioptions2(*opt);
|
|
1654
1915
|
const MutableCFOptions moptions(*opt);
|
|
1655
1916
|
ASSERT_OK(c->Reopen(ioptions2, moptions));
|
|
1656
1917
|
|
|
@@ -1708,7 +1969,7 @@ TEST_P(BlockBasedTableTest, PrefetchTest) {
|
|
|
1708
1969
|
c.Add("k07", std::string(100000, 'x'));
|
|
1709
1970
|
std::vector<std::string> keys;
|
|
1710
1971
|
stl_wrappers::KVMap kvmap;
|
|
1711
|
-
const
|
|
1972
|
+
const ImmutableOptions ioptions(opt);
|
|
1712
1973
|
const MutableCFOptions moptions(opt);
|
|
1713
1974
|
c.Finish(opt, ioptions, moptions, table_options, *ikc, &keys, &kvmap);
|
|
1714
1975
|
c.ResetTableReader();
|
|
@@ -1755,7 +2016,7 @@ TEST_P(BlockBasedTableTest, PrefetchTest) {
|
|
|
1755
2016
|
|
|
1756
2017
|
TEST_P(BlockBasedTableTest, TotalOrderSeekOnHashIndex) {
|
|
1757
2018
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
1758
|
-
for (int i = 0; i <=
|
|
2019
|
+
for (int i = 0; i <= 4; ++i) {
|
|
1759
2020
|
Options options;
|
|
1760
2021
|
// Make each key/value an individual block
|
|
1761
2022
|
table_options.block_size = 64;
|
|
@@ -1772,25 +2033,18 @@ TEST_P(BlockBasedTableTest, TotalOrderSeekOnHashIndex) {
|
|
|
1772
2033
|
options.prefix_extractor.reset(NewFixedPrefixTransform(4));
|
|
1773
2034
|
break;
|
|
1774
2035
|
case 2:
|
|
1775
|
-
// Hash search index with hash_index_allow_collision
|
|
1776
|
-
table_options.index_type = BlockBasedTableOptions::kHashSearch;
|
|
1777
|
-
table_options.hash_index_allow_collision = true;
|
|
1778
|
-
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
1779
|
-
options.prefix_extractor.reset(NewFixedPrefixTransform(4));
|
|
1780
|
-
break;
|
|
1781
|
-
case 3:
|
|
1782
2036
|
// Hash search index with filter policy
|
|
1783
2037
|
table_options.index_type = BlockBasedTableOptions::kHashSearch;
|
|
1784
2038
|
table_options.filter_policy.reset(NewBloomFilterPolicy(10));
|
|
1785
2039
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
1786
2040
|
options.prefix_extractor.reset(NewFixedPrefixTransform(4));
|
|
1787
2041
|
break;
|
|
1788
|
-
case
|
|
2042
|
+
case 3:
|
|
1789
2043
|
// Two-level index
|
|
1790
2044
|
table_options.index_type = BlockBasedTableOptions::kTwoLevelIndexSearch;
|
|
1791
2045
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
1792
2046
|
break;
|
|
1793
|
-
case
|
|
2047
|
+
case 4:
|
|
1794
2048
|
// Binary search with first key
|
|
1795
2049
|
table_options.index_type =
|
|
1796
2050
|
BlockBasedTableOptions::kBinarySearchWithFirstKey;
|
|
@@ -1809,7 +2063,7 @@ TEST_P(BlockBasedTableTest, TotalOrderSeekOnHashIndex) {
|
|
|
1809
2063
|
c.Add("cccc2", std::string('a', 56));
|
|
1810
2064
|
std::vector<std::string> keys;
|
|
1811
2065
|
stl_wrappers::KVMap kvmap;
|
|
1812
|
-
const
|
|
2066
|
+
const ImmutableOptions ioptions(options);
|
|
1813
2067
|
const MutableCFOptions moptions(options);
|
|
1814
2068
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1815
2069
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -1868,7 +2122,7 @@ TEST_P(BlockBasedTableTest, NoopTransformSeek) {
|
|
|
1868
2122
|
c.Add(key.Encode().ToString(), "b");
|
|
1869
2123
|
std::vector<std::string> keys;
|
|
1870
2124
|
stl_wrappers::KVMap kvmap;
|
|
1871
|
-
const
|
|
2125
|
+
const ImmutableOptions ioptions(options);
|
|
1872
2126
|
const MutableCFOptions moptions(options);
|
|
1873
2127
|
const InternalKeyComparator internal_comparator(options.comparator);
|
|
1874
2128
|
c.Finish(options, ioptions, moptions, table_options, internal_comparator,
|
|
@@ -1906,14 +2160,14 @@ TEST_P(BlockBasedTableTest, SkipPrefixBloomFilter) {
|
|
|
1906
2160
|
c.Add(key.Encode().ToString(), "test");
|
|
1907
2161
|
std::vector<std::string> keys;
|
|
1908
2162
|
stl_wrappers::KVMap kvmap;
|
|
1909
|
-
const
|
|
2163
|
+
const ImmutableOptions ioptions(options);
|
|
1910
2164
|
const MutableCFOptions moptions(options);
|
|
1911
2165
|
const InternalKeyComparator internal_comparator(options.comparator);
|
|
1912
2166
|
c.Finish(options, ioptions, moptions, table_options, internal_comparator,
|
|
1913
2167
|
&keys, &kvmap);
|
|
1914
2168
|
// TODO(Zhongyi): update test to use MutableCFOptions
|
|
1915
2169
|
options.prefix_extractor.reset(NewFixedPrefixTransform(9));
|
|
1916
|
-
const
|
|
2170
|
+
const ImmutableOptions new_ioptions(options);
|
|
1917
2171
|
const MutableCFOptions new_moptions(options);
|
|
1918
2172
|
ASSERT_OK(c.Reopen(new_ioptions, new_moptions));
|
|
1919
2173
|
auto reader = c.GetTableReader();
|
|
@@ -1933,6 +2187,152 @@ TEST_P(BlockBasedTableTest, SkipPrefixBloomFilter) {
|
|
|
1933
2187
|
}
|
|
1934
2188
|
}
|
|
1935
2189
|
|
|
2190
|
+
TEST_P(BlockBasedTableTest, BadChecksumType) {
|
|
2191
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
2192
|
+
|
|
2193
|
+
Options options;
|
|
2194
|
+
options.comparator = BytewiseComparator();
|
|
2195
|
+
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
2196
|
+
|
|
2197
|
+
TableConstructor c(options.comparator);
|
|
2198
|
+
InternalKey key("abc", 1, kTypeValue);
|
|
2199
|
+
c.Add(key.Encode().ToString(), "test");
|
|
2200
|
+
std::vector<std::string> keys;
|
|
2201
|
+
stl_wrappers::KVMap kvmap;
|
|
2202
|
+
const ImmutableOptions ioptions(options);
|
|
2203
|
+
const MutableCFOptions moptions(options);
|
|
2204
|
+
const InternalKeyComparator internal_comparator(options.comparator);
|
|
2205
|
+
c.Finish(options, ioptions, moptions, table_options, internal_comparator,
|
|
2206
|
+
&keys, &kvmap);
|
|
2207
|
+
|
|
2208
|
+
// Corrupt checksum type (123 is invalid)
|
|
2209
|
+
auto& sink = *c.TEST_GetSink();
|
|
2210
|
+
size_t len = sink.contents_.size();
|
|
2211
|
+
ASSERT_EQ(sink.contents_[len - Footer::kNewVersionsEncodedLength], kCRC32c);
|
|
2212
|
+
sink.contents_[len - Footer::kNewVersionsEncodedLength] = char{123};
|
|
2213
|
+
|
|
2214
|
+
// (Re-)Open table file with bad checksum type
|
|
2215
|
+
const ImmutableOptions new_ioptions(options);
|
|
2216
|
+
const MutableCFOptions new_moptions(options);
|
|
2217
|
+
Status s = c.Reopen(new_ioptions, new_moptions);
|
|
2218
|
+
ASSERT_NOK(s);
|
|
2219
|
+
ASSERT_EQ(s.ToString(),
|
|
2220
|
+
"Corruption: Corrupt or unsupported checksum type: 123");
|
|
2221
|
+
}
|
|
2222
|
+
|
|
2223
|
+
namespace {
|
|
2224
|
+
std::string ChecksumAsString(const std::string& data,
|
|
2225
|
+
ChecksumType checksum_type) {
|
|
2226
|
+
uint32_t v = ComputeBuiltinChecksum(checksum_type, data.data(), data.size());
|
|
2227
|
+
|
|
2228
|
+
// Verify consistency with other function
|
|
2229
|
+
if (data.size() >= 1) {
|
|
2230
|
+
EXPECT_EQ(v, ComputeBuiltinChecksumWithLastByte(
|
|
2231
|
+
checksum_type, data.data(), data.size() - 1, data.back()));
|
|
2232
|
+
}
|
|
2233
|
+
// Little endian as in file
|
|
2234
|
+
std::array<char, 4> raw_bytes;
|
|
2235
|
+
EncodeFixed32(raw_bytes.data(), v);
|
|
2236
|
+
return Slice(raw_bytes.data(), raw_bytes.size()).ToString(/*hex*/ true);
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
std::string ChecksumAsString(std::string* data, char new_last_byte,
|
|
2240
|
+
ChecksumType checksum_type) {
|
|
2241
|
+
data->back() = new_last_byte;
|
|
2242
|
+
return ChecksumAsString(*data, checksum_type);
|
|
2243
|
+
}
|
|
2244
|
+
} // namespace
|
|
2245
|
+
|
|
2246
|
+
// Make sure that checksum values don't change in later versions, even if
|
|
2247
|
+
// consistent within current version.
|
|
2248
|
+
TEST_P(BlockBasedTableTest, ChecksumSchemas) {
|
|
2249
|
+
std::string b0 = "x";
|
|
2250
|
+
std::string b1 = "This is a short block!x";
|
|
2251
|
+
std::string b2;
|
|
2252
|
+
for (int i = 0; i < 100; ++i) {
|
|
2253
|
+
b2.append("This is a long block!");
|
|
2254
|
+
}
|
|
2255
|
+
b2.append("x");
|
|
2256
|
+
// Trailing 'x' will be replaced by compression type
|
|
2257
|
+
|
|
2258
|
+
std::string empty;
|
|
2259
|
+
|
|
2260
|
+
char ct1 = kNoCompression;
|
|
2261
|
+
char ct2 = kSnappyCompression;
|
|
2262
|
+
char ct3 = kZSTD;
|
|
2263
|
+
|
|
2264
|
+
// Note: first byte of trailer is compression type, last 4 are checksum
|
|
2265
|
+
|
|
2266
|
+
for (ChecksumType t : GetSupportedChecksums()) {
|
|
2267
|
+
switch (t) {
|
|
2268
|
+
case kNoChecksum:
|
|
2269
|
+
EXPECT_EQ(ChecksumAsString(empty, t), "00000000");
|
|
2270
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct1, t), "00000000");
|
|
2271
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct2, t), "00000000");
|
|
2272
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct3, t), "00000000");
|
|
2273
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct1, t), "00000000");
|
|
2274
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct2, t), "00000000");
|
|
2275
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct3, t), "00000000");
|
|
2276
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct1, t), "00000000");
|
|
2277
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct2, t), "00000000");
|
|
2278
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct3, t), "00000000");
|
|
2279
|
+
break;
|
|
2280
|
+
case kCRC32c:
|
|
2281
|
+
EXPECT_EQ(ChecksumAsString(empty, t), "D8EA82A2");
|
|
2282
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct1, t), "D28F2549");
|
|
2283
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct2, t), "052B2843");
|
|
2284
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct3, t), "46F8F711");
|
|
2285
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct1, t), "583F0355");
|
|
2286
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct2, t), "2F9B0A57");
|
|
2287
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct3, t), "ECE7DA1D");
|
|
2288
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct1, t), "943EF0AB");
|
|
2289
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct2, t), "43A2EDB1");
|
|
2290
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct3, t), "00E53D63");
|
|
2291
|
+
break;
|
|
2292
|
+
case kxxHash:
|
|
2293
|
+
EXPECT_EQ(ChecksumAsString(empty, t), "055DCC02");
|
|
2294
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct1, t), "3EB065CF");
|
|
2295
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct2, t), "31F79238");
|
|
2296
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct3, t), "320D2E00");
|
|
2297
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct1, t), "4A2E5FB0");
|
|
2298
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct2, t), "0BD9F652");
|
|
2299
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct3, t), "B4107E50");
|
|
2300
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct1, t), "20F4D4BA");
|
|
2301
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct2, t), "8F1A1F99");
|
|
2302
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct3, t), "A191A338");
|
|
2303
|
+
break;
|
|
2304
|
+
case kxxHash64:
|
|
2305
|
+
EXPECT_EQ(ChecksumAsString(empty, t), "99E9D851");
|
|
2306
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct1, t), "682705DB");
|
|
2307
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct2, t), "30E7211B");
|
|
2308
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct3, t), "B7BB58E8");
|
|
2309
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct1, t), "B74655EF");
|
|
2310
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct2, t), "B6C8BBBE");
|
|
2311
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct3, t), "AED9E3B4");
|
|
2312
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct1, t), "0D4999FE");
|
|
2313
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct2, t), "F5932423");
|
|
2314
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct3, t), "6B31BAB1");
|
|
2315
|
+
break;
|
|
2316
|
+
case kXXH3:
|
|
2317
|
+
EXPECT_EQ(ChecksumAsString(empty, t), "00000000");
|
|
2318
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct1, t), "C294D338");
|
|
2319
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct2, t), "1B174353");
|
|
2320
|
+
EXPECT_EQ(ChecksumAsString(&b0, ct3, t), "2D0E20C8");
|
|
2321
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct1, t), "B37FB5E6");
|
|
2322
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct2, t), "6AFC258D");
|
|
2323
|
+
EXPECT_EQ(ChecksumAsString(&b1, ct3, t), "5CE54616");
|
|
2324
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct1, t), "FA2D482E");
|
|
2325
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct2, t), "23AED845");
|
|
2326
|
+
EXPECT_EQ(ChecksumAsString(&b2, ct3, t), "15B7BBDE");
|
|
2327
|
+
break;
|
|
2328
|
+
default:
|
|
2329
|
+
// Force this test to be updated on new ChecksumTypes
|
|
2330
|
+
assert(false);
|
|
2331
|
+
break;
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
|
|
1936
2336
|
void AddInternalKey(TableConstructor* c, const std::string& prefix,
|
|
1937
2337
|
std::string value = "v", int /*suffix_len*/ = 800) {
|
|
1938
2338
|
static Random rnd(1023);
|
|
@@ -1970,7 +2370,7 @@ void TableTest::IndexTest(BlockBasedTableOptions table_options) {
|
|
|
1970
2370
|
|
|
1971
2371
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
1972
2372
|
new InternalKeyComparator(BytewiseComparator()));
|
|
1973
|
-
const
|
|
2373
|
+
const ImmutableOptions ioptions(options);
|
|
1974
2374
|
const MutableCFOptions moptions(options);
|
|
1975
2375
|
c.Finish(options, ioptions, moptions, table_options, *comparator, &keys,
|
|
1976
2376
|
&kvmap);
|
|
@@ -2173,7 +2573,7 @@ TEST_P(BlockBasedTableTest, IndexSeekOptimizationIncomplete) {
|
|
|
2173
2573
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
2174
2574
|
Options options;
|
|
2175
2575
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
2176
|
-
const
|
|
2576
|
+
const ImmutableOptions ioptions(options);
|
|
2177
2577
|
const MutableCFOptions moptions(options);
|
|
2178
2578
|
|
|
2179
2579
|
TableConstructor c(BytewiseComparator());
|
|
@@ -2260,7 +2660,7 @@ TEST_P(BlockBasedTableTest, BinaryIndexWithFirstKey2) {
|
|
|
2260
2660
|
Statistics* stats = options.statistics.get();
|
|
2261
2661
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
2262
2662
|
new InternalKeyComparator(BytewiseComparator()));
|
|
2263
|
-
const
|
|
2663
|
+
const ImmutableOptions ioptions(options);
|
|
2264
2664
|
const MutableCFOptions moptions(options);
|
|
2265
2665
|
|
|
2266
2666
|
TableConstructor c(BytewiseComparator());
|
|
@@ -2458,7 +2858,7 @@ TEST_P(BlockBasedTableTest, BinaryIndexWithFirstKeyGlobalSeqno) {
|
|
|
2458
2858
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
2459
2859
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
2460
2860
|
new InternalKeyComparator(BytewiseComparator()));
|
|
2461
|
-
const
|
|
2861
|
+
const ImmutableOptions ioptions(options);
|
|
2462
2862
|
const MutableCFOptions moptions(options);
|
|
2463
2863
|
|
|
2464
2864
|
TableConstructor c(BytewiseComparator(), /* convert_to_internal_key */ false,
|
|
@@ -2533,7 +2933,7 @@ TEST_P(BlockBasedTableTest, IndexSizeStat) {
|
|
|
2533
2933
|
table_options.block_restart_interval = 1;
|
|
2534
2934
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
2535
2935
|
|
|
2536
|
-
const
|
|
2936
|
+
const ImmutableOptions ioptions(options);
|
|
2537
2937
|
const MutableCFOptions moptions(options);
|
|
2538
2938
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2539
2939
|
GetPlainInternalComparator(options.comparator), &ks, &kvmap);
|
|
@@ -2562,7 +2962,7 @@ TEST_P(BlockBasedTableTest, NumBlockStat) {
|
|
|
2562
2962
|
|
|
2563
2963
|
std::vector<std::string> ks;
|
|
2564
2964
|
stl_wrappers::KVMap kvmap;
|
|
2565
|
-
const
|
|
2965
|
+
const ImmutableOptions ioptions(options);
|
|
2566
2966
|
const MutableCFOptions moptions(options);
|
|
2567
2967
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2568
2968
|
GetPlainInternalComparator(options.comparator), &ks, &kvmap);
|
|
@@ -2578,12 +2978,12 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
|
|
|
2578
2978
|
options.create_if_missing = true;
|
|
2579
2979
|
table_options.block_cache = NewLRUCache(1024 * 1024, 0);
|
|
2580
2980
|
table_options.cache_index_and_filter_blocks = true;
|
|
2581
|
-
table_options.filter_policy.reset(NewBloomFilterPolicy(10
|
|
2981
|
+
table_options.filter_policy.reset(NewBloomFilterPolicy(10));
|
|
2582
2982
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
2583
2983
|
SetupTracingTest(&c);
|
|
2584
2984
|
std::vector<std::string> keys;
|
|
2585
2985
|
stl_wrappers::KVMap kvmap;
|
|
2586
|
-
|
|
2986
|
+
ImmutableOptions ioptions(options);
|
|
2587
2987
|
MutableCFOptions moptions(options);
|
|
2588
2988
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2589
2989
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -2617,14 +3017,14 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
|
|
|
2617
3017
|
// Then we should have three records for one index, one filter, and one data
|
|
2618
3018
|
// block access.
|
|
2619
3019
|
record.get_id = 1;
|
|
2620
|
-
record.block_type = TraceType::
|
|
3020
|
+
record.block_type = TraceType::kBlockTraceFilterBlock;
|
|
2621
3021
|
record.caller = TableReaderCaller::kUserGet;
|
|
2622
3022
|
record.get_from_user_specified_snapshot = Boolean::kFalse;
|
|
2623
3023
|
record.referenced_key = encoded_key;
|
|
2624
3024
|
record.referenced_key_exist_in_block = Boolean::kTrue;
|
|
2625
3025
|
record.is_cache_hit = Boolean::kTrue;
|
|
2626
3026
|
expected_records.push_back(record);
|
|
2627
|
-
record.block_type = TraceType::
|
|
3027
|
+
record.block_type = TraceType::kBlockTraceIndexBlock;
|
|
2628
3028
|
expected_records.push_back(record);
|
|
2629
3029
|
record.is_cache_hit = Boolean::kFalse;
|
|
2630
3030
|
record.block_type = TraceType::kBlockTraceDataBlock;
|
|
@@ -2632,12 +3032,12 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
|
|
|
2632
3032
|
// The second get should all observe cache hits.
|
|
2633
3033
|
record.is_cache_hit = Boolean::kTrue;
|
|
2634
3034
|
record.get_id = 2;
|
|
2635
|
-
record.block_type = TraceType::
|
|
3035
|
+
record.block_type = TraceType::kBlockTraceFilterBlock;
|
|
2636
3036
|
record.caller = TableReaderCaller::kUserGet;
|
|
2637
3037
|
record.get_from_user_specified_snapshot = Boolean::kFalse;
|
|
2638
3038
|
record.referenced_key = encoded_key;
|
|
2639
3039
|
expected_records.push_back(record);
|
|
2640
|
-
record.block_type = TraceType::
|
|
3040
|
+
record.block_type = TraceType::kBlockTraceIndexBlock;
|
|
2641
3041
|
expected_records.push_back(record);
|
|
2642
3042
|
record.block_type = TraceType::kBlockTraceDataBlock;
|
|
2643
3043
|
expected_records.push_back(record);
|
|
@@ -2657,7 +3057,7 @@ TEST_P(BlockBasedTableTest, TracingApproximateOffsetOfTest) {
|
|
|
2657
3057
|
SetupTracingTest(&c);
|
|
2658
3058
|
std::vector<std::string> keys;
|
|
2659
3059
|
stl_wrappers::KVMap kvmap;
|
|
2660
|
-
|
|
3060
|
+
ImmutableOptions ioptions(options);
|
|
2661
3061
|
MutableCFOptions moptions(options);
|
|
2662
3062
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2663
3063
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -2701,7 +3101,7 @@ TEST_P(BlockBasedTableTest, TracingIterator) {
|
|
|
2701
3101
|
SetupTracingTest(&c);
|
|
2702
3102
|
std::vector<std::string> keys;
|
|
2703
3103
|
stl_wrappers::KVMap kvmap;
|
|
2704
|
-
|
|
3104
|
+
ImmutableOptions ioptions(options);
|
|
2705
3105
|
MutableCFOptions moptions(options);
|
|
2706
3106
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2707
3107
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -2831,7 +3231,7 @@ TEST_P(BlockBasedTableTest, BlockCacheDisabledTest) {
|
|
|
2831
3231
|
|
|
2832
3232
|
TableConstructor c(BytewiseComparator(), true /* convert_to_internal_key_ */);
|
|
2833
3233
|
c.Add("key", "value");
|
|
2834
|
-
const
|
|
3234
|
+
const ImmutableOptions ioptions(options);
|
|
2835
3235
|
const MutableCFOptions moptions(options);
|
|
2836
3236
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2837
3237
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -2883,7 +3283,7 @@ TEST_P(BlockBasedTableTest, FilterBlockInBlockCache) {
|
|
|
2883
3283
|
|
|
2884
3284
|
TableConstructor c(BytewiseComparator(), true /* convert_to_internal_key_ */);
|
|
2885
3285
|
c.Add("key", "value");
|
|
2886
|
-
const
|
|
3286
|
+
const ImmutableOptions ioptions(options);
|
|
2887
3287
|
const MutableCFOptions moptions(options);
|
|
2888
3288
|
c.Finish(options, ioptions, moptions, table_options,
|
|
2889
3289
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
@@ -2963,7 +3363,7 @@ TEST_P(BlockBasedTableTest, FilterBlockInBlockCache) {
|
|
|
2963
3363
|
table_options.block_cache = NewLRUCache(1, 4);
|
|
2964
3364
|
options.statistics = CreateDBStatistics();
|
|
2965
3365
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
2966
|
-
const
|
|
3366
|
+
const ImmutableOptions ioptions2(options);
|
|
2967
3367
|
const MutableCFOptions moptions2(options);
|
|
2968
3368
|
ASSERT_OK(c.Reopen(ioptions2, moptions2));
|
|
2969
3369
|
{
|
|
@@ -3010,7 +3410,7 @@ TEST_P(BlockBasedTableTest, FilterBlockInBlockCache) {
|
|
|
3010
3410
|
std::string user_key = "k01";
|
|
3011
3411
|
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
3012
3412
|
c3.Add(internal_key.Encode().ToString(), "hello");
|
|
3013
|
-
|
|
3413
|
+
ImmutableOptions ioptions3(options);
|
|
3014
3414
|
MutableCFOptions moptions3(options);
|
|
3015
3415
|
// Generate table without filter policy
|
|
3016
3416
|
c3.Finish(options, ioptions3, moptions3, table_options,
|
|
@@ -3021,7 +3421,7 @@ TEST_P(BlockBasedTableTest, FilterBlockInBlockCache) {
|
|
|
3021
3421
|
table_options.filter_policy.reset(NewBloomFilterPolicy(1));
|
|
3022
3422
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
3023
3423
|
options.statistics = CreateDBStatistics();
|
|
3024
|
-
|
|
3424
|
+
ImmutableOptions ioptions4(options);
|
|
3025
3425
|
MutableCFOptions moptions4(options);
|
|
3026
3426
|
ASSERT_OK(c3.Reopen(ioptions4, moptions4));
|
|
3027
3427
|
reader = dynamic_cast<BlockBasedTable*>(c3.GetTableReader());
|
|
@@ -3083,9 +3483,11 @@ TEST_P(BlockBasedTableTest, InvalidOptions) {
|
|
|
3083
3483
|
}
|
|
3084
3484
|
|
|
3085
3485
|
TEST_P(BlockBasedTableTest, BlockReadCountTest) {
|
|
3086
|
-
// bloom_filter_type = 0 -- block-based filter
|
|
3087
|
-
// bloom_filter_type =
|
|
3088
|
-
|
|
3486
|
+
// bloom_filter_type = 0 -- block-based filter (not available in public API)
|
|
3487
|
+
// bloom_filter_type = 1 -- full filter using use_block_based_builder=false
|
|
3488
|
+
// bloom_filter_type = 2 -- full filter using use_block_based_builder=true
|
|
3489
|
+
// because of API change to hide block-based filter
|
|
3490
|
+
for (int bloom_filter_type = 0; bloom_filter_type <= 2; ++bloom_filter_type) {
|
|
3089
3491
|
for (int index_and_filter_in_cache = 0; index_and_filter_in_cache < 2;
|
|
3090
3492
|
++index_and_filter_in_cache) {
|
|
3091
3493
|
Options options;
|
|
@@ -3094,8 +3496,22 @@ TEST_P(BlockBasedTableTest, BlockReadCountTest) {
|
|
|
3094
3496
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
3095
3497
|
table_options.block_cache = NewLRUCache(1, 0);
|
|
3096
3498
|
table_options.cache_index_and_filter_blocks = index_and_filter_in_cache;
|
|
3097
|
-
|
|
3098
|
-
|
|
3499
|
+
if (bloom_filter_type == 0) {
|
|
3500
|
+
#ifndef ROCKSDB_LITE
|
|
3501
|
+
// Use back-door way of enabling obsolete block-based Bloom
|
|
3502
|
+
ASSERT_OK(FilterPolicy::CreateFromString(
|
|
3503
|
+
ConfigOptions(),
|
|
3504
|
+
"rocksdb.internal.DeprecatedBlockBasedBloomFilter:10",
|
|
3505
|
+
&table_options.filter_policy));
|
|
3506
|
+
#else
|
|
3507
|
+
// Skip this case in LITE build
|
|
3508
|
+
continue;
|
|
3509
|
+
#endif
|
|
3510
|
+
} else {
|
|
3511
|
+
// Public API
|
|
3512
|
+
table_options.filter_policy.reset(
|
|
3513
|
+
NewBloomFilterPolicy(10, bloom_filter_type == 2));
|
|
3514
|
+
}
|
|
3099
3515
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
3100
3516
|
std::vector<std::string> keys;
|
|
3101
3517
|
stl_wrappers::KVMap kvmap;
|
|
@@ -3105,7 +3521,7 @@ TEST_P(BlockBasedTableTest, BlockReadCountTest) {
|
|
|
3105
3521
|
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
3106
3522
|
std::string encoded_key = internal_key.Encode().ToString();
|
|
3107
3523
|
c.Add(encoded_key, "hello");
|
|
3108
|
-
|
|
3524
|
+
ImmutableOptions ioptions(options);
|
|
3109
3525
|
MutableCFOptions moptions(options);
|
|
3110
3526
|
// Generate table with filter policy
|
|
3111
3527
|
c.Finish(options, ioptions, moptions, table_options,
|
|
@@ -3193,7 +3609,7 @@ TEST_P(BlockBasedTableTest, BlockCacheLeak) {
|
|
|
3193
3609
|
c.Add("k07", std::string(100000, 'x'));
|
|
3194
3610
|
std::vector<std::string> keys;
|
|
3195
3611
|
stl_wrappers::KVMap kvmap;
|
|
3196
|
-
const
|
|
3612
|
+
const ImmutableOptions ioptions(opt);
|
|
3197
3613
|
const MutableCFOptions moptions(opt);
|
|
3198
3614
|
c.Finish(opt, ioptions, moptions, table_options, *ikc, &keys, &kvmap);
|
|
3199
3615
|
|
|
@@ -3208,7 +3624,7 @@ TEST_P(BlockBasedTableTest, BlockCacheLeak) {
|
|
|
3208
3624
|
ASSERT_OK(iter->status());
|
|
3209
3625
|
iter.reset();
|
|
3210
3626
|
|
|
3211
|
-
const
|
|
3627
|
+
const ImmutableOptions ioptions1(opt);
|
|
3212
3628
|
const MutableCFOptions moptions1(opt);
|
|
3213
3629
|
ASSERT_OK(c.Reopen(ioptions1, moptions1));
|
|
3214
3630
|
auto table_reader = dynamic_cast<BlockBasedTable*>(c.GetTableReader());
|
|
@@ -3221,7 +3637,7 @@ TEST_P(BlockBasedTableTest, BlockCacheLeak) {
|
|
|
3221
3637
|
// rerun with different block cache
|
|
3222
3638
|
table_options.block_cache = NewLRUCache(16 * 1024 * 1024, 4);
|
|
3223
3639
|
opt.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
3224
|
-
const
|
|
3640
|
+
const ImmutableOptions ioptions2(opt);
|
|
3225
3641
|
const MutableCFOptions moptions2(opt);
|
|
3226
3642
|
ASSERT_OK(c.Reopen(ioptions2, moptions2));
|
|
3227
3643
|
table_reader = dynamic_cast<BlockBasedTable*>(c.GetTableReader());
|
|
@@ -3232,30 +3648,10 @@ TEST_P(BlockBasedTableTest, BlockCacheLeak) {
|
|
|
3232
3648
|
c.ResetTableReader();
|
|
3233
3649
|
}
|
|
3234
3650
|
|
|
3235
|
-
namespace {
|
|
3236
|
-
class CustomMemoryAllocator : public MemoryAllocator {
|
|
3237
|
-
public:
|
|
3238
|
-
const char* Name() const override { return "CustomMemoryAllocator"; }
|
|
3239
|
-
|
|
3240
|
-
void* Allocate(size_t size) override {
|
|
3241
|
-
++numAllocations;
|
|
3242
|
-
auto ptr = new char[size + 16];
|
|
3243
|
-
memcpy(ptr, "memory_allocator_", 16); // mangle first 16 bytes
|
|
3244
|
-
return reinterpret_cast<void*>(ptr + 16);
|
|
3245
|
-
}
|
|
3246
|
-
void Deallocate(void* p) override {
|
|
3247
|
-
++numDeallocations;
|
|
3248
|
-
char* ptr = reinterpret_cast<char*>(p) - 16;
|
|
3249
|
-
delete[] ptr;
|
|
3250
|
-
}
|
|
3251
|
-
|
|
3252
|
-
std::atomic<int> numAllocations;
|
|
3253
|
-
std::atomic<int> numDeallocations;
|
|
3254
|
-
};
|
|
3255
|
-
} // namespace
|
|
3256
|
-
|
|
3257
3651
|
TEST_P(BlockBasedTableTest, MemoryAllocator) {
|
|
3258
|
-
auto
|
|
3652
|
+
auto default_memory_allocator = std::make_shared<DefaultMemoryAllocator>();
|
|
3653
|
+
auto custom_memory_allocator =
|
|
3654
|
+
std::make_shared<CountedMemoryAllocator>(default_memory_allocator);
|
|
3259
3655
|
{
|
|
3260
3656
|
Options opt;
|
|
3261
3657
|
std::unique_ptr<InternalKeyComparator> ikc;
|
|
@@ -3281,7 +3677,7 @@ TEST_P(BlockBasedTableTest, MemoryAllocator) {
|
|
|
3281
3677
|
c.Add("k07", std::string(100000, 'x'));
|
|
3282
3678
|
std::vector<std::string> keys;
|
|
3283
3679
|
stl_wrappers::KVMap kvmap;
|
|
3284
|
-
const
|
|
3680
|
+
const ImmutableOptions ioptions(opt);
|
|
3285
3681
|
const MutableCFOptions moptions(opt);
|
|
3286
3682
|
c.Finish(opt, ioptions, moptions, table_options, *ikc, &keys, &kvmap);
|
|
3287
3683
|
|
|
@@ -3298,23 +3694,22 @@ TEST_P(BlockBasedTableTest, MemoryAllocator) {
|
|
|
3298
3694
|
|
|
3299
3695
|
// out of scope, block cache should have been deleted, all allocations
|
|
3300
3696
|
// deallocated
|
|
3301
|
-
EXPECT_EQ(custom_memory_allocator->
|
|
3302
|
-
custom_memory_allocator->
|
|
3697
|
+
EXPECT_EQ(custom_memory_allocator->GetNumAllocations(),
|
|
3698
|
+
custom_memory_allocator->GetNumDeallocations());
|
|
3303
3699
|
// make sure that allocations actually happened through the cache allocator
|
|
3304
|
-
EXPECT_GT(custom_memory_allocator->
|
|
3700
|
+
EXPECT_GT(custom_memory_allocator->GetNumAllocations(), 0);
|
|
3305
3701
|
}
|
|
3306
3702
|
|
|
3307
3703
|
// Test the file checksum of block based table
|
|
3308
3704
|
TEST_P(BlockBasedTableTest, NoFileChecksum) {
|
|
3309
3705
|
Options options;
|
|
3310
|
-
|
|
3706
|
+
ImmutableOptions ioptions(options);
|
|
3311
3707
|
MutableCFOptions moptions(options);
|
|
3312
3708
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
3313
3709
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
3314
3710
|
new InternalKeyComparator(BytewiseComparator()));
|
|
3315
3711
|
int level = 0;
|
|
3316
|
-
|
|
3317
|
-
int_tbl_prop_collector_factories;
|
|
3712
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
3318
3713
|
std::string column_family_name;
|
|
3319
3714
|
|
|
3320
3715
|
FileChecksumTestHelper f(true);
|
|
@@ -3323,10 +3718,8 @@ TEST_P(BlockBasedTableTest, NoFileChecksum) {
|
|
|
3323
3718
|
builder.reset(ioptions.table_factory->NewTableBuilder(
|
|
3324
3719
|
TableBuilderOptions(ioptions, moptions, *comparator,
|
|
3325
3720
|
&int_tbl_prop_collector_factories,
|
|
3326
|
-
options.compression, options.
|
|
3327
|
-
|
|
3328
|
-
column_family_name, level),
|
|
3329
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
3721
|
+
options.compression, options.compression_opts,
|
|
3722
|
+
kUnknownColumnFamily, column_family_name, level),
|
|
3330
3723
|
f.GetFileWriter()));
|
|
3331
3724
|
ASSERT_OK(f.ResetTableBuilder(std::move(builder)));
|
|
3332
3725
|
f.AddKVtoKVMap(1000);
|
|
@@ -3340,14 +3733,13 @@ TEST_P(BlockBasedTableTest, Crc32cFileChecksum) {
|
|
|
3340
3733
|
new FileChecksumGenCrc32cFactory();
|
|
3341
3734
|
Options options;
|
|
3342
3735
|
options.file_checksum_gen_factory.reset(file_checksum_gen_factory);
|
|
3343
|
-
|
|
3736
|
+
ImmutableOptions ioptions(options);
|
|
3344
3737
|
MutableCFOptions moptions(options);
|
|
3345
3738
|
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
3346
3739
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
3347
3740
|
new InternalKeyComparator(BytewiseComparator()));
|
|
3348
3741
|
int level = 0;
|
|
3349
|
-
|
|
3350
|
-
int_tbl_prop_collector_factories;
|
|
3742
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
3351
3743
|
std::string column_family_name;
|
|
3352
3744
|
|
|
3353
3745
|
FileChecksumGenContext gen_context;
|
|
@@ -3362,10 +3754,8 @@ TEST_P(BlockBasedTableTest, Crc32cFileChecksum) {
|
|
|
3362
3754
|
builder.reset(ioptions.table_factory->NewTableBuilder(
|
|
3363
3755
|
TableBuilderOptions(ioptions, moptions, *comparator,
|
|
3364
3756
|
&int_tbl_prop_collector_factories,
|
|
3365
|
-
options.compression, options.
|
|
3366
|
-
|
|
3367
|
-
column_family_name, level),
|
|
3368
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
3757
|
+
options.compression, options.compression_opts,
|
|
3758
|
+
kUnknownColumnFamily, column_family_name, level),
|
|
3369
3759
|
f.GetFileWriter()));
|
|
3370
3760
|
ASSERT_OK(f.ResetTableBuilder(std::move(builder)));
|
|
3371
3761
|
f.AddKVtoKVMap(1000);
|
|
@@ -3403,19 +3793,17 @@ TEST_F(PlainTableTest, BasicPlainTableProperties) {
|
|
|
3403
3793
|
std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
|
|
3404
3794
|
std::move(sink), "" /* don't care */, FileOptions()));
|
|
3405
3795
|
Options options;
|
|
3406
|
-
const
|
|
3796
|
+
const ImmutableOptions ioptions(options);
|
|
3407
3797
|
const MutableCFOptions moptions(options);
|
|
3408
3798
|
InternalKeyComparator ikc(options.comparator);
|
|
3409
|
-
|
|
3410
|
-
int_tbl_prop_collector_factories;
|
|
3799
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
3411
3800
|
std::string column_family_name;
|
|
3412
3801
|
int unknown_level = -1;
|
|
3413
3802
|
std::unique_ptr<TableBuilder> builder(factory.NewTableBuilder(
|
|
3414
|
-
TableBuilderOptions(
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
3803
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
3804
|
+
&int_tbl_prop_collector_factories, kNoCompression,
|
|
3805
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
3806
|
+
column_family_name, unknown_level),
|
|
3419
3807
|
file_writer.get()));
|
|
3420
3808
|
|
|
3421
3809
|
for (char c = 'a'; c <= 'z'; ++c) {
|
|
@@ -3434,11 +3822,9 @@ TEST_F(PlainTableTest, BasicPlainTableProperties) {
|
|
|
3434
3822
|
std::unique_ptr<RandomAccessFileReader> file_reader(
|
|
3435
3823
|
new RandomAccessFileReader(std::move(source), "test"));
|
|
3436
3824
|
|
|
3437
|
-
TableProperties
|
|
3825
|
+
std::unique_ptr<TableProperties> props;
|
|
3438
3826
|
auto s = ReadTableProperties(file_reader.get(), ss->contents().size(),
|
|
3439
|
-
kPlainTableMagicNumber, ioptions,
|
|
3440
|
-
&props, true /* compression_type_missing */);
|
|
3441
|
-
std::unique_ptr<TableProperties> props_guard(props);
|
|
3827
|
+
kPlainTableMagicNumber, ioptions, &props);
|
|
3442
3828
|
ASSERT_OK(s);
|
|
3443
3829
|
|
|
3444
3830
|
ASSERT_EQ(0ul, props->index_size);
|
|
@@ -3457,22 +3843,20 @@ TEST_F(PlainTableTest, NoFileChecksum) {
|
|
|
3457
3843
|
PlainTableFactory factory(plain_table_options);
|
|
3458
3844
|
|
|
3459
3845
|
Options options;
|
|
3460
|
-
const
|
|
3846
|
+
const ImmutableOptions ioptions(options);
|
|
3461
3847
|
const MutableCFOptions moptions(options);
|
|
3462
3848
|
InternalKeyComparator ikc(options.comparator);
|
|
3463
|
-
|
|
3464
|
-
int_tbl_prop_collector_factories;
|
|
3849
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
3465
3850
|
std::string column_family_name;
|
|
3466
3851
|
int unknown_level = -1;
|
|
3467
3852
|
FileChecksumTestHelper f(true);
|
|
3468
3853
|
f.CreateWriteableFile();
|
|
3469
3854
|
|
|
3470
3855
|
std::unique_ptr<TableBuilder> builder(factory.NewTableBuilder(
|
|
3471
|
-
TableBuilderOptions(
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
3856
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
3857
|
+
&int_tbl_prop_collector_factories, kNoCompression,
|
|
3858
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
3859
|
+
column_family_name, unknown_level),
|
|
3476
3860
|
f.GetFileWriter()));
|
|
3477
3861
|
ASSERT_OK(f.ResetTableBuilder(std::move(builder)));
|
|
3478
3862
|
f.AddKVtoKVMap(1000);
|
|
@@ -3492,11 +3876,10 @@ TEST_F(PlainTableTest, Crc32cFileChecksum) {
|
|
|
3492
3876
|
new FileChecksumGenCrc32cFactory();
|
|
3493
3877
|
Options options;
|
|
3494
3878
|
options.file_checksum_gen_factory.reset(file_checksum_gen_factory);
|
|
3495
|
-
const
|
|
3879
|
+
const ImmutableOptions ioptions(options);
|
|
3496
3880
|
const MutableCFOptions moptions(options);
|
|
3497
3881
|
InternalKeyComparator ikc(options.comparator);
|
|
3498
|
-
|
|
3499
|
-
int_tbl_prop_collector_factories;
|
|
3882
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
3500
3883
|
std::string column_family_name;
|
|
3501
3884
|
int unknown_level = -1;
|
|
3502
3885
|
|
|
@@ -3510,11 +3893,10 @@ TEST_F(PlainTableTest, Crc32cFileChecksum) {
|
|
|
3510
3893
|
f.SetFileChecksumGenerator(checksum_crc32c_gen1.release());
|
|
3511
3894
|
|
|
3512
3895
|
std::unique_ptr<TableBuilder> builder(factory.NewTableBuilder(
|
|
3513
|
-
TableBuilderOptions(
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
3896
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
3897
|
+
&int_tbl_prop_collector_factories, kNoCompression,
|
|
3898
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
3899
|
+
column_family_name, unknown_level),
|
|
3518
3900
|
f.GetFileWriter()));
|
|
3519
3901
|
ASSERT_OK(f.ResetTableBuilder(std::move(builder)));
|
|
3520
3902
|
f.AddKVtoKVMap(1000);
|
|
@@ -3548,7 +3930,7 @@ TEST_F(GeneralTableTest, ApproximateOffsetOfPlain) {
|
|
|
3548
3930
|
options.compression = kNoCompression;
|
|
3549
3931
|
BlockBasedTableOptions table_options;
|
|
3550
3932
|
table_options.block_size = 1024;
|
|
3551
|
-
const
|
|
3933
|
+
const ImmutableOptions ioptions(options);
|
|
3552
3934
|
const MutableCFOptions moptions(options);
|
|
3553
3935
|
c.Finish(options, ioptions, moptions, table_options, internal_comparator,
|
|
3554
3936
|
&keys, &kvmap);
|
|
@@ -3584,16 +3966,16 @@ static void DoCompressionTest(CompressionType comp) {
|
|
|
3584
3966
|
options.compression = comp;
|
|
3585
3967
|
BlockBasedTableOptions table_options;
|
|
3586
3968
|
table_options.block_size = 1024;
|
|
3587
|
-
const
|
|
3969
|
+
const ImmutableOptions ioptions(options);
|
|
3588
3970
|
const MutableCFOptions moptions(options);
|
|
3589
3971
|
c.Finish(options, ioptions, moptions, table_options, ikc, &keys, &kvmap);
|
|
3590
3972
|
|
|
3591
3973
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0));
|
|
3592
3974
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0));
|
|
3593
3975
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0));
|
|
3594
|
-
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000,
|
|
3595
|
-
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000,
|
|
3596
|
-
ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000,
|
|
3976
|
+
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3525));
|
|
3977
|
+
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3525));
|
|
3978
|
+
ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 7050));
|
|
3597
3979
|
c.ResetTableReader();
|
|
3598
3980
|
}
|
|
3599
3981
|
|
|
@@ -3639,7 +4021,7 @@ TEST_F(GeneralTableTest, ApproximateOffsetOfCompressed) {
|
|
|
3639
4021
|
}
|
|
3640
4022
|
}
|
|
3641
4023
|
|
|
3642
|
-
#
|
|
4024
|
+
#if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
3643
4025
|
TEST_P(ParameterizedHarnessTest, RandomizedHarnessTest) {
|
|
3644
4026
|
Random rnd(test::RandomSeed() + 5);
|
|
3645
4027
|
for (int num_entries = 0; num_entries < 2000;
|
|
@@ -3674,7 +4056,7 @@ TEST_F(DBHarnessTest, RandomizedLongDB) {
|
|
|
3674
4056
|
ASSERT_GT(files, 0);
|
|
3675
4057
|
}
|
|
3676
4058
|
#endif // ROCKSDB_LITE
|
|
3677
|
-
#endif // ROCKSDB_VALGRIND_RUN
|
|
4059
|
+
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
3678
4060
|
|
|
3679
4061
|
class MemTableTest : public testing::Test {
|
|
3680
4062
|
public:
|
|
@@ -3682,7 +4064,7 @@ class MemTableTest : public testing::Test {
|
|
|
3682
4064
|
InternalKeyComparator cmp(BytewiseComparator());
|
|
3683
4065
|
auto table_factory = std::make_shared<SkipListFactory>();
|
|
3684
4066
|
options_.memtable_factory = table_factory;
|
|
3685
|
-
|
|
4067
|
+
ImmutableOptions ioptions(options_);
|
|
3686
4068
|
wb_ = new WriteBufferManager(options_.db_write_buffer_size);
|
|
3687
4069
|
memtable_ = new MemTable(cmp, ioptions, MutableCFOptions(options_), wb_,
|
|
3688
4070
|
kMaxSequenceNumber, 0 /* column_family_id */);
|
|
@@ -3769,126 +4151,93 @@ TEST_P(ParameterizedHarnessTest, SimpleSpecialKey) {
|
|
|
3769
4151
|
}
|
|
3770
4152
|
|
|
3771
4153
|
TEST(TableTest, FooterTests) {
|
|
4154
|
+
Random* r = Random::GetTLSInstance();
|
|
4155
|
+
uint64_t data_size = (uint64_t{1} << r->Uniform(40)) + r->Uniform(100);
|
|
4156
|
+
uint64_t index_size = r->Uniform(1000000000);
|
|
4157
|
+
uint64_t metaindex_size = r->Uniform(1000000);
|
|
4158
|
+
// 5 == block trailer size
|
|
4159
|
+
BlockHandle index(data_size + 5, index_size);
|
|
4160
|
+
BlockHandle meta_index(data_size + index_size + 2 * 5, metaindex_size);
|
|
4161
|
+
uint64_t footer_offset = data_size + metaindex_size + index_size + 3 * 5;
|
|
3772
4162
|
{
|
|
3773
|
-
//
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
footer.set_metaindex_handle(meta_index);
|
|
3778
|
-
footer.set_index_handle(index);
|
|
3779
|
-
footer.EncodeTo(&encoded);
|
|
4163
|
+
// legacy block based
|
|
4164
|
+
FooterBuilder footer;
|
|
4165
|
+
footer.Build(kBlockBasedTableMagicNumber, /* format_version */ 0,
|
|
4166
|
+
footer_offset, kCRC32c, meta_index, index);
|
|
3780
4167
|
Footer decoded_footer;
|
|
3781
|
-
|
|
3782
|
-
ASSERT_OK(decoded_footer.DecodeFrom(&encoded_slice));
|
|
4168
|
+
ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
|
|
3783
4169
|
ASSERT_EQ(decoded_footer.table_magic_number(), kBlockBasedTableMagicNumber);
|
|
3784
|
-
ASSERT_EQ(decoded_footer.
|
|
4170
|
+
ASSERT_EQ(decoded_footer.checksum_type(), kCRC32c);
|
|
3785
4171
|
ASSERT_EQ(decoded_footer.metaindex_handle().offset(), meta_index.offset());
|
|
3786
4172
|
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
3787
4173
|
ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
|
|
3788
4174
|
ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
|
|
3789
|
-
ASSERT_EQ(decoded_footer.
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
BlockHandle meta_index(10, 5), index(20, 15);
|
|
3816
|
-
footer.set_metaindex_handle(meta_index);
|
|
3817
|
-
footer.set_index_handle(index);
|
|
3818
|
-
footer.set_checksum(kxxHash64);
|
|
3819
|
-
footer.EncodeTo(&encoded);
|
|
3820
|
-
Footer decoded_footer;
|
|
3821
|
-
Slice encoded_slice(encoded);
|
|
3822
|
-
ASSERT_OK(decoded_footer.DecodeFrom(&encoded_slice));
|
|
3823
|
-
ASSERT_EQ(decoded_footer.table_magic_number(), kBlockBasedTableMagicNumber);
|
|
3824
|
-
ASSERT_EQ(decoded_footer.checksum(), kxxHash64);
|
|
3825
|
-
ASSERT_EQ(decoded_footer.metaindex_handle().offset(), meta_index.offset());
|
|
3826
|
-
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
3827
|
-
ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
|
|
3828
|
-
ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
|
|
3829
|
-
ASSERT_EQ(decoded_footer.version(), 1U);
|
|
4175
|
+
ASSERT_EQ(decoded_footer.format_version(), 0U);
|
|
4176
|
+
ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 5U);
|
|
4177
|
+
// Ensure serialized with legacy magic
|
|
4178
|
+
ASSERT_EQ(
|
|
4179
|
+
DecodeFixed64(footer.GetSlice().data() + footer.GetSlice().size() - 8),
|
|
4180
|
+
kLegacyBlockBasedTableMagicNumber);
|
|
4181
|
+
}
|
|
4182
|
+
// block based, various checksums, various versions
|
|
4183
|
+
for (auto t : GetSupportedChecksums()) {
|
|
4184
|
+
for (uint32_t fv = 1; IsSupportedFormatVersion(fv); ++fv) {
|
|
4185
|
+
FooterBuilder footer;
|
|
4186
|
+
footer.Build(kBlockBasedTableMagicNumber, fv, footer_offset, t,
|
|
4187
|
+
meta_index, index);
|
|
4188
|
+
Footer decoded_footer;
|
|
4189
|
+
ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
|
|
4190
|
+
ASSERT_EQ(decoded_footer.table_magic_number(),
|
|
4191
|
+
kBlockBasedTableMagicNumber);
|
|
4192
|
+
ASSERT_EQ(decoded_footer.checksum_type(), t);
|
|
4193
|
+
ASSERT_EQ(decoded_footer.metaindex_handle().offset(),
|
|
4194
|
+
meta_index.offset());
|
|
4195
|
+
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
4196
|
+
ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
|
|
4197
|
+
ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
|
|
4198
|
+
ASSERT_EQ(decoded_footer.format_version(), fv);
|
|
4199
|
+
ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 5U);
|
|
4200
|
+
}
|
|
3830
4201
|
}
|
|
3831
4202
|
// Plain table is not supported in ROCKSDB_LITE
|
|
3832
4203
|
#ifndef ROCKSDB_LITE
|
|
3833
4204
|
{
|
|
3834
|
-
//
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
footer.set_metaindex_handle(meta_index);
|
|
3839
|
-
footer.set_index_handle(index);
|
|
3840
|
-
footer.EncodeTo(&encoded);
|
|
4205
|
+
// legacy plain table
|
|
4206
|
+
FooterBuilder footer;
|
|
4207
|
+
footer.Build(kPlainTableMagicNumber, /* format_version */ 0, footer_offset,
|
|
4208
|
+
kNoChecksum, meta_index);
|
|
3841
4209
|
Footer decoded_footer;
|
|
3842
|
-
|
|
3843
|
-
ASSERT_OK(decoded_footer.DecodeFrom(&encoded_slice));
|
|
4210
|
+
ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
|
|
3844
4211
|
ASSERT_EQ(decoded_footer.table_magic_number(), kPlainTableMagicNumber);
|
|
3845
|
-
ASSERT_EQ(decoded_footer.
|
|
4212
|
+
ASSERT_EQ(decoded_footer.checksum_type(), kCRC32c);
|
|
3846
4213
|
ASSERT_EQ(decoded_footer.metaindex_handle().offset(), meta_index.offset());
|
|
3847
4214
|
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
3848
|
-
ASSERT_EQ(decoded_footer.index_handle().offset(),
|
|
3849
|
-
ASSERT_EQ(decoded_footer.index_handle().size(),
|
|
3850
|
-
ASSERT_EQ(decoded_footer.
|
|
4215
|
+
ASSERT_EQ(decoded_footer.index_handle().offset(), 0U);
|
|
4216
|
+
ASSERT_EQ(decoded_footer.index_handle().size(), 0U);
|
|
4217
|
+
ASSERT_EQ(decoded_footer.format_version(), 0U);
|
|
4218
|
+
ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 0U);
|
|
4219
|
+
// Ensure serialized with legacy magic
|
|
4220
|
+
ASSERT_EQ(
|
|
4221
|
+
DecodeFixed64(footer.GetSlice().data() + footer.GetSlice().size() - 8),
|
|
4222
|
+
kLegacyPlainTableMagicNumber);
|
|
3851
4223
|
}
|
|
3852
4224
|
{
|
|
3853
|
-
// xxhash
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
footer.set_metaindex_handle(meta_index);
|
|
3858
|
-
footer.set_index_handle(index);
|
|
3859
|
-
footer.set_checksum(kxxHash);
|
|
3860
|
-
footer.EncodeTo(&encoded);
|
|
4225
|
+
// xxhash plain table (not currently used)
|
|
4226
|
+
FooterBuilder footer;
|
|
4227
|
+
footer.Build(kPlainTableMagicNumber, /* format_version */ 1, footer_offset,
|
|
4228
|
+
kxxHash, meta_index);
|
|
3861
4229
|
Footer decoded_footer;
|
|
3862
|
-
|
|
3863
|
-
ASSERT_OK(decoded_footer.DecodeFrom(&encoded_slice));
|
|
4230
|
+
ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
|
|
3864
4231
|
ASSERT_EQ(decoded_footer.table_magic_number(), kPlainTableMagicNumber);
|
|
3865
|
-
ASSERT_EQ(decoded_footer.
|
|
4232
|
+
ASSERT_EQ(decoded_footer.checksum_type(), kxxHash);
|
|
3866
4233
|
ASSERT_EQ(decoded_footer.metaindex_handle().offset(), meta_index.offset());
|
|
3867
4234
|
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
3868
|
-
ASSERT_EQ(decoded_footer.index_handle().offset(),
|
|
3869
|
-
ASSERT_EQ(decoded_footer.index_handle().size(),
|
|
3870
|
-
ASSERT_EQ(decoded_footer.
|
|
4235
|
+
ASSERT_EQ(decoded_footer.index_handle().offset(), 0U);
|
|
4236
|
+
ASSERT_EQ(decoded_footer.index_handle().size(), 0U);
|
|
4237
|
+
ASSERT_EQ(decoded_footer.format_version(), 1U);
|
|
4238
|
+
ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 0U);
|
|
3871
4239
|
}
|
|
3872
4240
|
#endif // !ROCKSDB_LITE
|
|
3873
|
-
{
|
|
3874
|
-
// version == 2
|
|
3875
|
-
std::string encoded;
|
|
3876
|
-
Footer footer(kBlockBasedTableMagicNumber, 2);
|
|
3877
|
-
BlockHandle meta_index(10, 5), index(20, 15);
|
|
3878
|
-
footer.set_metaindex_handle(meta_index);
|
|
3879
|
-
footer.set_index_handle(index);
|
|
3880
|
-
footer.EncodeTo(&encoded);
|
|
3881
|
-
Footer decoded_footer;
|
|
3882
|
-
Slice encoded_slice(encoded);
|
|
3883
|
-
ASSERT_OK(decoded_footer.DecodeFrom(&encoded_slice));
|
|
3884
|
-
ASSERT_EQ(decoded_footer.table_magic_number(), kBlockBasedTableMagicNumber);
|
|
3885
|
-
ASSERT_EQ(decoded_footer.checksum(), kCRC32c);
|
|
3886
|
-
ASSERT_EQ(decoded_footer.metaindex_handle().offset(), meta_index.offset());
|
|
3887
|
-
ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
|
|
3888
|
-
ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
|
|
3889
|
-
ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
|
|
3890
|
-
ASSERT_EQ(decoded_footer.version(), 2U);
|
|
3891
|
-
}
|
|
3892
4241
|
}
|
|
3893
4242
|
|
|
3894
4243
|
class IndexBlockRestartIntervalTest
|
|
@@ -3920,6 +4269,8 @@ TEST_P(IndexBlockRestartIntervalTest, IndexBlockRestartInterval) {
|
|
|
3920
4269
|
table_options.index_block_restart_interval = index_block_restart_interval;
|
|
3921
4270
|
if (value_delta_encoding) {
|
|
3922
4271
|
table_options.format_version = 4;
|
|
4272
|
+
} else {
|
|
4273
|
+
table_options.format_version = 3;
|
|
3923
4274
|
}
|
|
3924
4275
|
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
3925
4276
|
|
|
@@ -3934,7 +4285,7 @@ TEST_P(IndexBlockRestartIntervalTest, IndexBlockRestartInterval) {
|
|
|
3934
4285
|
stl_wrappers::KVMap kvmap;
|
|
3935
4286
|
std::unique_ptr<InternalKeyComparator> comparator(
|
|
3936
4287
|
new InternalKeyComparator(BytewiseComparator()));
|
|
3937
|
-
const
|
|
4288
|
+
const ImmutableOptions ioptions(options);
|
|
3938
4289
|
const MutableCFOptions moptions(options);
|
|
3939
4290
|
c.Finish(options, ioptions, moptions, table_options, *comparator, &keys,
|
|
3940
4291
|
&kvmap);
|
|
@@ -3986,8 +4337,7 @@ class TestPrefixExtractor : public ROCKSDB_NAMESPACE::SliceTransform {
|
|
|
3986
4337
|
}
|
|
3987
4338
|
|
|
3988
4339
|
bool InDomain(const ROCKSDB_NAMESPACE::Slice& src) const override {
|
|
3989
|
-
|
|
3990
|
-
return true;
|
|
4340
|
+
return IsValid(src);
|
|
3991
4341
|
}
|
|
3992
4342
|
|
|
3993
4343
|
bool InRange(const ROCKSDB_NAMESPACE::Slice& /*dst*/) const override {
|
|
@@ -4065,11 +4415,10 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4065
4415
|
std::move(holder), "" /* don't care */, FileOptions()));
|
|
4066
4416
|
Options options;
|
|
4067
4417
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
4068
|
-
const
|
|
4418
|
+
const ImmutableOptions ioptions(options);
|
|
4069
4419
|
const MutableCFOptions moptions(options);
|
|
4070
4420
|
InternalKeyComparator ikc(options.comparator);
|
|
4071
|
-
|
|
4072
|
-
int_tbl_prop_collector_factories;
|
|
4421
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
4073
4422
|
int_tbl_prop_collector_factories.emplace_back(
|
|
4074
4423
|
new SstFileWriterPropertiesCollectorFactory(2 /* version */,
|
|
4075
4424
|
0 /* global_seqno*/));
|
|
@@ -4077,9 +4426,8 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4077
4426
|
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
4078
4427
|
TableBuilderOptions(ioptions, moptions, ikc,
|
|
4079
4428
|
&int_tbl_prop_collector_factories, kNoCompression,
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
4429
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
4430
|
+
column_family_name, -1),
|
|
4083
4431
|
file_writer.get()));
|
|
4084
4432
|
|
|
4085
4433
|
for (char c = 'a'; c <= 'z'; ++c) {
|
|
@@ -4104,20 +4452,17 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4104
4452
|
std::unique_ptr<RandomAccessFileReader> file_reader(
|
|
4105
4453
|
new RandomAccessFileReader(std::move(source), ""));
|
|
4106
4454
|
|
|
4107
|
-
TableProperties
|
|
4455
|
+
std::unique_ptr<TableProperties> props;
|
|
4108
4456
|
ASSERT_OK(ReadTableProperties(file_reader.get(), ss_rw.contents().size(),
|
|
4109
4457
|
kBlockBasedTableMagicNumber, ioptions,
|
|
4110
|
-
&props
|
|
4458
|
+
&props));
|
|
4111
4459
|
|
|
4112
4460
|
UserCollectedProperties user_props = props->user_collected_properties;
|
|
4113
4461
|
version = DecodeFixed32(
|
|
4114
4462
|
user_props[ExternalSstFilePropertyNames::kVersion].c_str());
|
|
4115
4463
|
global_seqno = DecodeFixed64(
|
|
4116
4464
|
user_props[ExternalSstFilePropertyNames::kGlobalSeqno].c_str());
|
|
4117
|
-
global_seqno_offset =
|
|
4118
|
-
props->properties_offsets[ExternalSstFilePropertyNames::kGlobalSeqno];
|
|
4119
|
-
|
|
4120
|
-
delete props;
|
|
4465
|
+
global_seqno_offset = props->external_sst_file_global_seqno_offset;
|
|
4121
4466
|
};
|
|
4122
4467
|
|
|
4123
4468
|
// Helper function to update the value of the global seqno in the file
|
|
@@ -4139,8 +4484,8 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4139
4484
|
new RandomAccessFileReader(std::move(source), ""));
|
|
4140
4485
|
|
|
4141
4486
|
options.table_factory->NewTableReader(
|
|
4142
|
-
TableReaderOptions(ioptions, moptions.prefix_extractor
|
|
4143
|
-
|
|
4487
|
+
TableReaderOptions(ioptions, moptions.prefix_extractor, EnvOptions(),
|
|
4488
|
+
ikc),
|
|
4144
4489
|
std::move(file_reader), ss_rw.contents().size(), &table_reader);
|
|
4145
4490
|
|
|
4146
4491
|
return table_reader->NewIterator(
|
|
@@ -4254,18 +4599,16 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
|
|
|
4254
4599
|
Options options;
|
|
4255
4600
|
options.compression = kNoCompression;
|
|
4256
4601
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
4257
|
-
const
|
|
4602
|
+
const ImmutableOptions ioptions(options);
|
|
4258
4603
|
const MutableCFOptions moptions(options);
|
|
4259
4604
|
InternalKeyComparator ikc(options.comparator);
|
|
4260
|
-
|
|
4261
|
-
int_tbl_prop_collector_factories;
|
|
4605
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
4262
4606
|
std::string column_family_name;
|
|
4263
4607
|
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
4264
4608
|
TableBuilderOptions(ioptions, moptions, ikc,
|
|
4265
4609
|
&int_tbl_prop_collector_factories, kNoCompression,
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
4610
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
4611
|
+
column_family_name, -1),
|
|
4269
4612
|
file_writer.get()));
|
|
4270
4613
|
|
|
4271
4614
|
for (int i = 1; i <= 10000; ++i) {
|
|
@@ -4286,15 +4629,14 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
|
|
|
4286
4629
|
new RandomAccessFileReader(std::move(source), "test"));
|
|
4287
4630
|
// Helper function to get version, global_seqno, global_seqno_offset
|
|
4288
4631
|
std::function<void()> VerifyBlockAlignment = [&]() {
|
|
4289
|
-
TableProperties
|
|
4632
|
+
std::unique_ptr<TableProperties> props;
|
|
4290
4633
|
ASSERT_OK(ReadTableProperties(file_reader.get(), sink->contents().size(),
|
|
4291
|
-
kBlockBasedTableMagicNumber, ioptions,
|
|
4292
|
-
|
|
4634
|
+
kBlockBasedTableMagicNumber, ioptions,
|
|
4635
|
+
&props));
|
|
4293
4636
|
|
|
4294
4637
|
uint64_t data_block_size = props->data_size / props->num_data_blocks;
|
|
4295
4638
|
ASSERT_EQ(data_block_size, 4096);
|
|
4296
4639
|
ASSERT_EQ(props->data_size, data_block_size * props->num_data_blocks);
|
|
4297
|
-
delete props;
|
|
4298
4640
|
};
|
|
4299
4641
|
|
|
4300
4642
|
VerifyBlockAlignment();
|
|
@@ -4306,12 +4648,11 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
|
|
|
4306
4648
|
bbto.block_align = false;
|
|
4307
4649
|
Options options2;
|
|
4308
4650
|
options2.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
4309
|
-
|
|
4651
|
+
ImmutableOptions ioptions2(options2);
|
|
4310
4652
|
const MutableCFOptions moptions2(options2);
|
|
4311
4653
|
|
|
4312
4654
|
ASSERT_OK(ioptions.table_factory->NewTableReader(
|
|
4313
|
-
TableReaderOptions(ioptions2, moptions2.prefix_extractor
|
|
4314
|
-
EnvOptions(),
|
|
4655
|
+
TableReaderOptions(ioptions2, moptions2.prefix_extractor, EnvOptions(),
|
|
4315
4656
|
GetPlainInternalComparator(options2.comparator)),
|
|
4316
4657
|
std::move(file_reader), sink->contents().size(), &table_reader));
|
|
4317
4658
|
|
|
@@ -4348,19 +4689,17 @@ TEST_P(BlockBasedTableTest, PropertiesBlockRestartPointTest) {
|
|
|
4348
4689
|
options.compression = kNoCompression;
|
|
4349
4690
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
4350
4691
|
|
|
4351
|
-
const
|
|
4692
|
+
const ImmutableOptions ioptions(options);
|
|
4352
4693
|
const MutableCFOptions moptions(options);
|
|
4353
4694
|
InternalKeyComparator ikc(options.comparator);
|
|
4354
|
-
|
|
4355
|
-
int_tbl_prop_collector_factories;
|
|
4695
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
4356
4696
|
std::string column_family_name;
|
|
4357
4697
|
|
|
4358
4698
|
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
4359
4699
|
TableBuilderOptions(ioptions, moptions, ikc,
|
|
4360
4700
|
&int_tbl_prop_collector_factories, kNoCompression,
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
TablePropertiesCollectorFactory::Context::kUnknownColumnFamily,
|
|
4701
|
+
CompressionOptions(), kUnknownColumnFamily,
|
|
4702
|
+
column_family_name, -1),
|
|
4364
4703
|
file_writer.get()));
|
|
4365
4704
|
|
|
4366
4705
|
for (int i = 1; i <= 10000; ++i) {
|
|
@@ -4415,16 +4754,13 @@ TEST_P(BlockBasedTableTest, PropertiesBlockRestartPointTest) {
|
|
|
4415
4754
|
|
|
4416
4755
|
std::unique_ptr<InternalIterator> meta_iter(metaindex_block.NewDataIterator(
|
|
4417
4756
|
BytewiseComparator(), kDisableGlobalSequenceNumber));
|
|
4418
|
-
bool found_properties_block = true;
|
|
4419
|
-
ASSERT_OK(SeekToPropertiesBlock(meta_iter.get(), &found_properties_block));
|
|
4420
|
-
ASSERT_TRUE(found_properties_block);
|
|
4421
4757
|
|
|
4422
4758
|
// -- Read properties block
|
|
4423
|
-
Slice v = meta_iter->value();
|
|
4424
4759
|
BlockHandle properties_handle;
|
|
4425
|
-
ASSERT_OK(
|
|
4760
|
+
ASSERT_OK(FindOptionalMetaBlock(meta_iter.get(), kPropertiesBlockName,
|
|
4761
|
+
&properties_handle));
|
|
4762
|
+
ASSERT_FALSE(properties_handle.IsNull());
|
|
4426
4763
|
BlockContents properties_contents;
|
|
4427
|
-
|
|
4428
4764
|
BlockFetchHelper(properties_handle, BlockType::kProperties,
|
|
4429
4765
|
&properties_contents);
|
|
4430
4766
|
Block properties_block(std::move(properties_contents));
|
|
@@ -4456,7 +4792,7 @@ TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
|
|
|
4456
4792
|
table_options.filter_policy.reset(NewBloomFilterPolicy(
|
|
4457
4793
|
8 /* bits_per_key */, false /* use_block_based_filter */));
|
|
4458
4794
|
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
4459
|
-
|
|
4795
|
+
ImmutableOptions ioptions(options);
|
|
4460
4796
|
MutableCFOptions moptions(options);
|
|
4461
4797
|
std::vector<std::string> keys;
|
|
4462
4798
|
stl_wrappers::KVMap kvmap;
|
|
@@ -4494,8 +4830,7 @@ TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
|
|
|
4494
4830
|
|
|
4495
4831
|
// verify properties block comes last
|
|
4496
4832
|
std::unique_ptr<InternalIterator> metaindex_iter{
|
|
4497
|
-
metaindex_block.
|
|
4498
|
-
kDisableGlobalSequenceNumber)};
|
|
4833
|
+
metaindex_block.NewMetaIterator()};
|
|
4499
4834
|
uint64_t max_offset = 0;
|
|
4500
4835
|
std::string key_at_max_offset;
|
|
4501
4836
|
for (metaindex_iter->SeekToFirst(); metaindex_iter->Valid();
|
|
@@ -4508,13 +4843,97 @@ TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
|
|
|
4508
4843
|
key_at_max_offset = metaindex_iter->key().ToString();
|
|
4509
4844
|
}
|
|
4510
4845
|
}
|
|
4511
|
-
ASSERT_EQ(
|
|
4846
|
+
ASSERT_EQ(kPropertiesBlockName, key_at_max_offset);
|
|
4512
4847
|
// index handle is stored in footer rather than metaindex block, so need
|
|
4513
4848
|
// separate logic to verify it comes before properties block.
|
|
4514
4849
|
ASSERT_GT(max_offset, footer.index_handle().offset());
|
|
4515
4850
|
c.ResetTableReader();
|
|
4516
4851
|
}
|
|
4517
4852
|
|
|
4853
|
+
TEST_P(BlockBasedTableTest, SeekMetaBlocks) {
|
|
4854
|
+
TableConstructor c(BytewiseComparator(), true /* convert_to_internal_key_ */);
|
|
4855
|
+
c.Add("foo_a1", "val1");
|
|
4856
|
+
c.Add("foo_b2", "val2");
|
|
4857
|
+
c.Add("foo_c3", "val3");
|
|
4858
|
+
c.Add("foo_d4", "val4");
|
|
4859
|
+
c.Add("foo_e5", "val5");
|
|
4860
|
+
c.Add("foo_f6", "val6");
|
|
4861
|
+
c.Add("foo_g7", "val7");
|
|
4862
|
+
c.Add("foo_h8", "val8");
|
|
4863
|
+
c.Add("foo_j9", "val9");
|
|
4864
|
+
|
|
4865
|
+
// write an SST file
|
|
4866
|
+
Options options;
|
|
4867
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
4868
|
+
table_options.index_type = BlockBasedTableOptions::kHashSearch;
|
|
4869
|
+
table_options.filter_policy.reset(NewBloomFilterPolicy(
|
|
4870
|
+
8 /* bits_per_key */, false /* use_block_based_filter */));
|
|
4871
|
+
options.prefix_extractor.reset(NewFixedPrefixTransform(4));
|
|
4872
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
4873
|
+
ImmutableOptions ioptions(options);
|
|
4874
|
+
MutableCFOptions moptions(options);
|
|
4875
|
+
std::vector<std::string> keys;
|
|
4876
|
+
stl_wrappers::KVMap kvmap;
|
|
4877
|
+
c.Finish(options, ioptions, moptions, table_options,
|
|
4878
|
+
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
4879
|
+
|
|
4880
|
+
// get file reader
|
|
4881
|
+
test::StringSink* table_sink = c.TEST_GetSink();
|
|
4882
|
+
std::unique_ptr<FSRandomAccessFile> source(new test::StringSource(
|
|
4883
|
+
table_sink->contents(), 0 /* unique_id */, false /* allow_mmap_reads */));
|
|
4884
|
+
|
|
4885
|
+
std::unique_ptr<RandomAccessFileReader> table_reader(
|
|
4886
|
+
new RandomAccessFileReader(std::move(source), "test"));
|
|
4887
|
+
size_t table_size = table_sink->contents().size();
|
|
4888
|
+
|
|
4889
|
+
// read footer
|
|
4890
|
+
Footer footer;
|
|
4891
|
+
IOOptions opts;
|
|
4892
|
+
ASSERT_OK(ReadFooterFromFile(opts, table_reader.get(),
|
|
4893
|
+
nullptr /* prefetch_buffer */, table_size,
|
|
4894
|
+
&footer, kBlockBasedTableMagicNumber));
|
|
4895
|
+
|
|
4896
|
+
// read metaindex
|
|
4897
|
+
auto metaindex_handle = footer.metaindex_handle();
|
|
4898
|
+
BlockContents metaindex_contents;
|
|
4899
|
+
PersistentCacheOptions pcache_opts;
|
|
4900
|
+
BlockFetcher block_fetcher(
|
|
4901
|
+
table_reader.get(), nullptr /* prefetch_buffer */, footer, ReadOptions(),
|
|
4902
|
+
metaindex_handle, &metaindex_contents, ioptions, false /* decompress */,
|
|
4903
|
+
false /*maybe_compressed*/, BlockType::kMetaIndex,
|
|
4904
|
+
UncompressionDict::GetEmptyDict(), pcache_opts,
|
|
4905
|
+
nullptr /*memory_allocator*/);
|
|
4906
|
+
ASSERT_OK(block_fetcher.ReadBlockContents());
|
|
4907
|
+
Block metaindex_block(std::move(metaindex_contents));
|
|
4908
|
+
|
|
4909
|
+
// verify properties block comes last
|
|
4910
|
+
std::unique_ptr<MetaBlockIter> metaindex_iter(
|
|
4911
|
+
metaindex_block.NewMetaIterator());
|
|
4912
|
+
bool has_hash_prefixes = false;
|
|
4913
|
+
bool has_hash_metadata = false;
|
|
4914
|
+
for (metaindex_iter->SeekToFirst(); metaindex_iter->Valid();
|
|
4915
|
+
metaindex_iter->Next()) {
|
|
4916
|
+
if (metaindex_iter->key().ToString() == kHashIndexPrefixesBlock) {
|
|
4917
|
+
has_hash_prefixes = true;
|
|
4918
|
+
} else if (metaindex_iter->key().ToString() ==
|
|
4919
|
+
kHashIndexPrefixesMetadataBlock) {
|
|
4920
|
+
has_hash_metadata = true;
|
|
4921
|
+
}
|
|
4922
|
+
}
|
|
4923
|
+
if (has_hash_metadata) {
|
|
4924
|
+
metaindex_iter->Seek(kHashIndexPrefixesMetadataBlock);
|
|
4925
|
+
ASSERT_TRUE(metaindex_iter->Valid());
|
|
4926
|
+
ASSERT_EQ(kHashIndexPrefixesMetadataBlock,
|
|
4927
|
+
metaindex_iter->key().ToString());
|
|
4928
|
+
}
|
|
4929
|
+
if (has_hash_prefixes) {
|
|
4930
|
+
metaindex_iter->Seek(kHashIndexPrefixesBlock);
|
|
4931
|
+
ASSERT_TRUE(metaindex_iter->Valid());
|
|
4932
|
+
ASSERT_EQ(kHashIndexPrefixesBlock, metaindex_iter->key().ToString());
|
|
4933
|
+
}
|
|
4934
|
+
c.ResetTableReader();
|
|
4935
|
+
}
|
|
4936
|
+
|
|
4518
4937
|
TEST_P(BlockBasedTableTest, BadOptions) {
|
|
4519
4938
|
ROCKSDB_NAMESPACE::Options options;
|
|
4520
4939
|
options.compression = kNoCompression;
|
|
@@ -4571,11 +4990,21 @@ TEST_F(BBTTailPrefetchTest, TestTailPrefetchStats) {
|
|
|
4571
4990
|
|
|
4572
4991
|
TEST_F(BBTTailPrefetchTest, FilePrefetchBufferMinOffset) {
|
|
4573
4992
|
TailPrefetchStats tpstats;
|
|
4574
|
-
FilePrefetchBuffer buffer(
|
|
4993
|
+
FilePrefetchBuffer buffer(0 /* readahead_size */, 0 /* max_readahead_size */,
|
|
4994
|
+
false /* enable */, true /* track_min_offset */);
|
|
4575
4995
|
IOOptions opts;
|
|
4576
|
-
buffer.TryReadFromCache(opts, 500
|
|
4577
|
-
|
|
4578
|
-
|
|
4996
|
+
buffer.TryReadFromCache(opts, nullptr /* reader */, 500 /* offset */,
|
|
4997
|
+
10 /* n */, nullptr /* result */,
|
|
4998
|
+
nullptr /* status */,
|
|
4999
|
+
Env::IO_TOTAL /* rate_limiter_priority */);
|
|
5000
|
+
buffer.TryReadFromCache(opts, nullptr /* reader */, 480 /* offset */,
|
|
5001
|
+
10 /* n */, nullptr /* result */,
|
|
5002
|
+
nullptr /* status */,
|
|
5003
|
+
Env::IO_TOTAL /* rate_limiter_priority */);
|
|
5004
|
+
buffer.TryReadFromCache(opts, nullptr /* reader */, 490 /* offset */,
|
|
5005
|
+
10 /* n */, nullptr /* result */,
|
|
5006
|
+
nullptr /* status */,
|
|
5007
|
+
Env::IO_TOTAL /* rate_limiter_priority */);
|
|
4579
5008
|
ASSERT_EQ(480, buffer.min_offset_read());
|
|
4580
5009
|
}
|
|
4581
5010
|
|
|
@@ -4605,7 +5034,7 @@ TEST_P(BlockBasedTableTest, DataBlockHashIndex) {
|
|
|
4605
5034
|
|
|
4606
5035
|
std::vector<std::string> keys;
|
|
4607
5036
|
stl_wrappers::KVMap kvmap;
|
|
4608
|
-
const
|
|
5037
|
+
const ImmutableOptions ioptions(options);
|
|
4609
5038
|
const MutableCFOptions moptions(options);
|
|
4610
5039
|
const InternalKeyComparator internal_comparator(options.comparator);
|
|
4611
5040
|
c.Finish(options, ioptions, moptions, table_options, internal_comparator,
|
|
@@ -4688,7 +5117,7 @@ TEST_P(BlockBasedTableTest, OutOfBoundOnSeek) {
|
|
|
4688
5117
|
Options options;
|
|
4689
5118
|
BlockBasedTableOptions table_opt(GetBlockBasedTableOptions());
|
|
4690
5119
|
options.table_factory.reset(NewBlockBasedTableFactory(table_opt));
|
|
4691
|
-
const
|
|
5120
|
+
const ImmutableOptions ioptions(options);
|
|
4692
5121
|
const MutableCFOptions moptions(options);
|
|
4693
5122
|
c.Finish(options, ioptions, moptions, table_opt,
|
|
4694
5123
|
GetPlainInternalComparator(BytewiseComparator()), &keys, &kvmap);
|
|
@@ -4728,7 +5157,7 @@ TEST_P(BlockBasedTableTest, OutOfBoundOnNext) {
|
|
|
4728
5157
|
table_opt.flush_block_policy_factory =
|
|
4729
5158
|
std::make_shared<FlushBlockEveryKeyPolicyFactory>();
|
|
4730
5159
|
options.table_factory.reset(NewBlockBasedTableFactory(table_opt));
|
|
4731
|
-
const
|
|
5160
|
+
const ImmutableOptions ioptions(options);
|
|
4732
5161
|
const MutableCFOptions moptions(options);
|
|
4733
5162
|
c.Finish(options, ioptions, moptions, table_opt,
|
|
4734
5163
|
GetPlainInternalComparator(BytewiseComparator()), &keys, &kvmap);
|
|
@@ -4761,9 +5190,243 @@ TEST_P(BlockBasedTableTest, OutOfBoundOnNext) {
|
|
|
4761
5190
|
ASSERT_FALSE(iter->UpperBoundCheckResult() == IterBoundCheck::kOutOfBound);
|
|
4762
5191
|
}
|
|
4763
5192
|
|
|
5193
|
+
TEST_P(
|
|
5194
|
+
BlockBasedTableTest,
|
|
5195
|
+
IncreaseCacheReservationForCompressDictBuildingBufferOnBuilderAddAndDecreaseOnBuilderFinish) {
|
|
5196
|
+
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5197
|
+
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5198
|
+
constexpr std::size_t kCacheCapacity = 8 * 1024 * 1024;
|
|
5199
|
+
constexpr std::size_t kMaxDictBytes = 1024;
|
|
5200
|
+
constexpr std::size_t kMaxDictBufferBytes = 1024;
|
|
5201
|
+
|
|
5202
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
5203
|
+
LRUCacheOptions lo;
|
|
5204
|
+
lo.capacity = kCacheCapacity;
|
|
5205
|
+
lo.num_shard_bits = 0; // 2^0 shard
|
|
5206
|
+
lo.strict_capacity_limit = true;
|
|
5207
|
+
std::shared_ptr<Cache> cache(NewLRUCache(lo));
|
|
5208
|
+
table_options.block_cache = cache;
|
|
5209
|
+
table_options.flush_block_policy_factory =
|
|
5210
|
+
std::make_shared<FlushBlockEveryKeyPolicyFactory>();
|
|
5211
|
+
|
|
5212
|
+
Options options;
|
|
5213
|
+
options.compression = kSnappyCompression;
|
|
5214
|
+
options.compression_opts.max_dict_bytes = kMaxDictBytes;
|
|
5215
|
+
options.compression_opts.max_dict_buffer_bytes = kMaxDictBufferBytes;
|
|
5216
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5217
|
+
|
|
5218
|
+
test::StringSink* sink = new test::StringSink();
|
|
5219
|
+
std::unique_ptr<FSWritableFile> holder(sink);
|
|
5220
|
+
std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
|
|
5221
|
+
std::move(holder), "test_file_name", FileOptions()));
|
|
5222
|
+
|
|
5223
|
+
ImmutableOptions ioptions(options);
|
|
5224
|
+
MutableCFOptions moptions(options);
|
|
5225
|
+
InternalKeyComparator ikc(options.comparator);
|
|
5226
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
5227
|
+
|
|
5228
|
+
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
5229
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
5230
|
+
&int_tbl_prop_collector_factories, kSnappyCompression,
|
|
5231
|
+
options.compression_opts, kUnknownColumnFamily,
|
|
5232
|
+
"test_cf", -1 /* level */),
|
|
5233
|
+
file_writer.get()));
|
|
5234
|
+
|
|
5235
|
+
std::string key1 = "key1";
|
|
5236
|
+
std::string value1 = "val1";
|
|
5237
|
+
InternalKey ik1(key1, 0 /* sequnce number */, kTypeValue);
|
|
5238
|
+
// Adding the first key won't trigger a flush by FlushBlockEveryKeyPolicy
|
|
5239
|
+
// therefore won't trigger any data block's buffering
|
|
5240
|
+
builder->Add(ik1.Encode(), value1);
|
|
5241
|
+
ASSERT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5242
|
+
|
|
5243
|
+
std::string key2 = "key2";
|
|
5244
|
+
std::string value2 = "val2";
|
|
5245
|
+
InternalKey ik2(key2, 1 /* sequnce number */, kTypeValue);
|
|
5246
|
+
// Adding the second key will trigger a flush of the last data block (the one
|
|
5247
|
+
// containing key1 and value1) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5248
|
+
// buffering of that data block.
|
|
5249
|
+
builder->Add(ik2.Encode(), value2);
|
|
5250
|
+
// Cache reservation will increase for last buffered data block (the one
|
|
5251
|
+
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5252
|
+
// that buffering and the cache will not be full after this reservation
|
|
5253
|
+
EXPECT_GE(cache->GetPinnedUsage(), 1 * kSizeDummyEntry);
|
|
5254
|
+
EXPECT_LT(cache->GetPinnedUsage(),
|
|
5255
|
+
1 * kSizeDummyEntry + kMetaDataChargeOverhead);
|
|
5256
|
+
|
|
5257
|
+
ASSERT_OK(builder->Finish());
|
|
5258
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5259
|
+
}
|
|
5260
|
+
|
|
5261
|
+
TEST_P(
|
|
5262
|
+
BlockBasedTableTest,
|
|
5263
|
+
IncreaseCacheReservationForCompressDictBuildingBufferOnBuilderAddAndDecreaseOnBufferLimitExceed) {
|
|
5264
|
+
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5265
|
+
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5266
|
+
constexpr std::size_t kCacheCapacity = 8 * 1024 * 1024;
|
|
5267
|
+
constexpr std::size_t kMaxDictBytes = 1024;
|
|
5268
|
+
constexpr std::size_t kMaxDictBufferBytes = 2 * kSizeDummyEntry;
|
|
5269
|
+
|
|
5270
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
5271
|
+
LRUCacheOptions lo;
|
|
5272
|
+
lo.capacity = kCacheCapacity;
|
|
5273
|
+
lo.num_shard_bits = 0; // 2^0 shard
|
|
5274
|
+
lo.strict_capacity_limit = true;
|
|
5275
|
+
std::shared_ptr<Cache> cache(NewLRUCache(lo));
|
|
5276
|
+
table_options.block_cache = cache;
|
|
5277
|
+
table_options.flush_block_policy_factory =
|
|
5278
|
+
std::make_shared<FlushBlockEveryKeyPolicyFactory>();
|
|
5279
|
+
|
|
5280
|
+
Options options;
|
|
5281
|
+
options.compression = kSnappyCompression;
|
|
5282
|
+
options.compression_opts.max_dict_bytes = kMaxDictBytes;
|
|
5283
|
+
options.compression_opts.max_dict_buffer_bytes = kMaxDictBufferBytes;
|
|
5284
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5285
|
+
|
|
5286
|
+
test::StringSink* sink = new test::StringSink();
|
|
5287
|
+
std::unique_ptr<FSWritableFile> holder(sink);
|
|
5288
|
+
std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
|
|
5289
|
+
std::move(holder), "test_file_name", FileOptions()));
|
|
5290
|
+
|
|
5291
|
+
ImmutableOptions ioptions(options);
|
|
5292
|
+
MutableCFOptions moptions(options);
|
|
5293
|
+
InternalKeyComparator ikc(options.comparator);
|
|
5294
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
5295
|
+
|
|
5296
|
+
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
5297
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
5298
|
+
&int_tbl_prop_collector_factories, kSnappyCompression,
|
|
5299
|
+
options.compression_opts, kUnknownColumnFamily,
|
|
5300
|
+
"test_cf", -1 /* level */),
|
|
5301
|
+
file_writer.get()));
|
|
5302
|
+
|
|
5303
|
+
std::string key1 = "key1";
|
|
5304
|
+
std::string value1(kSizeDummyEntry, '0');
|
|
5305
|
+
InternalKey ik1(key1, 0 /* sequnce number */, kTypeValue);
|
|
5306
|
+
// Adding the first key won't trigger a flush by FlushBlockEveryKeyPolicy
|
|
5307
|
+
// therefore won't trigger any data block's buffering
|
|
5308
|
+
builder->Add(ik1.Encode(), value1);
|
|
5309
|
+
ASSERT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5310
|
+
|
|
5311
|
+
std::string key2 = "key2";
|
|
5312
|
+
std::string value2(kSizeDummyEntry, '0');
|
|
5313
|
+
InternalKey ik2(key2, 1 /* sequnce number */, kTypeValue);
|
|
5314
|
+
// Adding the second key will trigger a flush of the last data block (the one
|
|
5315
|
+
// containing key1 and value1) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5316
|
+
// buffering of the last data block.
|
|
5317
|
+
builder->Add(ik2.Encode(), value2);
|
|
5318
|
+
// Cache reservation will increase for last buffered data block (the one
|
|
5319
|
+
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5320
|
+
// the buffering and the cache will not be full after this reservation
|
|
5321
|
+
EXPECT_GE(cache->GetPinnedUsage(), 2 * kSizeDummyEntry);
|
|
5322
|
+
EXPECT_LT(cache->GetPinnedUsage(),
|
|
5323
|
+
2 * kSizeDummyEntry + kMetaDataChargeOverhead);
|
|
5324
|
+
|
|
5325
|
+
std::string key3 = "key3";
|
|
5326
|
+
std::string value3 = "val3";
|
|
5327
|
+
InternalKey ik3(key3, 2 /* sequnce number */, kTypeValue);
|
|
5328
|
+
// Adding the third key will trigger a flush of the last data block (the one
|
|
5329
|
+
// containing key2 and value2) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5330
|
+
// buffering of the last data block.
|
|
5331
|
+
builder->Add(ik3.Encode(), value3);
|
|
5332
|
+
// Cache reservation will decrease since the buffer limit is now exceeded
|
|
5333
|
+
// after the last buffering and EnterUnbuffered() is triggered
|
|
5334
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5335
|
+
|
|
5336
|
+
ASSERT_OK(builder->Finish());
|
|
5337
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5338
|
+
}
|
|
5339
|
+
|
|
5340
|
+
TEST_P(
|
|
5341
|
+
BlockBasedTableTest,
|
|
5342
|
+
IncreaseCacheReservationForCompressDictBuildingBufferOnBuilderAddAndDecreaseOnCacheFull) {
|
|
5343
|
+
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5344
|
+
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5345
|
+
// A small kCacheCapacity is chosen so that increase cache reservation for
|
|
5346
|
+
// buffering two data blocks, each containing key1/value1, key2/a big
|
|
5347
|
+
// value2, will cause cache full
|
|
5348
|
+
constexpr std::size_t kCacheCapacity =
|
|
5349
|
+
1 * kSizeDummyEntry + kSizeDummyEntry / 2;
|
|
5350
|
+
constexpr std::size_t kMaxDictBytes = 1024;
|
|
5351
|
+
// A big kMaxDictBufferBytes is chosen so that adding a big key value pair
|
|
5352
|
+
// (key2, value2) won't exceed the buffer limit
|
|
5353
|
+
constexpr std::size_t kMaxDictBufferBytes = 1024 * 1024 * 1024;
|
|
5354
|
+
|
|
5355
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
5356
|
+
LRUCacheOptions lo;
|
|
5357
|
+
lo.capacity = kCacheCapacity;
|
|
5358
|
+
lo.num_shard_bits = 0; // 2^0 shard
|
|
5359
|
+
lo.strict_capacity_limit = true;
|
|
5360
|
+
std::shared_ptr<Cache> cache(NewLRUCache(lo));
|
|
5361
|
+
table_options.block_cache = cache;
|
|
5362
|
+
table_options.flush_block_policy_factory =
|
|
5363
|
+
std::make_shared<FlushBlockEveryKeyPolicyFactory>();
|
|
5364
|
+
|
|
5365
|
+
Options options;
|
|
5366
|
+
options.compression = kSnappyCompression;
|
|
5367
|
+
options.compression_opts.max_dict_bytes = kMaxDictBytes;
|
|
5368
|
+
options.compression_opts.max_dict_buffer_bytes = kMaxDictBufferBytes;
|
|
5369
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5370
|
+
|
|
5371
|
+
test::StringSink* sink = new test::StringSink();
|
|
5372
|
+
std::unique_ptr<FSWritableFile> holder(sink);
|
|
5373
|
+
std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
|
|
5374
|
+
std::move(holder), "test_file_name", FileOptions()));
|
|
5375
|
+
|
|
5376
|
+
ImmutableOptions ioptions(options);
|
|
5377
|
+
MutableCFOptions moptions(options);
|
|
5378
|
+
InternalKeyComparator ikc(options.comparator);
|
|
5379
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
5380
|
+
|
|
5381
|
+
std::unique_ptr<TableBuilder> builder(options.table_factory->NewTableBuilder(
|
|
5382
|
+
TableBuilderOptions(ioptions, moptions, ikc,
|
|
5383
|
+
&int_tbl_prop_collector_factories, kSnappyCompression,
|
|
5384
|
+
options.compression_opts, kUnknownColumnFamily,
|
|
5385
|
+
"test_cf", -1 /* level */),
|
|
5386
|
+
file_writer.get()));
|
|
5387
|
+
|
|
5388
|
+
std::string key1 = "key1";
|
|
5389
|
+
std::string value1 = "val1";
|
|
5390
|
+
InternalKey ik1(key1, 0 /* sequnce number */, kTypeValue);
|
|
5391
|
+
// Adding the first key won't trigger a flush by FlushBlockEveryKeyPolicy
|
|
5392
|
+
// therefore won't trigger any data block's buffering
|
|
5393
|
+
builder->Add(ik1.Encode(), value1);
|
|
5394
|
+
ASSERT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5395
|
+
|
|
5396
|
+
std::string key2 = "key2";
|
|
5397
|
+
std::string value2(kSizeDummyEntry, '0');
|
|
5398
|
+
InternalKey ik2(key2, 1 /* sequnce number */, kTypeValue);
|
|
5399
|
+
// Adding the second key will trigger a flush of the last data block (the one
|
|
5400
|
+
// containing key1 and value1) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5401
|
+
// buffering of the last data block.
|
|
5402
|
+
builder->Add(ik2.Encode(), value2);
|
|
5403
|
+
// Cache reservation will increase for the last buffered data block (the one
|
|
5404
|
+
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5405
|
+
// the buffering and the cache will not be full after this reservation
|
|
5406
|
+
EXPECT_GE(cache->GetPinnedUsage(), 1 * kSizeDummyEntry);
|
|
5407
|
+
EXPECT_LT(cache->GetPinnedUsage(),
|
|
5408
|
+
1 * kSizeDummyEntry + kMetaDataChargeOverhead);
|
|
5409
|
+
|
|
5410
|
+
std::string key3 = "key3";
|
|
5411
|
+
std::string value3 = "value3";
|
|
5412
|
+
InternalKey ik3(key3, 2 /* sequnce number */, kTypeValue);
|
|
5413
|
+
// Adding the third key will trigger a flush of the last data block (the one
|
|
5414
|
+
// containing key2 and value2) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5415
|
+
// buffering of the last data block.
|
|
5416
|
+
builder->Add(ik3.Encode(), value3);
|
|
5417
|
+
// Cache reservation will decrease since the cache is now full after
|
|
5418
|
+
// increasing reservation for the last buffered block and EnterUnbuffered() is
|
|
5419
|
+
// triggered
|
|
5420
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5421
|
+
|
|
5422
|
+
ASSERT_OK(builder->Finish());
|
|
5423
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5424
|
+
}
|
|
5425
|
+
|
|
4764
5426
|
} // namespace ROCKSDB_NAMESPACE
|
|
4765
5427
|
|
|
4766
5428
|
int main(int argc, char** argv) {
|
|
5429
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
4767
5430
|
::testing::InitGoogleTest(&argc, argv);
|
|
4768
5431
|
return RUN_ALL_TESTS();
|
|
4769
5432
|
}
|