@nxtedition/rocksdb 8.2.7 → 9.0.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/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
- package/deps/rocksdb/rocksdb/Makefile +22 -19
- package/deps/rocksdb/rocksdb/TARGETS +8 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
- package/deps/rocksdb/rocksdb/db/c.cc +169 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
- package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
- package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
- package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
- package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
- package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
- package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
- package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
- package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
- package/deps/rocksdb/rocksdb/env/env.cc +1 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +110 -32
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -38,8 +38,8 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
38
38
|
// complexity: human readable strings are easier to compress than random
|
|
39
39
|
// strings.
|
|
40
40
|
static std::map<std::string, std::string> GenerateKVMap(
|
|
41
|
-
int num_block = 100,
|
|
42
|
-
|
|
41
|
+
int num_block = 100, bool mixed_with_human_readable_string_value = false,
|
|
42
|
+
size_t ts_sz = 0) {
|
|
43
43
|
std::map<std::string, std::string> kv;
|
|
44
44
|
|
|
45
45
|
Random rnd(101);
|
|
@@ -58,7 +58,13 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
58
58
|
} else {
|
|
59
59
|
v = rnd.RandomString(256);
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
if (ts_sz > 0) {
|
|
62
|
+
std::string user_key;
|
|
63
|
+
AppendKeyWithMinTimestamp(&user_key, std::string(k), ts_sz);
|
|
64
|
+
kv[user_key] = v;
|
|
65
|
+
} else {
|
|
66
|
+
kv[std::string(k)] = v;
|
|
67
|
+
}
|
|
62
68
|
key++;
|
|
63
69
|
}
|
|
64
70
|
}
|
|
@@ -80,21 +86,29 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
80
86
|
|
|
81
87
|
// Creates a table with the specificied key value pairs (kv).
|
|
82
88
|
void CreateTable(const std::string& table_name,
|
|
89
|
+
const ImmutableOptions& ioptions,
|
|
83
90
|
const CompressionType& compression_type,
|
|
84
|
-
const std::map<std::string, std::string>& kv
|
|
91
|
+
const std::map<std::string, std::string>& kv,
|
|
92
|
+
uint32_t compression_parallel_threads = 1,
|
|
93
|
+
uint32_t compression_dict_bytes = 0) {
|
|
85
94
|
std::unique_ptr<WritableFileWriter> writer;
|
|
86
95
|
NewFileWriter(table_name, &writer);
|
|
87
96
|
|
|
88
|
-
|
|
89
|
-
ImmutableOptions ioptions(options_);
|
|
90
|
-
InternalKeyComparator comparator(options_.comparator);
|
|
97
|
+
InternalKeyComparator comparator(ioptions.user_comparator);
|
|
91
98
|
ColumnFamilyOptions cf_options;
|
|
99
|
+
cf_options.prefix_extractor = options_.prefix_extractor;
|
|
92
100
|
MutableCFOptions moptions(cf_options);
|
|
101
|
+
CompressionOptions compression_opts;
|
|
102
|
+
compression_opts.parallel_threads = compression_parallel_threads;
|
|
103
|
+
// Enable compression dictionary and set a buffering limit that is the same
|
|
104
|
+
// as each block's size.
|
|
105
|
+
compression_opts.max_dict_bytes = compression_dict_bytes;
|
|
106
|
+
compression_opts.max_dict_buffer_bytes = compression_dict_bytes;
|
|
93
107
|
IntTblPropCollectorFactories factories;
|
|
94
108
|
std::unique_ptr<TableBuilder> table_builder(
|
|
95
109
|
options_.table_factory->NewTableBuilder(
|
|
96
110
|
TableBuilderOptions(ioptions, moptions, comparator, &factories,
|
|
97
|
-
compression_type,
|
|
111
|
+
compression_type, compression_opts,
|
|
98
112
|
0 /* column_family_id */,
|
|
99
113
|
kDefaultColumnFamilyName, -1 /* level */),
|
|
100
114
|
writer.get()));
|
|
@@ -114,11 +128,17 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
114
128
|
const std::string& table_name,
|
|
115
129
|
std::unique_ptr<BlockBasedTable>* table,
|
|
116
130
|
bool prefetch_index_and_filter_in_cache = true,
|
|
117
|
-
Status* status = nullptr
|
|
131
|
+
Status* status = nullptr,
|
|
132
|
+
bool user_defined_timestamps_persisted = true) {
|
|
118
133
|
const MutableCFOptions moptions(options_);
|
|
119
|
-
TableReaderOptions table_reader_options =
|
|
120
|
-
|
|
121
|
-
|
|
134
|
+
TableReaderOptions table_reader_options = TableReaderOptions(
|
|
135
|
+
ioptions, moptions.prefix_extractor, EnvOptions(), comparator,
|
|
136
|
+
0 /* block_protection_bytes_per_key */, false /* _skip_filters */,
|
|
137
|
+
false /* _immortal */, false /* _force_direct_prefetch */,
|
|
138
|
+
-1 /* _level */, nullptr /* _block_cache_tracer */,
|
|
139
|
+
0 /* _max_file_size_for_l0_meta_pin */, "" /* _cur_db_session_id */,
|
|
140
|
+
0 /* _cur_file_num */, {} /* _unique_id */, 0 /* _largest_seqno */,
|
|
141
|
+
0 /* _tail_size */, user_defined_timestamps_persisted);
|
|
122
142
|
|
|
123
143
|
std::unique_ptr<RandomAccessFileReader> file;
|
|
124
144
|
NewFileReader(table_name, foptions, &file);
|
|
@@ -126,9 +146,11 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
126
146
|
uint64_t file_size = 0;
|
|
127
147
|
ASSERT_OK(env_->GetFileSize(Path(table_name), &file_size));
|
|
128
148
|
|
|
149
|
+
ReadOptions read_opts;
|
|
150
|
+
read_opts.verify_checksums = true;
|
|
129
151
|
std::unique_ptr<TableReader> general_table;
|
|
130
152
|
Status s = options_.table_factory->NewTableReader(
|
|
131
|
-
|
|
153
|
+
read_opts, table_reader_options, std::move(file), file_size,
|
|
132
154
|
&general_table, prefetch_index_and_filter_in_cache);
|
|
133
155
|
|
|
134
156
|
if (s.ok()) {
|
|
@@ -147,6 +169,11 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
147
169
|
std::shared_ptr<FileSystem> fs_;
|
|
148
170
|
Options options_;
|
|
149
171
|
|
|
172
|
+
std::string ToInternalKey(const std::string& key) {
|
|
173
|
+
InternalKey internal_key(key, 0, ValueType::kTypeValue);
|
|
174
|
+
return internal_key.Encode().ToString();
|
|
175
|
+
}
|
|
176
|
+
|
|
150
177
|
private:
|
|
151
178
|
void WriteToFile(const std::string& content, const std::string& filename) {
|
|
152
179
|
std::unique_ptr<FSWritableFile> f;
|
|
@@ -173,21 +200,31 @@ class BlockBasedTableReaderBaseTest : public testing::Test {
|
|
|
173
200
|
reader->reset(new RandomAccessFileReader(std::move(f), path,
|
|
174
201
|
env_->GetSystemClock().get()));
|
|
175
202
|
}
|
|
176
|
-
|
|
177
|
-
std::string ToInternalKey(const std::string& key) {
|
|
178
|
-
InternalKey internal_key(key, 0, ValueType::kTypeValue);
|
|
179
|
-
return internal_key.Encode().ToString();
|
|
180
|
-
}
|
|
181
203
|
};
|
|
182
204
|
|
|
205
|
+
// Param 1: compression type
|
|
206
|
+
// Param 2: whether to use direct reads
|
|
207
|
+
// Param 3: Block Based Table Index type
|
|
208
|
+
// Param 4: BBTO no_block_cache option
|
|
209
|
+
// Param 5: test mode for the user-defined timestamp feature
|
|
210
|
+
// Param 6: number of parallel compression threads
|
|
211
|
+
// Param 7: CompressionOptions.max_dict_bytes and
|
|
212
|
+
// CompressionOptions.max_dict_buffer_bytes to enable/disable
|
|
213
|
+
// compression dictionary.
|
|
183
214
|
class BlockBasedTableReaderTest
|
|
184
215
|
: public BlockBasedTableReaderBaseTest,
|
|
185
216
|
public testing::WithParamInterface<std::tuple<
|
|
186
|
-
CompressionType, bool, BlockBasedTableOptions::IndexType, bool
|
|
217
|
+
CompressionType, bool, BlockBasedTableOptions::IndexType, bool,
|
|
218
|
+
test::UserDefinedTimestampTestMode, uint32_t, uint32_t>> {
|
|
187
219
|
protected:
|
|
188
220
|
void SetUp() override {
|
|
189
221
|
compression_type_ = std::get<0>(GetParam());
|
|
190
222
|
use_direct_reads_ = std::get<1>(GetParam());
|
|
223
|
+
test::UserDefinedTimestampTestMode udt_test_mode = std::get<4>(GetParam());
|
|
224
|
+
udt_enabled_ = test::IsUDTEnabled(udt_test_mode);
|
|
225
|
+
persist_udt_ = test::ShouldPersistUDT(udt_test_mode);
|
|
226
|
+
compression_parallel_threads_ = std::get<5>(GetParam());
|
|
227
|
+
compression_dict_bytes_ = std::get<6>(GetParam());
|
|
191
228
|
BlockBasedTableReaderBaseTest::SetUp();
|
|
192
229
|
}
|
|
193
230
|
|
|
@@ -195,24 +232,45 @@ class BlockBasedTableReaderTest
|
|
|
195
232
|
BlockBasedTableOptions opts;
|
|
196
233
|
opts.index_type = std::get<2>(GetParam());
|
|
197
234
|
opts.no_block_cache = std::get<3>(GetParam());
|
|
235
|
+
opts.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
236
|
+
opts.partition_filters =
|
|
237
|
+
opts.index_type ==
|
|
238
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
|
|
198
239
|
options_.table_factory.reset(
|
|
199
240
|
static_cast<BlockBasedTableFactory*>(NewBlockBasedTableFactory(opts)));
|
|
241
|
+
options_.prefix_extractor =
|
|
242
|
+
std::shared_ptr<const SliceTransform>(NewFixedPrefixTransform(3));
|
|
200
243
|
}
|
|
201
244
|
|
|
202
245
|
CompressionType compression_type_;
|
|
203
246
|
bool use_direct_reads_;
|
|
247
|
+
bool udt_enabled_;
|
|
248
|
+
bool persist_udt_;
|
|
249
|
+
uint32_t compression_parallel_threads_;
|
|
250
|
+
uint32_t compression_dict_bytes_;
|
|
204
251
|
};
|
|
205
252
|
|
|
206
253
|
// Tests MultiGet in both direct IO and non-direct IO mode.
|
|
207
254
|
// The keys should be in cache after MultiGet.
|
|
208
255
|
TEST_P(BlockBasedTableReaderTest, MultiGet) {
|
|
256
|
+
Options options;
|
|
257
|
+
ReadOptions read_opts;
|
|
258
|
+
std::string dummy_ts(sizeof(uint64_t), '\0');
|
|
259
|
+
Slice read_timestamp = dummy_ts;
|
|
260
|
+
if (udt_enabled_) {
|
|
261
|
+
options.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
262
|
+
read_opts.timestamp = &read_timestamp;
|
|
263
|
+
}
|
|
264
|
+
options.persist_user_defined_timestamps = persist_udt_;
|
|
265
|
+
size_t ts_sz = options.comparator->timestamp_size();
|
|
209
266
|
std::map<std::string, std::string> kv =
|
|
210
267
|
BlockBasedTableReaderBaseTest::GenerateKVMap(
|
|
211
268
|
100 /* num_block */,
|
|
212
|
-
true /* mixed_with_human_readable_string_value
|
|
269
|
+
true /* mixed_with_human_readable_string_value */, ts_sz);
|
|
213
270
|
|
|
214
271
|
// Prepare keys, values, and statuses for MultiGet.
|
|
215
272
|
autovector<Slice, MultiGetContext::MAX_BATCH_SIZE> keys;
|
|
273
|
+
autovector<Slice, MultiGetContext::MAX_BATCH_SIZE> keys_without_timestamps;
|
|
216
274
|
autovector<PinnableSlice, MultiGetContext::MAX_BATCH_SIZE> values;
|
|
217
275
|
autovector<Status, MultiGetContext::MAX_BATCH_SIZE> statuses;
|
|
218
276
|
{
|
|
@@ -221,27 +279,40 @@ TEST_P(BlockBasedTableReaderTest, MultiGet) {
|
|
|
221
279
|
auto it = kv.begin();
|
|
222
280
|
for (int i = 0; i < MultiGetContext::MAX_BATCH_SIZE; i++) {
|
|
223
281
|
keys.emplace_back(it->first);
|
|
282
|
+
if (ts_sz > 0) {
|
|
283
|
+
Slice ukey_without_ts = StripTimestampFromUserKey(it->first, ts_sz);
|
|
284
|
+
keys_without_timestamps.push_back(ukey_without_ts);
|
|
285
|
+
} else {
|
|
286
|
+
keys_without_timestamps.emplace_back(it->first);
|
|
287
|
+
}
|
|
224
288
|
values.emplace_back();
|
|
225
289
|
statuses.emplace_back();
|
|
226
290
|
std::advance(it, step);
|
|
227
291
|
}
|
|
228
292
|
}
|
|
229
293
|
|
|
230
|
-
std::string table_name =
|
|
231
|
-
|
|
232
|
-
CreateTable(table_name, compression_type_, kv);
|
|
294
|
+
std::string table_name = "BlockBasedTableReaderTest_MultiGet" +
|
|
295
|
+
CompressionTypeToString(compression_type_);
|
|
233
296
|
|
|
234
|
-
std::unique_ptr<BlockBasedTable> table;
|
|
235
|
-
Options options;
|
|
236
297
|
ImmutableOptions ioptions(options);
|
|
298
|
+
CreateTable(table_name, ioptions, compression_type_, kv,
|
|
299
|
+
compression_parallel_threads_, compression_dict_bytes_);
|
|
300
|
+
|
|
301
|
+
std::unique_ptr<BlockBasedTable> table;
|
|
237
302
|
FileOptions foptions;
|
|
238
303
|
foptions.use_direct_reads = use_direct_reads_;
|
|
239
304
|
InternalKeyComparator comparator(options.comparator);
|
|
240
|
-
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table
|
|
305
|
+
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table,
|
|
306
|
+
true /* bool prefetch_index_and_filter_in_cache */,
|
|
307
|
+
nullptr /* status */, persist_udt_);
|
|
308
|
+
|
|
309
|
+
ASSERT_OK(
|
|
310
|
+
table->VerifyChecksum(read_opts, TableReaderCaller::kUserVerifyChecksum));
|
|
241
311
|
|
|
242
312
|
// Ensure that keys are not in cache before MultiGet.
|
|
243
313
|
for (auto& key : keys) {
|
|
244
|
-
|
|
314
|
+
std::string ikey = ToInternalKey(key.ToString());
|
|
315
|
+
ASSERT_FALSE(table->TEST_KeyInCache(read_opts, ikey));
|
|
245
316
|
}
|
|
246
317
|
|
|
247
318
|
// Prepare MultiGetContext.
|
|
@@ -249,26 +320,26 @@ TEST_P(BlockBasedTableReaderTest, MultiGet) {
|
|
|
249
320
|
autovector<KeyContext, MultiGetContext::MAX_BATCH_SIZE> key_context;
|
|
250
321
|
autovector<KeyContext*, MultiGetContext::MAX_BATCH_SIZE> sorted_keys;
|
|
251
322
|
for (size_t i = 0; i < keys.size(); ++i) {
|
|
252
|
-
get_context.emplace_back(
|
|
323
|
+
get_context.emplace_back(options.comparator, nullptr, nullptr, nullptr,
|
|
253
324
|
GetContext::kNotFound, keys[i], &values[i],
|
|
254
325
|
nullptr, nullptr, nullptr, nullptr,
|
|
255
326
|
true /* do_merge */, nullptr, nullptr, nullptr,
|
|
256
327
|
nullptr, nullptr, nullptr);
|
|
257
|
-
key_context.emplace_back(nullptr,
|
|
258
|
-
&statuses.back());
|
|
328
|
+
key_context.emplace_back(nullptr, keys_without_timestamps[i], &values[i],
|
|
329
|
+
nullptr, nullptr, &statuses.back());
|
|
259
330
|
key_context.back().get_context = &get_context.back();
|
|
260
331
|
}
|
|
261
332
|
for (auto& key_ctx : key_context) {
|
|
262
333
|
sorted_keys.emplace_back(&key_ctx);
|
|
263
334
|
}
|
|
264
|
-
MultiGetContext ctx(&sorted_keys, 0, sorted_keys.size(), 0,
|
|
335
|
+
MultiGetContext ctx(&sorted_keys, 0, sorted_keys.size(), 0, read_opts,
|
|
265
336
|
fs_.get(), nullptr);
|
|
266
337
|
|
|
267
338
|
// Execute MultiGet.
|
|
268
339
|
MultiGetContext::Range range = ctx.GetMultiGetRange();
|
|
269
340
|
PerfContext* perf_ctx = get_perf_context();
|
|
270
341
|
perf_ctx->Reset();
|
|
271
|
-
table->MultiGet(
|
|
342
|
+
table->MultiGet(read_opts, &range, nullptr);
|
|
272
343
|
|
|
273
344
|
ASSERT_GE(perf_ctx->block_read_count - perf_ctx->index_block_read_count -
|
|
274
345
|
perf_ctx->filter_block_read_count -
|
|
@@ -281,11 +352,78 @@ TEST_P(BlockBasedTableReaderTest, MultiGet) {
|
|
|
281
352
|
}
|
|
282
353
|
// Check that keys are in cache after MultiGet.
|
|
283
354
|
for (size_t i = 0; i < keys.size(); i++) {
|
|
284
|
-
|
|
355
|
+
std::string ikey = ToInternalKey(keys[i].ToString());
|
|
356
|
+
ASSERT_TRUE(table->TEST_KeyInCache(read_opts, ikey));
|
|
285
357
|
ASSERT_EQ(values[i].ToString(), kv[keys[i].ToString()]);
|
|
286
358
|
}
|
|
287
359
|
}
|
|
288
360
|
|
|
361
|
+
TEST_P(BlockBasedTableReaderTest, NewIterator) {
|
|
362
|
+
Options options;
|
|
363
|
+
ReadOptions read_opts;
|
|
364
|
+
std::string dummy_ts(sizeof(uint64_t), '\0');
|
|
365
|
+
Slice read_timestamp = dummy_ts;
|
|
366
|
+
if (udt_enabled_) {
|
|
367
|
+
options.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
368
|
+
read_opts.timestamp = &read_timestamp;
|
|
369
|
+
}
|
|
370
|
+
options.persist_user_defined_timestamps = persist_udt_;
|
|
371
|
+
size_t ts_sz = options.comparator->timestamp_size();
|
|
372
|
+
std::map<std::string, std::string> kv =
|
|
373
|
+
BlockBasedTableReaderBaseTest::GenerateKVMap(
|
|
374
|
+
100 /* num_block */,
|
|
375
|
+
true /* mixed_with_human_readable_string_value */, ts_sz);
|
|
376
|
+
|
|
377
|
+
std::string table_name = "BlockBasedTableReaderTest_NewIterator" +
|
|
378
|
+
CompressionTypeToString(compression_type_);
|
|
379
|
+
|
|
380
|
+
ImmutableOptions ioptions(options);
|
|
381
|
+
CreateTable(table_name, ioptions, compression_type_, kv,
|
|
382
|
+
compression_parallel_threads_, compression_dict_bytes_);
|
|
383
|
+
|
|
384
|
+
std::unique_ptr<BlockBasedTable> table;
|
|
385
|
+
FileOptions foptions;
|
|
386
|
+
foptions.use_direct_reads = use_direct_reads_;
|
|
387
|
+
InternalKeyComparator comparator(options.comparator);
|
|
388
|
+
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table,
|
|
389
|
+
true /* bool prefetch_index_and_filter_in_cache */,
|
|
390
|
+
nullptr /* status */, persist_udt_);
|
|
391
|
+
ASSERT_OK(
|
|
392
|
+
table->VerifyChecksum(read_opts, TableReaderCaller::kUserVerifyChecksum));
|
|
393
|
+
|
|
394
|
+
std::unique_ptr<InternalIterator> iter;
|
|
395
|
+
iter.reset(table->NewIterator(
|
|
396
|
+
read_opts, options_.prefix_extractor.get(), /*arena=*/nullptr,
|
|
397
|
+
/*skip_filters=*/false, TableReaderCaller::kUncategorized));
|
|
398
|
+
|
|
399
|
+
// Test forward scan.
|
|
400
|
+
ASSERT_TRUE(!iter->Valid());
|
|
401
|
+
iter->SeekToFirst();
|
|
402
|
+
ASSERT_OK(iter->status());
|
|
403
|
+
for (auto kv_iter = kv.begin(); kv_iter != kv.end(); kv_iter++) {
|
|
404
|
+
std::string ikey = ToInternalKey(kv_iter->first);
|
|
405
|
+
ASSERT_EQ(iter->key().ToString(), ikey);
|
|
406
|
+
ASSERT_EQ(iter->value().ToString(), kv_iter->second);
|
|
407
|
+
iter->Next();
|
|
408
|
+
ASSERT_OK(iter->status());
|
|
409
|
+
}
|
|
410
|
+
ASSERT_TRUE(!iter->Valid());
|
|
411
|
+
ASSERT_OK(iter->status());
|
|
412
|
+
|
|
413
|
+
// Test backward scan.
|
|
414
|
+
iter->SeekToLast();
|
|
415
|
+
ASSERT_OK(iter->status());
|
|
416
|
+
for (auto kv_iter = kv.rbegin(); kv_iter != kv.rend(); kv_iter++) {
|
|
417
|
+
std::string ikey = ToInternalKey(kv_iter->first);
|
|
418
|
+
ASSERT_EQ(iter->key().ToString(), ikey);
|
|
419
|
+
ASSERT_EQ(iter->value().ToString(), kv_iter->second);
|
|
420
|
+
iter->Prev();
|
|
421
|
+
ASSERT_OK(iter->status());
|
|
422
|
+
}
|
|
423
|
+
ASSERT_TRUE(!iter->Valid());
|
|
424
|
+
ASSERT_OK(iter->status());
|
|
425
|
+
}
|
|
426
|
+
|
|
289
427
|
class ChargeTableReaderTest
|
|
290
428
|
: public BlockBasedTableReaderBaseTest,
|
|
291
429
|
public testing::WithParamInterface<
|
|
@@ -374,7 +512,8 @@ class ChargeTableReaderTest
|
|
|
374
512
|
std::size_t approx_table_reader_mem = 0;
|
|
375
513
|
|
|
376
514
|
std::string table_name = "table_for_approx_table_reader_mem";
|
|
377
|
-
|
|
515
|
+
ImmutableOptions ioptions(options_);
|
|
516
|
+
CreateTable(table_name, ioptions, compression_type_, kv_);
|
|
378
517
|
|
|
379
518
|
std::unique_ptr<BlockBasedTable> table;
|
|
380
519
|
Status s;
|
|
@@ -424,13 +563,14 @@ TEST_P(ChargeTableReaderTest, Basic) {
|
|
|
424
563
|
std::size_t opened_table_reader_num = 0;
|
|
425
564
|
std::string table_name;
|
|
426
565
|
std::vector<std::unique_ptr<BlockBasedTable>> tables;
|
|
566
|
+
ImmutableOptions ioptions(options_);
|
|
427
567
|
// Keep creating BlockBasedTableReader till hiting the memory limit based on
|
|
428
568
|
// cache capacity and creation fails (when charge_table_reader_ ==
|
|
429
569
|
// kEnabled) or reaching a specfied big number of table readers (when
|
|
430
570
|
// charge_table_reader_ == kDisabled)
|
|
431
571
|
while (s.ok() && opened_table_reader_num < max_table_reader_num_uncapped) {
|
|
432
572
|
table_name = "table_" + std::to_string(opened_table_reader_num);
|
|
433
|
-
CreateTable(table_name, compression_type_, kv_);
|
|
573
|
+
CreateTable(table_name, ioptions, compression_type_, kv_);
|
|
434
574
|
tables.push_back(std::unique_ptr<BlockBasedTable>());
|
|
435
575
|
NewBlockBasedTableReader(
|
|
436
576
|
FileOptions(), ImmutableOptions(options_),
|
|
@@ -465,7 +605,7 @@ TEST_P(ChargeTableReaderTest, Basic) {
|
|
|
465
605
|
--opened_table_reader_num;
|
|
466
606
|
}
|
|
467
607
|
table_name = "table_for_successful_table_reader_open";
|
|
468
|
-
CreateTable(table_name, compression_type_, kv_);
|
|
608
|
+
CreateTable(table_name, ioptions, compression_type_, kv_);
|
|
469
609
|
tables.push_back(std::unique_ptr<BlockBasedTable>());
|
|
470
610
|
NewBlockBasedTableReader(
|
|
471
611
|
FileOptions(), ImmutableOptions(options_),
|
|
@@ -491,28 +631,42 @@ class BlockBasedTableReaderTestVerifyChecksum
|
|
|
491
631
|
};
|
|
492
632
|
|
|
493
633
|
TEST_P(BlockBasedTableReaderTestVerifyChecksum, ChecksumMismatch) {
|
|
634
|
+
Options options;
|
|
635
|
+
ReadOptions read_opts;
|
|
636
|
+
std::string dummy_ts(sizeof(uint64_t), '\0');
|
|
637
|
+
Slice read_timestamp = dummy_ts;
|
|
638
|
+
if (udt_enabled_) {
|
|
639
|
+
options.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
640
|
+
read_opts.timestamp = &read_timestamp;
|
|
641
|
+
}
|
|
642
|
+
options.persist_user_defined_timestamps = persist_udt_;
|
|
643
|
+
size_t ts_sz = options.comparator->timestamp_size();
|
|
494
644
|
std::map<std::string, std::string> kv =
|
|
495
|
-
BlockBasedTableReaderBaseTest::GenerateKVMap(
|
|
645
|
+
BlockBasedTableReaderBaseTest::GenerateKVMap(
|
|
646
|
+
800 /* num_block */,
|
|
647
|
+
false /* mixed_with_human_readable_string_value=*/, ts_sz);
|
|
496
648
|
|
|
649
|
+
options.statistics = CreateDBStatistics();
|
|
650
|
+
ImmutableOptions ioptions(options);
|
|
497
651
|
std::string table_name =
|
|
498
652
|
"BlockBasedTableReaderTest" + CompressionTypeToString(compression_type_);
|
|
499
|
-
CreateTable(table_name, compression_type_, kv
|
|
653
|
+
CreateTable(table_name, ioptions, compression_type_, kv,
|
|
654
|
+
compression_parallel_threads_, compression_dict_bytes_);
|
|
500
655
|
|
|
501
656
|
std::unique_ptr<BlockBasedTable> table;
|
|
502
|
-
Options options;
|
|
503
|
-
options.statistics = CreateDBStatistics();
|
|
504
|
-
ImmutableOptions ioptions(options);
|
|
505
657
|
FileOptions foptions;
|
|
506
658
|
foptions.use_direct_reads = use_direct_reads_;
|
|
507
659
|
InternalKeyComparator comparator(options.comparator);
|
|
508
|
-
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table
|
|
660
|
+
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table,
|
|
661
|
+
true /* bool prefetch_index_and_filter_in_cache */,
|
|
662
|
+
nullptr /* status */, persist_udt_);
|
|
509
663
|
|
|
510
664
|
// Use the top level iterator to find the offset/size of the first
|
|
511
665
|
// 2nd level index block and corrupt the block
|
|
512
666
|
IndexBlockIter iiter_on_stack;
|
|
513
667
|
BlockCacheLookupContext context{TableReaderCaller::kUserVerifyChecksum};
|
|
514
668
|
InternalIteratorBase<IndexValue>* iiter = table->NewIndexIterator(
|
|
515
|
-
|
|
669
|
+
read_opts, /*need_upper_bound_check=*/false, &iiter_on_stack,
|
|
516
670
|
/*get_context=*/nullptr, &context);
|
|
517
671
|
std::unique_ptr<InternalIteratorBase<IndexValue>> iiter_unique_ptr;
|
|
518
672
|
if (iiter != &iiter_on_stack) {
|
|
@@ -529,11 +683,13 @@ TEST_P(BlockBasedTableReaderTestVerifyChecksum, ChecksumMismatch) {
|
|
|
529
683
|
ASSERT_OK(test::CorruptFile(options.env, Path(table_name),
|
|
530
684
|
static_cast<int>(handle.offset()), 128));
|
|
531
685
|
|
|
532
|
-
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table
|
|
686
|
+
NewBlockBasedTableReader(foptions, ioptions, comparator, table_name, &table,
|
|
687
|
+
true /* bool prefetch_index_and_filter_in_cache */,
|
|
688
|
+
nullptr /* status */, persist_udt_);
|
|
533
689
|
ASSERT_EQ(0,
|
|
534
690
|
options.statistics->getTickerCount(BLOCK_CHECKSUM_MISMATCH_COUNT));
|
|
535
|
-
Status s =
|
|
536
|
-
|
|
691
|
+
Status s =
|
|
692
|
+
table->VerifyChecksum(read_opts, TableReaderCaller::kUserVerifyChecksum);
|
|
537
693
|
ASSERT_EQ(1,
|
|
538
694
|
options.statistics->getTickerCount(BLOCK_CHECKSUM_MISMATCH_COUNT));
|
|
539
695
|
ASSERT_EQ(s.code(), Status::kCorruption);
|
|
@@ -541,14 +697,25 @@ TEST_P(BlockBasedTableReaderTestVerifyChecksum, ChecksumMismatch) {
|
|
|
541
697
|
|
|
542
698
|
// Param 1: compression type
|
|
543
699
|
// Param 2: whether to use direct reads
|
|
544
|
-
// Param 3: Block Based Table Index type
|
|
700
|
+
// Param 3: Block Based Table Index type, partitioned filters are also enabled
|
|
701
|
+
// when index type is kTwoLevelIndexSearch
|
|
545
702
|
// Param 4: BBTO no_block_cache option
|
|
703
|
+
// Param 5: test mode for the user-defined timestamp feature
|
|
704
|
+
// Param 6: number of parallel compression threads
|
|
705
|
+
// Param 7: CompressionOptions.max_dict_bytes and
|
|
706
|
+
// CompressionOptions.max_dict_buffer_bytes. This enable/disables
|
|
707
|
+
// compression dictionary.
|
|
546
708
|
INSTANTIATE_TEST_CASE_P(
|
|
547
|
-
|
|
709
|
+
BlockBasedTableReaderTest, BlockBasedTableReaderTest,
|
|
548
710
|
::testing::Combine(
|
|
549
711
|
::testing::ValuesIn(GetSupportedCompressions()), ::testing::Bool(),
|
|
550
|
-
::testing::Values(
|
|
551
|
-
|
|
712
|
+
::testing::Values(
|
|
713
|
+
BlockBasedTableOptions::IndexType::kBinarySearch,
|
|
714
|
+
BlockBasedTableOptions::IndexType::kHashSearch,
|
|
715
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
|
|
716
|
+
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey),
|
|
717
|
+
::testing::Values(false), ::testing::ValuesIn(test::GetUDTTestModes()),
|
|
718
|
+
::testing::Values(1, 2), ::testing::Values(0, 4096)));
|
|
552
719
|
INSTANTIATE_TEST_CASE_P(
|
|
553
720
|
VerifyChecksum, BlockBasedTableReaderTestVerifyChecksum,
|
|
554
721
|
::testing::Combine(
|
|
@@ -556,7 +723,8 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
556
723
|
::testing::Values(false),
|
|
557
724
|
::testing::Values(
|
|
558
725
|
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch),
|
|
559
|
-
::testing::Values(true)))
|
|
726
|
+
::testing::Values(true), ::testing::ValuesIn(test::GetUDTTestModes()),
|
|
727
|
+
::testing::Values(1, 2), ::testing::Values(0)));
|
|
560
728
|
|
|
561
729
|
} // namespace ROCKSDB_NAMESPACE
|
|
562
730
|
|
|
@@ -48,10 +48,13 @@ BlockBuilder::BlockBuilder(
|
|
|
48
48
|
int block_restart_interval, bool use_delta_encoding,
|
|
49
49
|
bool use_value_delta_encoding,
|
|
50
50
|
BlockBasedTableOptions::DataBlockIndexType index_type,
|
|
51
|
-
double data_block_hash_table_util_ratio
|
|
51
|
+
double data_block_hash_table_util_ratio, size_t ts_sz,
|
|
52
|
+
bool persist_user_defined_timestamps, bool is_user_key)
|
|
52
53
|
: block_restart_interval_(block_restart_interval),
|
|
53
54
|
use_delta_encoding_(use_delta_encoding),
|
|
54
55
|
use_value_delta_encoding_(use_value_delta_encoding),
|
|
56
|
+
strip_ts_sz_(persist_user_defined_timestamps ? 0 : ts_sz),
|
|
57
|
+
is_user_key_(is_user_key),
|
|
55
58
|
restarts_(1, 0), // First restart point is at offset 0
|
|
56
59
|
counter_(0),
|
|
57
60
|
finished_(false) {
|
|
@@ -96,6 +99,9 @@ size_t BlockBuilder::EstimateSizeAfterKV(const Slice& key,
|
|
|
96
99
|
// Note: this is an imprecise estimate as it accounts for the whole key size
|
|
97
100
|
// instead of non-shared key size.
|
|
98
101
|
estimate += key.size();
|
|
102
|
+
if (strip_ts_sz_ > 0) {
|
|
103
|
+
estimate -= strip_ts_sz_;
|
|
104
|
+
}
|
|
99
105
|
// In value delta encoding we estimate the value delta size as half the full
|
|
100
106
|
// value size since only the size field of block handle is encoded.
|
|
101
107
|
estimate +=
|
|
@@ -168,13 +174,13 @@ void BlockBuilder::AddWithLastKey(const Slice& key, const Slice& value,
|
|
|
168
174
|
// or Reset. This is more convenient for the caller and we can be more
|
|
169
175
|
// clever inside BlockBuilder. On this hot code path, we want to avoid
|
|
170
176
|
// conditional jumps like `buffer_.empty() ? ... : ...` so we can use a
|
|
171
|
-
// fast
|
|
172
|
-
// sound.
|
|
177
|
+
// fast arithmetic operation instead, with an assertion to be sure our logic
|
|
178
|
+
// is sound.
|
|
173
179
|
size_t buffer_size = buffer_.size();
|
|
174
180
|
size_t last_key_size = last_key_param.size();
|
|
175
|
-
assert(buffer_size == 0 || buffer_size >= last_key_size);
|
|
181
|
+
assert(buffer_size == 0 || buffer_size >= last_key_size - strip_ts_sz_);
|
|
176
182
|
|
|
177
|
-
Slice last_key(last_key_param.data(),
|
|
183
|
+
Slice last_key(last_key_param.data(), last_key_size * (buffer_size > 0));
|
|
178
184
|
|
|
179
185
|
AddWithLastKeyImpl(key, value, last_key, delta_value, buffer_size);
|
|
180
186
|
}
|
|
@@ -187,6 +193,15 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
187
193
|
assert(!finished_);
|
|
188
194
|
assert(counter_ <= block_restart_interval_);
|
|
189
195
|
assert(!use_value_delta_encoding_ || delta_value);
|
|
196
|
+
std::string key_buf;
|
|
197
|
+
std::string last_key_buf;
|
|
198
|
+
const Slice key_to_persist = MaybeStripTimestampFromKey(&key_buf, key);
|
|
199
|
+
// For delta key encoding, the first key in each restart interval doesn't have
|
|
200
|
+
// a last key to share bytes with.
|
|
201
|
+
const Slice last_key_persisted =
|
|
202
|
+
last_key.size() == 0
|
|
203
|
+
? last_key
|
|
204
|
+
: MaybeStripTimestampFromKey(&last_key_buf, last_key);
|
|
190
205
|
size_t shared = 0; // number of bytes shared with prev key
|
|
191
206
|
if (counter_ >= block_restart_interval_) {
|
|
192
207
|
// Restart compression
|
|
@@ -195,10 +210,10 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
195
210
|
counter_ = 0;
|
|
196
211
|
} else if (use_delta_encoding_) {
|
|
197
212
|
// See how much sharing to do with previous string
|
|
198
|
-
shared =
|
|
213
|
+
shared = key_to_persist.difference_offset(last_key_persisted);
|
|
199
214
|
}
|
|
200
215
|
|
|
201
|
-
const size_t non_shared =
|
|
216
|
+
const size_t non_shared = key_to_persist.size() - shared;
|
|
202
217
|
|
|
203
218
|
if (use_value_delta_encoding_) {
|
|
204
219
|
// Add "<shared><non_shared>" to buffer_
|
|
@@ -212,7 +227,7 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
212
227
|
}
|
|
213
228
|
|
|
214
229
|
// Add string delta to buffer_ followed by value
|
|
215
|
-
buffer_.append(
|
|
230
|
+
buffer_.append(key_to_persist.data() + shared, non_shared);
|
|
216
231
|
// Use value delta encoding only when the key has shared bytes. This would
|
|
217
232
|
// simplify the decoding, where it can figure which decoding to use simply by
|
|
218
233
|
// looking at the shared bytes size.
|
|
@@ -222,7 +237,12 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
222
237
|
buffer_.append(value.data(), value.size());
|
|
223
238
|
}
|
|
224
239
|
|
|
240
|
+
// TODO(yuzhangyu): make user defined timestamp work with block hash index.
|
|
225
241
|
if (data_block_hash_index_builder_.Valid()) {
|
|
242
|
+
// Only data blocks should be using `kDataBlockBinaryAndHash` index type.
|
|
243
|
+
// And data blocks should always be built with internal keys instead of
|
|
244
|
+
// user keys.
|
|
245
|
+
assert(!is_user_key_);
|
|
226
246
|
data_block_hash_index_builder_.Add(ExtractUserKey(key),
|
|
227
247
|
restarts_.size() - 1);
|
|
228
248
|
}
|
|
@@ -231,4 +251,17 @@ inline void BlockBuilder::AddWithLastKeyImpl(const Slice& key,
|
|
|
231
251
|
estimate_ += buffer_.size() - buffer_size;
|
|
232
252
|
}
|
|
233
253
|
|
|
254
|
+
const Slice BlockBuilder::MaybeStripTimestampFromKey(std::string* key_buf,
|
|
255
|
+
const Slice& key) {
|
|
256
|
+
Slice stripped_key = key;
|
|
257
|
+
if (strip_ts_sz_ > 0) {
|
|
258
|
+
if (is_user_key_) {
|
|
259
|
+
stripped_key.remove_suffix(strip_ts_sz_);
|
|
260
|
+
} else {
|
|
261
|
+
StripTimestampFromInternalKey(key_buf, key, strip_ts_sz_);
|
|
262
|
+
stripped_key = *key_buf;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return stripped_key;
|
|
266
|
+
}
|
|
234
267
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -28,7 +28,10 @@ class BlockBuilder {
|
|
|
28
28
|
bool use_value_delta_encoding = false,
|
|
29
29
|
BlockBasedTableOptions::DataBlockIndexType index_type =
|
|
30
30
|
BlockBasedTableOptions::kDataBlockBinarySearch,
|
|
31
|
-
double data_block_hash_table_util_ratio = 0.75
|
|
31
|
+
double data_block_hash_table_util_ratio = 0.75,
|
|
32
|
+
size_t ts_sz = 0,
|
|
33
|
+
bool persist_user_defined_timestamps = true,
|
|
34
|
+
bool is_user_key = false);
|
|
32
35
|
|
|
33
36
|
// Reset the contents as if the BlockBuilder was just constructed.
|
|
34
37
|
void Reset();
|
|
@@ -83,11 +86,32 @@ class BlockBuilder {
|
|
|
83
86
|
const Slice* const delta_value,
|
|
84
87
|
size_t buffer_size);
|
|
85
88
|
|
|
89
|
+
inline const Slice MaybeStripTimestampFromKey(std::string* key_buf,
|
|
90
|
+
const Slice& key);
|
|
91
|
+
|
|
86
92
|
const int block_restart_interval_;
|
|
87
93
|
// TODO(myabandeh): put it into a separate IndexBlockBuilder
|
|
88
94
|
const bool use_delta_encoding_;
|
|
89
95
|
// Refer to BlockIter::DecodeCurrentValue for format of delta encoded values
|
|
90
96
|
const bool use_value_delta_encoding_;
|
|
97
|
+
// Size in bytes for the user-defined timestamp to strip in a user key.
|
|
98
|
+
// This is non-zero if there is user-defined timestamp in the user key and it
|
|
99
|
+
// should not be persisted.
|
|
100
|
+
const size_t strip_ts_sz_;
|
|
101
|
+
// Whether the keys provided to build this block are user keys. If not,
|
|
102
|
+
// the keys are internal keys. This will affect how timestamp stripping is
|
|
103
|
+
// done for the key if `persisted_user_defined_timestamps_` is false and
|
|
104
|
+
// `ts_sz_` is non-zero.
|
|
105
|
+
// The timestamp stripping only applies to the keys added to the block. If the
|
|
106
|
+
// value contains user defined timestamp that needed to be stripped too, such
|
|
107
|
+
// as the `first_internal_key` in an `IndexValue` for an index block, the
|
|
108
|
+
// value part for a range deletion entry, their timestamp should be stripped
|
|
109
|
+
// before calling `BlockBuilder::Add`.
|
|
110
|
+
// Timestamp stripping only applies to data block and index blocks including
|
|
111
|
+
// index block for data blocks, index block for partitioned filter blocks,
|
|
112
|
+
// index block for partitioned index blocks. In summary, this only applies to
|
|
113
|
+
// block whose key are real user keys or internal keys created from user keys.
|
|
114
|
+
const bool is_user_key_;
|
|
91
115
|
|
|
92
116
|
std::string buffer_; // Destination buffer
|
|
93
117
|
std::vector<uint32_t> restarts_; // Restart points
|