@nxtedition/rocksdb 15.4.0 → 15.5.0
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 +24 -19
- package/cache.js +1 -1
- package/chained-batch.js +12 -3
- package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
- package/deps/rocksdb/rocksdb/BUCK +42 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
- package/deps/rocksdb/rocksdb/Makefile +59 -32
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
- package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
- package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
- package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
- package/deps/rocksdb/rocksdb/db/builder.h +7 -0
- package/deps/rocksdb/rocksdb/db/c.cc +373 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
- package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
- package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
- package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
- package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
- package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
- package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
- package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
- package/deps/rocksdb/rocksdb/env/env.cc +1 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
- package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
- package/deps/rocksdb/rocksdb/folly.mk +22 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
- package/deps/rocksdb/rocksdb/options/options.cc +5 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
- package/deps/rocksdb/rocksdb/port/lang.h +4 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
- package/deps/rocksdb/rocksdb/src.mk +12 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
- package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
- package/deps/rocksdb/rocksdb/table/format.cc +27 -15
- package/deps/rocksdb/rocksdb/table/format.h +41 -15
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
- package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
- package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
- package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
- package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
- package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
- package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
- package/deps/rocksdb/rocksdb/util/coding.h +14 -27
- package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
- package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
- package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
- package/deps/rocksdb/rocksdb/util/math.h +3 -1
- package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
- package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
- package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
- package/deps/rocksdb/rocksdb/util/status.cc +3 -1
- package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
- package/deps/rocksdb/rocksdb.gyp +7 -0
- package/index.js +11 -2
- package/iterator.js +15 -7
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "rocksdb/flush_block_policy.h"
|
|
14
14
|
#include "rocksdb/utilities/object_registry.h"
|
|
15
15
|
#include "table/block_based/block_builder.h"
|
|
16
|
+
#include "table/block_based/data_block_footer.h"
|
|
16
17
|
#include "test_util/testutil.h"
|
|
17
18
|
#include "util/auto_tune_compressor.h"
|
|
18
19
|
#include "util/coding.h"
|
|
@@ -583,17 +584,15 @@ TEST_P(PresetCompressionDictTest, Flush) {
|
|
|
583
584
|
ASSERT_GT(
|
|
584
585
|
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
585
586
|
0);
|
|
586
|
-
|
|
587
|
-
//
|
|
588
|
-
//
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
2 * kBlockLen);
|
|
596
|
-
}
|
|
587
|
+
ASSERT_EQ(TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_ADD), 1);
|
|
588
|
+
// Although we stop buffering after `kBlockLen` bytes, there may be up to
|
|
589
|
+
// two blocks of data included in the dictionary since we only check limit
|
|
590
|
+
// after each block is built. And because block cache charges for bytes used
|
|
591
|
+
// by ZSTD's digested dictionary, we need a larger factor for the memory
|
|
592
|
+
// overheads in that case.
|
|
593
|
+
ASSERT_LE(
|
|
594
|
+
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
595
|
+
(compression_type_ == kZSTD ? 10 : 2) * kBlockLen);
|
|
597
596
|
}
|
|
598
597
|
}
|
|
599
598
|
|
|
@@ -642,8 +641,9 @@ TEST_P(PresetCompressionDictTest, CompactNonBottommost) {
|
|
|
642
641
|
}
|
|
643
642
|
ASSERT_EQ("2,0,1", FilesPerLevel(0));
|
|
644
643
|
|
|
645
|
-
|
|
646
|
-
|
|
644
|
+
PopTicker(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT);
|
|
645
|
+
PopTicker(options, BLOCK_CACHE_COMPRESSION_DICT_ADD);
|
|
646
|
+
|
|
647
647
|
// This L0->L1 compaction merges the two L0 files into L1. The produced L1
|
|
648
648
|
// file is not bottommost due to the existing L2 file covering the same key-
|
|
649
649
|
// range.
|
|
@@ -655,22 +655,20 @@ TEST_P(PresetCompressionDictTest, CompactNonBottommost) {
|
|
|
655
655
|
if (bottommost_) {
|
|
656
656
|
ASSERT_EQ(
|
|
657
657
|
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
658
|
-
|
|
658
|
+
0);
|
|
659
659
|
} else {
|
|
660
660
|
ASSERT_GT(
|
|
661
661
|
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
//
|
|
665
|
-
//
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
prev_compression_dict_bytes_inserted + 2 * kBlockLen);
|
|
673
|
-
}
|
|
662
|
+
0);
|
|
663
|
+
ASSERT_EQ(TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_ADD), 1);
|
|
664
|
+
// Although we stop buffering after `kBlockLen` bytes, there may be up to
|
|
665
|
+
// two blocks of data included in the dictionary since we only check limit
|
|
666
|
+
// after each block is built. And because block cache charges for bytes used
|
|
667
|
+
// by ZSTD's digested dictionary, we need a larger factor for the memory
|
|
668
|
+
// overheads in that case.
|
|
669
|
+
ASSERT_LE(
|
|
670
|
+
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
671
|
+
(compression_type_ == kZSTD ? 10 : 2) * kBlockLen);
|
|
674
672
|
}
|
|
675
673
|
}
|
|
676
674
|
|
|
@@ -713,25 +711,24 @@ TEST_P(PresetCompressionDictTest, CompactBottommost) {
|
|
|
713
711
|
}
|
|
714
712
|
ASSERT_EQ("2", FilesPerLevel(0));
|
|
715
713
|
|
|
716
|
-
|
|
717
|
-
|
|
714
|
+
PopTicker(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT);
|
|
715
|
+
PopTicker(options, BLOCK_CACHE_COMPRESSION_DICT_ADD);
|
|
716
|
+
|
|
718
717
|
CompactRangeOptions cro;
|
|
719
718
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
720
719
|
ASSERT_EQ("0,1", FilesPerLevel(0));
|
|
721
720
|
ASSERT_GT(
|
|
722
721
|
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
//
|
|
726
|
-
//
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
prev_compression_dict_bytes_inserted + 2 * kBlockLen);
|
|
734
|
-
}
|
|
722
|
+
0);
|
|
723
|
+
ASSERT_EQ(TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_ADD), 1);
|
|
724
|
+
// Although we stop buffering after `kBlockLen` bytes, there may be up to
|
|
725
|
+
// two blocks of data included in the dictionary since we only check limit
|
|
726
|
+
// after each block is built. And because block cache charges for bytes used
|
|
727
|
+
// by ZSTD's digested dictionary, we need a larger factor for the memory
|
|
728
|
+
// overheads in that case.
|
|
729
|
+
ASSERT_LE(
|
|
730
|
+
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
731
|
+
(compression_type_ == kZSTD ? 10 : 2) * kBlockLen);
|
|
735
732
|
}
|
|
736
733
|
|
|
737
734
|
class CompactionCompressionListener : public EventListener {
|
|
@@ -829,9 +826,10 @@ TEST_P(CompressionFailuresTest, CompressionFailures) {
|
|
|
829
826
|
|
|
830
827
|
if (compression_failure_type_ == kTestCompressionFail) {
|
|
831
828
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
832
|
-
"
|
|
833
|
-
|
|
834
|
-
*ret =
|
|
829
|
+
"BlockBasedTableBuilder::CompressAndVerifyBlock:TamperWithResultType",
|
|
830
|
+
[](void* arg) {
|
|
831
|
+
CompressionType* ret = static_cast<CompressionType*>(arg);
|
|
832
|
+
*ret = kNoCompression;
|
|
835
833
|
});
|
|
836
834
|
} else if (compression_failure_type_ == kTestDecompressionFail) {
|
|
837
835
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
@@ -1113,18 +1111,24 @@ TEST_F(DBCompressionTest, RandomMixedCompressionManager) {
|
|
|
1113
1111
|
namespace {
|
|
1114
1112
|
// Template parameter to distinguish data blocks vs. v4+ index blocks
|
|
1115
1113
|
template <bool kIndexBlockV4>
|
|
1116
|
-
static Status ValidateRocksBlock(Slice data
|
|
1114
|
+
static Status ValidateRocksBlock(Slice data, bool use_separated_kv,
|
|
1115
|
+
uint64_t restart_interval) {
|
|
1116
|
+
assert(!kIndexBlockV4 ||
|
|
1117
|
+
!use_separated_kv); // index blocks not currently supported
|
|
1117
1118
|
const char* src = data.data();
|
|
1118
1119
|
size_t srcSize = data.size();
|
|
1119
1120
|
const char* const block_type_str =
|
|
1120
1121
|
kIndexBlockV4 ? "Index block" : "Data block";
|
|
1121
1122
|
|
|
1122
|
-
//
|
|
1123
|
-
|
|
1123
|
+
// Decode footer using DataBlockFooter
|
|
1124
|
+
Slice input(src, srcSize);
|
|
1125
|
+
DataBlockFooter footer;
|
|
1126
|
+
Status s = footer.DecodeFrom(&input);
|
|
1127
|
+
if (!s.ok()) {
|
|
1124
1128
|
return Status::Corruption(std::string(block_type_str) + " too small");
|
|
1125
1129
|
}
|
|
1126
1130
|
|
|
1127
|
-
uint32_t numRestarts =
|
|
1131
|
+
uint32_t numRestarts = footer.num_restarts;
|
|
1128
1132
|
|
|
1129
1133
|
// Sanity check: num_restarts should be reasonable
|
|
1130
1134
|
// TODO: also support data block hash index
|
|
@@ -1133,17 +1137,26 @@ static Status ValidateRocksBlock(Slice data) {
|
|
|
1133
1137
|
block_type_str);
|
|
1134
1138
|
}
|
|
1135
1139
|
|
|
1136
|
-
size_t restartsSize = numRestarts * sizeof(uint32_t)
|
|
1137
|
-
if (
|
|
1140
|
+
size_t restartsSize = numRestarts * sizeof(uint32_t);
|
|
1141
|
+
if (input.size() < restartsSize) {
|
|
1138
1142
|
return Status::Corruption(std::string(block_type_str) +
|
|
1139
1143
|
" too small for restarts array");
|
|
1140
1144
|
}
|
|
1141
1145
|
|
|
1142
|
-
size_t entriesSize
|
|
1146
|
+
size_t entriesSize;
|
|
1147
|
+
uint32_t values_section_offset = 0;
|
|
1148
|
+
if (footer.separated_kv) {
|
|
1149
|
+
values_section_offset = footer.values_section_offset;
|
|
1150
|
+
entriesSize = values_section_offset; // keys section ends at value_offset
|
|
1151
|
+
} else {
|
|
1152
|
+
entriesSize = input.size() - restartsSize;
|
|
1153
|
+
}
|
|
1143
1154
|
const char* entriesEnd = src + entriesSize;
|
|
1144
1155
|
|
|
1145
1156
|
// Parse entries
|
|
1146
1157
|
const char* p = src;
|
|
1158
|
+
uint32_t cur_idx = 0;
|
|
1159
|
+
Slice current_value;
|
|
1147
1160
|
while (p < entriesEnd) {
|
|
1148
1161
|
// Parse shared_bytes varint
|
|
1149
1162
|
uint32_t shared;
|
|
@@ -1174,6 +1187,17 @@ static Status ValidateRocksBlock(Slice data) {
|
|
|
1174
1187
|
p = next;
|
|
1175
1188
|
}
|
|
1176
1189
|
|
|
1190
|
+
uint32_t value_offset = 0;
|
|
1191
|
+
if (cur_idx % restart_interval == 0 && use_separated_kv) {
|
|
1192
|
+
// For separated KV format, parse value_offset varint at restart points
|
|
1193
|
+
next = GetVarint32Ptr(p, entriesEnd, &value_offset);
|
|
1194
|
+
if (next == nullptr) {
|
|
1195
|
+
return Status::Corruption(
|
|
1196
|
+
std::string("Invalid value_offset varint in ") + block_type_str);
|
|
1197
|
+
}
|
|
1198
|
+
p = next;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1177
1201
|
// Validate key delta
|
|
1178
1202
|
if (p + unshared > entriesEnd) {
|
|
1179
1203
|
return Status::Corruption(
|
|
@@ -1204,12 +1228,35 @@ static Status ValidateRocksBlock(Slice data) {
|
|
|
1204
1228
|
}
|
|
1205
1229
|
} else {
|
|
1206
1230
|
// For data blocks, validate value
|
|
1207
|
-
if (
|
|
1208
|
-
|
|
1209
|
-
|
|
1231
|
+
if (!use_separated_kv) {
|
|
1232
|
+
// Inline values: value follows key delta
|
|
1233
|
+
if (p + valueLen > entriesEnd) {
|
|
1234
|
+
return Status::Corruption(
|
|
1235
|
+
std::string("Value exceeds end of entries in ") + block_type_str);
|
|
1236
|
+
}
|
|
1237
|
+
p += valueLen;
|
|
1238
|
+
} else {
|
|
1239
|
+
// Separated KV: values are stored in a separate section
|
|
1240
|
+
// value_offset is relative to values section start (set at restart
|
|
1241
|
+
// points)
|
|
1242
|
+
if (cur_idx % restart_interval == 0) {
|
|
1243
|
+
current_value =
|
|
1244
|
+
Slice(src + values_section_offset + value_offset, valueLen);
|
|
1245
|
+
} else {
|
|
1246
|
+
// Non-restart entries: value immediately follows previous value
|
|
1247
|
+
current_value =
|
|
1248
|
+
Slice(current_value.data() + current_value.size(), valueLen);
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
if (current_value.data() + current_value.size() >
|
|
1252
|
+
src + srcSize - restartsSize) {
|
|
1253
|
+
return Status::Corruption(
|
|
1254
|
+
std::string("Value exceeds values section in ") + block_type_str);
|
|
1255
|
+
}
|
|
1210
1256
|
}
|
|
1211
|
-
p += valueLen;
|
|
1212
1257
|
}
|
|
1258
|
+
|
|
1259
|
+
++cur_idx;
|
|
1213
1260
|
}
|
|
1214
1261
|
|
|
1215
1262
|
return Status::OK();
|
|
@@ -1218,20 +1265,23 @@ static Status ValidateRocksBlock(Slice data) {
|
|
|
1218
1265
|
|
|
1219
1266
|
class DBCompressionTestMaybeParallel
|
|
1220
1267
|
: public DBCompressionTest,
|
|
1221
|
-
public testing::WithParamInterface<std::tuple<int, bool>> {
|
|
1268
|
+
public testing::WithParamInterface<std::tuple<int, bool, bool>> {
|
|
1222
1269
|
public:
|
|
1223
1270
|
DBCompressionTestMaybeParallel()
|
|
1224
1271
|
: DBCompressionTest(),
|
|
1225
1272
|
parallel_threads_(std::get<0>(GetParam())),
|
|
1226
|
-
use_dict_(std::get<1>(GetParam()))
|
|
1273
|
+
use_dict_(std::get<1>(GetParam())),
|
|
1274
|
+
separate_kv_(std::get<2>(GetParam())) {}
|
|
1227
1275
|
|
|
1228
1276
|
protected:
|
|
1229
1277
|
int parallel_threads_;
|
|
1230
1278
|
bool use_dict_;
|
|
1279
|
+
bool separate_kv_;
|
|
1231
1280
|
};
|
|
1232
1281
|
|
|
1233
1282
|
INSTANTIATE_TEST_CASE_P(DBCompressionTest, DBCompressionTestMaybeParallel,
|
|
1234
1283
|
::testing::Combine(::testing::Values(1, 4),
|
|
1284
|
+
::testing::Values(false, true),
|
|
1235
1285
|
::testing::Values(false, true)));
|
|
1236
1286
|
|
|
1237
1287
|
TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
@@ -1248,6 +1298,10 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1248
1298
|
static RelaxedAtomic<int> dataCheckedCount{0};
|
|
1249
1299
|
static RelaxedAtomic<int> indexCheckedCount{0};
|
|
1250
1300
|
static RelaxedAtomic<int> compressCalledCount{0};
|
|
1301
|
+
static bool useSeparatedKV = false;
|
|
1302
|
+
|
|
1303
|
+
// Set the separated KV flag for the wrappers
|
|
1304
|
+
useSeparatedKV = separate_kv_;
|
|
1251
1305
|
|
|
1252
1306
|
// We also have wrappers here to help verify that when RocksDB asks to
|
|
1253
1307
|
// specialize the Compressor for a particular kind of block, it only passes in
|
|
@@ -1270,7 +1324,9 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1270
1324
|
ManagedWorkingArea* working_area) override {
|
|
1271
1325
|
dataCheckedCount.FetchAddRelaxed(1);
|
|
1272
1326
|
// Parse and validate data block format before compressing
|
|
1273
|
-
Status s = ValidateRocksBlock</*kIndexBlockV4=*/false>(
|
|
1327
|
+
Status s = ValidateRocksBlock</*kIndexBlockV4=*/false>(
|
|
1328
|
+
uncompressed_data, useSeparatedKV,
|
|
1329
|
+
BlockBasedTableOptions().block_restart_interval);
|
|
1274
1330
|
if (!s.ok()) {
|
|
1275
1331
|
return s;
|
|
1276
1332
|
}
|
|
@@ -1296,7 +1352,9 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1296
1352
|
ManagedWorkingArea* working_area) override {
|
|
1297
1353
|
indexCheckedCount.FetchAddRelaxed(1);
|
|
1298
1354
|
// Parse and validate index block v4 format before compressing
|
|
1299
|
-
Status s = ValidateRocksBlock</*kIndexBlockV4=*/true>(
|
|
1355
|
+
Status s = ValidateRocksBlock</*kIndexBlockV4=*/true>(
|
|
1356
|
+
uncompressed_data, false,
|
|
1357
|
+
BlockBasedTableOptions().index_block_restart_interval);
|
|
1300
1358
|
if (!s.ok()) {
|
|
1301
1359
|
return s;
|
|
1302
1360
|
}
|
|
@@ -1365,9 +1423,9 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1365
1423
|
|
|
1366
1424
|
std::unique_ptr<Compressor> MaybeCloneSpecialized(
|
|
1367
1425
|
CacheEntryRole block_type,
|
|
1368
|
-
|
|
1426
|
+
DictConfigArgs&& dict_config) const override {
|
|
1369
1427
|
std::unique_ptr<Compressor> result = std::make_unique<MyCompressor>(
|
|
1370
|
-
wrapped_->CloneMaybeSpecialized(block_type, std::move(
|
|
1428
|
+
wrapped_->CloneMaybeSpecialized(block_type, std::move(dict_config)));
|
|
1371
1429
|
if (block_type == CacheEntryRole::kDataBlock) {
|
|
1372
1430
|
result = std::make_unique<CheckDataBlockCompressorWrapper>(
|
|
1373
1431
|
std::move(result));
|
|
@@ -1396,7 +1454,8 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1396
1454
|
continue;
|
|
1397
1455
|
}
|
|
1398
1456
|
SCOPED_TRACE("Compression type: " + std::to_string(type) +
|
|
1399
|
-
(use_wrapper ? " with " : " no ") + "wrapper"
|
|
1457
|
+
(use_wrapper ? " with " : " no ") + "wrapper" +
|
|
1458
|
+
(separate_kv_ ? " separated_kv" : ""));
|
|
1400
1459
|
|
|
1401
1460
|
Options options = CurrentOptions();
|
|
1402
1461
|
options.compression = type;
|
|
@@ -1409,6 +1468,7 @@ TEST_P(DBCompressionTestMaybeParallel, CompressionManagerWrapper) {
|
|
|
1409
1468
|
bbto.index_type = BlockBasedTableOptions::kTwoLevelIndexSearch;
|
|
1410
1469
|
bbto.partition_filters = true;
|
|
1411
1470
|
bbto.filter_policy.reset(NewBloomFilterPolicy(5));
|
|
1471
|
+
bbto.separate_key_value_in_data_block = separate_kv_;
|
|
1412
1472
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
1413
1473
|
options.compression_manager = use_wrapper ? mgr : nullptr;
|
|
1414
1474
|
DestroyAndReopen(options);
|
|
@@ -2141,6 +2201,232 @@ TEST_F(DBCompressionCostPredictor, CostAwareCompressorManager) {
|
|
|
2141
2201
|
ASSERT_OK(Flush());
|
|
2142
2202
|
}
|
|
2143
2203
|
|
|
2204
|
+
// Test pre-defined dictionary compression with a custom CompressionManager
|
|
2205
|
+
TEST_F(DBCompressionTest, PreDefinedDictionaryCompression) {
|
|
2206
|
+
if (!ZSTD_Supported()) {
|
|
2207
|
+
ROCKSDB_GTEST_BYPASS("ZSTD compression not supported");
|
|
2208
|
+
return;
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
// A custom compressor that returns a pre-defined dictionary
|
|
2212
|
+
class PreDefinedDictCompressor : public CompressorWrapper {
|
|
2213
|
+
public:
|
|
2214
|
+
explicit PreDefinedDictCompressor(std::unique_ptr<Compressor> wrapped,
|
|
2215
|
+
std::string dict_data)
|
|
2216
|
+
: CompressorWrapper(std::move(wrapped)),
|
|
2217
|
+
predefined_dict_(std::move(dict_data)) {}
|
|
2218
|
+
|
|
2219
|
+
const char* Name() const override { return "PreDefinedDictCompressor"; }
|
|
2220
|
+
|
|
2221
|
+
DictConfig GetDictGuidance(CacheEntryRole block_type) const override {
|
|
2222
|
+
if (block_type == CacheEntryRole::kDataBlock &&
|
|
2223
|
+
!predefined_dict_.empty()) {
|
|
2224
|
+
return DictPreDefined{/*copy*/ predefined_dict_};
|
|
2225
|
+
}
|
|
2226
|
+
return DictDisabled{};
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
std::unique_ptr<Compressor> Clone() const override {
|
|
2230
|
+
return std::make_unique<PreDefinedDictCompressor>(wrapped_->Clone(),
|
|
2231
|
+
predefined_dict_);
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
std::unique_ptr<Compressor> MaybeCloneSpecialized(
|
|
2235
|
+
CacheEntryRole block_type,
|
|
2236
|
+
DictConfigArgs&& dict_config) const override {
|
|
2237
|
+
// Delegate to wrapped compressor for dictionary handling
|
|
2238
|
+
auto specialized =
|
|
2239
|
+
wrapped_->MaybeCloneSpecialized(block_type, std::move(dict_config));
|
|
2240
|
+
if (specialized) {
|
|
2241
|
+
return specialized;
|
|
2242
|
+
}
|
|
2243
|
+
return nullptr;
|
|
2244
|
+
}
|
|
2245
|
+
|
|
2246
|
+
private:
|
|
2247
|
+
std::string predefined_dict_;
|
|
2248
|
+
};
|
|
2249
|
+
|
|
2250
|
+
// Custom CompatibilityName so the builtin compression manager won't be used
|
|
2251
|
+
static const char* kTestCompatibilityName = "PreDefinedDictTest";
|
|
2252
|
+
|
|
2253
|
+
class PreDefinedDictManager : public CompressionManagerWrapper {
|
|
2254
|
+
public:
|
|
2255
|
+
explicit PreDefinedDictManager(std::shared_ptr<CompressionManager> wrapped,
|
|
2256
|
+
std::string dict_data)
|
|
2257
|
+
: CompressionManagerWrapper(std::move(wrapped)),
|
|
2258
|
+
predefined_dict_(std::move(dict_data)) {}
|
|
2259
|
+
|
|
2260
|
+
const char* Name() const override { return "PreDefinedDictManager"; }
|
|
2261
|
+
|
|
2262
|
+
const char* CompatibilityName() const override {
|
|
2263
|
+
return kTestCompatibilityName;
|
|
2264
|
+
}
|
|
2265
|
+
|
|
2266
|
+
std::unique_ptr<Compressor> GetCompressorForSST(
|
|
2267
|
+
const FilterBuildingContext& context, const CompressionOptions& opts,
|
|
2268
|
+
CompressionType preferred) override {
|
|
2269
|
+
auto base = wrapped_->GetCompressorForSST(context, opts, preferred);
|
|
2270
|
+
if (base) {
|
|
2271
|
+
return std::make_unique<PreDefinedDictCompressor>(std::move(base),
|
|
2272
|
+
predefined_dict_);
|
|
2273
|
+
}
|
|
2274
|
+
return nullptr;
|
|
2275
|
+
}
|
|
2276
|
+
|
|
2277
|
+
private:
|
|
2278
|
+
std::string predefined_dict_;
|
|
2279
|
+
};
|
|
2280
|
+
|
|
2281
|
+
// A broken manager that ignores the dictionary when decompressing.
|
|
2282
|
+
// This simulates a buggy decompressor that doesn't properly apply the
|
|
2283
|
+
// dictionary, causing ZSTD to produce wrong output when decompressing
|
|
2284
|
+
// dictionary-compressed data.
|
|
2285
|
+
class BrokenDictManager : public CompressionManagerWrapper {
|
|
2286
|
+
public:
|
|
2287
|
+
explicit BrokenDictManager(std::shared_ptr<CompressionManager> wrapped)
|
|
2288
|
+
: CompressionManagerWrapper(std::move(wrapped)) {}
|
|
2289
|
+
|
|
2290
|
+
const char* Name() const override { return "BrokenDictManager"; }
|
|
2291
|
+
|
|
2292
|
+
const char* CompatibilityName() const override {
|
|
2293
|
+
return kTestCompatibilityName;
|
|
2294
|
+
}
|
|
2295
|
+
|
|
2296
|
+
std::shared_ptr<Decompressor> GetDecompressor() override {
|
|
2297
|
+
return std::make_shared<IgnoreDictDecompressor>(
|
|
2298
|
+
wrapped_->GetDecompressor());
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
std::shared_ptr<Decompressor> GetDecompressorOptimizeFor(
|
|
2302
|
+
CompressionType optimize_for_type) override {
|
|
2303
|
+
return std::make_shared<IgnoreDictDecompressor>(
|
|
2304
|
+
wrapped_->GetDecompressorOptimizeFor(optimize_for_type));
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
std::shared_ptr<Decompressor> GetDecompressorForTypes(
|
|
2308
|
+
const CompressionType* types_begin,
|
|
2309
|
+
const CompressionType* types_end) override {
|
|
2310
|
+
return std::make_shared<IgnoreDictDecompressor>(
|
|
2311
|
+
wrapped_->GetDecompressorForTypes(types_begin, types_end));
|
|
2312
|
+
}
|
|
2313
|
+
|
|
2314
|
+
private:
|
|
2315
|
+
// A decompressor that stores the dictionary (for GetSerializedDict) but
|
|
2316
|
+
// ignores it during decompression, causing ZSTD to produce garbage
|
|
2317
|
+
class IgnoreDictDecompressor : public DecompressorWrapper {
|
|
2318
|
+
public:
|
|
2319
|
+
explicit IgnoreDictDecompressor(std::shared_ptr<Decompressor> wrapped)
|
|
2320
|
+
: DecompressorWrapper(std::move(wrapped)) {}
|
|
2321
|
+
|
|
2322
|
+
IgnoreDictDecompressor(std::shared_ptr<Decompressor> wrapped,
|
|
2323
|
+
std::string dict)
|
|
2324
|
+
: DecompressorWrapper(std::move(wrapped)),
|
|
2325
|
+
dict_(std::move(dict)),
|
|
2326
|
+
dict_slice_(dict_) {}
|
|
2327
|
+
|
|
2328
|
+
const char* Name() const override { return "IgnoreDictDecompressor"; }
|
|
2329
|
+
|
|
2330
|
+
const Slice& GetSerializedDict() const override { return dict_slice_; }
|
|
2331
|
+
|
|
2332
|
+
Status MaybeCloneForDict(const Slice& serialized_dict,
|
|
2333
|
+
std::unique_ptr<Decompressor>* out) override {
|
|
2334
|
+
// Store the dict but don't actually use it for decompression
|
|
2335
|
+
*out = std::make_unique<IgnoreDictDecompressor>(
|
|
2336
|
+
wrapped_,
|
|
2337
|
+
std::string(serialized_dict.data(), serialized_dict.size()));
|
|
2338
|
+
return Status::OK();
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
private:
|
|
2342
|
+
std::string dict_;
|
|
2343
|
+
Slice dict_slice_;
|
|
2344
|
+
};
|
|
2345
|
+
};
|
|
2346
|
+
|
|
2347
|
+
// Create a dictionary that will be heavily referenced. The key insight is
|
|
2348
|
+
// that ZSTD dictionary compression works by finding matches between the input
|
|
2349
|
+
// data and the dictionary content. To force ZSTD to create dictionary
|
|
2350
|
+
// references, we need to use data that contains exact copies of dictionary
|
|
2351
|
+
// content.
|
|
2352
|
+
Random rnd(42);
|
|
2353
|
+
|
|
2354
|
+
// Create a dictionary with recognizable patterns
|
|
2355
|
+
std::string predefined_dict;
|
|
2356
|
+
std::vector<std::string> dict_patterns;
|
|
2357
|
+
for (int i = 0; i < 50; i++) {
|
|
2358
|
+
std::string pattern = rnd.RandomString(200);
|
|
2359
|
+
dict_patterns.push_back(pattern);
|
|
2360
|
+
predefined_dict += pattern;
|
|
2361
|
+
}
|
|
2362
|
+
// Total dict size: 50 * 200 = 10000 bytes
|
|
2363
|
+
size_t kDictSize = predefined_dict.size();
|
|
2364
|
+
|
|
2365
|
+
auto mgr = std::make_shared<PreDefinedDictManager>(
|
|
2366
|
+
GetBuiltinV2CompressionManager(), predefined_dict);
|
|
2367
|
+
|
|
2368
|
+
Options options = CurrentOptions();
|
|
2369
|
+
options.compression = kZSTD;
|
|
2370
|
+
options.compression_opts.max_dict_bytes = static_cast<int>(kDictSize);
|
|
2371
|
+
options.compression_manager = mgr;
|
|
2372
|
+
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
2373
|
+
BlockBasedTableOptions bbto;
|
|
2374
|
+
bbto.enable_index_compression = true;
|
|
2375
|
+
// Need format_version >= 7 for custom CompatibilityName
|
|
2376
|
+
bbto.format_version = 7;
|
|
2377
|
+
// Need dictionary block load statistics
|
|
2378
|
+
bbto.block_cache = NewLRUCache(1 << 20);
|
|
2379
|
+
bbto.cache_index_and_filter_blocks = true;
|
|
2380
|
+
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
2381
|
+
DestroyAndReopen(options);
|
|
2382
|
+
|
|
2383
|
+
// Write data that uses the same patterns from the dictionary.
|
|
2384
|
+
// This forces ZSTD to create back-references to the dictionary.
|
|
2385
|
+
std::vector<std::string> expected_values;
|
|
2386
|
+
for (int i = 0; i < 100; i++) {
|
|
2387
|
+
std::string value;
|
|
2388
|
+
// Compose value from random dictionary patterns - same content as dict
|
|
2389
|
+
for (int j = 0; j < 5; j++) {
|
|
2390
|
+
value +=
|
|
2391
|
+
dict_patterns[rnd.Uniform(static_cast<int>(dict_patterns.size()))];
|
|
2392
|
+
}
|
|
2393
|
+
expected_values.push_back(value);
|
|
2394
|
+
ASSERT_OK(Put(Key(i), value));
|
|
2395
|
+
}
|
|
2396
|
+
ASSERT_OK(Flush());
|
|
2397
|
+
|
|
2398
|
+
// Verify dictionary was used by checking that dict bytes were inserted
|
|
2399
|
+
ASSERT_GE(
|
|
2400
|
+
TestGetTickerCount(options, BLOCK_CACHE_COMPRESSION_DICT_BYTES_INSERT),
|
|
2401
|
+
predefined_dict.size());
|
|
2402
|
+
|
|
2403
|
+
// Read back data and verify correctness
|
|
2404
|
+
for (int i = 0; i < 100; i++) {
|
|
2405
|
+
std::string value;
|
|
2406
|
+
ASSERT_OK(db_->Get(ReadOptions(), Key(i), &value));
|
|
2407
|
+
ASSERT_EQ(value, expected_values[i]);
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
// Now re-open with a broken decompressor that ignores dictionary.
|
|
2411
|
+
// This should result in corruption on read because ZSTD will fail to
|
|
2412
|
+
// decompress data that references the missing dictionary content.
|
|
2413
|
+
Close();
|
|
2414
|
+
auto broken_mgr =
|
|
2415
|
+
std::make_shared<BrokenDictManager>(GetBuiltinV2CompressionManager());
|
|
2416
|
+
options.compression_manager = broken_mgr;
|
|
2417
|
+
// New block cache to ensure dictionary is re-loaded, because the
|
|
2418
|
+
// dictionary block in cache is actually associated with a decompressor
|
|
2419
|
+
bbto.block_cache = NewLRUCache(1 << 20);
|
|
2420
|
+
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
2421
|
+
ASSERT_OK(TryReopen(options));
|
|
2422
|
+
|
|
2423
|
+
// Read should fail with corruption because the decompressor ignores
|
|
2424
|
+
// the dictionary, causing ZSTD to produce garbage output
|
|
2425
|
+
std::string value;
|
|
2426
|
+
ASSERT_EQ(db_->Get(ReadOptions(), Key(0), &value).code(),
|
|
2427
|
+
Status::kCorruption);
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2144
2430
|
} // namespace ROCKSDB_NAMESPACE
|
|
2145
2431
|
int main(int argc, char** argv) {
|
|
2146
2432
|
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
@@ -113,10 +113,9 @@ __attribute__((__no_sanitize__("alignment")))
|
|
|
113
113
|
__attribute__((__no_sanitize_undefined__))
|
|
114
114
|
#endif
|
|
115
115
|
#endif
|
|
116
|
-
uint32_t
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
const uint64_t *buf64 = (uint64_t *)data;
|
|
116
|
+
uint32_t crc32c_arm64(uint32_t crc, unsigned char const* data, size_t len) {
|
|
117
|
+
const uint8_t* buf8;
|
|
118
|
+
const uint64_t* buf64 = (uint64_t*)data;
|
|
120
119
|
int length = (int)len;
|
|
121
120
|
crc ^= 0xffffffff;
|
|
122
121
|
|
|
@@ -148,7 +147,7 @@ crc32c_arm64(uint32_t crc, unsigned char const *data, size_t len) {
|
|
|
148
147
|
uint32_t k0 = 0xe417f38a, k1 = 0x8f158014;
|
|
149
148
|
|
|
150
149
|
/* Prefetch data for following block to avoid cache miss */
|
|
151
|
-
PREF1KL1((uint8_t
|
|
150
|
+
PREF1KL1((uint8_t*)buf64, 1024);
|
|
152
151
|
|
|
153
152
|
/* First 8 byte for better pipelining */
|
|
154
153
|
crc0 = crc32c_u64(crc, *buf64++);
|
|
@@ -184,22 +183,22 @@ crc32c_arm64(uint32_t crc, unsigned char const *data, size_t len) {
|
|
|
184
183
|
#endif
|
|
185
184
|
} // if Pmull runtime check here
|
|
186
185
|
|
|
187
|
-
buf8 = (const uint8_t
|
|
186
|
+
buf8 = (const uint8_t*)buf64;
|
|
188
187
|
while (length >= 8) {
|
|
189
|
-
crc = crc32c_u64(crc, *(const uint64_t
|
|
188
|
+
crc = crc32c_u64(crc, *(const uint64_t*)buf8);
|
|
190
189
|
buf8 += 8;
|
|
191
190
|
length -= 8;
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
/* The following is more efficient than the straight loop */
|
|
195
194
|
if (length >= 4) {
|
|
196
|
-
crc = crc32c_u32(crc, *(const uint32_t
|
|
195
|
+
crc = crc32c_u32(crc, *(const uint32_t*)buf8);
|
|
197
196
|
buf8 += 4;
|
|
198
197
|
length -= 4;
|
|
199
198
|
}
|
|
200
199
|
|
|
201
200
|
if (length >= 2) {
|
|
202
|
-
crc = crc32c_u16(crc, *(const uint16_t
|
|
201
|
+
crc = crc32c_u16(crc, *(const uint16_t*)buf8);
|
|
203
202
|
buf8 += 2;
|
|
204
203
|
length -= 2;
|
|
205
204
|
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
PREF4X64L1(buffer, (PREF_OFFSET), 8) \
|
|
37
37
|
PREF4X64L1(buffer, (PREF_OFFSET), 12)
|
|
38
38
|
|
|
39
|
-
uint32_t crc32c_arm64(uint32_t crc, unsigned char const
|
|
39
|
+
uint32_t crc32c_arm64(uint32_t crc, unsigned char const* data, size_t len);
|
|
40
40
|
uint32_t crc32c_runtime_check(void);
|
|
41
41
|
bool crc32c_pmull_runtime_check(void);
|
|
42
42
|
|
|
@@ -43,13 +43,13 @@ struct KeyMaker {
|
|
|
43
43
|
// Sequential, within a hash function block
|
|
44
44
|
inline Slice Seq(uint64_t i) {
|
|
45
45
|
a = i;
|
|
46
|
-
return Slice(reinterpret_cast<char
|
|
46
|
+
return Slice(reinterpret_cast<char*>(&a), sizeof(a));
|
|
47
47
|
}
|
|
48
48
|
// Not quite sequential, varies across hash function blocks
|
|
49
49
|
inline Slice Nonseq(uint64_t i) {
|
|
50
50
|
a = i;
|
|
51
51
|
b = i * 123;
|
|
52
|
-
return Slice(reinterpret_cast<char
|
|
52
|
+
return Slice(reinterpret_cast<char*>(this), sizeof(*this));
|
|
53
53
|
}
|
|
54
54
|
inline Slice Key(uint64_t i, bool nonseq) {
|
|
55
55
|
return nonseq ? Nonseq(i) : Seq(i);
|
|
@@ -315,7 +315,7 @@ TEST_F(DynamicBloomTest, concurrent_with_perf) {
|
|
|
315
315
|
|
|
316
316
|
} // namespace ROCKSDB_NAMESPACE
|
|
317
317
|
|
|
318
|
-
int main(int argc, char
|
|
318
|
+
int main(int argc, char** argv) {
|
|
319
319
|
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
320
320
|
::testing::InitGoogleTest(&argc, argv);
|
|
321
321
|
ParseCommandLineFlags(&argc, &argv, true);
|