@nxtedition/rocksdb 8.2.8 → 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
|
@@ -57,7 +57,8 @@ class MyPartitionedFilterBlockReader : public PartitionedFilterBlockReader {
|
|
|
57
57
|
|
|
58
58
|
class PartitionedFilterBlockTest
|
|
59
59
|
: public testing::Test,
|
|
60
|
-
virtual public ::testing::WithParamInterface<
|
|
60
|
+
virtual public ::testing::WithParamInterface<
|
|
61
|
+
std::tuple<uint32_t, test::UserDefinedTimestampTestMode>> {
|
|
61
62
|
public:
|
|
62
63
|
Options options_;
|
|
63
64
|
ImmutableOptions ioptions_;
|
|
@@ -67,38 +68,64 @@ class PartitionedFilterBlockTest
|
|
|
67
68
|
std::unique_ptr<BlockBasedTable> table_;
|
|
68
69
|
std::shared_ptr<Cache> cache_;
|
|
69
70
|
int bits_per_key_;
|
|
71
|
+
size_t ts_sz_;
|
|
72
|
+
bool user_defined_timestamps_persisted_;
|
|
70
73
|
|
|
71
|
-
PartitionedFilterBlockTest()
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
PartitionedFilterBlockTest() : bits_per_key_(10) {
|
|
75
|
+
auto udt_test_mode = std::get<1>(GetParam());
|
|
76
|
+
if (test::IsUDTEnabled(udt_test_mode)) {
|
|
77
|
+
options_.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
78
|
+
}
|
|
79
|
+
ts_sz_ = options_.comparator->timestamp_size();
|
|
80
|
+
user_defined_timestamps_persisted_ = test::ShouldPersistUDT(udt_test_mode);
|
|
81
|
+
icomp_ = InternalKeyComparator(options_.comparator);
|
|
82
|
+
env_options_ = EnvOptions(options_);
|
|
83
|
+
ioptions_ = ImmutableOptions(options_);
|
|
76
84
|
table_options_.filter_policy.reset(
|
|
77
85
|
NewBloomFilterPolicy(bits_per_key_, false));
|
|
78
|
-
table_options_.format_version = GetParam();
|
|
86
|
+
table_options_.format_version = std::get<0>(GetParam());
|
|
79
87
|
table_options_.index_block_restart_interval = 3;
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
~PartitionedFilterBlockTest() override {}
|
|
83
91
|
|
|
84
|
-
|
|
85
|
-
|
|
92
|
+
static constexpr int kKeyNum = 4;
|
|
93
|
+
static constexpr int kMissingKeyNum = 2;
|
|
94
|
+
const std::string keys_without_ts[kKeyNum] = {"afoo", "bar", "box", "hello"};
|
|
95
|
+
const std::string missing_keys_without_ts[kMissingKeyNum] = {"missing",
|
|
96
|
+
"other"};
|
|
97
|
+
|
|
98
|
+
std::vector<std::string> PrepareKeys(const std::string* orig_keys,
|
|
99
|
+
int number_of_keys) {
|
|
100
|
+
std::vector<std::string> user_keys;
|
|
101
|
+
if (ts_sz_ == 0) {
|
|
102
|
+
user_keys.assign(orig_keys, orig_keys + number_of_keys);
|
|
103
|
+
} else {
|
|
104
|
+
for (int i = 0; i < number_of_keys; i++) {
|
|
105
|
+
std::string key_with_ts;
|
|
106
|
+
AppendKeyWithMinTimestamp(&key_with_ts, orig_keys[i], ts_sz_);
|
|
107
|
+
user_keys.push_back(std::move(key_with_ts));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return user_keys;
|
|
111
|
+
}
|
|
86
112
|
|
|
87
113
|
uint64_t MaxIndexSize() {
|
|
88
|
-
int num_keys = sizeof(keys) / sizeof(*keys);
|
|
89
114
|
uint64_t max_key_size = 0;
|
|
90
|
-
for (int i =
|
|
91
|
-
|
|
92
|
-
|
|
115
|
+
for (int i = 0; i < kKeyNum; i++) {
|
|
116
|
+
// If UDT is enabled, the size of each key would be increased by a
|
|
117
|
+
// timestamp size.
|
|
118
|
+
max_key_size = std::max(
|
|
119
|
+
max_key_size, static_cast<uint64_t>(keys_without_ts[i].size()) +
|
|
120
|
+
ts_sz_ * sizeof(static_cast<unsigned char>(0)));
|
|
93
121
|
}
|
|
94
|
-
uint64_t max_index_size =
|
|
122
|
+
uint64_t max_index_size = kKeyNum * (max_key_size + 8 /*handle*/);
|
|
95
123
|
return max_index_size;
|
|
96
124
|
}
|
|
97
125
|
|
|
98
126
|
uint64_t MaxFilterSize() {
|
|
99
|
-
int num_keys = sizeof(keys) / sizeof(*keys);
|
|
100
127
|
// General, rough over-approximation
|
|
101
|
-
return
|
|
128
|
+
return kKeyNum * bits_per_key_ + (CACHE_LINE_SIZE * 8 + /*metadata*/ 5);
|
|
102
129
|
}
|
|
103
130
|
|
|
104
131
|
uint64_t last_offset = 10;
|
|
@@ -112,7 +139,8 @@ class PartitionedFilterBlockTest
|
|
|
112
139
|
PartitionedIndexBuilder* NewIndexBuilder() {
|
|
113
140
|
const bool kValueDeltaEncoded = true;
|
|
114
141
|
return PartitionedIndexBuilder::CreateIndexBuilder(
|
|
115
|
-
&icomp_, !kValueDeltaEncoded, table_options_
|
|
142
|
+
&icomp_, !kValueDeltaEncoded, table_options_, ts_sz_,
|
|
143
|
+
user_defined_timestamps_persisted_);
|
|
116
144
|
}
|
|
117
145
|
|
|
118
146
|
PartitionedFilterBlockBuilder* NewBuilder(
|
|
@@ -131,7 +159,8 @@ class PartitionedFilterBlockTest
|
|
|
131
159
|
BloomFilterPolicy::GetBuilderFromContext(
|
|
132
160
|
FilterBuildingContext(table_options_)),
|
|
133
161
|
table_options_.index_block_restart_interval, !kValueDeltaEncoded,
|
|
134
|
-
p_index_builder, partition_size
|
|
162
|
+
p_index_builder, partition_size, ts_sz_,
|
|
163
|
+
user_defined_timestamps_persisted_);
|
|
135
164
|
}
|
|
136
165
|
|
|
137
166
|
PartitionedFilterBlockReader* NewReader(
|
|
@@ -152,7 +181,8 @@ class PartitionedFilterBlockTest
|
|
|
152
181
|
table_.reset(new MockedBlockBasedTable(
|
|
153
182
|
new BlockBasedTable::Rep(ioptions_, env_options_, table_options_,
|
|
154
183
|
icomp_, skip_filters, file_size, level,
|
|
155
|
-
immortal_table
|
|
184
|
+
immortal_table,
|
|
185
|
+
user_defined_timestamps_persisted_),
|
|
156
186
|
pib));
|
|
157
187
|
BlockContents contents(slice);
|
|
158
188
|
CachableEntry<Block> block(
|
|
@@ -169,38 +199,41 @@ class PartitionedFilterBlockTest
|
|
|
169
199
|
NewReader(builder, pib));
|
|
170
200
|
// Querying added keys
|
|
171
201
|
const bool no_io = true;
|
|
202
|
+
std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
|
|
172
203
|
for (auto key : keys) {
|
|
173
204
|
auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
|
|
174
205
|
const Slice ikey_slice = Slice(*ikey.rep());
|
|
175
|
-
ASSERT_TRUE(reader->KeyMayMatch(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
206
|
+
ASSERT_TRUE(reader->KeyMayMatch(
|
|
207
|
+
StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
|
|
208
|
+
/*get_context=*/nullptr,
|
|
209
|
+
/*lookup_context=*/nullptr, ReadOptions()));
|
|
179
210
|
}
|
|
180
211
|
{
|
|
181
212
|
// querying a key twice
|
|
182
213
|
auto ikey = InternalKey(keys[0], 0, ValueType::kTypeValue);
|
|
183
214
|
const Slice ikey_slice = Slice(*ikey.rep());
|
|
184
|
-
ASSERT_TRUE(reader->KeyMayMatch(
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
215
|
+
ASSERT_TRUE(reader->KeyMayMatch(
|
|
216
|
+
StripTimestampFromUserKey(keys[0], ts_sz_), !no_io, &ikey_slice,
|
|
217
|
+
/*get_context=*/nullptr,
|
|
218
|
+
/*lookup_context=*/nullptr, ReadOptions()));
|
|
188
219
|
}
|
|
189
220
|
// querying missing keys
|
|
221
|
+
std::vector<std::string> missing_keys =
|
|
222
|
+
PrepareKeys(missing_keys_without_ts, kMissingKeyNum);
|
|
190
223
|
for (auto key : missing_keys) {
|
|
191
224
|
auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
|
|
192
225
|
const Slice ikey_slice = Slice(*ikey.rep());
|
|
193
226
|
if (empty) {
|
|
194
|
-
ASSERT_TRUE(reader->KeyMayMatch(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
227
|
+
ASSERT_TRUE(reader->KeyMayMatch(
|
|
228
|
+
StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
|
|
229
|
+
/*get_context=*/nullptr,
|
|
230
|
+
/*lookup_context=*/nullptr, ReadOptions()));
|
|
198
231
|
} else {
|
|
199
232
|
// assuming a good hash function
|
|
200
|
-
ASSERT_FALSE(reader->KeyMayMatch(
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
233
|
+
ASSERT_FALSE(reader->KeyMayMatch(
|
|
234
|
+
StripTimestampFromUserKey(key, ts_sz_), !no_io, &ikey_slice,
|
|
235
|
+
/*get_context=*/nullptr,
|
|
236
|
+
/*lookup_context=*/nullptr, ReadOptions()));
|
|
204
237
|
}
|
|
205
238
|
}
|
|
206
239
|
}
|
|
@@ -210,17 +243,18 @@ class PartitionedFilterBlockTest
|
|
|
210
243
|
std::unique_ptr<PartitionedFilterBlockBuilder> builder(
|
|
211
244
|
NewBuilder(pib.get()));
|
|
212
245
|
int i = 0;
|
|
213
|
-
|
|
246
|
+
std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
|
|
247
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
214
248
|
CutABlock(pib.get(), keys[i], keys[i + 1]);
|
|
215
249
|
i++;
|
|
216
|
-
builder->Add(keys[i]);
|
|
250
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
217
251
|
CutABlock(pib.get(), keys[i], keys[i + 1]);
|
|
218
252
|
i++;
|
|
219
|
-
builder->Add(keys[i]);
|
|
220
|
-
builder->Add(keys[i]);
|
|
253
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
254
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
221
255
|
CutABlock(pib.get(), keys[i], keys[i + 1]);
|
|
222
256
|
i++;
|
|
223
|
-
builder->Add(keys[i]);
|
|
257
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
224
258
|
CutABlock(pib.get(), keys[i]);
|
|
225
259
|
|
|
226
260
|
VerifyReader(builder.get(), pib.get());
|
|
@@ -231,16 +265,17 @@ class PartitionedFilterBlockTest
|
|
|
231
265
|
std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
|
|
232
266
|
std::unique_ptr<PartitionedFilterBlockBuilder> builder(
|
|
233
267
|
NewBuilder(pib.get(), prefix_extractor));
|
|
268
|
+
std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
|
|
234
269
|
int i = 0;
|
|
235
|
-
builder->Add(keys[i]);
|
|
270
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
236
271
|
i++;
|
|
237
|
-
builder->Add(keys[i]);
|
|
272
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
238
273
|
CutABlock(pib.get(), keys[i], keys[i + 1]);
|
|
239
274
|
i++;
|
|
240
|
-
builder->Add(keys[i]);
|
|
241
|
-
builder->Add(keys[i]);
|
|
275
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
276
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
242
277
|
i++;
|
|
243
|
-
builder->Add(keys[i]);
|
|
278
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
244
279
|
CutABlock(pib.get(), keys[i]);
|
|
245
280
|
|
|
246
281
|
VerifyReader(builder.get(), pib.get(), prefix_extractor);
|
|
@@ -250,15 +285,16 @@ class PartitionedFilterBlockTest
|
|
|
250
285
|
std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
|
|
251
286
|
std::unique_ptr<PartitionedFilterBlockBuilder> builder(
|
|
252
287
|
NewBuilder(pib.get()));
|
|
288
|
+
std::vector<std::string> keys = PrepareKeys(keys_without_ts, kKeyNum);
|
|
253
289
|
int i = 0;
|
|
254
|
-
builder->Add(keys[i]);
|
|
290
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
255
291
|
i++;
|
|
256
|
-
builder->Add(keys[i]);
|
|
292
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
257
293
|
i++;
|
|
258
|
-
builder->Add(keys[i]);
|
|
259
|
-
builder->Add(keys[i]);
|
|
294
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
295
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
260
296
|
i++;
|
|
261
|
-
builder->Add(keys[i]);
|
|
297
|
+
builder->Add(StripTimestampFromUserKey(keys[i], ts_sz_));
|
|
262
298
|
CutABlock(pib.get(), keys[i]);
|
|
263
299
|
|
|
264
300
|
VerifyReader(builder.get(), pib.get());
|
|
@@ -299,10 +335,12 @@ class PartitionedFilterBlockTest
|
|
|
299
335
|
};
|
|
300
336
|
|
|
301
337
|
// Format versions potentially intersting to partitioning
|
|
302
|
-
INSTANTIATE_TEST_CASE_P(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
338
|
+
INSTANTIATE_TEST_CASE_P(
|
|
339
|
+
FormatVersions, PartitionedFilterBlockTest,
|
|
340
|
+
testing::Combine(testing::ValuesIn(std::set<uint32_t>{
|
|
341
|
+
2, 3, 4, test::kDefaultFormatVersion,
|
|
342
|
+
kLatestFormatVersion}),
|
|
343
|
+
testing::ValuesIn(test::GetUDTTestModes())));
|
|
306
344
|
|
|
307
345
|
TEST_P(PartitionedFilterBlockTest, EmptyBuilder) {
|
|
308
346
|
std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
|
|
@@ -337,12 +375,14 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
|
|
|
337
375
|
std::unique_ptr<PartitionedIndexBuilder> pib(NewIndexBuilder());
|
|
338
376
|
std::unique_ptr<PartitionedFilterBlockBuilder> builder(
|
|
339
377
|
NewBuilder(pib.get(), prefix_extractor.get()));
|
|
340
|
-
const std::string
|
|
341
|
-
|
|
378
|
+
const std::string pkeys_without_ts[3] = {"p-key10", "p-key20", "p-key30"};
|
|
379
|
+
std::vector<std::string> pkeys =
|
|
380
|
+
PrepareKeys(pkeys_without_ts, 3 /* number_of_keys */);
|
|
381
|
+
builder->Add(StripTimestampFromUserKey(pkeys[0], ts_sz_));
|
|
342
382
|
CutABlock(pib.get(), pkeys[0], pkeys[1]);
|
|
343
|
-
builder->Add(pkeys[1]);
|
|
383
|
+
builder->Add(StripTimestampFromUserKey(pkeys[1], ts_sz_));
|
|
344
384
|
CutABlock(pib.get(), pkeys[1], pkeys[2]);
|
|
345
|
-
builder->Add(pkeys[2]);
|
|
385
|
+
builder->Add(StripTimestampFromUserKey(pkeys[2], ts_sz_));
|
|
346
386
|
CutABlock(pib.get(), pkeys[2]);
|
|
347
387
|
std::unique_ptr<PartitionedFilterBlockReader> reader(
|
|
348
388
|
NewReader(builder.get(), pib.get()));
|
|
@@ -356,7 +396,10 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
|
|
|
356
396
|
ReadOptions()));
|
|
357
397
|
}
|
|
358
398
|
// Non-existent keys but with the same prefix
|
|
359
|
-
const std::string
|
|
399
|
+
const std::string pnonkeys_without_ts[4] = {"p-key9", "p-key11", "p-key21",
|
|
400
|
+
"p-key31"};
|
|
401
|
+
std::vector<std::string> pnonkeys =
|
|
402
|
+
PrepareKeys(pnonkeys_without_ts, 4 /* number_of_keys */);
|
|
360
403
|
for (auto key : pnonkeys) {
|
|
361
404
|
auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
|
|
362
405
|
const Slice ikey_slice = Slice(*ikey.rep());
|
|
@@ -381,23 +424,25 @@ TEST_P(PartitionedFilterBlockTest, PrefixInWrongPartitionBug) {
|
|
|
381
424
|
// In the bug, searching for prefix "p3" on an index with format version 3,
|
|
382
425
|
// will give the key "p3" and the partition of the keys that are <= p3, i.e.,
|
|
383
426
|
// p2-keys, where the filter for prefix "p3" does not exist.
|
|
384
|
-
const std::string
|
|
385
|
-
|
|
386
|
-
|
|
427
|
+
const std::string pkeys_without_ts[] = {"p1-key1", "p2-key2", "p3-key3",
|
|
428
|
+
"p4-key3", "p5-key3"};
|
|
429
|
+
std::vector<std::string> pkeys =
|
|
430
|
+
PrepareKeys(pkeys_without_ts, 5 /* number_of_keys */);
|
|
431
|
+
builder->Add(StripTimestampFromUserKey(pkeys[0], ts_sz_));
|
|
387
432
|
CutABlock(pib.get(), pkeys[0], pkeys[1]);
|
|
388
|
-
builder->Add(pkeys[1]);
|
|
433
|
+
builder->Add(StripTimestampFromUserKey(pkeys[1], ts_sz_));
|
|
389
434
|
CutABlock(pib.get(), pkeys[1], pkeys[2]);
|
|
390
|
-
builder->Add(pkeys[2]);
|
|
435
|
+
builder->Add(StripTimestampFromUserKey(pkeys[2], ts_sz_));
|
|
391
436
|
CutABlock(pib.get(), pkeys[2], pkeys[3]);
|
|
392
|
-
builder->Add(pkeys[3]);
|
|
437
|
+
builder->Add(StripTimestampFromUserKey(pkeys[3], ts_sz_));
|
|
393
438
|
CutABlock(pib.get(), pkeys[3], pkeys[4]);
|
|
394
|
-
builder->Add(pkeys[4]);
|
|
439
|
+
builder->Add(StripTimestampFromUserKey(pkeys[4], ts_sz_));
|
|
395
440
|
CutABlock(pib.get(), pkeys[4]);
|
|
396
441
|
std::unique_ptr<PartitionedFilterBlockReader> reader(
|
|
397
442
|
NewReader(builder.get(), pib.get()));
|
|
398
443
|
for (auto key : pkeys) {
|
|
399
444
|
auto prefix = prefix_extractor->Transform(key);
|
|
400
|
-
auto ikey = InternalKey(
|
|
445
|
+
auto ikey = InternalKey(key, 0, ValueType::kTypeValue);
|
|
401
446
|
const Slice ikey_slice = Slice(*ikey.rep());
|
|
402
447
|
ASSERT_TRUE(reader->PrefixMayMatch(prefix,
|
|
403
448
|
/*no_io=*/false, &ikey_slice,
|
|
@@ -416,7 +461,6 @@ TEST_P(PartitionedFilterBlockTest, OneBlockPerKey) {
|
|
|
416
461
|
}
|
|
417
462
|
|
|
418
463
|
TEST_P(PartitionedFilterBlockTest, PartitionCount) {
|
|
419
|
-
int num_keys = sizeof(keys) / sizeof(*keys);
|
|
420
464
|
table_options_.metadata_block_size =
|
|
421
465
|
std::max(MaxIndexSize(), MaxFilterSize());
|
|
422
466
|
int partitions = TestBlockPerKey();
|
|
@@ -424,7 +468,7 @@ TEST_P(PartitionedFilterBlockTest, PartitionCount) {
|
|
|
424
468
|
// A low number ensures cutting a block after each key
|
|
425
469
|
table_options_.metadata_block_size = 1;
|
|
426
470
|
partitions = TestBlockPerKey();
|
|
427
|
-
ASSERT_EQ(partitions,
|
|
471
|
+
ASSERT_EQ(partitions, kKeyNum - 1 /* last two keys make one flush */);
|
|
428
472
|
}
|
|
429
473
|
|
|
430
474
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -433,4 +477,4 @@ int main(int argc, char** argv) {
|
|
|
433
477
|
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
434
478
|
::testing::InitGoogleTest(&argc, argv);
|
|
435
479
|
return RUN_ALL_TESTS();
|
|
436
|
-
}
|
|
480
|
+
}
|
|
@@ -91,8 +91,7 @@ void PartitionedIndexIterator::InitPartitionedIndexBlock() {
|
|
|
91
91
|
// Enabled from the very first IO when ReadOptions.readahead_size is set.
|
|
92
92
|
block_prefetcher_.PrefetchIfNeeded(
|
|
93
93
|
rep, partitioned_index_handle, read_options_.readahead_size,
|
|
94
|
-
is_for_compaction, /*no_sequential_checking=*/false,
|
|
95
|
-
read_options_.rate_limiter_priority);
|
|
94
|
+
is_for_compaction, /*no_sequential_checking=*/false, read_options_);
|
|
96
95
|
Status s;
|
|
97
96
|
table_->NewDataBlockIterator<IndexBlockIter>(
|
|
98
97
|
read_options_, partitioned_index_handle, &block_iter_,
|
|
@@ -75,7 +75,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
|
|
|
75
75
|
internal_comparator()->user_comparator(),
|
|
76
76
|
rep->get_global_seqno(BlockType::kIndex), nullptr, kNullStats, true,
|
|
77
77
|
index_has_first_key(), index_key_includes_seq(),
|
|
78
|
-
index_value_is_full()
|
|
78
|
+
index_value_is_full(), false /* block_contents_pinned */,
|
|
79
|
+
user_defined_timestamps_persisted()));
|
|
79
80
|
} else {
|
|
80
81
|
ReadOptions ro;
|
|
81
82
|
ro.fill_cache = read_options.fill_cache;
|
|
@@ -94,7 +95,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
|
|
|
94
95
|
internal_comparator()->user_comparator(),
|
|
95
96
|
rep->get_global_seqno(BlockType::kIndex), nullptr, kNullStats, true,
|
|
96
97
|
index_has_first_key(), index_key_includes_seq(),
|
|
97
|
-
index_value_is_full()
|
|
98
|
+
index_value_is_full(), false /* block_contents_pinned */,
|
|
99
|
+
user_defined_timestamps_persisted()));
|
|
98
100
|
|
|
99
101
|
it = new PartitionedIndexIterator(
|
|
100
102
|
table(), ro, *internal_comparator(), std::move(index_iter),
|
|
@@ -140,7 +142,8 @@ Status PartitionIndexReader::CacheDependencies(
|
|
|
140
142
|
index_block.GetValue()->NewIndexIterator(
|
|
141
143
|
internal_comparator()->user_comparator(),
|
|
142
144
|
rep->get_global_seqno(BlockType::kIndex), &biter, kNullStats, true,
|
|
143
|
-
index_has_first_key(), index_key_includes_seq(), index_value_is_full()
|
|
145
|
+
index_has_first_key(), index_key_includes_seq(), index_value_is_full(),
|
|
146
|
+
false /* block_contents_pinned */, user_defined_timestamps_persisted());
|
|
144
147
|
// Index partitions are assumed to be consecuitive. Prefetch them all.
|
|
145
148
|
// Read the first block offset
|
|
146
149
|
biter.SeekToFirst();
|
|
@@ -166,14 +169,14 @@ Status PartitionIndexReader::CacheDependencies(
|
|
|
166
169
|
tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
|
|
167
170
|
rep->CreateFilePrefetchBuffer(
|
|
168
171
|
0, 0, &prefetch_buffer, false /*Implicit auto readahead*/,
|
|
169
|
-
0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead
|
|
172
|
+
0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
|
|
173
|
+
/*upper_bound_offset*/ 0);
|
|
170
174
|
IOOptions opts;
|
|
171
175
|
{
|
|
172
176
|
Status s = rep->file->PrepareIOOptions(ro, opts);
|
|
173
177
|
if (s.ok()) {
|
|
174
178
|
s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
|
|
175
|
-
static_cast<size_t>(prefetch_len)
|
|
176
|
-
ro.rate_limiter_priority);
|
|
179
|
+
static_cast<size_t>(prefetch_len));
|
|
177
180
|
}
|
|
178
181
|
if (!s.ok()) {
|
|
179
182
|
return s;
|
|
@@ -23,10 +23,14 @@ void ForceReleaseCachedEntry(void* arg, void* h) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
// WART: this is specific to block-based table
|
|
26
|
-
Status VerifyBlockChecksum(
|
|
26
|
+
Status VerifyBlockChecksum(const Footer& footer, const char* data,
|
|
27
27
|
size_t block_size, const std::string& file_name,
|
|
28
28
|
uint64_t offset) {
|
|
29
29
|
PERF_TIMER_GUARD(block_checksum_time);
|
|
30
|
+
|
|
31
|
+
assert(footer.GetBlockTrailerSize() == 5);
|
|
32
|
+
ChecksumType type = footer.checksum_type();
|
|
33
|
+
|
|
30
34
|
// After block_size bytes is compression type (1 byte), which is part of
|
|
31
35
|
// the checksummed section.
|
|
32
36
|
size_t len = block_size + 1;
|
|
@@ -34,6 +38,13 @@ Status VerifyBlockChecksum(ChecksumType type, const char* data,
|
|
|
34
38
|
uint32_t stored = DecodeFixed32(data + len);
|
|
35
39
|
|
|
36
40
|
uint32_t computed = ComputeBuiltinChecksum(type, data, len);
|
|
41
|
+
|
|
42
|
+
// Unapply context to 'stored' rather than apply to 'computed, for people
|
|
43
|
+
// who might look for reference crc value in error message
|
|
44
|
+
uint32_t modifier =
|
|
45
|
+
ChecksumModifierForContext(footer.base_context_checksum(), offset);
|
|
46
|
+
stored -= modifier;
|
|
47
|
+
|
|
37
48
|
if (stored == computed) {
|
|
38
49
|
return Status::OK();
|
|
39
50
|
} else {
|
|
@@ -43,8 +54,9 @@ Status VerifyBlockChecksum(ChecksumType type, const char* data,
|
|
|
43
54
|
computed = crc32c::Unmask(computed);
|
|
44
55
|
}
|
|
45
56
|
return Status::Corruption(
|
|
46
|
-
"block checksum mismatch: stored
|
|
47
|
-
"
|
|
57
|
+
"block checksum mismatch: stored" +
|
|
58
|
+
std::string(modifier ? "(context removed)" : "") + " = " +
|
|
59
|
+
std::to_string(stored) + ", computed = " + std::to_string(computed) +
|
|
48
60
|
", type = " + std::to_string(type) + " in " + file_name + " offset " +
|
|
49
61
|
std::to_string(offset) + " size " + std::to_string(block_size));
|
|
50
62
|
}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
#include "rocksdb/table.h"
|
|
13
13
|
|
|
14
14
|
namespace ROCKSDB_NAMESPACE {
|
|
15
|
+
class Footer;
|
|
16
|
+
|
|
15
17
|
// Release the cached entry and decrement its ref count.
|
|
16
18
|
extern void ForceReleaseCachedEntry(void* arg, void* h);
|
|
17
19
|
|
|
@@ -22,12 +24,13 @@ inline MemoryAllocator* GetMemoryAllocator(
|
|
|
22
24
|
: nullptr;
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
// Assumes block has a trailer as in format.h.
|
|
26
|
-
// for generating
|
|
27
|
+
// Assumes block has a trailer past `data + block_size` as in format.h.
|
|
28
|
+
// `file_name` provided for generating diagnostic message in returned status.
|
|
29
|
+
// `offset` might be required for proper verification (also used for message).
|
|
27
30
|
//
|
|
28
31
|
// Returns Status::OK() on checksum match, or Status::Corruption() on checksum
|
|
29
32
|
// mismatch.
|
|
30
|
-
extern Status VerifyBlockChecksum(
|
|
33
|
+
extern Status VerifyBlockChecksum(const Footer& footer, const char* data,
|
|
31
34
|
size_t block_size,
|
|
32
35
|
const std::string& file_name,
|
|
33
36
|
uint64_t offset);
|
|
@@ -33,9 +33,9 @@ inline void BlockFetcher::ProcessTrailerIfPresent() {
|
|
|
33
33
|
if (footer_.GetBlockTrailerSize() > 0) {
|
|
34
34
|
assert(footer_.GetBlockTrailerSize() == BlockBasedTable::kBlockTrailerSize);
|
|
35
35
|
if (read_options_.verify_checksums) {
|
|
36
|
-
io_status_ = status_to_io_status(
|
|
37
|
-
footer_
|
|
38
|
-
|
|
36
|
+
io_status_ = status_to_io_status(
|
|
37
|
+
VerifyBlockChecksum(footer_, slice_.data(), block_size_,
|
|
38
|
+
file_->file_name(), handle_.offset()));
|
|
39
39
|
RecordTick(ioptions_.stats, BLOCK_CHECKSUM_COMPUTE_COUNT);
|
|
40
40
|
if (!io_status_.ok()) {
|
|
41
41
|
assert(io_status_.IsCorruption());
|
|
@@ -80,11 +80,11 @@ inline bool BlockFetcher::TryGetFromPrefetchBuffer() {
|
|
|
80
80
|
if (read_options_.async_io && !for_compaction_) {
|
|
81
81
|
read_from_prefetch_buffer = prefetch_buffer_->TryReadFromCacheAsync(
|
|
82
82
|
opts, file_, handle_.offset(), block_size_with_trailer_, &slice_,
|
|
83
|
-
&io_s
|
|
83
|
+
&io_s);
|
|
84
84
|
} else {
|
|
85
85
|
read_from_prefetch_buffer = prefetch_buffer_->TryReadFromCache(
|
|
86
86
|
opts, file_, handle_.offset(), block_size_with_trailer_, &slice_,
|
|
87
|
-
&io_s,
|
|
87
|
+
&io_s, for_compaction_);
|
|
88
88
|
}
|
|
89
89
|
if (read_from_prefetch_buffer) {
|
|
90
90
|
ProcessTrailerIfPresent();
|
|
@@ -259,18 +259,18 @@ IOStatus BlockFetcher::ReadBlockContents() {
|
|
|
259
259
|
if (file_->use_direct_io()) {
|
|
260
260
|
PERF_TIMER_GUARD(block_read_time);
|
|
261
261
|
PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
|
|
262
|
-
io_status_ =
|
|
263
|
-
opts, handle_.offset(), block_size_with_trailer_,
|
|
264
|
-
|
|
262
|
+
io_status_ =
|
|
263
|
+
file_->Read(opts, handle_.offset(), block_size_with_trailer_,
|
|
264
|
+
&slice_, nullptr, &direct_io_buf_);
|
|
265
265
|
PERF_COUNTER_ADD(block_read_count, 1);
|
|
266
266
|
used_buf_ = const_cast<char*>(slice_.data());
|
|
267
267
|
} else {
|
|
268
268
|
PrepareBufferForBlockFromFile();
|
|
269
269
|
PERF_TIMER_GUARD(block_read_time);
|
|
270
270
|
PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
|
|
271
|
-
io_status_ =
|
|
272
|
-
|
|
273
|
-
|
|
271
|
+
io_status_ =
|
|
272
|
+
file_->Read(opts, handle_.offset(), block_size_with_trailer_,
|
|
273
|
+
&slice_, used_buf_, nullptr);
|
|
274
274
|
PERF_COUNTER_ADD(block_read_count, 1);
|
|
275
275
|
#ifndef NDEBUG
|
|
276
276
|
if (slice_.data() == &stack_buf_[0]) {
|
|
@@ -107,6 +107,9 @@ class BlockFetcherTest : public testing::Test {
|
|
|
107
107
|
Footer footer;
|
|
108
108
|
ReadFooter(file.get(), &footer);
|
|
109
109
|
const BlockHandle& index_handle = footer.index_handle();
|
|
110
|
+
// FIXME: index handle will need to come from metaindex for
|
|
111
|
+
// format_version >= 6 when that becomes the default
|
|
112
|
+
ASSERT_FALSE(index_handle.IsNull());
|
|
110
113
|
|
|
111
114
|
CompressionType compression_type;
|
|
112
115
|
FetchBlock(file.get(), index_handle, BlockType::kIndex,
|
|
@@ -329,6 +329,7 @@ void CompactionMergingIterator::FindNextVisibleKey() {
|
|
|
329
329
|
assert(current->iter.status().ok());
|
|
330
330
|
minHeap_.replace_top(current);
|
|
331
331
|
} else {
|
|
332
|
+
considerStatus(current->iter.status());
|
|
332
333
|
minHeap_.pop();
|
|
333
334
|
}
|
|
334
335
|
if (range_tombstone_iters_[current->level]) {
|
|
@@ -403,8 +403,12 @@ Status CuckooTableBuilder::Finish() {
|
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
FooterBuilder footer;
|
|
406
|
-
footer.Build(kCuckooTableMagicNumber, /* format_version */ 1,
|
|
407
|
-
|
|
406
|
+
Status s = footer.Build(kCuckooTableMagicNumber, /* format_version */ 1,
|
|
407
|
+
offset, kNoChecksum, meta_index_block_handle);
|
|
408
|
+
if (!s.ok()) {
|
|
409
|
+
status_ = s;
|
|
410
|
+
return status_;
|
|
411
|
+
}
|
|
408
412
|
io_status_ = file_->Append(footer.GetSlice());
|
|
409
413
|
status_ = io_status_;
|
|
410
414
|
return status_;
|
|
@@ -122,8 +122,7 @@ class CuckooBuilderTest : public testing::Test {
|
|
|
122
122
|
for (uint32_t i = 0; i + 1 < table_size + cuckoo_block_size; ++i) {
|
|
123
123
|
Slice read_slice;
|
|
124
124
|
ASSERT_OK(file_reader->Read(IOOptions(), i * bucket_size, bucket_size,
|
|
125
|
-
&read_slice, nullptr, nullptr
|
|
126
|
-
Env::IO_TOTAL /* rate_limiter_priority */));
|
|
125
|
+
&read_slice, nullptr, nullptr));
|
|
127
126
|
size_t key_idx =
|
|
128
127
|
std::find(expected_locations.begin(), expected_locations.end(), i) -
|
|
129
128
|
expected_locations.begin();
|
|
@@ -144,9 +144,8 @@ CuckooTableReader::CuckooTableReader(
|
|
|
144
144
|
*reinterpret_cast<const uint32_t*>(cuckoo_block_size->second.data());
|
|
145
145
|
cuckoo_block_bytes_minus_one_ = cuckoo_block_size_ * bucket_length_ - 1;
|
|
146
146
|
// TODO: rate limit reads of whole cuckoo tables.
|
|
147
|
-
status_ =
|
|
148
|
-
|
|
149
|
-
nullptr, nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
|
|
147
|
+
status_ = file_->Read(IOOptions(), 0, static_cast<size_t>(file_size),
|
|
148
|
+
&file_data_, nullptr, nullptr);
|
|
150
149
|
}
|
|
151
150
|
|
|
152
151
|
Status CuckooTableReader::Get(const ReadOptions& /*readOptions*/,
|