@nxtedition/rocksdb 8.2.8 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +0 -21
- package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
- package/deps/rocksdb/rocksdb/Makefile +37 -25
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +25 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -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 +20 -22
- 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/blob/db_blob_basic_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
- package/deps/rocksdb/rocksdb/db/c.cc +233 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
- package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
- 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 +148 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -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 +46 -10
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
- package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
- 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 +282 -167
- package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
- package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
- 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/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
- 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 +144 -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 +105 -17
- package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
- 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 +6 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
- package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
- package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
- package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
- package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
- package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
- 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 +58 -10
- 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 +207 -110
- package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
- 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/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
- 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 +68 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -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 +29 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
- package/deps/rocksdb/rocksdb/env/env.cc +6 -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 +79 -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 +100 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -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 +1225 -97
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -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 +40 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
- package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
- 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 +37 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -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/wide_columns.h +53 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -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 +6 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +10 -1
- 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 +116 -43
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
- 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_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
- 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 +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
- 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 +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
- 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_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
- 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/get_context.cc +52 -89
- package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -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 +45 -9
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -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_reader.h +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
- 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/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
- 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/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +119 -35
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -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/overload.h +23 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -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/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
- 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_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- 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/lock/range/range_tree/lib/README +13 -0
- 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 +272 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -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 +195 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -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 +41 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -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 +59 -28
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
- package/deps/rocksdb/rocksdb.gyp +6 -2
- package/index.js +0 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
|
@@ -26,15 +26,22 @@ PartitionedFilterBlockBuilder::PartitionedFilterBlockBuilder(
|
|
|
26
26
|
FilterBitsBuilder* filter_bits_builder, int index_block_restart_interval,
|
|
27
27
|
const bool use_value_delta_encoding,
|
|
28
28
|
PartitionedIndexBuilder* const p_index_builder,
|
|
29
|
-
const uint32_t partition_size
|
|
29
|
+
const uint32_t partition_size, size_t ts_sz,
|
|
30
|
+
const bool persist_user_defined_timestamps)
|
|
30
31
|
: FullFilterBlockBuilder(_prefix_extractor, whole_key_filtering,
|
|
31
32
|
filter_bits_builder),
|
|
32
|
-
index_on_filter_block_builder_(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
index_on_filter_block_builder_(
|
|
34
|
+
index_block_restart_interval, true /*use_delta_encoding*/,
|
|
35
|
+
use_value_delta_encoding,
|
|
36
|
+
BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
|
|
37
|
+
0.75 /* data_block_hash_table_util_ratio */, ts_sz,
|
|
38
|
+
persist_user_defined_timestamps, false /* is_user_key */),
|
|
39
|
+
index_on_filter_block_builder_without_seq_(
|
|
40
|
+
index_block_restart_interval, true /*use_delta_encoding*/,
|
|
41
|
+
use_value_delta_encoding,
|
|
42
|
+
BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
|
|
43
|
+
0.75 /* data_block_hash_table_util_ratio */, ts_sz,
|
|
44
|
+
persist_user_defined_timestamps, true /* is_user_key */),
|
|
38
45
|
p_index_builder_(p_index_builder),
|
|
39
46
|
keys_added_to_partition_(0),
|
|
40
47
|
total_added_in_built_(0) {
|
|
@@ -270,7 +277,8 @@ BlockHandle PartitionedFilterBlockReader::GetFilterPartitionHandle(
|
|
|
270
277
|
table()->get_rep()->get_global_seqno(BlockType::kFilterPartitionIndex),
|
|
271
278
|
&iter, kNullStats, true /* total_order_seek */,
|
|
272
279
|
false /* have_first_key */, index_key_includes_seq(),
|
|
273
|
-
index_value_is_full()
|
|
280
|
+
index_value_is_full(), false /* block_contents_pinned */,
|
|
281
|
+
user_defined_timestamps_persisted());
|
|
274
282
|
iter.Seek(entry);
|
|
275
283
|
if (UNLIKELY(!iter.Valid())) {
|
|
276
284
|
// entry is larger than all the keys. However its prefix might still be
|
|
@@ -309,12 +317,12 @@ Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
|
|
|
309
317
|
read_options.read_tier = kBlockCacheTier;
|
|
310
318
|
}
|
|
311
319
|
|
|
312
|
-
const Status s =
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
320
|
+
const Status s = table()->RetrieveBlock(
|
|
321
|
+
prefetch_buffer, read_options, fltr_blk_handle,
|
|
322
|
+
UncompressionDict::GetEmptyDict(), filter_block, get_context,
|
|
323
|
+
lookup_context,
|
|
324
|
+
/* for_compaction */ false, /* use_cache */ true,
|
|
325
|
+
/* async_read */ false, /* use_block_cache_for_lookup */ true);
|
|
318
326
|
|
|
319
327
|
return s;
|
|
320
328
|
}
|
|
@@ -470,7 +478,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
|
|
|
470
478
|
comparator->user_comparator(),
|
|
471
479
|
rep->get_global_seqno(BlockType::kFilterPartitionIndex), &biter,
|
|
472
480
|
kNullStats, true /* total_order_seek */, false /* have_first_key */,
|
|
473
|
-
index_key_includes_seq(), index_value_is_full()
|
|
481
|
+
index_key_includes_seq(), index_value_is_full(),
|
|
482
|
+
false /* block_contents_pinned */, user_defined_timestamps_persisted());
|
|
474
483
|
// Index partitions are assumed to be consecuitive. Prefetch them all.
|
|
475
484
|
// Read the first block offset
|
|
476
485
|
biter.SeekToFirst();
|
|
@@ -488,14 +497,15 @@ Status PartitionedFilterBlockReader::CacheDependencies(
|
|
|
488
497
|
tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
|
|
489
498
|
rep->CreateFilePrefetchBuffer(
|
|
490
499
|
0, 0, &prefetch_buffer, false /* Implicit autoreadahead */,
|
|
491
|
-
0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead
|
|
500
|
+
0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
|
|
501
|
+
/*upper_bound_offset*/ 0, /*readaheadsize_cb*/ nullptr,
|
|
502
|
+
/*usage=*/FilePrefetchBufferUsage::kUnknown);
|
|
492
503
|
|
|
493
504
|
IOOptions opts;
|
|
494
505
|
s = rep->file->PrepareIOOptions(ro, opts);
|
|
495
506
|
if (s.ok()) {
|
|
496
507
|
s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
|
|
497
|
-
static_cast<size_t>(prefetch_len)
|
|
498
|
-
ro.rate_limiter_priority);
|
|
508
|
+
static_cast<size_t>(prefetch_len));
|
|
499
509
|
}
|
|
500
510
|
if (!s.ok()) {
|
|
501
511
|
return s;
|
|
@@ -512,7 +522,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
|
|
|
512
522
|
prefetch_buffer ? prefetch_buffer.get() : tail_prefetch_buffer, ro,
|
|
513
523
|
handle, UncompressionDict::GetEmptyDict(),
|
|
514
524
|
/* for_compaction */ false, &block, nullptr /* get_context */,
|
|
515
|
-
&lookup_context, nullptr /* contents */, false
|
|
525
|
+
&lookup_context, nullptr /* contents */, false,
|
|
526
|
+
/* use_block_cache_for_lookup */ true);
|
|
516
527
|
if (!s.ok()) {
|
|
517
528
|
return s;
|
|
518
529
|
}
|
|
@@ -551,4 +562,10 @@ bool PartitionedFilterBlockReader::index_value_is_full() const {
|
|
|
551
562
|
return table()->get_rep()->index_value_is_full;
|
|
552
563
|
}
|
|
553
564
|
|
|
565
|
+
bool PartitionedFilterBlockReader::user_defined_timestamps_persisted() const {
|
|
566
|
+
assert(table());
|
|
567
|
+
assert(table()->get_rep());
|
|
568
|
+
|
|
569
|
+
return table()->get_rep()->user_defined_timestamps_persisted;
|
|
570
|
+
}
|
|
554
571
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -31,7 +31,8 @@ class PartitionedFilterBlockBuilder : public FullFilterBlockBuilder {
|
|
|
31
31
|
FilterBitsBuilder* filter_bits_builder, int index_block_restart_interval,
|
|
32
32
|
const bool use_value_delta_encoding,
|
|
33
33
|
PartitionedIndexBuilder* const p_index_builder,
|
|
34
|
-
const uint32_t partition_size
|
|
34
|
+
const uint32_t partition_size, size_t ts_sz,
|
|
35
|
+
const bool persist_user_defined_timestamps);
|
|
35
36
|
|
|
36
37
|
virtual ~PartitionedFilterBlockBuilder();
|
|
37
38
|
|
|
@@ -172,6 +173,7 @@ class PartitionedFilterBlockReader
|
|
|
172
173
|
const InternalKeyComparator* internal_comparator() const;
|
|
173
174
|
bool index_key_includes_seq() const;
|
|
174
175
|
bool index_value_is_full() const;
|
|
176
|
+
bool user_defined_timestamps_persisted() const;
|
|
175
177
|
|
|
176
178
|
protected:
|
|
177
179
|
// For partition blocks pinned in cache. Can be a subset of blocks
|
|
@@ -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,15 +91,16 @@ 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
|
-
|
|
94
|
+
is_for_compaction, /*no_sequential_checking=*/false, read_options_,
|
|
95
|
+
/*readaheadsize_cb=*/nullptr);
|
|
96
96
|
Status s;
|
|
97
97
|
table_->NewDataBlockIterator<IndexBlockIter>(
|
|
98
98
|
read_options_, partitioned_index_handle, &block_iter_,
|
|
99
99
|
BlockType::kIndex,
|
|
100
100
|
/*get_context=*/nullptr, &lookup_context_,
|
|
101
101
|
block_prefetcher_.prefetch_buffer(),
|
|
102
|
-
/*for_compaction=*/is_for_compaction, /*async_read=*/false, s
|
|
102
|
+
/*for_compaction=*/is_for_compaction, /*async_read=*/false, s,
|
|
103
|
+
/*use_block_cache_for_lookup=*/true);
|
|
103
104
|
block_iter_points_to_real_block_ = true;
|
|
104
105
|
// We could check upper bound here but it is complicated to reason about
|
|
105
106
|
// upper bound in index iterator. On the other than, in large scans, index
|
|
@@ -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,15 @@ 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, /*readaheadsize_cb*/ nullptr,
|
|
174
|
+
/*usage=*/FilePrefetchBufferUsage::kUnknown);
|
|
170
175
|
IOOptions opts;
|
|
171
176
|
{
|
|
172
177
|
Status s = rep->file->PrepareIOOptions(ro, opts);
|
|
173
178
|
if (s.ok()) {
|
|
174
179
|
s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
|
|
175
|
-
static_cast<size_t>(prefetch_len)
|
|
176
|
-
ro.rate_limiter_priority);
|
|
180
|
+
static_cast<size_t>(prefetch_len));
|
|
177
181
|
}
|
|
178
182
|
if (!s.ok()) {
|
|
179
183
|
return s;
|
|
@@ -197,7 +201,7 @@ Status PartitionIndexReader::CacheDependencies(
|
|
|
197
201
|
handle, UncompressionDict::GetEmptyDict(),
|
|
198
202
|
/*for_compaction=*/false, &block.As<Block_kIndex>(),
|
|
199
203
|
/*get_context=*/nullptr, &lookup_context, /*contents=*/nullptr,
|
|
200
|
-
/*async_read=*/false);
|
|
204
|
+
/*async_read=*/false, /*use_block_cache_for_lookup=*/true);
|
|
201
205
|
|
|
202
206
|
if (!s.ok()) {
|
|
203
207
|
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);
|
|
@@ -63,7 +63,7 @@ Status UncompressionDictReader::ReadUncompressionDictionary(
|
|
|
63
63
|
UncompressionDict::GetEmptyDict(), uncompression_dict, get_context,
|
|
64
64
|
lookup_context,
|
|
65
65
|
/* for_compaction */ false, use_cache,
|
|
66
|
-
/* async_read */ false);
|
|
66
|
+
/* async_read */ false, /* use_block_cache_for_lookup */ true);
|
|
67
67
|
|
|
68
68
|
if (!s.ok()) {
|
|
69
69
|
ROCKS_LOG_WARN(
|