@nxtedition/rocksdb 9.0.0 → 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 +13 -9
- package/deps/rocksdb/rocksdb/Makefile +15 -6
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +17 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
- 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 +16 -4
- 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 +2024 -14
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +182 -7
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +293 -17
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +21 -5
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -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/db/arena_wrapped_db_iter.cc +25 -11
- 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_reader.cc +2 -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 +3 -3
- package/deps/rocksdb/rocksdb/db/c.cc +64 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
- package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
- package/deps/rocksdb/rocksdb/db/db_iter.h +10 -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_operator_test.cc +187 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
- 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_tailing_iter_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
- package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
- package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
- 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 +3 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -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 +4 -3
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
- 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 +32 -19
- package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
- package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
- package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
- package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
- 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 +44 -20
- 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 +15 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
- 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 +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
- 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/multi_ops_txns_stress.cc +14 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
- package/deps/rocksdb/rocksdb/env/env.cc +5 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
- 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 +4 -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 +45 -5
- 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 +79 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
- 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_properties.h +14 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -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/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
- 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 +0 -2
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -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 +5 -0
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
- 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 +14 -9
- 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 +15 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
- 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/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
- 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 +12 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
- 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/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
- package/deps/rocksdb/rocksdb/util/compression.h +9 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
- 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/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- 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 +2 -0
- package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
- 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 +9 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
- 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 +105 -8
- package/deps/rocksdb/rocksdb.gyp +4 -2
- package/index.js +0 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/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
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
#include "db/compaction/compaction_picker_universal.h"
|
|
11
11
|
|
|
12
|
-
#include <
|
|
12
|
+
#include <cstdint>
|
|
13
13
|
#include <limits>
|
|
14
14
|
#include <queue>
|
|
15
15
|
#include <string>
|
|
@@ -114,6 +114,13 @@ class UniversalCompactionBuilder {
|
|
|
114
114
|
// because some files are being compacted.
|
|
115
115
|
Compaction* PickPeriodicCompaction();
|
|
116
116
|
|
|
117
|
+
bool ShouldSkipLastSortedRunForSizeAmpCompaction() const {
|
|
118
|
+
assert(!sorted_runs_.empty());
|
|
119
|
+
return ioptions_.preclude_last_level_data_seconds > 0 &&
|
|
120
|
+
ioptions_.num_levels > 2 &&
|
|
121
|
+
sorted_runs_.back().level == ioptions_.num_levels - 1 &&
|
|
122
|
+
sorted_runs_.size() > 1;
|
|
123
|
+
}
|
|
117
124
|
// Used in universal compaction when the allow_trivial_move
|
|
118
125
|
// option is set. Checks whether there are any overlapping files
|
|
119
126
|
// in the input. Returns true if the input files are non
|
|
@@ -122,6 +129,100 @@ class UniversalCompactionBuilder {
|
|
|
122
129
|
|
|
123
130
|
uint64_t GetMaxOverlappingBytes() const;
|
|
124
131
|
|
|
132
|
+
// To conditionally exclude some of the newest L0 files
|
|
133
|
+
// from a size amp compaction. This is to prevent a large number of L0
|
|
134
|
+
// files from being locked by a size amp compaction, potentially leading to
|
|
135
|
+
// write stop with a few more flushes.
|
|
136
|
+
//
|
|
137
|
+
// Such exclusion is based on `num_l0_input_pre_exclusion`,
|
|
138
|
+
// `level0_stop_writes_trigger`, `max/min_merge_width` and the pre-exclusion
|
|
139
|
+
// compaction score. Noted that it will not make the size amp compaction of
|
|
140
|
+
// interest invalid from running as a size amp compaction as long as its
|
|
141
|
+
// pre-exclusion compaction score satisfies the condition to run.
|
|
142
|
+
//
|
|
143
|
+
// @param `num_l0_input_pre_exclusion` Number of L0 input files prior to
|
|
144
|
+
// exclusion
|
|
145
|
+
// @param `end_index` Index of the last sorted run selected as compaction
|
|
146
|
+
// input. Will not be affected by this exclusion.
|
|
147
|
+
// @param `start_index` Index of the first input sorted run prior to
|
|
148
|
+
// exclusion. Will be modified as output based on the exclusion.
|
|
149
|
+
// @param `candidate_size` Total size of all except for the last input sorted
|
|
150
|
+
// runs prior to exclusion. Will be modified as output based on the exclusion.
|
|
151
|
+
//
|
|
152
|
+
// @return Number of L0 files to exclude. `start_index` and
|
|
153
|
+
// `candidate_size` will be modified accordingly
|
|
154
|
+
std::size_t MightExcludeNewL0sToReduceWriteStop(
|
|
155
|
+
std::size_t num_l0_input_pre_exclusion, std::size_t end_index,
|
|
156
|
+
std::size_t& start_index, uint64_t& candidate_size) const {
|
|
157
|
+
if (num_l0_input_pre_exclusion == 0) {
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
assert(start_index <= end_index && sorted_runs_.size() > end_index);
|
|
162
|
+
assert(mutable_cf_options_.level0_stop_writes_trigger > 0);
|
|
163
|
+
const std::size_t level0_stop_writes_trigger = static_cast<std::size_t>(
|
|
164
|
+
mutable_cf_options_.level0_stop_writes_trigger);
|
|
165
|
+
const std::size_t max_merge_width = static_cast<std::size_t>(
|
|
166
|
+
mutable_cf_options_.compaction_options_universal.max_merge_width);
|
|
167
|
+
const std::size_t min_merge_width = static_cast<std::size_t>(
|
|
168
|
+
mutable_cf_options_.compaction_options_universal.min_merge_width);
|
|
169
|
+
const uint64_t max_size_amplification_percent =
|
|
170
|
+
mutable_cf_options_.compaction_options_universal
|
|
171
|
+
.max_size_amplification_percent;
|
|
172
|
+
const uint64_t base_sr_size = sorted_runs_[end_index].size;
|
|
173
|
+
|
|
174
|
+
// Leave at least 1 L0 file and 2 input sorted runs after exclusion
|
|
175
|
+
const std::size_t max_num_l0_to_exclude =
|
|
176
|
+
std::min(num_l0_input_pre_exclusion - 1, end_index - start_index - 1);
|
|
177
|
+
// In universal compaction, sorted runs from non L0 levels are counted
|
|
178
|
+
// toward `level0_stop_writes_trigger`. Therefore we need to subtract the
|
|
179
|
+
// total number of sorted runs picked originally for this compaction from
|
|
180
|
+
// `level0_stop_writes_trigger` to calculate
|
|
181
|
+
// `num_extra_l0_before_write_stop`
|
|
182
|
+
const std::size_t num_extra_l0_before_write_stop =
|
|
183
|
+
level0_stop_writes_trigger -
|
|
184
|
+
std::min(level0_stop_writes_trigger, end_index - start_index + 1);
|
|
185
|
+
const std::size_t num_l0_to_exclude_for_max_merge_width =
|
|
186
|
+
std::min(max_merge_width -
|
|
187
|
+
std::min(max_merge_width, num_extra_l0_before_write_stop),
|
|
188
|
+
max_num_l0_to_exclude);
|
|
189
|
+
const std::size_t num_l0_to_exclude_for_min_merge_width =
|
|
190
|
+
std::min(min_merge_width -
|
|
191
|
+
std::min(min_merge_width, num_extra_l0_before_write_stop),
|
|
192
|
+
max_num_l0_to_exclude);
|
|
193
|
+
|
|
194
|
+
std::size_t num_l0_to_exclude = 0;
|
|
195
|
+
uint64_t candidate_size_post_exclusion = candidate_size;
|
|
196
|
+
|
|
197
|
+
for (std::size_t possible_num_l0_to_exclude =
|
|
198
|
+
num_l0_to_exclude_for_min_merge_width;
|
|
199
|
+
possible_num_l0_to_exclude <= num_l0_to_exclude_for_max_merge_width;
|
|
200
|
+
++possible_num_l0_to_exclude) {
|
|
201
|
+
uint64_t current_candidate_size = candidate_size_post_exclusion;
|
|
202
|
+
for (std::size_t j = num_l0_to_exclude; j < possible_num_l0_to_exclude;
|
|
203
|
+
++j) {
|
|
204
|
+
current_candidate_size -=
|
|
205
|
+
sorted_runs_.at(start_index + j).compensated_file_size;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// To ensure the compaction score before and after exclusion is similar
|
|
209
|
+
// so this exclusion will not make the size amp compaction of
|
|
210
|
+
// interest invalid from running as a size amp compaction as long as its
|
|
211
|
+
// pre-exclusion compaction score satisfies the condition to run.
|
|
212
|
+
if (current_candidate_size * 100 <
|
|
213
|
+
max_size_amplification_percent * base_sr_size ||
|
|
214
|
+
current_candidate_size < candidate_size * 9 / 10) {
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
num_l0_to_exclude = possible_num_l0_to_exclude;
|
|
218
|
+
candidate_size_post_exclusion = current_candidate_size;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
start_index += num_l0_to_exclude;
|
|
222
|
+
candidate_size = candidate_size_post_exclusion;
|
|
223
|
+
return num_l0_to_exclude;
|
|
224
|
+
}
|
|
225
|
+
|
|
125
226
|
const ImmutableOptions& ioptions_;
|
|
126
227
|
const InternalKeyComparator* icmp_;
|
|
127
228
|
double score_;
|
|
@@ -778,85 +879,67 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSortedRuns(
|
|
|
778
879
|
|
|
779
880
|
// Look at overall size amplification. If size amplification
|
|
780
881
|
// exceeds the configured value, then do a compaction
|
|
781
|
-
// of
|
|
782
|
-
// base file (
|
|
783
|
-
// min_merge_width and max_merge_width).
|
|
784
|
-
//
|
|
882
|
+
// on longest span of candidate files without conflict with other compactions
|
|
883
|
+
// ending at the earliest base file (overriding configured values of file-size
|
|
884
|
+
// ratios, min_merge_width and max_merge_width).
|
|
785
885
|
Compaction* UniversalCompactionBuilder::PickCompactionToReduceSizeAmp() {
|
|
786
|
-
// percentage flexibility while reducing size amplification
|
|
787
|
-
uint64_t ratio = mutable_cf_options_.compaction_options_universal
|
|
788
|
-
.max_size_amplification_percent;
|
|
789
|
-
|
|
790
|
-
unsigned int candidate_count = 0;
|
|
791
|
-
uint64_t candidate_size = 0;
|
|
792
|
-
size_t start_index = 0;
|
|
793
|
-
const SortedRun* sr = nullptr;
|
|
794
|
-
|
|
795
886
|
assert(!sorted_runs_.empty());
|
|
796
|
-
|
|
887
|
+
|
|
888
|
+
const size_t end_index = ShouldSkipLastSortedRunForSizeAmpCompaction()
|
|
889
|
+
? sorted_runs_.size() - 2
|
|
890
|
+
: sorted_runs_.size() - 1;
|
|
891
|
+
if (sorted_runs_[end_index].being_compacted) {
|
|
797
892
|
return nullptr;
|
|
798
893
|
}
|
|
894
|
+
const uint64_t base_sr_size = sorted_runs_[end_index].size;
|
|
895
|
+
size_t start_index = end_index;
|
|
896
|
+
uint64_t candidate_size = 0;
|
|
897
|
+
size_t num_l0_files = 0;
|
|
799
898
|
|
|
800
|
-
//
|
|
801
|
-
|
|
802
|
-
sr = &sorted_runs_[
|
|
803
|
-
if (
|
|
804
|
-
|
|
899
|
+
// Get longest span (i.e, [start_index, end_index]) of available sorted runs
|
|
900
|
+
while (start_index > 0) {
|
|
901
|
+
const SortedRun* sr = &sorted_runs_[start_index - 1];
|
|
902
|
+
if (sr->being_compacted) {
|
|
903
|
+
char file_num_buf[kFormatFileNumberBufSize];
|
|
904
|
+
sr->Dump(file_num_buf, sizeof(file_num_buf), true);
|
|
905
|
+
ROCKS_LOG_BUFFER(
|
|
906
|
+
log_buffer_,
|
|
907
|
+
"[%s] Universal: stopping at sorted run undergoing compaction: "
|
|
908
|
+
"%s[%" ROCKSDB_PRIszt "]",
|
|
909
|
+
cf_name_.c_str(), file_num_buf, start_index - 1);
|
|
805
910
|
break;
|
|
806
911
|
}
|
|
807
|
-
|
|
808
|
-
sr->
|
|
809
|
-
|
|
810
|
-
"[%s] Universal: skipping %s[%d] compacted %s",
|
|
811
|
-
cf_name_.c_str(), file_num_buf, loop,
|
|
812
|
-
" cannot be a candidate to reduce size amp.\n");
|
|
813
|
-
sr = nullptr;
|
|
912
|
+
candidate_size += sr->compensated_file_size;
|
|
913
|
+
num_l0_files += sr->level == 0 ? 1 : 0;
|
|
914
|
+
--start_index;
|
|
814
915
|
}
|
|
815
916
|
|
|
816
|
-
if (
|
|
817
|
-
return nullptr;
|
|
917
|
+
if (start_index == end_index) {
|
|
918
|
+
return nullptr;
|
|
818
919
|
}
|
|
920
|
+
|
|
921
|
+
{
|
|
922
|
+
const size_t num_l0_to_exclude = MightExcludeNewL0sToReduceWriteStop(
|
|
923
|
+
num_l0_files, end_index, start_index, candidate_size);
|
|
924
|
+
ROCKS_LOG_BUFFER(log_buffer_,
|
|
925
|
+
"[%s] Universal: Excluding %" ROCKSDB_PRIszt
|
|
926
|
+
" latest L0 files to reduce potential write stop "
|
|
927
|
+
"triggered by `level0_stop_writes_trigger`",
|
|
928
|
+
cf_name_.c_str(), num_l0_to_exclude);
|
|
929
|
+
}
|
|
930
|
+
|
|
819
931
|
{
|
|
820
932
|
char file_num_buf[kFormatFileNumberBufSize];
|
|
821
|
-
|
|
933
|
+
sorted_runs_[start_index].Dump(file_num_buf, sizeof(file_num_buf), true);
|
|
822
934
|
ROCKS_LOG_BUFFER(
|
|
823
935
|
log_buffer_,
|
|
824
936
|
"[%s] Universal: First candidate %s[%" ROCKSDB_PRIszt "] %s",
|
|
825
937
|
cf_name_.c_str(), file_num_buf, start_index, " to reduce size amp.\n");
|
|
826
938
|
}
|
|
827
939
|
|
|
828
|
-
//
|
|
829
|
-
uint64_t
|
|
830
|
-
|
|
831
|
-
// If tiered compaction is enabled and the last sorted run is the last level
|
|
832
|
-
if (ioptions_.preclude_last_level_data_seconds > 0 &&
|
|
833
|
-
ioptions_.num_levels > 2 &&
|
|
834
|
-
sorted_runs_.back().level == ioptions_.num_levels - 1 &&
|
|
835
|
-
sorted_runs_.size() > 1) {
|
|
836
|
-
sr_end_idx = sorted_runs_.size() - 2;
|
|
837
|
-
base_sr_size = sorted_runs_[sr_end_idx].size;
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
// keep adding up all the remaining files
|
|
841
|
-
for (size_t loop = start_index; loop < sr_end_idx; loop++) {
|
|
842
|
-
sr = &sorted_runs_[loop];
|
|
843
|
-
if (sr->being_compacted) {
|
|
844
|
-
// TODO with incremental compaction is supported, we might want to
|
|
845
|
-
// schedule some incremental compactions in parallel if needed.
|
|
846
|
-
char file_num_buf[kFormatFileNumberBufSize];
|
|
847
|
-
sr->Dump(file_num_buf, sizeof(file_num_buf), true);
|
|
848
|
-
ROCKS_LOG_BUFFER(
|
|
849
|
-
log_buffer_, "[%s] Universal: Possible candidate %s[%d] %s",
|
|
850
|
-
cf_name_.c_str(), file_num_buf, start_index,
|
|
851
|
-
" is already being compacted. No size amp reduction possible.\n");
|
|
852
|
-
return nullptr;
|
|
853
|
-
}
|
|
854
|
-
candidate_size += sr->compensated_file_size;
|
|
855
|
-
candidate_count++;
|
|
856
|
-
}
|
|
857
|
-
if (candidate_count == 0) {
|
|
858
|
-
return nullptr;
|
|
859
|
-
}
|
|
940
|
+
// percentage flexibility while reducing size amplification
|
|
941
|
+
const uint64_t ratio = mutable_cf_options_.compaction_options_universal
|
|
942
|
+
.max_size_amplification_percent;
|
|
860
943
|
|
|
861
944
|
// size amplification = percentage of additional size
|
|
862
945
|
if (candidate_size * 100 < ratio * base_sr_size) {
|
|
@@ -893,7 +976,7 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSizeAmp() {
|
|
|
893
976
|
}
|
|
894
977
|
}
|
|
895
978
|
return PickCompactionWithSortedRunRange(
|
|
896
|
-
start_index,
|
|
979
|
+
start_index, end_index, CompactionReason::kUniversalSizeAmplification);
|
|
897
980
|
}
|
|
898
981
|
|
|
899
982
|
Compaction* UniversalCompactionBuilder::PickIncrementalForReduceSizeAmp(
|
|
@@ -1442,4 +1525,3 @@ uint64_t UniversalCompactionBuilder::GetMaxOverlappingBytes() const {
|
|
|
1442
1525
|
}
|
|
1443
1526
|
}
|
|
1444
1527
|
} // namespace ROCKSDB_NAMESPACE
|
|
1445
|
-
|
|
@@ -1216,6 +1216,7 @@ class PrecludeLastLevelTest : public DBTestBase {
|
|
|
1216
1216
|
PrecludeLastLevelTest()
|
|
1217
1217
|
: DBTestBase("preclude_last_level_test", /*env_do_fsync=*/false) {
|
|
1218
1218
|
mock_clock_ = std::make_shared<MockSystemClock>(env_->GetSystemClock());
|
|
1219
|
+
mock_clock_->SetCurrentTime(kMockStartTime);
|
|
1219
1220
|
mock_env_ = std::make_unique<CompositeEnvWrapper>(env_, mock_clock_);
|
|
1220
1221
|
}
|
|
1221
1222
|
|
|
@@ -1223,6 +1224,10 @@ class PrecludeLastLevelTest : public DBTestBase {
|
|
|
1223
1224
|
std::unique_ptr<Env> mock_env_;
|
|
1224
1225
|
std::shared_ptr<MockSystemClock> mock_clock_;
|
|
1225
1226
|
|
|
1227
|
+
// Sufficient starting time that preserve time doesn't under-flow into
|
|
1228
|
+
// pre-history
|
|
1229
|
+
static constexpr uint32_t kMockStartTime = 10000000;
|
|
1230
|
+
|
|
1226
1231
|
void SetUp() override {
|
|
1227
1232
|
mock_clock_->InstallTimedWaitFixCallback();
|
|
1228
1233
|
SyncPoint::GetInstance()->SetCallBack(
|
|
@@ -1231,7 +1236,7 @@ class PrecludeLastLevelTest : public DBTestBase {
|
|
|
1231
1236
|
reinterpret_cast<PeriodicTaskScheduler*>(arg);
|
|
1232
1237
|
periodic_task_scheduler_ptr->TEST_OverrideTimer(mock_clock_.get());
|
|
1233
1238
|
});
|
|
1234
|
-
mock_clock_->SetCurrentTime(
|
|
1239
|
+
mock_clock_->SetCurrentTime(kMockStartTime);
|
|
1235
1240
|
}
|
|
1236
1241
|
};
|
|
1237
1242
|
|
|
@@ -1249,11 +1254,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeManualCompaction) {
|
|
|
1249
1254
|
options.num_levels = kNumLevels;
|
|
1250
1255
|
DestroyAndReopen(options);
|
|
1251
1256
|
|
|
1252
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1253
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1254
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1255
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
1256
|
-
|
|
1257
1257
|
int sst_num = 0;
|
|
1258
1258
|
// Write files that are overlap and enough to trigger compaction
|
|
1259
1259
|
for (; sst_num < kNumTrigger; sst_num++) {
|
|
@@ -1311,11 +1311,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeAutoCompaction) {
|
|
|
1311
1311
|
options.num_levels = kNumLevels;
|
|
1312
1312
|
DestroyAndReopen(options);
|
|
1313
1313
|
|
|
1314
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1315
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1316
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1317
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
1318
|
-
|
|
1319
1314
|
int sst_num = 0;
|
|
1320
1315
|
// Write files that are overlap and enough to trigger compaction
|
|
1321
1316
|
for (; sst_num < kNumTrigger; sst_num++) {
|
|
@@ -1387,11 +1382,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimePartial) {
|
|
|
1387
1382
|
options.num_levels = kNumLevels;
|
|
1388
1383
|
DestroyAndReopen(options);
|
|
1389
1384
|
|
|
1390
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1391
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1392
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1393
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
1394
|
-
|
|
1395
1385
|
int sst_num = 0;
|
|
1396
1386
|
// Write files that are overlap and enough to trigger compaction
|
|
1397
1387
|
for (; sst_num < kNumTrigger; sst_num++) {
|
|
@@ -1514,11 +1504,6 @@ TEST_F(PrecludeLastLevelTest, LastLevelOnlyCompactionPartial) {
|
|
|
1514
1504
|
options.num_levels = kNumLevels;
|
|
1515
1505
|
DestroyAndReopen(options);
|
|
1516
1506
|
|
|
1517
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1518
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1519
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1520
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
1521
|
-
|
|
1522
1507
|
int sst_num = 0;
|
|
1523
1508
|
// Write files that are overlap and enough to trigger compaction
|
|
1524
1509
|
for (; sst_num < kNumTrigger; sst_num++) {
|
|
@@ -1592,11 +1577,6 @@ TEST_P(PrecludeLastLevelTestWithParms, LastLevelOnlyCompactionNoPreclude) {
|
|
|
1592
1577
|
options.num_levels = kNumLevels;
|
|
1593
1578
|
DestroyAndReopen(options);
|
|
1594
1579
|
|
|
1595
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1596
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1597
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1598
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
1599
|
-
|
|
1600
1580
|
Random rnd(301);
|
|
1601
1581
|
int sst_num = 0;
|
|
1602
1582
|
// Write files that are overlap and enough to trigger compaction
|
|
@@ -1906,11 +1886,6 @@ TEST_F(PrecludeLastLevelTest, PartialPenultimateLevelCompaction) {
|
|
|
1906
1886
|
options.num_levels = kNumLevels;
|
|
1907
1887
|
DestroyAndReopen(options);
|
|
1908
1888
|
|
|
1909
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
1910
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
1911
|
-
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
1912
|
-
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
1913
|
-
|
|
1914
1889
|
Random rnd(301);
|
|
1915
1890
|
|
|
1916
1891
|
for (int i = 0; i < 300; i++) {
|
|
@@ -1996,7 +1971,13 @@ TEST_F(PrecludeLastLevelTest, PartialPenultimateLevelCompaction) {
|
|
|
1996
1971
|
Close();
|
|
1997
1972
|
}
|
|
1998
1973
|
|
|
1999
|
-
|
|
1974
|
+
// FIXME broken test:
|
|
1975
|
+
// dbfull()->TEST_WaitForCompact()
|
|
1976
|
+
// Corruption: force_consistency_checks(DEBUG): VersionBuilder: L5 has
|
|
1977
|
+
// overlapping ranges:
|
|
1978
|
+
// file #14 largest key: '6B6579303030303134' seq:32, type:1 vs.
|
|
1979
|
+
// file #19 smallest key: '6B6579303030303130' seq:10, type:1
|
|
1980
|
+
TEST_F(PrecludeLastLevelTest, DISABLED_RangeDelsCauseFileEndpointsToOverlap) {
|
|
2000
1981
|
const int kNumLevels = 7;
|
|
2001
1982
|
const int kSecondsPerKey = 10;
|
|
2002
1983
|
const int kNumFiles = 3;
|
|
@@ -2017,12 +1998,6 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
|
|
|
2017
1998
|
options.target_file_size_base = kFileBytes;
|
|
2018
1999
|
DestroyAndReopen(options);
|
|
2019
2000
|
|
|
2020
|
-
// pass some time first, otherwise the first a few keys write time are going
|
|
2021
|
-
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
2022
|
-
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
2023
|
-
mock_clock_->MockSleepForSeconds(static_cast<int>(kSecondsPerKey));
|
|
2024
|
-
});
|
|
2025
|
-
|
|
2026
2001
|
// Flush an L0 file with the following contents (new to old):
|
|
2027
2002
|
//
|
|
2028
2003
|
// Range deletions [4, 6) [7, 8) [9, 11)
|
|
@@ -2139,7 +2114,6 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
|
|
|
2139
2114
|
Close();
|
|
2140
2115
|
}
|
|
2141
2116
|
|
|
2142
|
-
|
|
2143
2117
|
} // namespace ROCKSDB_NAMESPACE
|
|
2144
2118
|
|
|
2145
2119
|
int main(int argc, char** argv) {
|
|
@@ -165,6 +165,7 @@ void DoRandomIteraratorTest(DB* db, std::vector<std::string> source_strings,
|
|
|
165
165
|
AssertItersEqual(iter.get(), result_iter.get());
|
|
166
166
|
is_valid = iter->Valid();
|
|
167
167
|
}
|
|
168
|
+
ASSERT_OK(iter->status());
|
|
168
169
|
}
|
|
169
170
|
|
|
170
171
|
class DoubleComparator : public Comparator {
|
|
@@ -138,6 +138,7 @@ TEST_F(DBBasicTest, ReadOnlyDB) {
|
|
|
138
138
|
ASSERT_OK(iter->status());
|
|
139
139
|
++count;
|
|
140
140
|
}
|
|
141
|
+
ASSERT_OK(iter->status());
|
|
141
142
|
// Always expect two keys: "foo" and "bar"
|
|
142
143
|
ASSERT_EQ(count, 2);
|
|
143
144
|
};
|
|
@@ -1427,10 +1428,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1427
1428
|
int retries = 0;
|
|
1428
1429
|
bool last_try = false;
|
|
1429
1430
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
1430
|
-
"DBImpl::MultiGet::LastTry", [&](void* /*arg*/) {
|
|
1431
|
-
last_try = true;
|
|
1432
|
-
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
1433
|
-
});
|
|
1431
|
+
"DBImpl::MultiGet::LastTry", [&](void* /*arg*/) { last_try = true; });
|
|
1434
1432
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
1435
1433
|
"DBImpl::MultiGet::AfterRefSV", [&](void* /*arg*/) {
|
|
1436
1434
|
if (last_try) {
|
|
@@ -1447,8 +1445,28 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1447
1445
|
}
|
|
1448
1446
|
}
|
|
1449
1447
|
});
|
|
1448
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency({
|
|
1449
|
+
{"DBImpl::MultiGet::AfterLastTryRefSV",
|
|
1450
|
+
"DBMultiGetTestWithParam::MultiGetMultiCFMutex:BeforeCreateSV"},
|
|
1451
|
+
{"DBMultiGetTestWithParam::MultiGetMultiCFMutex:AfterCreateSV",
|
|
1452
|
+
"DBImpl::MultiGet::BeforeLastTryUnRefSV"},
|
|
1453
|
+
});
|
|
1450
1454
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
1451
1455
|
|
|
1456
|
+
port::Thread create_sv_thread([this]() {
|
|
1457
|
+
TEST_SYNC_POINT(
|
|
1458
|
+
"DBMultiGetTestWithParam::MultiGetMultiCFMutex:BeforeCreateSV");
|
|
1459
|
+
// Create a new SuperVersion for each column family after last_try
|
|
1460
|
+
// of MultiGet ref SuperVersion and before unref it.
|
|
1461
|
+
for (int i = 0; i < 8; ++i) {
|
|
1462
|
+
ASSERT_OK(Put(i, "cf" + std::to_string(i) + "_key",
|
|
1463
|
+
"cf" + std::to_string(i) + "_val_after_last_try"));
|
|
1464
|
+
ASSERT_OK(Flush(i));
|
|
1465
|
+
}
|
|
1466
|
+
TEST_SYNC_POINT(
|
|
1467
|
+
"DBMultiGetTestWithParam::MultiGetMultiCFMutex:AfterCreateSV");
|
|
1468
|
+
});
|
|
1469
|
+
|
|
1452
1470
|
std::vector<int> cfs;
|
|
1453
1471
|
std::vector<std::string> keys;
|
|
1454
1472
|
std::vector<std::string> values;
|
|
@@ -1460,6 +1478,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1460
1478
|
|
|
1461
1479
|
values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
|
|
1462
1480
|
std::get<1>(GetParam()));
|
|
1481
|
+
create_sv_thread.join();
|
|
1463
1482
|
ASSERT_TRUE(last_try);
|
|
1464
1483
|
ASSERT_EQ(values.size(), 8);
|
|
1465
1484
|
for (unsigned int j = 0; j < values.size(); ++j) {
|
|
@@ -1473,6 +1492,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
|
|
|
1473
1492
|
->cfd();
|
|
1474
1493
|
ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVInUse);
|
|
1475
1494
|
}
|
|
1495
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
1476
1496
|
}
|
|
1477
1497
|
|
|
1478
1498
|
TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
|
|
@@ -3635,10 +3655,12 @@ class DBBasicTestMultiGet : public DBTestBase {
|
|
|
3635
3655
|
|
|
3636
3656
|
Status Insert(const Slice& key, Cache::ObjectPtr value,
|
|
3637
3657
|
const CacheItemHelper* helper, size_t charge,
|
|
3638
|
-
Handle** handle = nullptr,
|
|
3639
|
-
|
|
3658
|
+
Handle** handle = nullptr, Priority priority = Priority::LOW,
|
|
3659
|
+
const Slice& compressed = Slice(),
|
|
3660
|
+
CompressionType type = kNoCompression) override {
|
|
3640
3661
|
num_inserts_++;
|
|
3641
|
-
return target_->Insert(key, value, helper, charge, handle, priority
|
|
3662
|
+
return target_->Insert(key, value, helper, charge, handle, priority,
|
|
3663
|
+
compressed, type);
|
|
3642
3664
|
}
|
|
3643
3665
|
|
|
3644
3666
|
Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
|
|
@@ -294,7 +294,9 @@ class ReadOnlyCacheWrapper : public CacheWrapper {
|
|
|
294
294
|
|
|
295
295
|
Status Insert(const Slice& /*key*/, Cache::ObjectPtr /*value*/,
|
|
296
296
|
const CacheItemHelper* /*helper*/, size_t /*charge*/,
|
|
297
|
-
Handle** /*handle*/, Priority /*priority
|
|
297
|
+
Handle** /*handle*/, Priority /*priority*/,
|
|
298
|
+
const Slice& /*compressed*/,
|
|
299
|
+
CompressionType /*type*/) override {
|
|
298
300
|
return Status::NotSupported();
|
|
299
301
|
}
|
|
300
302
|
};
|
|
@@ -387,6 +389,7 @@ TEST_F(DBBlockCacheTest, FillCacheAndIterateDB) {
|
|
|
387
389
|
while (iter->Valid()) {
|
|
388
390
|
iter->Next();
|
|
389
391
|
}
|
|
392
|
+
ASSERT_OK(iter->status());
|
|
390
393
|
delete iter;
|
|
391
394
|
iter = nullptr;
|
|
392
395
|
}
|
|
@@ -628,13 +631,15 @@ class MockCache : public LRUCache {
|
|
|
628
631
|
|
|
629
632
|
Status Insert(const Slice& key, Cache::ObjectPtr value,
|
|
630
633
|
const Cache::CacheItemHelper* helper, size_t charge,
|
|
631
|
-
Handle** handle, Priority priority
|
|
634
|
+
Handle** handle, Priority priority, const Slice& compressed,
|
|
635
|
+
CompressionType type) override {
|
|
632
636
|
if (priority == Priority::LOW) {
|
|
633
637
|
low_pri_insert_count++;
|
|
634
638
|
} else {
|
|
635
639
|
high_pri_insert_count++;
|
|
636
640
|
}
|
|
637
|
-
return LRUCache::Insert(key, value, helper, charge, handle, priority
|
|
641
|
+
return LRUCache::Insert(key, value, helper, charge, handle, priority,
|
|
642
|
+
compressed, type);
|
|
638
643
|
}
|
|
639
644
|
};
|
|
640
645
|
|
|
@@ -1775,6 +1775,64 @@ TEST_F(DBBloomFilterTest, ContextCustomFilterPolicy) {
|
|
|
1775
1775
|
}
|
|
1776
1776
|
}
|
|
1777
1777
|
|
|
1778
|
+
TEST_F(DBBloomFilterTest, MutatingRibbonFilterPolicy) {
|
|
1779
|
+
// Test that RibbonFilterPolicy has a mutable bloom_before_level fields that
|
|
1780
|
+
// can be updated through SetOptions
|
|
1781
|
+
|
|
1782
|
+
Options options = CurrentOptions();
|
|
1783
|
+
options.statistics = CreateDBStatistics();
|
|
1784
|
+
auto& stats = *options.statistics;
|
|
1785
|
+
BlockBasedTableOptions table_options;
|
|
1786
|
+
// First config forces Bloom filter, to establish a baseline before
|
|
1787
|
+
// SetOptions().
|
|
1788
|
+
table_options.filter_policy.reset(NewRibbonFilterPolicy(10, INT_MAX));
|
|
1789
|
+
double expected_bpk = 10.0;
|
|
1790
|
+
// Other configs to try, with approx expected bits per key
|
|
1791
|
+
std::vector<std::pair<std::string, double>> configs = {{"-1", 7.0},
|
|
1792
|
+
{"0", 10.0}};
|
|
1793
|
+
|
|
1794
|
+
table_options.cache_index_and_filter_blocks = true;
|
|
1795
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1796
|
+
|
|
1797
|
+
ASSERT_OK(TryReopen(options));
|
|
1798
|
+
|
|
1799
|
+
char v[] = "a";
|
|
1800
|
+
|
|
1801
|
+
for (;; ++(v[0])) {
|
|
1802
|
+
const int maxKey = 8000;
|
|
1803
|
+
for (int i = 0; i < maxKey; i++) {
|
|
1804
|
+
ASSERT_OK(Put(Key(i), v));
|
|
1805
|
+
}
|
|
1806
|
+
ASSERT_OK(Flush());
|
|
1807
|
+
|
|
1808
|
+
for (int i = 0; i < maxKey; i++) {
|
|
1809
|
+
ASSERT_EQ(Get(Key(i)), v);
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
uint64_t filter_bytes =
|
|
1813
|
+
stats.getAndResetTickerCount(BLOCK_CACHE_FILTER_BYTES_INSERT);
|
|
1814
|
+
|
|
1815
|
+
EXPECT_NEAR(filter_bytes * 8.0 / maxKey, expected_bpk, 0.3);
|
|
1816
|
+
|
|
1817
|
+
if (configs.empty()) {
|
|
1818
|
+
break;
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
ASSERT_OK(
|
|
1822
|
+
db_->SetOptions({{"table_factory.filter_policy.bloom_before_level",
|
|
1823
|
+
configs.back().first}}));
|
|
1824
|
+
|
|
1825
|
+
// Ensure original object is mutated
|
|
1826
|
+
std::string val;
|
|
1827
|
+
ASSERT_OK(
|
|
1828
|
+
table_options.filter_policy->GetOption({}, "bloom_before_level", &val));
|
|
1829
|
+
ASSERT_EQ(configs.back().first, val);
|
|
1830
|
+
|
|
1831
|
+
expected_bpk = configs.back().second;
|
|
1832
|
+
configs.pop_back();
|
|
1833
|
+
}
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1778
1836
|
class SliceTransformLimitedDomain : public SliceTransform {
|
|
1779
1837
|
const char* Name() const override { return "SliceTransformLimitedDomain"; }
|
|
1780
1838
|
|
|
@@ -1847,6 +1905,7 @@ TEST_F(DBBloomFilterTest, PrefixExtractorWithFilter2) {
|
|
|
1847
1905
|
for (iter->Seek("zzzzz_AAAA"); iter->Valid(); iter->Next()) {
|
|
1848
1906
|
iter_res.emplace_back(iter->value().ToString());
|
|
1849
1907
|
}
|
|
1908
|
+
ASSERT_OK(iter->status());
|
|
1850
1909
|
|
|
1851
1910
|
std::vector<std::string> expected_res = {"val1", "val2", "val3", "val4"};
|
|
1852
1911
|
ASSERT_EQ(iter_res, expected_res);
|