@nxtedition/rocksdb 8.2.0 → 8.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +3 -3
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +8 -345
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
- package/deps/rocksdb/rocksdb/db/builder.h +2 -2
- package/deps/rocksdb/rocksdb/db/c.cc +76 -5
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
- package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
- package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
- package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
- package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
- package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
- package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
- package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
- package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
- package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
- package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
- package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
- package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options.cc +12 -53
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
- package/deps/rocksdb/rocksdb/port/lang.h +27 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
- package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/format.cc +4 -4
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
- package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
- package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
- package/deps/rocksdb/rocksdb/util/math.h +12 -7
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
- package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
|
@@ -4064,6 +4064,8 @@ uint64_t rocksdb_perfcontext_metric(rocksdb_perfcontext_t* context,
|
|
|
4064
4064
|
return rep->blob_decompress_time;
|
|
4065
4065
|
case rocksdb_internal_range_del_reseek_count:
|
|
4066
4066
|
return rep->internal_range_del_reseek_count;
|
|
4067
|
+
case rocksdb_block_read_cpu_time:
|
|
4068
|
+
return rep->block_read_cpu_time;
|
|
4067
4069
|
default:
|
|
4068
4070
|
break;
|
|
4069
4071
|
}
|
|
@@ -4679,7 +4681,7 @@ rocksdb_cache_t* rocksdb_cache_create_lru_with_strict_capacity_limit(
|
|
|
4679
4681
|
}
|
|
4680
4682
|
|
|
4681
4683
|
rocksdb_cache_t* rocksdb_cache_create_lru_opts(
|
|
4682
|
-
rocksdb_lru_cache_options_t* opt) {
|
|
4684
|
+
const rocksdb_lru_cache_options_t* opt) {
|
|
4683
4685
|
rocksdb_cache_t* c = new rocksdb_cache_t;
|
|
4684
4686
|
c->rep = NewLRUCache(opt->rep);
|
|
4685
4687
|
return c;
|
|
@@ -4726,7 +4728,7 @@ rocksdb_cache_t* rocksdb_cache_create_hyper_clock(
|
|
|
4726
4728
|
}
|
|
4727
4729
|
|
|
4728
4730
|
rocksdb_cache_t* rocksdb_cache_create_hyper_clock_opts(
|
|
4729
|
-
rocksdb_hyper_clock_cache_options_t* opts) {
|
|
4731
|
+
const rocksdb_hyper_clock_cache_options_t* opts) {
|
|
4730
4732
|
rocksdb_cache_t* c = new rocksdb_cache_t;
|
|
4731
4733
|
c->rep = opts->rep.MakeSharedCache();
|
|
4732
4734
|
return c;
|
|
@@ -4742,18 +4744,26 @@ void rocksdb_cache_set_capacity(rocksdb_cache_t* cache, size_t capacity) {
|
|
|
4742
4744
|
cache->rep->SetCapacity(capacity);
|
|
4743
4745
|
}
|
|
4744
4746
|
|
|
4745
|
-
size_t rocksdb_cache_get_capacity(rocksdb_cache_t* cache) {
|
|
4747
|
+
size_t rocksdb_cache_get_capacity(const rocksdb_cache_t* cache) {
|
|
4746
4748
|
return cache->rep->GetCapacity();
|
|
4747
4749
|
}
|
|
4748
4750
|
|
|
4749
|
-
size_t rocksdb_cache_get_usage(rocksdb_cache_t* cache) {
|
|
4751
|
+
size_t rocksdb_cache_get_usage(const rocksdb_cache_t* cache) {
|
|
4750
4752
|
return cache->rep->GetUsage();
|
|
4751
4753
|
}
|
|
4752
4754
|
|
|
4753
|
-
size_t rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache) {
|
|
4755
|
+
size_t rocksdb_cache_get_pinned_usage(const rocksdb_cache_t* cache) {
|
|
4754
4756
|
return cache->rep->GetPinnedUsage();
|
|
4755
4757
|
}
|
|
4756
4758
|
|
|
4759
|
+
size_t rocksdb_cache_get_table_address_count(const rocksdb_cache_t* cache) {
|
|
4760
|
+
return cache->rep->GetTableAddressCount();
|
|
4761
|
+
}
|
|
4762
|
+
|
|
4763
|
+
size_t rocksdb_cache_get_occupancy_count(const rocksdb_cache_t* cache) {
|
|
4764
|
+
return cache->rep->GetOccupancyCount();
|
|
4765
|
+
}
|
|
4766
|
+
|
|
4757
4767
|
rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path,
|
|
4758
4768
|
uint64_t target_size) {
|
|
4759
4769
|
rocksdb_dbpath_t* result = new rocksdb_dbpath_t;
|
|
@@ -5853,6 +5863,35 @@ void rocksdb_transaction_multi_get(rocksdb_transaction_t* txn,
|
|
|
5853
5863
|
}
|
|
5854
5864
|
}
|
|
5855
5865
|
|
|
5866
|
+
void rocksdb_transaction_multi_get_for_update(
|
|
5867
|
+
rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
|
|
5868
|
+
size_t num_keys, const char* const* keys_list,
|
|
5869
|
+
const size_t* keys_list_sizes, char** values_list,
|
|
5870
|
+
size_t* values_list_sizes, char** errs) {
|
|
5871
|
+
std::vector<Slice> keys(num_keys);
|
|
5872
|
+
for (size_t i = 0; i < num_keys; i++) {
|
|
5873
|
+
keys[i] = Slice(keys_list[i], keys_list_sizes[i]);
|
|
5874
|
+
}
|
|
5875
|
+
std::vector<std::string> values(num_keys);
|
|
5876
|
+
std::vector<Status> statuses =
|
|
5877
|
+
txn->rep->MultiGetForUpdate(options->rep, keys, &values);
|
|
5878
|
+
for (size_t i = 0; i < num_keys; i++) {
|
|
5879
|
+
if (statuses[i].ok()) {
|
|
5880
|
+
values_list[i] = CopyString(values[i]);
|
|
5881
|
+
values_list_sizes[i] = values[i].size();
|
|
5882
|
+
errs[i] = nullptr;
|
|
5883
|
+
} else {
|
|
5884
|
+
values_list[i] = nullptr;
|
|
5885
|
+
values_list_sizes[i] = 0;
|
|
5886
|
+
if (!statuses[i].IsNotFound()) {
|
|
5887
|
+
errs[i] = strdup(statuses[i].ToString().c_str());
|
|
5888
|
+
} else {
|
|
5889
|
+
errs[i] = nullptr;
|
|
5890
|
+
}
|
|
5891
|
+
}
|
|
5892
|
+
}
|
|
5893
|
+
}
|
|
5894
|
+
|
|
5856
5895
|
void rocksdb_transaction_multi_get_cf(
|
|
5857
5896
|
rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
|
|
5858
5897
|
const rocksdb_column_family_handle_t* const* column_families,
|
|
@@ -5885,6 +5924,38 @@ void rocksdb_transaction_multi_get_cf(
|
|
|
5885
5924
|
}
|
|
5886
5925
|
}
|
|
5887
5926
|
|
|
5927
|
+
void rocksdb_transaction_multi_get_for_update_cf(
|
|
5928
|
+
rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
|
|
5929
|
+
const rocksdb_column_family_handle_t* const* column_families,
|
|
5930
|
+
size_t num_keys, const char* const* keys_list,
|
|
5931
|
+
const size_t* keys_list_sizes, char** values_list,
|
|
5932
|
+
size_t* values_list_sizes, char** errs) {
|
|
5933
|
+
std::vector<Slice> keys(num_keys);
|
|
5934
|
+
std::vector<ColumnFamilyHandle*> cfs(num_keys);
|
|
5935
|
+
for (size_t i = 0; i < num_keys; i++) {
|
|
5936
|
+
keys[i] = Slice(keys_list[i], keys_list_sizes[i]);
|
|
5937
|
+
cfs[i] = column_families[i]->rep;
|
|
5938
|
+
}
|
|
5939
|
+
std::vector<std::string> values(num_keys);
|
|
5940
|
+
std::vector<Status> statuses =
|
|
5941
|
+
txn->rep->MultiGetForUpdate(options->rep, cfs, keys, &values);
|
|
5942
|
+
for (size_t i = 0; i < num_keys; i++) {
|
|
5943
|
+
if (statuses[i].ok()) {
|
|
5944
|
+
values_list[i] = CopyString(values[i]);
|
|
5945
|
+
values_list_sizes[i] = values[i].size();
|
|
5946
|
+
errs[i] = nullptr;
|
|
5947
|
+
} else {
|
|
5948
|
+
values_list[i] = nullptr;
|
|
5949
|
+
values_list_sizes[i] = 0;
|
|
5950
|
+
if (!statuses[i].IsNotFound()) {
|
|
5951
|
+
errs[i] = strdup(statuses[i].ToString().c_str());
|
|
5952
|
+
} else {
|
|
5953
|
+
errs[i] = nullptr;
|
|
5954
|
+
}
|
|
5955
|
+
}
|
|
5956
|
+
}
|
|
5957
|
+
}
|
|
5958
|
+
|
|
5888
5959
|
// Read a key outside a transaction
|
|
5889
5960
|
char* rocksdb_transactiondb_get(rocksdb_transactiondb_t* txn_db,
|
|
5890
5961
|
const rocksdb_readoptions_t* options,
|
|
@@ -488,6 +488,19 @@ static void CheckTxnPinGetCF(rocksdb_transaction_t* txn,
|
|
|
488
488
|
rocksdb_pinnableslice_destroy(p);
|
|
489
489
|
}
|
|
490
490
|
|
|
491
|
+
static void CheckTxnGetForUpdate(rocksdb_transaction_t* txn,
|
|
492
|
+
const rocksdb_readoptions_t* options,
|
|
493
|
+
const char* key, const char* expected) {
|
|
494
|
+
char* err = NULL;
|
|
495
|
+
size_t val_len;
|
|
496
|
+
char* val;
|
|
497
|
+
val = rocksdb_transaction_get_for_update(txn, options, key, strlen(key),
|
|
498
|
+
&val_len, true, &err);
|
|
499
|
+
CheckNoError(err);
|
|
500
|
+
CheckEqual(expected, val, val_len);
|
|
501
|
+
Free(&val);
|
|
502
|
+
}
|
|
503
|
+
|
|
491
504
|
static void CheckTxnDBGet(rocksdb_transactiondb_t* txn_db,
|
|
492
505
|
const rocksdb_readoptions_t* options, const char* key,
|
|
493
506
|
const char* expected) {
|
|
@@ -515,6 +528,20 @@ static void CheckTxnDBGetCF(rocksdb_transactiondb_t* txn_db,
|
|
|
515
528
|
Free(&val);
|
|
516
529
|
}
|
|
517
530
|
|
|
531
|
+
static void CheckTxnGetForUpdateCF(
|
|
532
|
+
rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
|
|
533
|
+
rocksdb_column_family_handle_t* column_family, const char* key,
|
|
534
|
+
const char* expected) {
|
|
535
|
+
char* err = NULL;
|
|
536
|
+
size_t val_len;
|
|
537
|
+
char* val;
|
|
538
|
+
val = rocksdb_transaction_get_for_update_cf(
|
|
539
|
+
txn, options, column_family, key, strlen(key), &val_len, true, &err);
|
|
540
|
+
CheckNoError(err);
|
|
541
|
+
CheckEqual(expected, val, val_len);
|
|
542
|
+
Free(&val);
|
|
543
|
+
}
|
|
544
|
+
|
|
518
545
|
static void CheckTxnDBPinGet(rocksdb_transactiondb_t* txn_db,
|
|
519
546
|
const rocksdb_readoptions_t* options,
|
|
520
547
|
const char* key, const char* expected) {
|
|
@@ -3204,6 +3231,120 @@ int main(int argc, char** argv) {
|
|
|
3204
3231
|
rocksdb_transactiondb_options_destroy(txn_db_options);
|
|
3205
3232
|
}
|
|
3206
3233
|
|
|
3234
|
+
StartPhase("transactions_multi_get_for_update");
|
|
3235
|
+
{
|
|
3236
|
+
// open a TransactionDB
|
|
3237
|
+
txn_db_options = rocksdb_transactiondb_options_create();
|
|
3238
|
+
rocksdb_transactiondb_options_set_transaction_lock_timeout(txn_db_options,
|
|
3239
|
+
0);
|
|
3240
|
+
txn_options = rocksdb_transaction_options_create();
|
|
3241
|
+
rocksdb_options_set_create_if_missing(options, 1);
|
|
3242
|
+
txn_db = rocksdb_transactiondb_open(options, txn_db_options, dbname, &err);
|
|
3243
|
+
CheckNoError(err);
|
|
3244
|
+
|
|
3245
|
+
rocksdb_transactiondb_put(txn_db, woptions, "foo", 3, "hey", 3, &err);
|
|
3246
|
+
CheckNoError(err);
|
|
3247
|
+
rocksdb_transactiondb_put(txn_db, woptions, "bar", 3, "hello", 5, &err);
|
|
3248
|
+
CheckNoError(err);
|
|
3249
|
+
|
|
3250
|
+
// begin transactions
|
|
3251
|
+
txn = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
|
|
3252
|
+
rocksdb_transaction_t* txn2 =
|
|
3253
|
+
rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
|
|
3254
|
+
|
|
3255
|
+
// multi get
|
|
3256
|
+
{
|
|
3257
|
+
const char* keys[2] = {"foo", "bar"};
|
|
3258
|
+
const size_t keys_sizes[2] = {3, 3};
|
|
3259
|
+
char* vals[2];
|
|
3260
|
+
size_t vals_sizes[2];
|
|
3261
|
+
char* errs[2];
|
|
3262
|
+
const char* expected[2] = {"hey", "hello"};
|
|
3263
|
+
rocksdb_transaction_multi_get_for_update(
|
|
3264
|
+
txn, roptions, 2, keys, keys_sizes, vals, vals_sizes, errs);
|
|
3265
|
+
CheckMultiGetValues(2, vals, vals_sizes, errs, expected);
|
|
3266
|
+
}
|
|
3267
|
+
|
|
3268
|
+
char* conflict_err = NULL;
|
|
3269
|
+
size_t val_len;
|
|
3270
|
+
rocksdb_transaction_get_for_update(txn2, roptions, "foo", 3, &val_len, true,
|
|
3271
|
+
&conflict_err);
|
|
3272
|
+
// get-for-update conflict
|
|
3273
|
+
CheckCondition(conflict_err != NULL);
|
|
3274
|
+
Free(&conflict_err);
|
|
3275
|
+
|
|
3276
|
+
// commit
|
|
3277
|
+
rocksdb_transaction_commit(txn, &err);
|
|
3278
|
+
CheckNoError(err);
|
|
3279
|
+
|
|
3280
|
+
// should work after first tx is commited
|
|
3281
|
+
CheckTxnGetForUpdate(txn2, roptions, "foo", "hey");
|
|
3282
|
+
|
|
3283
|
+
// commit the second one
|
|
3284
|
+
rocksdb_transaction_commit(txn2, &err);
|
|
3285
|
+
CheckNoError(err);
|
|
3286
|
+
|
|
3287
|
+
// destroy txns
|
|
3288
|
+
rocksdb_transaction_destroy(txn);
|
|
3289
|
+
rocksdb_transaction_destroy(txn2);
|
|
3290
|
+
|
|
3291
|
+
// same for column families
|
|
3292
|
+
|
|
3293
|
+
rocksdb_column_family_handle_t* cfh;
|
|
3294
|
+
cfh = rocksdb_transactiondb_create_column_family(txn_db, options,
|
|
3295
|
+
"txn_db_cf", &err);
|
|
3296
|
+
CheckNoError(err);
|
|
3297
|
+
|
|
3298
|
+
rocksdb_transactiondb_put_cf(txn_db, woptions, cfh, "cf_foo", 6, "cf_hello",
|
|
3299
|
+
8, &err);
|
|
3300
|
+
CheckNoError(err);
|
|
3301
|
+
rocksdb_transactiondb_put_cf(txn_db, woptions, cfh, "cf_bar", 6, "cf_hey",
|
|
3302
|
+
6, &err);
|
|
3303
|
+
CheckNoError(err);
|
|
3304
|
+
|
|
3305
|
+
txn = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
|
|
3306
|
+
txn2 = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
|
|
3307
|
+
|
|
3308
|
+
{
|
|
3309
|
+
const rocksdb_column_family_handle_t* get_handles[2] = {cfh, cfh};
|
|
3310
|
+
const char* keys[2] = {"cf_foo", "cf_bar"};
|
|
3311
|
+
const size_t keys_sizes[2] = {6, 6};
|
|
3312
|
+
char* vals[2];
|
|
3313
|
+
size_t vals_sizes[2];
|
|
3314
|
+
char* errs[2];
|
|
3315
|
+
const char* expected[2] = {"cf_hello", "cf_hey"};
|
|
3316
|
+
rocksdb_transaction_multi_get_for_update_cf(txn, roptions, get_handles, 2,
|
|
3317
|
+
keys, keys_sizes, vals,
|
|
3318
|
+
vals_sizes, errs);
|
|
3319
|
+
CheckMultiGetValues(2, vals, vals_sizes, errs, expected);
|
|
3320
|
+
}
|
|
3321
|
+
|
|
3322
|
+
char* conflict_err_cf = NULL;
|
|
3323
|
+
size_t val_len_cf;
|
|
3324
|
+
rocksdb_transaction_get_for_update_cf(txn2, roptions, cfh, "cf_foo", 6,
|
|
3325
|
+
&val_len_cf, true, &conflict_err_cf);
|
|
3326
|
+
CheckCondition(conflict_err_cf != NULL);
|
|
3327
|
+
Free(&conflict_err_cf);
|
|
3328
|
+
|
|
3329
|
+
rocksdb_transaction_commit(txn, &err);
|
|
3330
|
+
CheckNoError(err);
|
|
3331
|
+
|
|
3332
|
+
CheckTxnGetForUpdateCF(txn2, roptions, cfh, "cf_foo", "cf_hello");
|
|
3333
|
+
|
|
3334
|
+
rocksdb_transaction_commit(txn2, &err);
|
|
3335
|
+
CheckNoError(err);
|
|
3336
|
+
|
|
3337
|
+
// close and destroy
|
|
3338
|
+
rocksdb_column_family_handle_destroy(cfh);
|
|
3339
|
+
rocksdb_transaction_destroy(txn);
|
|
3340
|
+
rocksdb_transaction_destroy(txn2);
|
|
3341
|
+
rocksdb_transactiondb_close(txn_db);
|
|
3342
|
+
rocksdb_destroy_db(options, dbname, &err);
|
|
3343
|
+
CheckNoError(err);
|
|
3344
|
+
rocksdb_transaction_options_destroy(txn_options);
|
|
3345
|
+
rocksdb_transactiondb_options_destroy(txn_db_options);
|
|
3346
|
+
}
|
|
3347
|
+
|
|
3207
3348
|
StartPhase("optimistic_transactions");
|
|
3208
3349
|
{
|
|
3209
3350
|
rocksdb_options_t* db_options = rocksdb_options_create();
|
|
@@ -1141,6 +1141,7 @@ Status ColumnFamilyData::RangesOverlapWithMemtables(
|
|
|
1141
1141
|
*overlap = false;
|
|
1142
1142
|
// Create an InternalIterator over all unflushed memtables
|
|
1143
1143
|
Arena arena;
|
|
1144
|
+
// TODO: plumb Env::IOActivity
|
|
1144
1145
|
ReadOptions read_opts;
|
|
1145
1146
|
read_opts.total_order_seek = true;
|
|
1146
1147
|
MergeIteratorBuilder merge_iter_builder(&internal_comparator_, &arena);
|
|
@@ -1427,6 +1428,37 @@ Status ColumnFamilyData::ValidateOptions(
|
|
|
1427
1428
|
"Memtable per key-value checksum protection only supports 0, 1, 2, 4 "
|
|
1428
1429
|
"or 8 bytes per key.");
|
|
1429
1430
|
}
|
|
1431
|
+
if (std::find(supported.begin(), supported.end(),
|
|
1432
|
+
cf_options.block_protection_bytes_per_key) == supported.end()) {
|
|
1433
|
+
return Status::NotSupported(
|
|
1434
|
+
"Block per key-value checksum protection only supports 0, 1, 2, 4 "
|
|
1435
|
+
"or 8 bytes per key.");
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
if (!cf_options.compaction_options_fifo.file_temperature_age_thresholds
|
|
1439
|
+
.empty()) {
|
|
1440
|
+
if (cf_options.compaction_style != kCompactionStyleFIFO) {
|
|
1441
|
+
return Status::NotSupported(
|
|
1442
|
+
"Option file_temperature_age_thresholds only supports FIFO "
|
|
1443
|
+
"compaction.");
|
|
1444
|
+
} else if (cf_options.num_levels > 1) {
|
|
1445
|
+
return Status::NotSupported(
|
|
1446
|
+
"Option file_temperature_age_thresholds is only supported when "
|
|
1447
|
+
"num_levels = 1.");
|
|
1448
|
+
} else {
|
|
1449
|
+
const auto& ages =
|
|
1450
|
+
cf_options.compaction_options_fifo.file_temperature_age_thresholds;
|
|
1451
|
+
assert(ages.size() >= 1);
|
|
1452
|
+
// check that age is sorted
|
|
1453
|
+
for (size_t i = 0; i < ages.size() - 1; ++i) {
|
|
1454
|
+
if (ages[i].age >= ages[i + 1].age) {
|
|
1455
|
+
return Status::NotSupported(
|
|
1456
|
+
"Option file_temperature_age_thresholds requires elements to be "
|
|
1457
|
+
"sorted in increasing order with respect to `age` field.");
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1430
1462
|
return s;
|
|
1431
1463
|
}
|
|
1432
1464
|
|
|
@@ -120,7 +120,9 @@ TEST_F(CompactFilesTest, L0ConflictsFiles) {
|
|
|
120
120
|
TEST_F(CompactFilesTest, MultipleLevel) {
|
|
121
121
|
Options options;
|
|
122
122
|
options.create_if_missing = true;
|
|
123
|
-
|
|
123
|
+
// Otherwise background compaction can happen to
|
|
124
|
+
// drain unnecessary level
|
|
125
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
124
126
|
options.num_levels = 6;
|
|
125
127
|
// Add listener
|
|
126
128
|
FlushedFileCollector* collector = new FlushedFileCollector();
|
|
@@ -181,7 +183,6 @@ TEST_F(CompactFilesTest, MultipleLevel) {
|
|
|
181
183
|
for (int invalid_output_level = 0; invalid_output_level < 5;
|
|
182
184
|
invalid_output_level++) {
|
|
183
185
|
s = db->CompactFiles(CompactionOptions(), files, invalid_output_level);
|
|
184
|
-
std::cout << s.ToString() << std::endl;
|
|
185
186
|
ASSERT_TRUE(s.IsInvalidArgument());
|
|
186
187
|
}
|
|
187
188
|
|
|
@@ -465,6 +465,11 @@ bool Compaction::IsTrivialMove() const {
|
|
|
465
465
|
return false;
|
|
466
466
|
}
|
|
467
467
|
|
|
468
|
+
if (compaction_reason_ == CompactionReason::kChangeTemperature) {
|
|
469
|
+
// Changing temperature usually requires rewriting the file.
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
|
|
468
473
|
// Used in universal compaction, where trivial move can be done if the
|
|
469
474
|
// input files are non overlapping
|
|
470
475
|
if ((mutable_cf_options_.compaction_options_universal.allow_trivial_move) &&
|
|
@@ -546,13 +546,16 @@ struct PerKeyPlacementContext {
|
|
|
546
546
|
const Slice value;
|
|
547
547
|
const SequenceNumber seq_num;
|
|
548
548
|
|
|
549
|
-
bool output_to_penultimate_level;
|
|
549
|
+
bool& output_to_penultimate_level;
|
|
550
550
|
|
|
551
551
|
PerKeyPlacementContext(int _level, Slice _key, Slice _value,
|
|
552
|
-
SequenceNumber _seq_num
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
552
|
+
SequenceNumber _seq_num,
|
|
553
|
+
bool& _output_to_penultimate_level)
|
|
554
|
+
: level(_level),
|
|
555
|
+
key(_key),
|
|
556
|
+
value(_value),
|
|
557
|
+
seq_num(_seq_num),
|
|
558
|
+
output_to_penultimate_level(_output_to_penultimate_level) {}
|
|
556
559
|
};
|
|
557
560
|
#endif /* !NDEBUG */
|
|
558
561
|
|
|
@@ -1201,17 +1201,7 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
|
|
|
1201
1201
|
|
|
1202
1202
|
void CompactionIterator::DecideOutputLevel() {
|
|
1203
1203
|
assert(compaction_->SupportsPerKeyPlacement());
|
|
1204
|
-
#ifndef NDEBUG
|
|
1205
|
-
// Could be overridden by unittest
|
|
1206
|
-
PerKeyPlacementContext context(level_, ikey_.user_key, value_,
|
|
1207
|
-
ikey_.sequence);
|
|
1208
|
-
TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput.context",
|
|
1209
|
-
&context);
|
|
1210
|
-
output_to_penultimate_level_ = context.output_to_penultimate_level;
|
|
1211
|
-
#else
|
|
1212
1204
|
output_to_penultimate_level_ = false;
|
|
1213
|
-
#endif // NDEBUG
|
|
1214
|
-
|
|
1215
1205
|
// if the key is newer than the cutoff sequence or within the earliest
|
|
1216
1206
|
// snapshot, it should output to the penultimate level.
|
|
1217
1207
|
if (ikey_.sequence > preclude_last_level_min_seqno_ ||
|
|
@@ -1219,6 +1209,17 @@ void CompactionIterator::DecideOutputLevel() {
|
|
|
1219
1209
|
output_to_penultimate_level_ = true;
|
|
1220
1210
|
}
|
|
1221
1211
|
|
|
1212
|
+
#ifndef NDEBUG
|
|
1213
|
+
// Could be overridden by unittest
|
|
1214
|
+
PerKeyPlacementContext context(level_, ikey_.user_key, value_, ikey_.sequence,
|
|
1215
|
+
output_to_penultimate_level_);
|
|
1216
|
+
TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput.context",
|
|
1217
|
+
&context);
|
|
1218
|
+
if (ikey_.sequence > earliest_snapshot_) {
|
|
1219
|
+
output_to_penultimate_level_ = true;
|
|
1220
|
+
}
|
|
1221
|
+
#endif // NDEBUG
|
|
1222
|
+
|
|
1222
1223
|
if (output_to_penultimate_level_) {
|
|
1223
1224
|
// If it's decided to output to the penultimate level, but unsafe to do so,
|
|
1224
1225
|
// still output to the last level. For example, moving the data from a lower
|
|
@@ -1411,6 +1412,7 @@ std::unique_ptr<BlobFetcher> CompactionIterator::CreateBlobFetcherIfNeeded(
|
|
|
1411
1412
|
}
|
|
1412
1413
|
|
|
1413
1414
|
ReadOptions read_options;
|
|
1415
|
+
read_options.io_activity = Env::IOActivity::kCompaction;
|
|
1414
1416
|
read_options.fill_cache = false;
|
|
1415
1417
|
|
|
1416
1418
|
return std::unique_ptr<BlobFetcher>(new BlobFetcher(version, read_options));
|
|
@@ -192,8 +192,8 @@ CompactionJob::CompactionJob(
|
|
|
192
192
|
assert(log_buffer_ != nullptr);
|
|
193
193
|
|
|
194
194
|
const auto* cfd = compact_->compaction->column_family_data();
|
|
195
|
-
ThreadStatusUtil::
|
|
196
|
-
|
|
195
|
+
ThreadStatusUtil::SetEnableTracking(db_options_.enable_thread_tracking);
|
|
196
|
+
ThreadStatusUtil::SetColumnFamily(cfd);
|
|
197
197
|
ThreadStatusUtil::SetThreadOperation(ThreadStatus::OP_COMPACTION);
|
|
198
198
|
ReportStartedCompaction(compaction);
|
|
199
199
|
}
|
|
@@ -204,10 +204,6 @@ CompactionJob::~CompactionJob() {
|
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
void CompactionJob::ReportStartedCompaction(Compaction* compaction) {
|
|
207
|
-
const auto* cfd = compact_->compaction->column_family_data();
|
|
208
|
-
ThreadStatusUtil::SetColumnFamily(cfd, cfd->ioptions()->env,
|
|
209
|
-
db_options_.enable_thread_tracking);
|
|
210
|
-
|
|
211
207
|
ThreadStatusUtil::SetThreadOperationProperty(ThreadStatus::COMPACTION_JOB_ID,
|
|
212
208
|
job_id_);
|
|
213
209
|
|
|
@@ -291,12 +287,14 @@ void CompactionJob::Prepare() {
|
|
|
291
287
|
c->immutable_options()->preclude_last_level_data_seconds);
|
|
292
288
|
|
|
293
289
|
if (preserve_time_duration > 0) {
|
|
290
|
+
const ReadOptions read_options(Env::IOActivity::kCompaction);
|
|
294
291
|
// setup seqno_time_mapping_
|
|
295
292
|
seqno_time_mapping_.SetMaxTimeDuration(preserve_time_duration);
|
|
296
293
|
for (const auto& each_level : *c->inputs()) {
|
|
297
294
|
for (const auto& fmd : each_level.files) {
|
|
298
295
|
std::shared_ptr<const TableProperties> tp;
|
|
299
|
-
Status s =
|
|
296
|
+
Status s =
|
|
297
|
+
cfd->current()->GetTableProperties(read_options, &tp, fmd, nullptr);
|
|
300
298
|
if (s.ok()) {
|
|
301
299
|
seqno_time_mapping_.Add(tp->seqno_to_time_mapping)
|
|
302
300
|
.PermitUncheckedError();
|
|
@@ -472,7 +470,7 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
472
470
|
// overlap with N-1 other ranges. Since we requested a relatively large number
|
|
473
471
|
// (128) of ranges from each input files, even N range overlapping would
|
|
474
472
|
// cause relatively small inaccuracy.
|
|
475
|
-
|
|
473
|
+
const ReadOptions read_options(Env::IOActivity::kCompaction);
|
|
476
474
|
auto* c = compact_->compaction;
|
|
477
475
|
if (c->max_subcompactions() <= 1 &&
|
|
478
476
|
!(c->immutable_options()->compaction_pri == kRoundRobin &&
|
|
@@ -506,7 +504,9 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
|
|
506
504
|
FileMetaData* f = flevel->files[i].file_metadata;
|
|
507
505
|
std::vector<TableReader::Anchor> my_anchors;
|
|
508
506
|
Status s = cfd->table_cache()->ApproximateKeyAnchors(
|
|
509
|
-
|
|
507
|
+
read_options, icomp, *f,
|
|
508
|
+
c->mutable_cf_options()->block_protection_bytes_per_key,
|
|
509
|
+
my_anchors);
|
|
510
510
|
if (!s.ok() || my_anchors.empty()) {
|
|
511
511
|
my_anchors.emplace_back(f->largest.user_key(), f->fd.GetFileSize());
|
|
512
512
|
}
|
|
@@ -722,11 +722,12 @@ Status CompactionJob::Run() {
|
|
|
722
722
|
// use_direct_io_for_flush_and_compaction is true, we will regard this
|
|
723
723
|
// verification as user reads since the goal is to cache it here for
|
|
724
724
|
// further user reads
|
|
725
|
-
ReadOptions
|
|
725
|
+
const ReadOptions verify_table_read_options(
|
|
726
|
+
Env::IOActivity::kCompaction);
|
|
726
727
|
InternalIterator* iter = cfd->table_cache()->NewIterator(
|
|
727
|
-
|
|
728
|
-
files_output[file_idx]->meta,
|
|
729
|
-
prefix_extractor,
|
|
728
|
+
verify_table_read_options, file_options_,
|
|
729
|
+
cfd->internal_comparator(), files_output[file_idx]->meta,
|
|
730
|
+
/*range_del_agg=*/nullptr, prefix_extractor,
|
|
730
731
|
/*table_reader_ptr=*/nullptr,
|
|
731
732
|
cfd->internal_stats()->GetFileReadHist(
|
|
732
733
|
compact_->compaction->output_level()),
|
|
@@ -736,7 +737,9 @@ Status CompactionJob::Run() {
|
|
|
736
737
|
*compact_->compaction->mutable_cf_options()),
|
|
737
738
|
/*smallest_compaction_key=*/nullptr,
|
|
738
739
|
/*largest_compaction_key=*/nullptr,
|
|
739
|
-
/*allow_unprepared_value=*/false
|
|
740
|
+
/*allow_unprepared_value=*/false,
|
|
741
|
+
compact_->compaction->mutable_cf_options()
|
|
742
|
+
->block_protection_bytes_per_key);
|
|
740
743
|
auto s = iter->status();
|
|
741
744
|
|
|
742
745
|
if (s.ok() && paranoid_file_checks_) {
|
|
@@ -1032,7 +1035,6 @@ void CompactionJob::NotifyOnSubcompactionCompleted(
|
|
|
1032
1035
|
void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
1033
1036
|
assert(sub_compact);
|
|
1034
1037
|
assert(sub_compact->compaction);
|
|
1035
|
-
|
|
1036
1038
|
if (db_options_.compaction_service) {
|
|
1037
1039
|
CompactionServiceJobStatus comp_status =
|
|
1038
1040
|
ProcessKeyValueCompactionWithCompactionService(sub_compact);
|
|
@@ -1083,6 +1085,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
|
|
|
1083
1085
|
read_options.verify_checksums = true;
|
|
1084
1086
|
read_options.fill_cache = false;
|
|
1085
1087
|
read_options.rate_limiter_priority = GetRateLimiterPriority();
|
|
1088
|
+
read_options.io_activity = Env::IOActivity::kCompaction;
|
|
1086
1089
|
// Compaction iterators shouldn't be confined to a single prefix.
|
|
1087
1090
|
// Compactions use Seek() for
|
|
1088
1091
|
// (a) concurrent compactions,
|
|
@@ -1640,6 +1643,7 @@ Status CompactionJob::InstallCompactionResults(
|
|
|
1640
1643
|
|
|
1641
1644
|
db_mutex_->AssertHeld();
|
|
1642
1645
|
|
|
1646
|
+
const ReadOptions read_options(Env::IOActivity::kCompaction);
|
|
1643
1647
|
auto* compaction = compact_->compaction;
|
|
1644
1648
|
assert(compaction);
|
|
1645
1649
|
|
|
@@ -1717,8 +1721,8 @@ Status CompactionJob::InstallCompactionResults(
|
|
|
1717
1721
|
}
|
|
1718
1722
|
|
|
1719
1723
|
return versions_->LogAndApply(compaction->column_family_data(),
|
|
1720
|
-
mutable_cf_options,
|
|
1721
|
-
db_directory_);
|
|
1724
|
+
mutable_cf_options, read_options, edit,
|
|
1725
|
+
db_mutex_, db_directory_);
|
|
1722
1726
|
}
|
|
1723
1727
|
|
|
1724
1728
|
void CompactionJob::RecordCompactionIOStats() {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
#include "db/write_batch_internal.h"
|
|
25
25
|
#include "env/mock_env.h"
|
|
26
26
|
#include "file/filename.h"
|
|
27
|
-
#include "monitoring/
|
|
27
|
+
#include "monitoring/statistics_impl.h"
|
|
28
28
|
#include "monitoring/thread_status_util.h"
|
|
29
29
|
#include "port/stack_trace.h"
|
|
30
30
|
#include "rocksdb/cache.h"
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
#include "util/compression.h"
|
|
55
55
|
#include "util/hash.h"
|
|
56
56
|
#include "util/mutexlock.h"
|
|
57
|
-
#include "util/
|
|
57
|
+
#include "util/rate_limiter_impl.h"
|
|
58
58
|
#include "util/string_util.h"
|
|
59
59
|
#include "utilities/merge_operators.h"
|
|
60
60
|
|
|
@@ -373,7 +373,7 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
373
373
|
} else if (table_type_ == TableTypeForTest::kMockTable) {
|
|
374
374
|
file_size = 10;
|
|
375
375
|
EXPECT_OK(mock_table_factory_->CreateMockTable(
|
|
376
|
-
env_, GenerateFileName(file_number),
|
|
376
|
+
env_, GenerateFileName(file_number), contents));
|
|
377
377
|
} else {
|
|
378
378
|
assert(false);
|
|
379
379
|
}
|
|
@@ -386,12 +386,12 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
386
386
|
kUnknownFileCreationTime,
|
|
387
387
|
versions_->GetColumnFamilySet()->GetDefault()->NewEpochNumber(),
|
|
388
388
|
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2,
|
|
389
|
-
0);
|
|
389
|
+
0, 0);
|
|
390
390
|
|
|
391
391
|
mutex_.Lock();
|
|
392
|
-
EXPECT_OK(
|
|
393
|
-
versions_->
|
|
394
|
-
|
|
392
|
+
EXPECT_OK(versions_->LogAndApply(
|
|
393
|
+
versions_->GetColumnFamilySet()->GetDefault(), mutable_cf_options_,
|
|
394
|
+
read_options_, &edit, &mutex_, nullptr));
|
|
395
395
|
mutex_.Unlock();
|
|
396
396
|
}
|
|
397
397
|
|
|
@@ -454,7 +454,8 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
454
454
|
Status s = cf_options_.table_factory->NewTableReader(
|
|
455
455
|
read_opts,
|
|
456
456
|
TableReaderOptions(*cfd->ioptions(), nullptr, FileOptions(),
|
|
457
|
-
cfd_->internal_comparator()
|
|
457
|
+
cfd_->internal_comparator(),
|
|
458
|
+
0 /* block_protection_bytes_per_key */),
|
|
458
459
|
std::move(freader), file_size, &table_reader, false);
|
|
459
460
|
ASSERT_OK(s);
|
|
460
461
|
assert(table_reader);
|
|
@@ -727,6 +728,7 @@ class CompactionJobTestBase : public testing::Test {
|
|
|
727
728
|
ColumnFamilyOptions cf_options_;
|
|
728
729
|
MutableCFOptions mutable_cf_options_;
|
|
729
730
|
MutableDBOptions mutable_db_options_;
|
|
731
|
+
const ReadOptions read_options_;
|
|
730
732
|
std::shared_ptr<Cache> table_cache_;
|
|
731
733
|
WriteController write_controller_;
|
|
732
734
|
WriteBufferManager write_buffer_manager_;
|
|
@@ -2440,4 +2442,3 @@ int main(int argc, char** argv) {
|
|
|
2440
2442
|
RegisterCustomObjects(argc, argv);
|
|
2441
2443
|
return RUN_ALL_TESTS();
|
|
2442
2444
|
}
|
|
2443
|
-
|
|
@@ -43,6 +43,7 @@ Status CompactionOutputs::Finish(const Status& intput_status,
|
|
|
43
43
|
const uint64_t current_bytes = builder_->FileSize();
|
|
44
44
|
if (s.ok()) {
|
|
45
45
|
meta->fd.file_size = current_bytes;
|
|
46
|
+
meta->tail_size = builder_->GetTailSize();
|
|
46
47
|
meta->marked_for_compaction = builder_->NeedCompact();
|
|
47
48
|
}
|
|
48
49
|
current_output().finished = true;
|
|
@@ -574,6 +575,7 @@ Status CompactionOutputs::AddRangeDels(
|
|
|
574
575
|
auto it = range_del_agg_->NewIterator(lower_bound, upper_bound);
|
|
575
576
|
Slice last_tombstone_start_user_key{};
|
|
576
577
|
bool reached_lower_bound = false;
|
|
578
|
+
const ReadOptions read_options(Env::IOActivity::kCompaction);
|
|
577
579
|
for (it->SeekToFirst(); it->Valid(); it->Next()) {
|
|
578
580
|
auto tombstone = it->Tombstone();
|
|
579
581
|
auto kv = tombstone.Serialize();
|
|
@@ -713,7 +715,7 @@ Status CompactionOutputs::AddRangeDels(
|
|
|
713
715
|
approx_opts.files_size_error_margin = 0.1;
|
|
714
716
|
auto approximate_covered_size =
|
|
715
717
|
compaction_->input_version()->version_set()->ApproximateSize(
|
|
716
|
-
approx_opts, compaction_->input_version(),
|
|
718
|
+
approx_opts, read_options, compaction_->input_version(),
|
|
717
719
|
tombstone_start.Encode(), tombstone_end.Encode(),
|
|
718
720
|
compaction_->output_level() + 1 /* start_level */,
|
|
719
721
|
-1 /* end_level */, kCompaction);
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
#include "file/filename.h"
|
|
21
21
|
#include "logging/log_buffer.h"
|
|
22
22
|
#include "logging/logging.h"
|
|
23
|
-
#include "monitoring/
|
|
23
|
+
#include "monitoring/statistics_impl.h"
|
|
24
24
|
#include "test_util/sync_point.h"
|
|
25
25
|
#include "util/random.h"
|
|
26
26
|
#include "util/string_util.h"
|