@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
|
@@ -182,9 +182,8 @@ class LogTest
|
|
|
182
182
|
|
|
183
183
|
Slice* get_reader_contents() { return &reader_contents_; }
|
|
184
184
|
|
|
185
|
-
void Write(
|
|
186
|
-
|
|
187
|
-
const std::unordered_map<uint32_t, size_t>* cf_to_ts_sz = nullptr) {
|
|
185
|
+
void Write(const std::string& msg,
|
|
186
|
+
const UnorderedMap<uint32_t, size_t>* cf_to_ts_sz = nullptr) {
|
|
188
187
|
if (cf_to_ts_sz != nullptr && !cf_to_ts_sz->empty()) {
|
|
189
188
|
ASSERT_OK(writer_->MaybeAddUserDefinedTimestampSizeRecord(*cf_to_ts_sz));
|
|
190
189
|
}
|
|
@@ -193,10 +192,9 @@ class LogTest
|
|
|
193
192
|
|
|
194
193
|
size_t WrittenBytes() const { return dest_contents().size(); }
|
|
195
194
|
|
|
196
|
-
std::string Read(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
std::unordered_map<uint32_t, size_t>* cf_to_ts_sz = nullptr) {
|
|
195
|
+
std::string Read(const WALRecoveryMode wal_recovery_mode =
|
|
196
|
+
WALRecoveryMode::kTolerateCorruptedTailRecords,
|
|
197
|
+
UnorderedMap<uint32_t, size_t>* cf_to_ts_sz = nullptr) {
|
|
200
198
|
std::string scratch;
|
|
201
199
|
Slice record;
|
|
202
200
|
bool ret = false;
|
|
@@ -270,9 +268,8 @@ class LogTest
|
|
|
270
268
|
}
|
|
271
269
|
|
|
272
270
|
void CheckRecordAndTimestampSize(
|
|
273
|
-
std::string record,
|
|
274
|
-
|
|
275
|
-
std::unordered_map<uint32_t, size_t> recorded_ts_sz;
|
|
271
|
+
std::string record, UnorderedMap<uint32_t, size_t>& expected_ts_sz) {
|
|
272
|
+
UnorderedMap<uint32_t, size_t> recorded_ts_sz;
|
|
276
273
|
ASSERT_EQ(record,
|
|
277
274
|
Read(WALRecoveryMode::
|
|
278
275
|
kTolerateCorruptedTailRecords /* wal_recovery_mode */,
|
|
@@ -297,18 +294,18 @@ TEST_P(LogTest, ReadWrite) {
|
|
|
297
294
|
}
|
|
298
295
|
|
|
299
296
|
TEST_P(LogTest, ReadWriteWithTimestampSize) {
|
|
300
|
-
|
|
297
|
+
UnorderedMap<uint32_t, size_t> ts_sz_one = {
|
|
301
298
|
{1, sizeof(uint64_t)},
|
|
302
299
|
};
|
|
303
300
|
Write("foo", &ts_sz_one);
|
|
304
301
|
Write("bar");
|
|
305
|
-
|
|
302
|
+
UnorderedMap<uint32_t, size_t> ts_sz_two = {{2, sizeof(char)}};
|
|
306
303
|
Write("", &ts_sz_two);
|
|
307
304
|
Write("xxxx");
|
|
308
305
|
|
|
309
306
|
CheckRecordAndTimestampSize("foo", ts_sz_one);
|
|
310
307
|
CheckRecordAndTimestampSize("bar", ts_sz_one);
|
|
311
|
-
|
|
308
|
+
UnorderedMap<uint32_t, size_t> expected_ts_sz_two;
|
|
312
309
|
// User-defined timestamp size records are accumulated and applied to
|
|
313
310
|
// subsequent records.
|
|
314
311
|
expected_ts_sz_two.insert(ts_sz_one.begin(), ts_sz_one.end());
|
|
@@ -320,10 +317,9 @@ TEST_P(LogTest, ReadWriteWithTimestampSize) {
|
|
|
320
317
|
}
|
|
321
318
|
|
|
322
319
|
TEST_P(LogTest, ReadWriteWithTimestampSizeZeroTimestampIgnored) {
|
|
323
|
-
|
|
320
|
+
UnorderedMap<uint32_t, size_t> ts_sz_one = {{1, sizeof(uint64_t)}};
|
|
324
321
|
Write("foo", &ts_sz_one);
|
|
325
|
-
|
|
326
|
-
ts_sz_one.end());
|
|
322
|
+
UnorderedMap<uint32_t, size_t> ts_sz_two(ts_sz_one.begin(), ts_sz_one.end());
|
|
327
323
|
ts_sz_two.insert(std::make_pair(2, 0));
|
|
328
324
|
Write("bar", &ts_sz_two);
|
|
329
325
|
|
|
@@ -749,7 +745,7 @@ TEST_P(LogTest, RecycleWithTimestampSize) {
|
|
|
749
745
|
if (!recyclable_log) {
|
|
750
746
|
return; // test is only valid for recycled logs
|
|
751
747
|
}
|
|
752
|
-
|
|
748
|
+
UnorderedMap<uint32_t, size_t> ts_sz_one = {
|
|
753
749
|
{1, sizeof(uint32_t)},
|
|
754
750
|
};
|
|
755
751
|
Write("foo", &ts_sz_one);
|
|
@@ -765,7 +761,7 @@ TEST_P(LogTest, RecycleWithTimestampSize) {
|
|
|
765
761
|
std::unique_ptr<WritableFileWriter> dest_holder(new WritableFileWriter(
|
|
766
762
|
std::move(sink), "" /* don't care */, FileOptions()));
|
|
767
763
|
Writer recycle_writer(std::move(dest_holder), 123, true);
|
|
768
|
-
|
|
764
|
+
UnorderedMap<uint32_t, size_t> ts_sz_two = {
|
|
769
765
|
{2, sizeof(uint64_t)},
|
|
770
766
|
};
|
|
771
767
|
ASSERT_OK(recycle_writer.MaybeAddUserDefinedTimestampSizeRecord(ts_sz_two));
|
|
@@ -1039,18 +1035,18 @@ TEST_P(CompressionLogTest, ReadWriteWithTimestampSize) {
|
|
|
1039
1035
|
return;
|
|
1040
1036
|
}
|
|
1041
1037
|
ASSERT_OK(SetupTestEnv());
|
|
1042
|
-
|
|
1038
|
+
UnorderedMap<uint32_t, size_t> ts_sz_one = {
|
|
1043
1039
|
{1, sizeof(uint64_t)},
|
|
1044
1040
|
};
|
|
1045
1041
|
Write("foo", &ts_sz_one);
|
|
1046
1042
|
Write("bar");
|
|
1047
|
-
|
|
1043
|
+
UnorderedMap<uint32_t, size_t> ts_sz_two = {{2, sizeof(char)}};
|
|
1048
1044
|
Write("", &ts_sz_two);
|
|
1049
1045
|
Write("xxxx");
|
|
1050
1046
|
|
|
1051
1047
|
CheckRecordAndTimestampSize("foo", ts_sz_one);
|
|
1052
1048
|
CheckRecordAndTimestampSize("bar", ts_sz_one);
|
|
1053
|
-
|
|
1049
|
+
UnorderedMap<uint32_t, size_t> expected_ts_sz_two;
|
|
1054
1050
|
// User-defined timestamp size records are accumulated and applied to
|
|
1055
1051
|
// subsequent records.
|
|
1056
1052
|
expected_ts_sz_two.insert(ts_sz_one.begin(), ts_sz_one.end());
|
|
@@ -197,7 +197,7 @@ IOStatus Writer::AddCompressionTypeRecord() {
|
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
IOStatus Writer::MaybeAddUserDefinedTimestampSizeRecord(
|
|
200
|
-
const
|
|
200
|
+
const UnorderedMap<uint32_t, size_t>& cf_to_ts_sz,
|
|
201
201
|
Env::IOPriority rate_limiter_priority) {
|
|
202
202
|
std::vector<std::pair<uint32_t, size_t>> ts_sz_to_record;
|
|
203
203
|
for (const auto& [cf_id, ts_sz] : cf_to_ts_sz) {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "rocksdb/slice.h"
|
|
21
21
|
#include "rocksdb/status.h"
|
|
22
22
|
#include "util/compression.h"
|
|
23
|
+
#include "util/hash_containers.h"
|
|
23
24
|
|
|
24
25
|
namespace ROCKSDB_NAMESPACE {
|
|
25
26
|
|
|
@@ -95,7 +96,7 @@ class Writer {
|
|
|
95
96
|
// kRecyclableUserDefinedTimestampSizeType for these column families.
|
|
96
97
|
// This timestamp size record applies to all subsequent records.
|
|
97
98
|
IOStatus MaybeAddUserDefinedTimestampSizeRecord(
|
|
98
|
-
const
|
|
99
|
+
const UnorderedMap<uint32_t, size_t>& cf_to_ts_sz,
|
|
99
100
|
Env::IOPriority rate_limiter_priority = Env::IO_TOTAL);
|
|
100
101
|
|
|
101
102
|
WritableFileWriter* file() { return dest_.get(); }
|
|
@@ -137,7 +138,7 @@ class Writer {
|
|
|
137
138
|
// The recorded user-defined timestamp size that have been written so far.
|
|
138
139
|
// Since the user-defined timestamp size cannot be changed while the DB is
|
|
139
140
|
// running, existing entry in this map cannot be updated.
|
|
140
|
-
|
|
141
|
+
UnorderedMap<uint32_t, size_t> recorded_cf_to_ts_sz_;
|
|
141
142
|
};
|
|
142
143
|
|
|
143
144
|
} // namespace log
|
|
@@ -124,6 +124,7 @@ TEST_F(ManualCompactionTest, CompactTouchesAllKeys) {
|
|
|
124
124
|
ASSERT_EQ("key3", itr->key().ToString());
|
|
125
125
|
itr->Next();
|
|
126
126
|
ASSERT_TRUE(!itr->Valid());
|
|
127
|
+
ASSERT_OK(itr->status());
|
|
127
128
|
delete itr;
|
|
128
129
|
|
|
129
130
|
delete options.compaction_filter;
|
|
@@ -179,6 +180,7 @@ TEST_F(ManualCompactionTest, Test) {
|
|
|
179
180
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
180
181
|
num_keys++;
|
|
181
182
|
}
|
|
183
|
+
ASSERT_OK(iter->status());
|
|
182
184
|
delete iter;
|
|
183
185
|
ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys";
|
|
184
186
|
|
|
@@ -190,6 +192,7 @@ TEST_F(ManualCompactionTest, Test) {
|
|
|
190
192
|
TEST_F(ManualCompactionTest, SkipLevel) {
|
|
191
193
|
DB* db;
|
|
192
194
|
Options options;
|
|
195
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
193
196
|
options.num_levels = 3;
|
|
194
197
|
// Initially, flushed L0 files won't exceed 100.
|
|
195
198
|
options.level0_file_num_compaction_trigger = 100;
|
|
@@ -286,9 +289,9 @@ TEST_F(ManualCompactionTest, SkipLevel) {
|
|
|
286
289
|
filter->Reset();
|
|
287
290
|
ASSERT_OK(db->CompactRange(CompactRangeOptions(), &start, nullptr));
|
|
288
291
|
ASSERT_EQ(4, filter->NumKeys());
|
|
289
|
-
// 1 is first compacted to L1 and then
|
|
290
|
-
//
|
|
291
|
-
ASSERT_EQ(
|
|
292
|
+
// 1 is first compacted from L0 to L1, and then L1 intra level compaction
|
|
293
|
+
// compacts [2, 4, 8] only.
|
|
294
|
+
ASSERT_EQ(0, filter->KeyLevel("1"));
|
|
292
295
|
ASSERT_EQ(1, filter->KeyLevel("2"));
|
|
293
296
|
ASSERT_EQ(1, filter->KeyLevel("4"));
|
|
294
297
|
ASSERT_EQ(1, filter->KeyLevel("8"));
|
|
@@ -95,6 +95,7 @@ MemTable::MemTable(const InternalKeyComparator& cmp,
|
|
|
95
95
|
data_size_(0),
|
|
96
96
|
num_entries_(0),
|
|
97
97
|
num_deletes_(0),
|
|
98
|
+
num_range_deletes_(0),
|
|
98
99
|
write_buffer_size_(mutable_cf_options.write_buffer_size),
|
|
99
100
|
flush_in_progress_(false),
|
|
100
101
|
flush_completed_(false),
|
|
@@ -114,7 +115,9 @@ MemTable::MemTable(const InternalKeyComparator& cmp,
|
|
|
114
115
|
ioptions.memtable_insert_with_hint_prefix_extractor.get()),
|
|
115
116
|
oldest_key_time_(std::numeric_limits<uint64_t>::max()),
|
|
116
117
|
atomic_flush_seqno_(kMaxSequenceNumber),
|
|
117
|
-
approximate_memory_usage_(0)
|
|
118
|
+
approximate_memory_usage_(0),
|
|
119
|
+
memtable_max_range_deletions_(
|
|
120
|
+
mutable_cf_options.memtable_max_range_deletions) {
|
|
118
121
|
UpdateFlushState();
|
|
119
122
|
// something went wrong if we need to flush before inserting anything
|
|
120
123
|
assert(!ShouldScheduleFlush());
|
|
@@ -143,6 +146,10 @@ MemTable::MemTable(const InternalKeyComparator& cmp,
|
|
|
143
146
|
new_cache.get()),
|
|
144
147
|
std::memory_order_relaxed);
|
|
145
148
|
}
|
|
149
|
+
const Comparator* ucmp = cmp.user_comparator();
|
|
150
|
+
assert(ucmp);
|
|
151
|
+
ts_sz_ = ucmp->timestamp_size();
|
|
152
|
+
persist_user_defined_timestamps_ = ioptions.persist_user_defined_timestamps;
|
|
146
153
|
}
|
|
147
154
|
|
|
148
155
|
MemTable::~MemTable() {
|
|
@@ -170,6 +177,14 @@ size_t MemTable::ApproximateMemoryUsage() {
|
|
|
170
177
|
}
|
|
171
178
|
|
|
172
179
|
bool MemTable::ShouldFlushNow() {
|
|
180
|
+
// This is set if memtable_max_range_deletions is > 0,
|
|
181
|
+
// and that many range deletions are done
|
|
182
|
+
if (memtable_max_range_deletions_ > 0 &&
|
|
183
|
+
num_range_deletes_.load(std::memory_order_relaxed) >=
|
|
184
|
+
static_cast<uint64_t>(memtable_max_range_deletions_)) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
|
|
173
188
|
size_t write_buffer_size = write_buffer_size_.load(std::memory_order_relaxed);
|
|
174
189
|
// In a lot of times, we cannot allocate arena blocks that exactly matches the
|
|
175
190
|
// buffer size. Thus we have to decide if we should over-allocate or
|
|
@@ -357,7 +372,8 @@ class MemTableIterator : public InternalIterator {
|
|
|
357
372
|
!mem.GetImmutableMemTableOptions()->inplace_update_support),
|
|
358
373
|
protection_bytes_per_key_(mem.moptions_.protection_bytes_per_key),
|
|
359
374
|
status_(Status::OK()),
|
|
360
|
-
logger_(mem.moptions_.info_log)
|
|
375
|
+
logger_(mem.moptions_.info_log),
|
|
376
|
+
ts_sz_(mem.ts_sz_) {
|
|
361
377
|
if (use_range_del_table) {
|
|
362
378
|
iter_ = mem.range_del_table_->GetIterator(arena);
|
|
363
379
|
} else if (prefix_extractor_ != nullptr && !read_options.total_order_seek &&
|
|
@@ -400,8 +416,7 @@ class MemTableIterator : public InternalIterator {
|
|
|
400
416
|
PERF_COUNTER_ADD(seek_on_memtable_count, 1);
|
|
401
417
|
if (bloom_) {
|
|
402
418
|
// iterator should only use prefix bloom filter
|
|
403
|
-
|
|
404
|
-
Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz));
|
|
419
|
+
Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_));
|
|
405
420
|
if (prefix_extractor_->InDomain(user_k_without_ts)) {
|
|
406
421
|
if (!bloom_->MayContain(
|
|
407
422
|
prefix_extractor_->Transform(user_k_without_ts))) {
|
|
@@ -421,8 +436,7 @@ class MemTableIterator : public InternalIterator {
|
|
|
421
436
|
PERF_TIMER_GUARD(seek_on_memtable_time);
|
|
422
437
|
PERF_COUNTER_ADD(seek_on_memtable_count, 1);
|
|
423
438
|
if (bloom_) {
|
|
424
|
-
|
|
425
|
-
Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz));
|
|
439
|
+
Slice user_k_without_ts(ExtractUserKeyAndStripTimestamp(k, ts_sz_));
|
|
426
440
|
if (prefix_extractor_->InDomain(user_k_without_ts)) {
|
|
427
441
|
if (!bloom_->MayContain(
|
|
428
442
|
prefix_extractor_->Transform(user_k_without_ts))) {
|
|
@@ -512,6 +526,7 @@ class MemTableIterator : public InternalIterator {
|
|
|
512
526
|
uint32_t protection_bytes_per_key_;
|
|
513
527
|
Status status_;
|
|
514
528
|
Logger* logger_;
|
|
529
|
+
size_t ts_sz_;
|
|
515
530
|
|
|
516
531
|
void VerifyEntryChecksum() {
|
|
517
532
|
if (protection_bytes_per_key_ > 0 && Valid()) {
|
|
@@ -625,8 +640,7 @@ Status MemTable::VerifyEncodedEntry(Slice encoded,
|
|
|
625
640
|
if (!GetVarint32(&encoded, &ikey_len)) {
|
|
626
641
|
return Status::Corruption("Unable to parse internal key length");
|
|
627
642
|
}
|
|
628
|
-
|
|
629
|
-
if (ikey_len < 8 + ts_sz) {
|
|
643
|
+
if (ikey_len < 8 + ts_sz_) {
|
|
630
644
|
return Status::Corruption("Internal key length too short");
|
|
631
645
|
}
|
|
632
646
|
if (ikey_len > encoded.size()) {
|
|
@@ -725,8 +739,7 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
725
739
|
}
|
|
726
740
|
}
|
|
727
741
|
|
|
728
|
-
|
|
729
|
-
Slice key_without_ts = StripTimestampFromUserKey(key, ts_sz);
|
|
742
|
+
Slice key_without_ts = StripTimestampFromUserKey(key, ts_sz_);
|
|
730
743
|
|
|
731
744
|
if (!allow_concurrent) {
|
|
732
745
|
// Extract prefix for insert with hint.
|
|
@@ -754,6 +767,9 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
754
767
|
type == kTypeDeletionWithTimestamp) {
|
|
755
768
|
num_deletes_.store(num_deletes_.load(std::memory_order_relaxed) + 1,
|
|
756
769
|
std::memory_order_relaxed);
|
|
770
|
+
} else if (type == kTypeRangeDeletion) {
|
|
771
|
+
uint64_t val = num_range_deletes_.load(std::memory_order_relaxed) + 1;
|
|
772
|
+
num_range_deletes_.store(val, std::memory_order_relaxed);
|
|
757
773
|
}
|
|
758
774
|
|
|
759
775
|
if (bloom_filter_ && prefix_extractor_ &&
|
|
@@ -776,6 +792,9 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
776
792
|
assert(first_seqno_.load() >= earliest_seqno_.load());
|
|
777
793
|
}
|
|
778
794
|
assert(post_process_info == nullptr);
|
|
795
|
+
// TODO(yuzhangyu): support updating newest UDT for when `allow_concurrent`
|
|
796
|
+
// is true.
|
|
797
|
+
MaybeUpdateNewestUDT(key_slice);
|
|
779
798
|
UpdateFlushState();
|
|
780
799
|
} else {
|
|
781
800
|
bool res = (hint == nullptr)
|
|
@@ -810,13 +829,14 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
810
829
|
earliest_seqno_.load(std::memory_order_relaxed);
|
|
811
830
|
while (
|
|
812
831
|
(cur_earliest_seqno == kMaxSequenceNumber || s < cur_earliest_seqno) &&
|
|
813
|
-
!
|
|
832
|
+
!earliest_seqno_.compare_exchange_weak(cur_earliest_seqno, s)) {
|
|
814
833
|
}
|
|
815
834
|
}
|
|
816
835
|
if (type == kTypeRangeDeletion) {
|
|
817
836
|
auto new_cache = std::make_shared<FragmentedRangeTombstoneListCache>();
|
|
818
837
|
size_t size = cached_range_tombstone_.Size();
|
|
819
838
|
if (allow_concurrent) {
|
|
839
|
+
post_process_info->num_range_deletes++;
|
|
820
840
|
range_del_mutex_.lock();
|
|
821
841
|
}
|
|
822
842
|
for (size_t i = 0; i < size; ++i) {
|
|
@@ -835,6 +855,7 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
835
855
|
new_local_cache_ref, new_cache.get()),
|
|
836
856
|
std::memory_order_relaxed);
|
|
837
857
|
}
|
|
858
|
+
|
|
838
859
|
if (allow_concurrent) {
|
|
839
860
|
range_del_mutex_.unlock();
|
|
840
861
|
}
|
|
@@ -1033,25 +1054,15 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1033
1054
|
assert(s->do_merge);
|
|
1034
1055
|
|
|
1035
1056
|
if (s->value || s->columns) {
|
|
1036
|
-
std::string result;
|
|
1037
1057
|
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
1038
1058
|
// nullptr) since a failure must be propagated regardless of its
|
|
1039
1059
|
// value.
|
|
1040
1060
|
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1041
|
-
merge_operator, s->key->user_key(),
|
|
1042
|
-
merge_context->GetOperands(),
|
|
1043
|
-
s->
|
|
1044
|
-
/* update_num_ops_stats */ true,
|
|
1061
|
+
merge_operator, s->key->user_key(),
|
|
1062
|
+
MergeHelper::kPlainBaseValue, v, merge_context->GetOperands(),
|
|
1063
|
+
s->logger, s->statistics, s->clock,
|
|
1064
|
+
/* update_num_ops_stats */ true, s->value, s->columns,
|
|
1045
1065
|
/* op_failure_scope */ nullptr);
|
|
1046
|
-
|
|
1047
|
-
if (s->status->ok()) {
|
|
1048
|
-
if (s->value) {
|
|
1049
|
-
*(s->value) = std::move(result);
|
|
1050
|
-
} else {
|
|
1051
|
-
assert(s->columns);
|
|
1052
|
-
s->columns->SetPlainValue(std::move(result));
|
|
1053
|
-
}
|
|
1054
|
-
}
|
|
1055
1066
|
}
|
|
1056
1067
|
} else if (s->value) {
|
|
1057
1068
|
s->value->assign(v.data(), v.size());
|
|
@@ -1096,35 +1107,15 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1096
1107
|
} else if (*(s->merge_in_progress)) {
|
|
1097
1108
|
assert(s->do_merge);
|
|
1098
1109
|
|
|
1099
|
-
if (s->value) {
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1108
|
-
merge_operator, s->key->user_key(), &value_of_default,
|
|
1109
|
-
merge_context->GetOperands(), s->value, s->logger,
|
|
1110
|
-
s->statistics, s->clock, /* result_operand */ nullptr,
|
|
1111
|
-
/* update_num_ops_stats */ true,
|
|
1112
|
-
/* op_failure_scope */ nullptr);
|
|
1113
|
-
}
|
|
1114
|
-
} else if (s->columns) {
|
|
1115
|
-
std::string result;
|
|
1116
|
-
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
1117
|
-
// nullptr) since a failure must be propagated regardless of its
|
|
1118
|
-
// value.
|
|
1119
|
-
*(s->status) = MergeHelper::TimedFullMergeWithEntity(
|
|
1120
|
-
merge_operator, s->key->user_key(), v,
|
|
1121
|
-
merge_context->GetOperands(), &result, s->logger, s->statistics,
|
|
1122
|
-
s->clock, /* update_num_ops_stats */ true,
|
|
1110
|
+
if (s->value || s->columns) {
|
|
1111
|
+
// `op_failure_scope` (an output parameter) is not provided (set
|
|
1112
|
+
// to nullptr) since a failure must be propagated regardless of
|
|
1113
|
+
// its value.
|
|
1114
|
+
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1115
|
+
merge_operator, s->key->user_key(), MergeHelper::kWideBaseValue,
|
|
1116
|
+
v, merge_context->GetOperands(), s->logger, s->statistics,
|
|
1117
|
+
s->clock, /* update_num_ops_stats */ true, s->value, s->columns,
|
|
1123
1118
|
/* op_failure_scope */ nullptr);
|
|
1124
|
-
|
|
1125
|
-
if (s->status->ok()) {
|
|
1126
|
-
*(s->status) = s->columns->SetWideColumnValue(std::move(result));
|
|
1127
|
-
}
|
|
1128
1119
|
}
|
|
1129
1120
|
} else if (s->value) {
|
|
1130
1121
|
Slice value_of_default;
|
|
@@ -1155,25 +1146,14 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1155
1146
|
case kTypeRangeDeletion: {
|
|
1156
1147
|
if (*(s->merge_in_progress)) {
|
|
1157
1148
|
if (s->value || s->columns) {
|
|
1158
|
-
std::string result;
|
|
1159
1149
|
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
1160
1150
|
// nullptr) since a failure must be propagated regardless of its
|
|
1161
1151
|
// value.
|
|
1162
1152
|
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1163
|
-
merge_operator, s->key->user_key(),
|
|
1164
|
-
merge_context->GetOperands(),
|
|
1165
|
-
s->clock, /*
|
|
1166
|
-
/* update_num_ops_stats */ true,
|
|
1153
|
+
merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue,
|
|
1154
|
+
merge_context->GetOperands(), s->logger, s->statistics,
|
|
1155
|
+
s->clock, /* update_num_ops_stats */ true, s->value, s->columns,
|
|
1167
1156
|
/* op_failure_scope */ nullptr);
|
|
1168
|
-
|
|
1169
|
-
if (s->status->ok()) {
|
|
1170
|
-
if (s->value) {
|
|
1171
|
-
*(s->value) = std::move(result);
|
|
1172
|
-
} else {
|
|
1173
|
-
assert(s->columns);
|
|
1174
|
-
s->columns->SetPlainValue(std::move(result));
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
1157
|
} else {
|
|
1178
1158
|
// We have found a final value (a base deletion) and have newer
|
|
1179
1159
|
// merge operands that we do not intend to merge. Nothing remains
|
|
@@ -1206,25 +1186,14 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1206
1186
|
if (s->do_merge && merge_operator->ShouldMerge(
|
|
1207
1187
|
merge_context->GetOperandsDirectionBackward())) {
|
|
1208
1188
|
if (s->value || s->columns) {
|
|
1209
|
-
std::string result;
|
|
1210
1189
|
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
1211
1190
|
// nullptr) since a failure must be propagated regardless of its
|
|
1212
1191
|
// value.
|
|
1213
1192
|
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1214
|
-
merge_operator, s->key->user_key(),
|
|
1215
|
-
merge_context->GetOperands(),
|
|
1216
|
-
s->clock, /*
|
|
1217
|
-
/* update_num_ops_stats */ true,
|
|
1193
|
+
merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue,
|
|
1194
|
+
merge_context->GetOperands(), s->logger, s->statistics,
|
|
1195
|
+
s->clock, /* update_num_ops_stats */ true, s->value, s->columns,
|
|
1218
1196
|
/* op_failure_scope */ nullptr);
|
|
1219
|
-
|
|
1220
|
-
if (s->status->ok()) {
|
|
1221
|
-
if (s->value) {
|
|
1222
|
-
*(s->value) = std::move(result);
|
|
1223
|
-
} else {
|
|
1224
|
-
assert(s->columns);
|
|
1225
|
-
s->columns->SetPlainValue(std::move(result));
|
|
1226
|
-
}
|
|
1227
|
-
}
|
|
1228
1197
|
}
|
|
1229
1198
|
|
|
1230
1199
|
*(s->found_final_value) = true;
|
|
@@ -1263,6 +1232,7 @@ bool MemTable::Get(const LookupKey& key, std::string* value,
|
|
|
1263
1232
|
// Avoiding recording stats for speed.
|
|
1264
1233
|
return false;
|
|
1265
1234
|
}
|
|
1235
|
+
|
|
1266
1236
|
PERF_TIMER_GUARD(get_from_memtable_time);
|
|
1267
1237
|
|
|
1268
1238
|
std::unique_ptr<FragmentedRangeTombstoneIterator> range_del_iter(
|
|
@@ -1286,8 +1256,7 @@ bool MemTable::Get(const LookupKey& key, std::string* value,
|
|
|
1286
1256
|
bool found_final_value = false;
|
|
1287
1257
|
bool merge_in_progress = s->IsMergeInProgress();
|
|
1288
1258
|
bool may_contain = true;
|
|
1289
|
-
|
|
1290
|
-
Slice user_key_without_ts = StripTimestampFromUserKey(key.user_key(), ts_sz);
|
|
1259
|
+
Slice user_key_without_ts = StripTimestampFromUserKey(key.user_key(), ts_sz_);
|
|
1291
1260
|
bool bloom_checked = false;
|
|
1292
1261
|
if (bloom_filter_) {
|
|
1293
1262
|
// when both memtable_whole_key_filtering and prefix_extractor_ are set,
|
|
@@ -1672,4 +1641,22 @@ uint64_t MemTable::GetMinLogContainingPrepSection() {
|
|
|
1672
1641
|
return min_prep_log_referenced_.load();
|
|
1673
1642
|
}
|
|
1674
1643
|
|
|
1644
|
+
void MemTable::MaybeUpdateNewestUDT(const Slice& user_key) {
|
|
1645
|
+
if (ts_sz_ == 0 || persist_user_defined_timestamps_) {
|
|
1646
|
+
return;
|
|
1647
|
+
}
|
|
1648
|
+
const Comparator* ucmp = GetInternalKeyComparator().user_comparator();
|
|
1649
|
+
Slice udt = ExtractTimestampFromUserKey(user_key, ts_sz_);
|
|
1650
|
+
if (newest_udt_.empty() || ucmp->CompareTimestamp(udt, newest_udt_) > 0) {
|
|
1651
|
+
newest_udt_ = udt;
|
|
1652
|
+
}
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
const Slice& MemTable::GetNewestUDT() const {
|
|
1656
|
+
// This path should not be invoked for MemTables that does not enable the UDT
|
|
1657
|
+
// in Memtable only feature.
|
|
1658
|
+
assert(ts_sz_ > 0 && !persist_user_defined_timestamps_);
|
|
1659
|
+
return newest_udt_;
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1675
1662
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -68,6 +68,7 @@ struct MemTablePostProcessInfo {
|
|
|
68
68
|
uint64_t data_size = 0;
|
|
69
69
|
uint64_t num_entries = 0;
|
|
70
70
|
uint64_t num_deletes = 0;
|
|
71
|
+
uint64_t num_range_deletes = 0;
|
|
71
72
|
};
|
|
72
73
|
|
|
73
74
|
using MultiGetRange = MultiGetContext::Range;
|
|
@@ -332,6 +333,10 @@ class MemTable {
|
|
|
332
333
|
num_deletes_.fetch_add(update_counters.num_deletes,
|
|
333
334
|
std::memory_order_relaxed);
|
|
334
335
|
}
|
|
336
|
+
if (update_counters.num_range_deletes > 0) {
|
|
337
|
+
num_range_deletes_.fetch_add(update_counters.num_range_deletes,
|
|
338
|
+
std::memory_order_relaxed);
|
|
339
|
+
}
|
|
335
340
|
UpdateFlushState();
|
|
336
341
|
}
|
|
337
342
|
|
|
@@ -349,10 +354,21 @@ class MemTable {
|
|
|
349
354
|
return num_deletes_.load(std::memory_order_relaxed);
|
|
350
355
|
}
|
|
351
356
|
|
|
357
|
+
// Get total number of range deletions in the mem table.
|
|
358
|
+
// REQUIRES: external synchronization to prevent simultaneous
|
|
359
|
+
// operations on the same MemTable (unless this Memtable is immutable).
|
|
360
|
+
uint64_t num_range_deletes() const {
|
|
361
|
+
return num_range_deletes_.load(std::memory_order_relaxed);
|
|
362
|
+
}
|
|
363
|
+
|
|
352
364
|
uint64_t get_data_size() const {
|
|
353
365
|
return data_size_.load(std::memory_order_relaxed);
|
|
354
366
|
}
|
|
355
367
|
|
|
368
|
+
size_t write_buffer_size() const {
|
|
369
|
+
return write_buffer_size_.load(std::memory_order_relaxed);
|
|
370
|
+
}
|
|
371
|
+
|
|
356
372
|
// Dynamically change the memtable's capacity. If set below the current usage,
|
|
357
373
|
// the next key added will trigger a flush. Can only increase size when
|
|
358
374
|
// memtable prefix bloom is disabled, since we can't easily allocate more
|
|
@@ -527,6 +543,14 @@ class MemTable {
|
|
|
527
543
|
}
|
|
528
544
|
}
|
|
529
545
|
|
|
546
|
+
// Get the newest user-defined timestamp contained in this MemTable. Check
|
|
547
|
+
// `newest_udt_` for what newer means. This method should only be invoked for
|
|
548
|
+
// an MemTable that has enabled user-defined timestamp feature and set
|
|
549
|
+
// `persist_user_defined_timestamps` to false. The tracked newest UDT will be
|
|
550
|
+
// used by flush job in the background to help check the MemTable's
|
|
551
|
+
// eligibility for Flush.
|
|
552
|
+
const Slice& GetNewestUDT() const;
|
|
553
|
+
|
|
530
554
|
// Returns Corruption status if verification fails.
|
|
531
555
|
static Status VerifyEntryChecksum(const char* entry,
|
|
532
556
|
uint32_t protection_bytes_per_key,
|
|
@@ -553,6 +577,7 @@ class MemTable {
|
|
|
553
577
|
std::atomic<uint64_t> data_size_;
|
|
554
578
|
std::atomic<uint64_t> num_entries_;
|
|
555
579
|
std::atomic<uint64_t> num_deletes_;
|
|
580
|
+
std::atomic<uint64_t> num_range_deletes_;
|
|
556
581
|
|
|
557
582
|
// Dynamically changeable memtable option
|
|
558
583
|
std::atomic<size_t> write_buffer_size_;
|
|
@@ -596,7 +621,7 @@ class MemTable {
|
|
|
596
621
|
const SliceTransform* insert_with_hint_prefix_extractor_;
|
|
597
622
|
|
|
598
623
|
// Insert hints for each prefix.
|
|
599
|
-
UnorderedMapH<Slice, void*,
|
|
624
|
+
UnorderedMapH<Slice, void*, SliceHasher32> insert_hints_;
|
|
600
625
|
|
|
601
626
|
// Timestamp of oldest key
|
|
602
627
|
std::atomic<uint64_t> oldest_key_time_;
|
|
@@ -614,9 +639,26 @@ class MemTable {
|
|
|
614
639
|
// Gets refreshed inside `ApproximateMemoryUsage()` or `ShouldFlushNow`
|
|
615
640
|
std::atomic<uint64_t> approximate_memory_usage_;
|
|
616
641
|
|
|
642
|
+
// max range deletions in a memtable, before automatic flushing, 0 for
|
|
643
|
+
// unlimited.
|
|
644
|
+
uint32_t memtable_max_range_deletions_ = 0;
|
|
645
|
+
|
|
617
646
|
// Flush job info of the current memtable.
|
|
618
647
|
std::unique_ptr<FlushJobInfo> flush_job_info_;
|
|
619
648
|
|
|
649
|
+
// Size in bytes for the user-defined timestamps.
|
|
650
|
+
size_t ts_sz_;
|
|
651
|
+
|
|
652
|
+
// Whether to persist user-defined timestamps
|
|
653
|
+
bool persist_user_defined_timestamps_;
|
|
654
|
+
|
|
655
|
+
// Newest user-defined timestamp contained in this MemTable. For ts1, and ts2
|
|
656
|
+
// if Comparator::CompareTimestamp(ts1, ts2) > 0, ts1 is considered newer than
|
|
657
|
+
// ts2. We track this field for a MemTable if its column family has UDT
|
|
658
|
+
// feature enabled and the `persist_user_defined_timestamp` flag is false.
|
|
659
|
+
// Otherwise, this field just contains an empty Slice.
|
|
660
|
+
Slice newest_udt_;
|
|
661
|
+
|
|
620
662
|
// Updates flush_state_ using ShouldFlushNow()
|
|
621
663
|
void UpdateFlushState();
|
|
622
664
|
|
|
@@ -653,6 +695,8 @@ class MemTable {
|
|
|
653
695
|
void UpdateEntryChecksum(const ProtectionInfoKVOS64* kv_prot_info,
|
|
654
696
|
const Slice& key, const Slice& value, ValueType type,
|
|
655
697
|
SequenceNumber s, char* checksum_ptr);
|
|
698
|
+
|
|
699
|
+
void MaybeUpdateNewestUDT(const Slice& user_key);
|
|
656
700
|
};
|
|
657
701
|
|
|
658
702
|
extern const char* EncodeKey(std::string* scratch, const Slice& target);
|