@nxtedition/rocksdb 8.2.0 → 8.2.2
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 +3 -3
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +8 -345
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
- package/deps/rocksdb/rocksdb/db/builder.h +2 -2
- package/deps/rocksdb/rocksdb/db/c.cc +76 -5
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
- package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
- package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
- package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
- package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
- package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
- package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
- package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
- package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
- package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
- package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
- package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
- package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options.cc +12 -53
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
- package/deps/rocksdb/rocksdb/port/lang.h +27 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
- package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/format.cc +4 -4
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
- package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
- package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
- package/deps/rocksdb/rocksdb/util/math.h +12 -7
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
- package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
|
@@ -30,7 +30,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
30
30
|
// Helper routine: decode the next block entry starting at "p",
|
|
31
31
|
// storing the number of shared key bytes, non_shared key bytes,
|
|
32
32
|
// and the length of the value in "*shared", "*non_shared", and
|
|
33
|
-
// "*value_length", respectively. Will not
|
|
33
|
+
// "*value_length", respectively. Will not dereference past "limit".
|
|
34
34
|
//
|
|
35
35
|
// If any errors are detected, returns nullptr. Otherwise, returns a
|
|
36
36
|
// pointer to the key delta (just past the three decoded values).
|
|
@@ -137,17 +137,26 @@ struct DecodeEntryV4 {
|
|
|
137
137
|
return DecodeKeyV4()(p, limit, shared, non_shared);
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
|
+
|
|
140
141
|
void DataBlockIter::NextImpl() {
|
|
142
|
+
#ifndef NDEBUG
|
|
143
|
+
if (TEST_Corrupt_Callback("DataBlockIter::NextImpl")) return;
|
|
144
|
+
#endif
|
|
141
145
|
bool is_shared = false;
|
|
142
146
|
ParseNextDataKey(&is_shared);
|
|
147
|
+
++cur_entry_idx_;
|
|
143
148
|
}
|
|
144
149
|
|
|
145
150
|
void MetaBlockIter::NextImpl() {
|
|
146
151
|
bool is_shared = false;
|
|
147
152
|
ParseNextKey<CheckAndDecodeEntry>(&is_shared);
|
|
153
|
+
++cur_entry_idx_;
|
|
148
154
|
}
|
|
149
155
|
|
|
150
|
-
void IndexBlockIter::NextImpl() {
|
|
156
|
+
void IndexBlockIter::NextImpl() {
|
|
157
|
+
ParseNextIndexKey();
|
|
158
|
+
++cur_entry_idx_;
|
|
159
|
+
}
|
|
151
160
|
|
|
152
161
|
void IndexBlockIter::PrevImpl() {
|
|
153
162
|
assert(Valid());
|
|
@@ -166,6 +175,7 @@ void IndexBlockIter::PrevImpl() {
|
|
|
166
175
|
// Loop until end of current entry hits the start of original entry
|
|
167
176
|
while (ParseNextIndexKey() && NextEntryOffset() < original) {
|
|
168
177
|
}
|
|
178
|
+
--cur_entry_idx_;
|
|
169
179
|
}
|
|
170
180
|
|
|
171
181
|
void MetaBlockIter::PrevImpl() {
|
|
@@ -187,6 +197,7 @@ void MetaBlockIter::PrevImpl() {
|
|
|
187
197
|
while (ParseNextKey<CheckAndDecodeEntry>(&is_shared) &&
|
|
188
198
|
NextEntryOffset() < original) {
|
|
189
199
|
}
|
|
200
|
+
--cur_entry_idx_;
|
|
190
201
|
}
|
|
191
202
|
|
|
192
203
|
// Similar to IndexBlockIter::PrevImpl but also caches the prev entries
|
|
@@ -195,6 +206,7 @@ void DataBlockIter::PrevImpl() {
|
|
|
195
206
|
|
|
196
207
|
assert(prev_entries_idx_ == -1 ||
|
|
197
208
|
static_cast<size_t>(prev_entries_idx_) < prev_entries_.size());
|
|
209
|
+
--cur_entry_idx_;
|
|
198
210
|
// Check if we can use cached prev_entries_
|
|
199
211
|
if (prev_entries_idx_ > 0 &&
|
|
200
212
|
prev_entries_[prev_entries_idx_].offset == current_) {
|
|
@@ -307,11 +319,11 @@ void MetaBlockIter::SeekImpl(const Slice& target) {
|
|
|
307
319
|
// target = "seek_user_key @ type | seqno".
|
|
308
320
|
//
|
|
309
321
|
// For any type other than kTypeValue, kTypeDeletion, kTypeSingleDeletion,
|
|
310
|
-
// kTypeBlobIndex, or
|
|
311
|
-
// to Seek().
|
|
322
|
+
// kTypeBlobIndex, kTypeWideColumnEntity or kTypeMerge, this function behaves
|
|
323
|
+
// identically to Seek().
|
|
312
324
|
//
|
|
313
325
|
// For any type in kTypeValue, kTypeDeletion, kTypeSingleDeletion,
|
|
314
|
-
// kTypeBlobIndex, or
|
|
326
|
+
// kTypeBlobIndex, kTypeWideColumnEntity, or kTypeMerge:
|
|
315
327
|
//
|
|
316
328
|
// If the return value is FALSE, iter location is undefined, and it means:
|
|
317
329
|
// 1) there is no key in this block falling into the range:
|
|
@@ -319,10 +331,10 @@ void MetaBlockIter::SeekImpl(const Slice& target) {
|
|
|
319
331
|
// inclusive; AND
|
|
320
332
|
// 2) the last key of this block has a greater user_key from seek_user_key
|
|
321
333
|
//
|
|
322
|
-
// If the return value is TRUE, iter location has two
|
|
323
|
-
// 1) If iter is valid, it is set to a location as if set by
|
|
324
|
-
// this case, it points to the first key with a larger user_key or a
|
|
325
|
-
// user_key with a seqno no greater than the seeking seqno.
|
|
334
|
+
// If the return value is TRUE, iter location has two possibilities:
|
|
335
|
+
// 1) If iter is valid, it is set to a location as if set by SeekImpl(target).
|
|
336
|
+
// In this case, it points to the first key with a larger user_key or a
|
|
337
|
+
// matching user_key with a seqno no greater than the seeking seqno.
|
|
326
338
|
// 2) If the iter is invalid, it means that either all the user_key is less
|
|
327
339
|
// than the seek_user_key, or the block ends with a matching user_key but
|
|
328
340
|
// with a smaller [ type | seqno ] (i.e. a larger seqno, or the same seqno
|
|
@@ -347,11 +359,11 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
|
|
|
347
359
|
// boundary key: axy@50 (we make minimal assumption about a boundary key)
|
|
348
360
|
// Block N+1: [axy@10, ... ]
|
|
349
361
|
//
|
|
350
|
-
// If seek_key = axy@60, the search will
|
|
362
|
+
// If seek_key = axy@60, the search will start from Block N.
|
|
351
363
|
// Even if the user_key is not found in the hash map, the caller still
|
|
352
364
|
// have to continue searching the next block.
|
|
353
365
|
//
|
|
354
|
-
// In this case, we pretend the key is
|
|
366
|
+
// In this case, we pretend the key is in the last restart interval.
|
|
355
367
|
// The while-loop below will search the last restart interval for the
|
|
356
368
|
// key. It will stop at the first key that is larger than the seek_key,
|
|
357
369
|
// or to the end of the block if no one is larger.
|
|
@@ -364,12 +376,15 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
|
|
|
364
376
|
assert(restart_index < num_restarts_);
|
|
365
377
|
SeekToRestartPoint(restart_index);
|
|
366
378
|
current_ = GetRestartPoint(restart_index);
|
|
379
|
+
cur_entry_idx_ =
|
|
380
|
+
static_cast<int32_t>(restart_index * block_restart_interval_) - 1;
|
|
367
381
|
|
|
368
382
|
uint32_t limit = restarts_;
|
|
369
383
|
if (restart_index + 1 < num_restarts_) {
|
|
370
384
|
limit = GetRestartPoint(restart_index + 1);
|
|
371
385
|
}
|
|
372
386
|
while (current_ < limit) {
|
|
387
|
+
++cur_entry_idx_;
|
|
373
388
|
bool shared;
|
|
374
389
|
// Here we only linear seek the target key inside the restart interval.
|
|
375
390
|
// If a key does not exist inside a restart interval, we avoid
|
|
@@ -381,14 +396,20 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
|
|
|
381
396
|
// we stop at the first potential matching user key.
|
|
382
397
|
break;
|
|
383
398
|
}
|
|
399
|
+
// If the loop exits due to CompareCurrentKey(target) >= 0, then current key
|
|
400
|
+
// exists, and its checksum verification will be done in UpdateKey() called
|
|
401
|
+
// in SeekForGet().
|
|
402
|
+
// TODO(cbi): If this loop exits with current_ == restart_, per key-value
|
|
403
|
+
// checksum will not be verified in UpdateKey() since Valid()
|
|
404
|
+
// will return false.
|
|
384
405
|
}
|
|
385
406
|
|
|
386
407
|
if (current_ == restarts_) {
|
|
387
|
-
// Search reaches to the end of the block. There are three
|
|
388
|
-
// 1) there is only one user_key match in the block (otherwise
|
|
408
|
+
// Search reaches to the end of the block. There are three possibilities:
|
|
409
|
+
// 1) there is only one user_key match in the block (otherwise collision).
|
|
389
410
|
// the matching user_key resides in the last restart interval, and it
|
|
390
411
|
// is the last key of the restart interval and of the block as well.
|
|
391
|
-
// ParseNextKey()
|
|
412
|
+
// ParseNextKey() skipped it as its [ type | seqno ] is smaller.
|
|
392
413
|
//
|
|
393
414
|
// 2) The seek_key is not found in the HashIndex Lookup(), i.e. kNoEntry,
|
|
394
415
|
// AND all existing user_keys in the restart interval are smaller than
|
|
@@ -412,11 +433,11 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
|
|
|
412
433
|
ValueType value_type = ExtractValueType(raw_key_.GetInternalKey());
|
|
413
434
|
if (value_type != ValueType::kTypeValue &&
|
|
414
435
|
value_type != ValueType::kTypeDeletion &&
|
|
436
|
+
value_type != ValueType::kTypeMerge &&
|
|
415
437
|
value_type != ValueType::kTypeSingleDeletion &&
|
|
416
438
|
value_type != ValueType::kTypeBlobIndex &&
|
|
417
439
|
value_type != ValueType::kTypeWideColumnEntity) {
|
|
418
440
|
SeekImpl(target);
|
|
419
|
-
return true;
|
|
420
441
|
}
|
|
421
442
|
|
|
422
443
|
// Result found, and the iter is correctly set.
|
|
@@ -424,6 +445,9 @@ bool DataBlockIter::SeekForGetImpl(const Slice& target) {
|
|
|
424
445
|
}
|
|
425
446
|
|
|
426
447
|
void IndexBlockIter::SeekImpl(const Slice& target) {
|
|
448
|
+
#ifndef NDEBUG
|
|
449
|
+
if (TEST_Corrupt_Callback("IndexBlockIter::SeekImpl")) return;
|
|
450
|
+
#endif
|
|
427
451
|
TEST_SYNC_POINT("IndexBlockIter::Seek:0");
|
|
428
452
|
PERF_TIMER_GUARD(block_seek_nanos);
|
|
429
453
|
if (data_ == nullptr) { // Not init yet
|
|
@@ -478,7 +502,9 @@ void DataBlockIter::SeekForPrevImpl(const Slice& target) {
|
|
|
478
502
|
FindKeyAfterBinarySeek(seek_key, index, skip_linear_scan);
|
|
479
503
|
|
|
480
504
|
if (!Valid()) {
|
|
481
|
-
|
|
505
|
+
if (status_.ok()) {
|
|
506
|
+
SeekToLastImpl();
|
|
507
|
+
}
|
|
482
508
|
} else {
|
|
483
509
|
while (Valid() && CompareCurrentKey(seek_key) > 0) {
|
|
484
510
|
PrevImpl();
|
|
@@ -502,7 +528,9 @@ void MetaBlockIter::SeekForPrevImpl(const Slice& target) {
|
|
|
502
528
|
FindKeyAfterBinarySeek(seek_key, index, skip_linear_scan);
|
|
503
529
|
|
|
504
530
|
if (!Valid()) {
|
|
505
|
-
|
|
531
|
+
if (status_.ok()) {
|
|
532
|
+
SeekToLastImpl();
|
|
533
|
+
}
|
|
506
534
|
} else {
|
|
507
535
|
while (Valid() && CompareCurrentKey(seek_key) > 0) {
|
|
508
536
|
PrevImpl();
|
|
@@ -517,6 +545,7 @@ void DataBlockIter::SeekToFirstImpl() {
|
|
|
517
545
|
SeekToRestartPoint(0);
|
|
518
546
|
bool is_shared = false;
|
|
519
547
|
ParseNextDataKey(&is_shared);
|
|
548
|
+
cur_entry_idx_ = 0;
|
|
520
549
|
}
|
|
521
550
|
|
|
522
551
|
void MetaBlockIter::SeekToFirstImpl() {
|
|
@@ -526,15 +555,20 @@ void MetaBlockIter::SeekToFirstImpl() {
|
|
|
526
555
|
SeekToRestartPoint(0);
|
|
527
556
|
bool is_shared = false;
|
|
528
557
|
ParseNextKey<CheckAndDecodeEntry>(&is_shared);
|
|
558
|
+
cur_entry_idx_ = 0;
|
|
529
559
|
}
|
|
530
560
|
|
|
531
561
|
void IndexBlockIter::SeekToFirstImpl() {
|
|
562
|
+
#ifndef NDEBUG
|
|
563
|
+
if (TEST_Corrupt_Callback("IndexBlockIter::SeekToFirstImpl")) return;
|
|
564
|
+
#endif
|
|
532
565
|
if (data_ == nullptr) { // Not init yet
|
|
533
566
|
return;
|
|
534
567
|
}
|
|
535
568
|
status_ = Status::OK();
|
|
536
569
|
SeekToRestartPoint(0);
|
|
537
570
|
ParseNextIndexKey();
|
|
571
|
+
cur_entry_idx_ = 0;
|
|
538
572
|
}
|
|
539
573
|
|
|
540
574
|
void DataBlockIter::SeekToLastImpl() {
|
|
@@ -543,8 +577,10 @@ void DataBlockIter::SeekToLastImpl() {
|
|
|
543
577
|
}
|
|
544
578
|
SeekToRestartPoint(num_restarts_ - 1);
|
|
545
579
|
bool is_shared = false;
|
|
580
|
+
cur_entry_idx_ = (num_restarts_ - 1) * block_restart_interval_;
|
|
546
581
|
while (ParseNextDataKey(&is_shared) && NextEntryOffset() < restarts_) {
|
|
547
582
|
// Keep skipping
|
|
583
|
+
++cur_entry_idx_;
|
|
548
584
|
}
|
|
549
585
|
}
|
|
550
586
|
|
|
@@ -554,9 +590,13 @@ void MetaBlockIter::SeekToLastImpl() {
|
|
|
554
590
|
}
|
|
555
591
|
SeekToRestartPoint(num_restarts_ - 1);
|
|
556
592
|
bool is_shared = false;
|
|
593
|
+
assert(num_restarts_ >= 1);
|
|
594
|
+
cur_entry_idx_ =
|
|
595
|
+
static_cast<int32_t>((num_restarts_ - 1) * block_restart_interval_);
|
|
557
596
|
while (ParseNextKey<CheckAndDecodeEntry>(&is_shared) &&
|
|
558
597
|
NextEntryOffset() < restarts_) {
|
|
559
|
-
//
|
|
598
|
+
// Will probably never reach here since restart_interval is always 1
|
|
599
|
+
++cur_entry_idx_;
|
|
560
600
|
}
|
|
561
601
|
}
|
|
562
602
|
|
|
@@ -566,20 +606,12 @@ void IndexBlockIter::SeekToLastImpl() {
|
|
|
566
606
|
}
|
|
567
607
|
status_ = Status::OK();
|
|
568
608
|
SeekToRestartPoint(num_restarts_ - 1);
|
|
609
|
+
cur_entry_idx_ = (num_restarts_ - 1) * block_restart_interval_;
|
|
569
610
|
while (ParseNextIndexKey() && NextEntryOffset() < restarts_) {
|
|
570
|
-
|
|
611
|
+
++cur_entry_idx_;
|
|
571
612
|
}
|
|
572
613
|
}
|
|
573
614
|
|
|
574
|
-
template <class TValue>
|
|
575
|
-
void BlockIter<TValue>::CorruptionError() {
|
|
576
|
-
current_ = restarts_;
|
|
577
|
-
restart_index_ = num_restarts_;
|
|
578
|
-
status_ = Status::Corruption("bad entry in block");
|
|
579
|
-
raw_key_.Clear();
|
|
580
|
-
value_.clear();
|
|
581
|
-
}
|
|
582
|
-
|
|
583
615
|
template <class TValue>
|
|
584
616
|
template <typename DecodeEntryFunc>
|
|
585
617
|
bool BlockIter<TValue>::ParseNextKey(bool* is_shared) {
|
|
@@ -666,12 +698,12 @@ bool IndexBlockIter::ParseNextIndexKey() {
|
|
|
666
698
|
// restart_point 1: k, v (off, sz), k, v (delta-sz), ..., k, v (delta-sz)
|
|
667
699
|
// ...
|
|
668
700
|
// restart_point n-1: k, v (off, sz), k, v (delta-sz), ..., k, v (delta-sz)
|
|
669
|
-
// where, k is key, v is value, and its encoding is in
|
|
701
|
+
// where, k is key, v is value, and its encoding is in parentheses.
|
|
670
702
|
// The format of each key is (shared_size, non_shared_size, shared, non_shared)
|
|
671
703
|
// The format of each value, i.e., block handle, is (offset, size) whenever the
|
|
672
704
|
// is_shared is false, which included the first entry in each restart point.
|
|
673
|
-
// Otherwise the format is delta-size =
|
|
674
|
-
//
|
|
705
|
+
// Otherwise, the format is delta-size = the size of current block - the size o
|
|
706
|
+
// last block.
|
|
675
707
|
void IndexBlockIter::DecodeCurrentValue(bool is_shared) {
|
|
676
708
|
Slice v(value_.data(), data_ + restarts_ - value_.data());
|
|
677
709
|
// Delta encoding is used if `shared` != 0.
|
|
@@ -710,6 +742,7 @@ void BlockIter<TValue>::FindKeyAfterBinarySeek(const Slice& target,
|
|
|
710
742
|
// to follow it up with NextImpl() to position the iterator at the restart
|
|
711
743
|
// key.
|
|
712
744
|
SeekToRestartPoint(index);
|
|
745
|
+
cur_entry_idx_ = static_cast<int32_t>(index * block_restart_interval_) - 1;
|
|
713
746
|
NextImpl();
|
|
714
747
|
|
|
715
748
|
if (!skip_linear_scan) {
|
|
@@ -728,6 +761,8 @@ void BlockIter<TValue>::FindKeyAfterBinarySeek(const Slice& target,
|
|
|
728
761
|
while (true) {
|
|
729
762
|
NextImpl();
|
|
730
763
|
if (!Valid()) {
|
|
764
|
+
// TODO(cbi): per key-value checksum will not be verified in UpdateKey()
|
|
765
|
+
// since Valid() will returns false.
|
|
731
766
|
break;
|
|
732
767
|
}
|
|
733
768
|
if (current_ == max_offset) {
|
|
@@ -976,6 +1011,7 @@ Block::~Block() {
|
|
|
976
1011
|
// This sync point can be re-enabled if RocksDB can control the
|
|
977
1012
|
// initialization order of any/all static options created by the user.
|
|
978
1013
|
// TEST_SYNC_POINT("Block::~Block");
|
|
1014
|
+
delete[] kv_checksum_;
|
|
979
1015
|
}
|
|
980
1016
|
|
|
981
1017
|
Block::Block(BlockContents&& contents, size_t read_amp_bytes_per_bit,
|
|
@@ -1035,6 +1071,126 @@ Block::Block(BlockContents&& contents, size_t read_amp_bytes_per_bit,
|
|
|
1035
1071
|
}
|
|
1036
1072
|
}
|
|
1037
1073
|
|
|
1074
|
+
void Block::InitializeDataBlockProtectionInfo(uint8_t protection_bytes_per_key,
|
|
1075
|
+
const Comparator* raw_ucmp) {
|
|
1076
|
+
protection_bytes_per_key_ = 0;
|
|
1077
|
+
if (protection_bytes_per_key > 0 && num_restarts_ > 0) {
|
|
1078
|
+
// NewDataIterator() is called with protection_bytes_per_key_ = 0.
|
|
1079
|
+
// This is intended since checksum is not constructed yet.
|
|
1080
|
+
//
|
|
1081
|
+
// We do not know global_seqno yet, so checksum computation and
|
|
1082
|
+
// verification all assume global_seqno = 0.
|
|
1083
|
+
std::unique_ptr<DataBlockIter> iter{NewDataIterator(
|
|
1084
|
+
raw_ucmp, kDisableGlobalSequenceNumber, nullptr /* iter */,
|
|
1085
|
+
nullptr /* stats */, true /* block_contents_pinned */)};
|
|
1086
|
+
if (iter->status().ok()) {
|
|
1087
|
+
block_restart_interval_ = iter->GetRestartInterval();
|
|
1088
|
+
}
|
|
1089
|
+
uint32_t num_keys = 0;
|
|
1090
|
+
if (iter->status().ok()) {
|
|
1091
|
+
num_keys = iter->NumberOfKeys(block_restart_interval_);
|
|
1092
|
+
}
|
|
1093
|
+
if (iter->status().ok()) {
|
|
1094
|
+
checksum_size_ = num_keys * protection_bytes_per_key;
|
|
1095
|
+
kv_checksum_ = new char[(size_t)checksum_size_];
|
|
1096
|
+
size_t i = 0;
|
|
1097
|
+
iter->SeekToFirst();
|
|
1098
|
+
while (iter->Valid()) {
|
|
1099
|
+
GenerateKVChecksum(kv_checksum_ + i, protection_bytes_per_key,
|
|
1100
|
+
iter->key(), iter->value());
|
|
1101
|
+
iter->Next();
|
|
1102
|
+
i += protection_bytes_per_key;
|
|
1103
|
+
}
|
|
1104
|
+
assert(!iter->status().ok() || i == num_keys * protection_bytes_per_key);
|
|
1105
|
+
}
|
|
1106
|
+
if (!iter->status().ok()) {
|
|
1107
|
+
size_ = 0; // Error marker
|
|
1108
|
+
return;
|
|
1109
|
+
}
|
|
1110
|
+
protection_bytes_per_key_ = protection_bytes_per_key;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
void Block::InitializeIndexBlockProtectionInfo(uint8_t protection_bytes_per_key,
|
|
1115
|
+
const Comparator* raw_ucmp,
|
|
1116
|
+
bool value_is_full,
|
|
1117
|
+
bool index_has_first_key) {
|
|
1118
|
+
protection_bytes_per_key_ = 0;
|
|
1119
|
+
if (num_restarts_ > 0 && protection_bytes_per_key > 0) {
|
|
1120
|
+
// Note that `global_seqno` and `key_includes_seq` are hardcoded here. They
|
|
1121
|
+
// do not impact how the index block is parsed. During checksum
|
|
1122
|
+
// construction/verification, we use the entire key buffer from
|
|
1123
|
+
// raw_key_.GetKey() returned by iter->key() as the `key` part of key-value
|
|
1124
|
+
// checksum, and the content of this buffer do not change for different
|
|
1125
|
+
// values of `global_seqno` or `key_includes_seq`.
|
|
1126
|
+
std::unique_ptr<IndexBlockIter> iter{NewIndexIterator(
|
|
1127
|
+
raw_ucmp, kDisableGlobalSequenceNumber /* global_seqno */, nullptr,
|
|
1128
|
+
nullptr /* Statistics */, true /* total_order_seek */,
|
|
1129
|
+
index_has_first_key /* have_first_key */, false /* key_includes_seq */,
|
|
1130
|
+
value_is_full, true /* block_contents_pinned */,
|
|
1131
|
+
nullptr /* prefix_index */)};
|
|
1132
|
+
if (iter->status().ok()) {
|
|
1133
|
+
block_restart_interval_ = iter->GetRestartInterval();
|
|
1134
|
+
}
|
|
1135
|
+
uint32_t num_keys = 0;
|
|
1136
|
+
if (iter->status().ok()) {
|
|
1137
|
+
num_keys = iter->NumberOfKeys(block_restart_interval_);
|
|
1138
|
+
}
|
|
1139
|
+
if (iter->status().ok()) {
|
|
1140
|
+
checksum_size_ = num_keys * protection_bytes_per_key;
|
|
1141
|
+
kv_checksum_ = new char[(size_t)checksum_size_];
|
|
1142
|
+
iter->SeekToFirst();
|
|
1143
|
+
size_t i = 0;
|
|
1144
|
+
while (iter->Valid()) {
|
|
1145
|
+
GenerateKVChecksum(kv_checksum_ + i, protection_bytes_per_key,
|
|
1146
|
+
iter->key(), iter->raw_value());
|
|
1147
|
+
iter->Next();
|
|
1148
|
+
i += protection_bytes_per_key;
|
|
1149
|
+
}
|
|
1150
|
+
assert(!iter->status().ok() || i == num_keys * protection_bytes_per_key);
|
|
1151
|
+
}
|
|
1152
|
+
if (!iter->status().ok()) {
|
|
1153
|
+
size_ = 0; // Error marker
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
protection_bytes_per_key_ = protection_bytes_per_key;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
void Block::InitializeMetaIndexBlockProtectionInfo(
|
|
1161
|
+
uint8_t protection_bytes_per_key) {
|
|
1162
|
+
protection_bytes_per_key_ = 0;
|
|
1163
|
+
if (num_restarts_ > 0 && protection_bytes_per_key > 0) {
|
|
1164
|
+
std::unique_ptr<MetaBlockIter> iter{
|
|
1165
|
+
NewMetaIterator(true /* block_contents_pinned */)};
|
|
1166
|
+
if (iter->status().ok()) {
|
|
1167
|
+
block_restart_interval_ = iter->GetRestartInterval();
|
|
1168
|
+
}
|
|
1169
|
+
uint32_t num_keys = 0;
|
|
1170
|
+
if (iter->status().ok()) {
|
|
1171
|
+
num_keys = iter->NumberOfKeys(block_restart_interval_);
|
|
1172
|
+
}
|
|
1173
|
+
if (iter->status().ok()) {
|
|
1174
|
+
checksum_size_ = num_keys * protection_bytes_per_key;
|
|
1175
|
+
kv_checksum_ = new char[(size_t)checksum_size_];
|
|
1176
|
+
iter->SeekToFirst();
|
|
1177
|
+
size_t i = 0;
|
|
1178
|
+
while (iter->Valid()) {
|
|
1179
|
+
GenerateKVChecksum(kv_checksum_ + i, protection_bytes_per_key,
|
|
1180
|
+
iter->key(), iter->value());
|
|
1181
|
+
iter->Next();
|
|
1182
|
+
i += protection_bytes_per_key;
|
|
1183
|
+
}
|
|
1184
|
+
assert(!iter->status().ok() || i == num_keys * protection_bytes_per_key);
|
|
1185
|
+
}
|
|
1186
|
+
if (!iter->status().ok()) {
|
|
1187
|
+
size_ = 0; // Error marker
|
|
1188
|
+
return;
|
|
1189
|
+
}
|
|
1190
|
+
protection_bytes_per_key_ = protection_bytes_per_key;
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1038
1194
|
MetaBlockIter* Block::NewMetaIterator(bool block_contents_pinned) {
|
|
1039
1195
|
MetaBlockIter* iter = new MetaBlockIter();
|
|
1040
1196
|
if (size_ < 2 * sizeof(uint32_t)) {
|
|
@@ -1045,7 +1201,8 @@ MetaBlockIter* Block::NewMetaIterator(bool block_contents_pinned) {
|
|
|
1045
1201
|
iter->Invalidate(Status::OK());
|
|
1046
1202
|
} else {
|
|
1047
1203
|
iter->Initialize(data_, restart_offset_, num_restarts_,
|
|
1048
|
-
block_contents_pinned
|
|
1204
|
+
block_contents_pinned, protection_bytes_per_key_,
|
|
1205
|
+
kv_checksum_, block_restart_interval_);
|
|
1049
1206
|
}
|
|
1050
1207
|
return iter;
|
|
1051
1208
|
}
|
|
@@ -1072,7 +1229,8 @@ DataBlockIter* Block::NewDataIterator(const Comparator* raw_ucmp,
|
|
|
1072
1229
|
ret_iter->Initialize(
|
|
1073
1230
|
raw_ucmp, data_, restart_offset_, num_restarts_, global_seqno,
|
|
1074
1231
|
read_amp_bitmap_.get(), block_contents_pinned,
|
|
1075
|
-
data_block_hash_index_.Valid() ? &data_block_hash_index_ : nullptr
|
|
1232
|
+
data_block_hash_index_.Valid() ? &data_block_hash_index_ : nullptr,
|
|
1233
|
+
protection_bytes_per_key_, kv_checksum_, block_restart_interval_);
|
|
1076
1234
|
if (read_amp_bitmap_) {
|
|
1077
1235
|
if (read_amp_bitmap_->GetStatistics() != stats) {
|
|
1078
1236
|
// DB changed the Statistics pointer, we need to notify read_amp_bitmap_
|
|
@@ -1108,8 +1266,9 @@ IndexBlockIter* Block::NewIndexIterator(
|
|
|
1108
1266
|
total_order_seek ? nullptr : prefix_index;
|
|
1109
1267
|
ret_iter->Initialize(raw_ucmp, data_, restart_offset_, num_restarts_,
|
|
1110
1268
|
global_seqno, prefix_index_ptr, have_first_key,
|
|
1111
|
-
key_includes_seq, value_is_full,
|
|
1112
|
-
|
|
1269
|
+
key_includes_seq, value_is_full, block_contents_pinned,
|
|
1270
|
+
protection_bytes_per_key_, kv_checksum_,
|
|
1271
|
+
block_restart_interval_);
|
|
1113
1272
|
}
|
|
1114
1273
|
|
|
1115
1274
|
return ret_iter;
|
|
@@ -1125,6 +1284,7 @@ size_t Block::ApproximateMemoryUsage() const {
|
|
|
1125
1284
|
if (read_amp_bitmap_) {
|
|
1126
1285
|
usage += read_amp_bitmap_->ApproximateMemoryUsage();
|
|
1127
1286
|
}
|
|
1287
|
+
usage += checksum_size_;
|
|
1128
1288
|
return usage;
|
|
1129
1289
|
}
|
|
1130
1290
|
|