@nxtedition/rocksdb 6.0.0-alpha.0 → 6.0.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/BUILDING.md +10 -0
- package/binding.cc +14 -17
- package/binding.gyp +2 -2
- package/deps/rocksdb/build_version.cc +4 -10
- package/deps/rocksdb/rocksdb/CMakeLists.txt +17 -3
- package/deps/rocksdb/rocksdb/Makefile +57 -86
- package/deps/rocksdb/rocksdb/TARGETS +4 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
- package/deps/rocksdb/rocksdb/common.mk +30 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/builder.cc +11 -4
- package/deps/rocksdb/rocksdb/db/c.cc +45 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +25 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +4 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +25 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +6 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +69 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +21 -21
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +135 -32
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +15 -14
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +44 -42
- package/deps/rocksdb/rocksdb/db/db_test2.cc +23 -19
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +95 -17
- package/deps/rocksdb/rocksdb/db/db_test_util.h +48 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +34 -12
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +3 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +18 -4
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
- package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
- package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
- package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -4
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
- package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +31 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +359 -275
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
- package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
- package/deps/rocksdb/rocksdb/env/env.cc +0 -60
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
- package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
- package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +69 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +28 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +2 -8
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +34 -38
- package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
- package/deps/rocksdb/rocksdb/options/db_options.cc +38 -17
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +82 -39
- package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +115 -59
- package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
- package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +14 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +85 -41
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +42 -72
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +7 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +6 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -5
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +22 -20
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +14 -11
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
- package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
- package/deps/rocksdb/rocksdb/table/unique_id.cc +57 -25
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +34 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +254 -98
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +17 -3
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
- package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
- package/deps/rocksdb/rocksdb/util/compression.h +7 -7
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
- package/deps/rocksdb/rocksdb/util/heap.h +5 -3
- package/deps/rocksdb/rocksdb/util/random.cc +1 -5
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
- package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
- package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
- package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +40 -31
- package/package.json +2 -2
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/python.mk +0 -9
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-arm64/node.napi.node +0 -0
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include <vector>
|
|
23
23
|
|
|
24
24
|
#include "cache/lru_cache.h"
|
|
25
|
+
#include "db/db_test_util.h"
|
|
25
26
|
#include "db/dbformat.h"
|
|
26
27
|
#include "db/memtable.h"
|
|
27
28
|
#include "db/write_batch_internal.h"
|
|
@@ -1126,8 +1127,9 @@ class TableTest : public testing::Test {
|
|
|
1126
1127
|
};
|
|
1127
1128
|
|
|
1128
1129
|
class GeneralTableTest : public TableTest {};
|
|
1130
|
+
class BlockBasedTableTestBase : public TableTest {};
|
|
1129
1131
|
class BlockBasedTableTest
|
|
1130
|
-
: public
|
|
1132
|
+
: public BlockBasedTableTestBase,
|
|
1131
1133
|
virtual public ::testing::WithParamInterface<uint32_t> {
|
|
1132
1134
|
public:
|
|
1133
1135
|
BlockBasedTableTest() : format_(GetParam()) {
|
|
@@ -1377,9 +1379,9 @@ TEST_F(TablePropertyTest, PrefixScanTest) {
|
|
|
1377
1379
|
pos->first.compare(0, prefix.size(), prefix) == 0;
|
|
1378
1380
|
++pos) {
|
|
1379
1381
|
++num;
|
|
1380
|
-
auto key = prefix + "." +
|
|
1382
|
+
auto key = prefix + "." + std::to_string(num);
|
|
1381
1383
|
ASSERT_EQ(key, pos->first);
|
|
1382
|
-
ASSERT_EQ(
|
|
1384
|
+
ASSERT_EQ(std::to_string(num), pos->second);
|
|
1383
1385
|
}
|
|
1384
1386
|
ASSERT_EQ(3, num);
|
|
1385
1387
|
}
|
|
@@ -1428,12 +1430,19 @@ TestIds GetUniqueId(TableProperties* tp, std::unordered_set<uint64_t>* seen,
|
|
|
1428
1430
|
tp->orig_file_number = file_number;
|
|
1429
1431
|
TestIds t;
|
|
1430
1432
|
{
|
|
1433
|
+
std::string euid;
|
|
1434
|
+
EXPECT_OK(GetExtendedUniqueIdFromTableProperties(*tp, &euid));
|
|
1435
|
+
EXPECT_EQ(euid.size(), 24U);
|
|
1436
|
+
t.external_id[0] = DecodeFixed64(&euid[0]);
|
|
1437
|
+
t.external_id[1] = DecodeFixed64(&euid[8]);
|
|
1438
|
+
t.external_id[2] = DecodeFixed64(&euid[16]);
|
|
1439
|
+
|
|
1431
1440
|
std::string uid;
|
|
1432
1441
|
EXPECT_OK(GetUniqueIdFromTableProperties(*tp, &uid));
|
|
1433
|
-
EXPECT_EQ(uid.size(),
|
|
1434
|
-
|
|
1435
|
-
t.external_id[
|
|
1436
|
-
t.external_id[
|
|
1442
|
+
EXPECT_EQ(uid.size(), 16U);
|
|
1443
|
+
EXPECT_EQ(uid, euid.substr(0, 16));
|
|
1444
|
+
EXPECT_EQ(t.external_id[0], DecodeFixed64(&uid[0]));
|
|
1445
|
+
EXPECT_EQ(t.external_id[1], DecodeFixed64(&uid[8]));
|
|
1437
1446
|
}
|
|
1438
1447
|
// All these should be effectively random
|
|
1439
1448
|
EXPECT_TRUE(seen->insert(t.external_id[0]).second);
|
|
@@ -1443,6 +1452,7 @@ TestIds GetUniqueId(TableProperties* tp, std::unordered_set<uint64_t>* seen,
|
|
|
1443
1452
|
// Get internal with internal API
|
|
1444
1453
|
EXPECT_OK(GetSstInternalUniqueId(db_id, db_session_id, file_number,
|
|
1445
1454
|
&t.internal_id));
|
|
1455
|
+
EXPECT_NE(t.internal_id, kNullUniqueId64x3);
|
|
1446
1456
|
|
|
1447
1457
|
// Verify relationship
|
|
1448
1458
|
UniqueId64x3 tmp = t.internal_id;
|
|
@@ -1450,6 +1460,21 @@ TestIds GetUniqueId(TableProperties* tp, std::unordered_set<uint64_t>* seen,
|
|
|
1450
1460
|
EXPECT_EQ(tmp, t.external_id);
|
|
1451
1461
|
ExternalUniqueIdToInternal(&tmp);
|
|
1452
1462
|
EXPECT_EQ(tmp, t.internal_id);
|
|
1463
|
+
|
|
1464
|
+
// And 128-bit internal version
|
|
1465
|
+
UniqueId64x2 tmp2{};
|
|
1466
|
+
EXPECT_OK(GetSstInternalUniqueId(db_id, db_session_id, file_number, &tmp2));
|
|
1467
|
+
EXPECT_NE(tmp2, kNullUniqueId64x2);
|
|
1468
|
+
|
|
1469
|
+
EXPECT_EQ(tmp2[0], t.internal_id[0]);
|
|
1470
|
+
EXPECT_EQ(tmp2[1], t.internal_id[1]);
|
|
1471
|
+
InternalUniqueIdToExternal(&tmp2);
|
|
1472
|
+
EXPECT_EQ(tmp2[0], t.external_id[0]);
|
|
1473
|
+
EXPECT_EQ(tmp2[1], t.external_id[1]);
|
|
1474
|
+
ExternalUniqueIdToInternal(&tmp2);
|
|
1475
|
+
EXPECT_EQ(tmp2[0], t.internal_id[0]);
|
|
1476
|
+
EXPECT_EQ(tmp2[1], t.internal_id[1]);
|
|
1477
|
+
|
|
1453
1478
|
return t;
|
|
1454
1479
|
}
|
|
1455
1480
|
} // namespace
|
|
@@ -1590,7 +1615,7 @@ TEST_F(TablePropertyTest, UniqueIdHumanStrings) {
|
|
|
1590
1615
|
SetGoodTableProperties(&tp);
|
|
1591
1616
|
|
|
1592
1617
|
std::string tmp;
|
|
1593
|
-
EXPECT_OK(
|
|
1618
|
+
EXPECT_OK(GetExtendedUniqueIdFromTableProperties(tp, &tmp));
|
|
1594
1619
|
EXPECT_EQ(tmp,
|
|
1595
1620
|
(std::string{{'\x64', '\x74', '\xdf', '\x65', '\x03', '\x23',
|
|
1596
1621
|
'\xbd', '\xf0', '\xb4', '\x8e', '\x64', '\xf3',
|
|
@@ -1599,6 +1624,9 @@ TEST_F(TablePropertyTest, UniqueIdHumanStrings) {
|
|
|
1599
1624
|
EXPECT_EQ(UniqueIdToHumanString(tmp),
|
|
1600
1625
|
"6474DF650323BDF0-B48E64F3039308CA-17284B32E7F7444B");
|
|
1601
1626
|
|
|
1627
|
+
EXPECT_OK(GetUniqueIdFromTableProperties(tp, &tmp));
|
|
1628
|
+
EXPECT_EQ(UniqueIdToHumanString(tmp), "6474DF650323BDF0-B48E64F3039308CA");
|
|
1629
|
+
|
|
1602
1630
|
// including zero padding
|
|
1603
1631
|
tmp = std::string(24U, '\0');
|
|
1604
1632
|
tmp[15] = '\x12';
|
|
@@ -1622,6 +1650,13 @@ TEST_F(TablePropertyTest, UniqueIdHumanStrings) {
|
|
|
1622
1650
|
|
|
1623
1651
|
tmp.resize(6);
|
|
1624
1652
|
EXPECT_EQ(UniqueIdToHumanString(tmp), "000000000012");
|
|
1653
|
+
|
|
1654
|
+
// Also internal IDs to human string
|
|
1655
|
+
UniqueId64x3 euid = {12345, 678, 9};
|
|
1656
|
+
EXPECT_EQ(InternalUniqueIdToHumanString(&euid), "{12345,678,9}");
|
|
1657
|
+
|
|
1658
|
+
UniqueId64x2 uid = {1234, 567890};
|
|
1659
|
+
EXPECT_EQ(InternalUniqueIdToHumanString(&uid), "{1234,567890}");
|
|
1625
1660
|
}
|
|
1626
1661
|
|
|
1627
1662
|
TEST_F(TablePropertyTest, UniqueIdsFailure) {
|
|
@@ -1632,16 +1667,22 @@ TEST_F(TablePropertyTest, UniqueIdsFailure) {
|
|
|
1632
1667
|
SetGoodTableProperties(&tp);
|
|
1633
1668
|
tp.db_id = "";
|
|
1634
1669
|
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1670
|
+
EXPECT_TRUE(
|
|
1671
|
+
GetExtendedUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1635
1672
|
|
|
1636
1673
|
// Missing session id
|
|
1637
1674
|
SetGoodTableProperties(&tp);
|
|
1638
1675
|
tp.db_session_id = "";
|
|
1639
1676
|
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1677
|
+
EXPECT_TRUE(
|
|
1678
|
+
GetExtendedUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1640
1679
|
|
|
1641
1680
|
// Missing file number
|
|
1642
1681
|
SetGoodTableProperties(&tp);
|
|
1643
1682
|
tp.orig_file_number = 0;
|
|
1644
1683
|
EXPECT_TRUE(GetUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1684
|
+
EXPECT_TRUE(
|
|
1685
|
+
GetExtendedUniqueIdFromTableProperties(tp, &tmp).IsNotSupported());
|
|
1645
1686
|
}
|
|
1646
1687
|
|
|
1647
1688
|
// This test include all the basic checks except those for index size and block
|
|
@@ -1705,7 +1746,7 @@ uint64_t BlockBasedTableTest::IndexUncompressedHelper(bool compressed) {
|
|
|
1705
1746
|
constexpr size_t kNumKeys = 10000;
|
|
1706
1747
|
|
|
1707
1748
|
for (size_t k = 0; k < kNumKeys; ++k) {
|
|
1708
|
-
c.Add("key" +
|
|
1749
|
+
c.Add("key" + std::to_string(k), "val" + std::to_string(k));
|
|
1709
1750
|
}
|
|
1710
1751
|
|
|
1711
1752
|
std::vector<std::string> keys;
|
|
@@ -5190,84 +5231,98 @@ TEST_P(BlockBasedTableTest, OutOfBoundOnNext) {
|
|
|
5190
5231
|
ASSERT_FALSE(iter->UpperBoundCheckResult() == IterBoundCheck::kOutOfBound);
|
|
5191
5232
|
}
|
|
5192
5233
|
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5234
|
+
class ChargeCompressionDictionaryBuildingBufferTest
|
|
5235
|
+
: public BlockBasedTableTestBase {};
|
|
5236
|
+
TEST_F(ChargeCompressionDictionaryBuildingBufferTest, Basic) {
|
|
5196
5237
|
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5197
5238
|
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5198
5239
|
constexpr std::size_t kCacheCapacity = 8 * 1024 * 1024;
|
|
5199
5240
|
constexpr std::size_t kMaxDictBytes = 1024;
|
|
5200
5241
|
constexpr std::size_t kMaxDictBufferBytes = 1024;
|
|
5201
5242
|
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
ImmutableOptions ioptions(options);
|
|
5224
|
-
MutableCFOptions moptions(options);
|
|
5225
|
-
InternalKeyComparator ikc(options.comparator);
|
|
5226
|
-
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
5243
|
+
for (CacheEntryRoleOptions::Decision
|
|
5244
|
+
charge_compression_dictionary_building_buffer :
|
|
5245
|
+
{CacheEntryRoleOptions::Decision::kEnabled,
|
|
5246
|
+
CacheEntryRoleOptions::Decision::kDisabled}) {
|
|
5247
|
+
BlockBasedTableOptions table_options;
|
|
5248
|
+
LRUCacheOptions lo;
|
|
5249
|
+
lo.capacity = kCacheCapacity;
|
|
5250
|
+
lo.num_shard_bits = 0; // 2^0 shard
|
|
5251
|
+
lo.strict_capacity_limit = true;
|
|
5252
|
+
std::shared_ptr<Cache> cache(NewLRUCache(lo));
|
|
5253
|
+
table_options.block_cache = cache;
|
|
5254
|
+
table_options.flush_block_policy_factory =
|
|
5255
|
+
std::make_shared<FlushBlockEveryKeyPolicyFactory>();
|
|
5256
|
+
table_options.cache_usage_options.options_overrides.insert(
|
|
5257
|
+
{CacheEntryRole::kCompressionDictionaryBuildingBuffer,
|
|
5258
|
+
{/*.charged = */ charge_compression_dictionary_building_buffer}});
|
|
5259
|
+
Options options;
|
|
5260
|
+
options.compression = kSnappyCompression;
|
|
5261
|
+
options.compression_opts.max_dict_bytes = kMaxDictBytes;
|
|
5262
|
+
options.compression_opts.max_dict_buffer_bytes = kMaxDictBufferBytes;
|
|
5263
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5227
5264
|
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
"test_cf", -1 /* level */),
|
|
5233
|
-
file_writer.get()));
|
|
5265
|
+
test::StringSink* sink = new test::StringSink();
|
|
5266
|
+
std::unique_ptr<FSWritableFile> holder(sink);
|
|
5267
|
+
std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
|
|
5268
|
+
std::move(holder), "test_file_name", FileOptions()));
|
|
5234
5269
|
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
// therefore won't trigger any data block's buffering
|
|
5240
|
-
builder->Add(ik1.Encode(), value1);
|
|
5241
|
-
ASSERT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5270
|
+
ImmutableOptions ioptions(options);
|
|
5271
|
+
MutableCFOptions moptions(options);
|
|
5272
|
+
InternalKeyComparator ikc(options.comparator);
|
|
5273
|
+
IntTblPropCollectorFactories int_tbl_prop_collector_factories;
|
|
5242
5274
|
|
|
5243
|
-
|
|
5244
|
-
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5275
|
+
std::unique_ptr<TableBuilder> builder(
|
|
5276
|
+
options.table_factory->NewTableBuilder(
|
|
5277
|
+
TableBuilderOptions(
|
|
5278
|
+
ioptions, moptions, ikc, &int_tbl_prop_collector_factories,
|
|
5279
|
+
kSnappyCompression, options.compression_opts,
|
|
5280
|
+
kUnknownColumnFamily, "test_cf", -1 /* level */),
|
|
5281
|
+
file_writer.get()));
|
|
5282
|
+
|
|
5283
|
+
std::string key1 = "key1";
|
|
5284
|
+
std::string value1 = "val1";
|
|
5285
|
+
InternalKey ik1(key1, 0 /* sequnce number */, kTypeValue);
|
|
5286
|
+
// Adding the first key won't trigger a flush by FlushBlockEveryKeyPolicy
|
|
5287
|
+
// therefore won't trigger any data block's buffering
|
|
5288
|
+
builder->Add(ik1.Encode(), value1);
|
|
5289
|
+
ASSERT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5290
|
+
|
|
5291
|
+
std::string key2 = "key2";
|
|
5292
|
+
std::string value2 = "val2";
|
|
5293
|
+
InternalKey ik2(key2, 1 /* sequnce number */, kTypeValue);
|
|
5294
|
+
// Adding the second key will trigger a flush of the last data block (the
|
|
5295
|
+
// one containing key1 and value1) by FlushBlockEveryKeyPolicy and hence
|
|
5296
|
+
// trigger buffering of that data block.
|
|
5297
|
+
builder->Add(ik2.Encode(), value2);
|
|
5298
|
+
// Cache charging will increase for last buffered data block (the one
|
|
5299
|
+
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5300
|
+
// that buffering and the cache will not be full after this reservation
|
|
5301
|
+
if (charge_compression_dictionary_building_buffer ==
|
|
5302
|
+
CacheEntryRoleOptions::Decision::kEnabled) {
|
|
5303
|
+
EXPECT_GE(cache->GetPinnedUsage(), 1 * kSizeDummyEntry);
|
|
5304
|
+
EXPECT_LT(cache->GetPinnedUsage(),
|
|
5305
|
+
1 * kSizeDummyEntry + kMetaDataChargeOverhead);
|
|
5306
|
+
} else {
|
|
5307
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5308
|
+
}
|
|
5256
5309
|
|
|
5257
|
-
|
|
5258
|
-
|
|
5310
|
+
ASSERT_OK(builder->Finish());
|
|
5311
|
+
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5312
|
+
}
|
|
5259
5313
|
}
|
|
5260
5314
|
|
|
5261
|
-
|
|
5262
|
-
|
|
5263
|
-
IncreaseCacheReservationForCompressDictBuildingBufferOnBuilderAddAndDecreaseOnBufferLimitExceed) {
|
|
5315
|
+
TEST_F(ChargeCompressionDictionaryBuildingBufferTest,
|
|
5316
|
+
BasicWithBufferLimitExceed) {
|
|
5264
5317
|
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5265
5318
|
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5266
5319
|
constexpr std::size_t kCacheCapacity = 8 * 1024 * 1024;
|
|
5267
5320
|
constexpr std::size_t kMaxDictBytes = 1024;
|
|
5268
5321
|
constexpr std::size_t kMaxDictBufferBytes = 2 * kSizeDummyEntry;
|
|
5269
5322
|
|
|
5270
|
-
|
|
5323
|
+
// `CacheEntryRoleOptions::charged` is enabled by default for
|
|
5324
|
+
// CacheEntryRole::kCompressionDictionaryBuildingBuffer
|
|
5325
|
+
BlockBasedTableOptions table_options;
|
|
5271
5326
|
LRUCacheOptions lo;
|
|
5272
5327
|
lo.capacity = kCacheCapacity;
|
|
5273
5328
|
lo.num_shard_bits = 0; // 2^0 shard
|
|
@@ -5315,7 +5370,7 @@ TEST_P(
|
|
|
5315
5370
|
// containing key1 and value1) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5316
5371
|
// buffering of the last data block.
|
|
5317
5372
|
builder->Add(ik2.Encode(), value2);
|
|
5318
|
-
// Cache
|
|
5373
|
+
// Cache charging will increase for last buffered data block (the one
|
|
5319
5374
|
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5320
5375
|
// the buffering and the cache will not be full after this reservation
|
|
5321
5376
|
EXPECT_GE(cache->GetPinnedUsage(), 2 * kSizeDummyEntry);
|
|
@@ -5329,7 +5384,7 @@ TEST_P(
|
|
|
5329
5384
|
// containing key2 and value2) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5330
5385
|
// buffering of the last data block.
|
|
5331
5386
|
builder->Add(ik3.Encode(), value3);
|
|
5332
|
-
// Cache
|
|
5387
|
+
// Cache charging will decrease since the buffer limit is now exceeded
|
|
5333
5388
|
// after the last buffering and EnterUnbuffered() is triggered
|
|
5334
5389
|
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5335
5390
|
|
|
@@ -5337,12 +5392,10 @@ TEST_P(
|
|
|
5337
5392
|
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5338
5393
|
}
|
|
5339
5394
|
|
|
5340
|
-
|
|
5341
|
-
BlockBasedTableTest,
|
|
5342
|
-
IncreaseCacheReservationForCompressDictBuildingBufferOnBuilderAddAndDecreaseOnCacheFull) {
|
|
5395
|
+
TEST_F(ChargeCompressionDictionaryBuildingBufferTest, BasicWithCacheFull) {
|
|
5343
5396
|
constexpr std::size_t kSizeDummyEntry = 256 * 1024;
|
|
5344
5397
|
constexpr std::size_t kMetaDataChargeOverhead = 10000;
|
|
5345
|
-
// A small kCacheCapacity is chosen so that increase cache
|
|
5398
|
+
// A small kCacheCapacity is chosen so that increase cache charging for
|
|
5346
5399
|
// buffering two data blocks, each containing key1/value1, key2/a big
|
|
5347
5400
|
// value2, will cause cache full
|
|
5348
5401
|
constexpr std::size_t kCacheCapacity =
|
|
@@ -5352,7 +5405,9 @@ TEST_P(
|
|
|
5352
5405
|
// (key2, value2) won't exceed the buffer limit
|
|
5353
5406
|
constexpr std::size_t kMaxDictBufferBytes = 1024 * 1024 * 1024;
|
|
5354
5407
|
|
|
5355
|
-
|
|
5408
|
+
// `CacheEntryRoleOptions::charged` is enabled by default for
|
|
5409
|
+
// CacheEntryRole::kCompressionDictionaryBuildingBuffer
|
|
5410
|
+
BlockBasedTableOptions table_options;
|
|
5356
5411
|
LRUCacheOptions lo;
|
|
5357
5412
|
lo.capacity = kCacheCapacity;
|
|
5358
5413
|
lo.num_shard_bits = 0; // 2^0 shard
|
|
@@ -5400,7 +5455,7 @@ TEST_P(
|
|
|
5400
5455
|
// containing key1 and value1) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5401
5456
|
// buffering of the last data block.
|
|
5402
5457
|
builder->Add(ik2.Encode(), value2);
|
|
5403
|
-
// Cache
|
|
5458
|
+
// Cache charging will increase for the last buffered data block (the one
|
|
5404
5459
|
// containing key1 and value1) since the buffer limit is not exceeded after
|
|
5405
5460
|
// the buffering and the cache will not be full after this reservation
|
|
5406
5461
|
EXPECT_GE(cache->GetPinnedUsage(), 1 * kSizeDummyEntry);
|
|
@@ -5414,7 +5469,7 @@ TEST_P(
|
|
|
5414
5469
|
// containing key2 and value2) by FlushBlockEveryKeyPolicy and hence trigger
|
|
5415
5470
|
// buffering of the last data block.
|
|
5416
5471
|
builder->Add(ik3.Encode(), value3);
|
|
5417
|
-
// Cache
|
|
5472
|
+
// Cache charging will decrease since the cache is now full after
|
|
5418
5473
|
// increasing reservation for the last buffered block and EnterUnbuffered() is
|
|
5419
5474
|
// triggered
|
|
5420
5475
|
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
@@ -5423,6 +5478,75 @@ TEST_P(
|
|
|
5423
5478
|
EXPECT_EQ(cache->GetPinnedUsage(), 0 * kSizeDummyEntry);
|
|
5424
5479
|
}
|
|
5425
5480
|
|
|
5481
|
+
class CacheUsageOptionsOverridesTest : public DBTestBase {
|
|
5482
|
+
public:
|
|
5483
|
+
CacheUsageOptionsOverridesTest()
|
|
5484
|
+
: DBTestBase("cache_usage_options_overrides_test",
|
|
5485
|
+
/*env_do_fsync=*/false) {}
|
|
5486
|
+
};
|
|
5487
|
+
|
|
5488
|
+
TEST_F(CacheUsageOptionsOverridesTest, SanitizeAndValidateOptions) {
|
|
5489
|
+
// To test `cache_usage_options.options_overrides` is sanitized
|
|
5490
|
+
// where `cache_usage_options.options` is used when there is no entry in
|
|
5491
|
+
// `cache_usage_options.options_overrides`
|
|
5492
|
+
Options options;
|
|
5493
|
+
options.create_if_missing = true;
|
|
5494
|
+
BlockBasedTableOptions table_options = BlockBasedTableOptions();
|
|
5495
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5496
|
+
Destroy(options);
|
|
5497
|
+
Status s = TryReopen(options);
|
|
5498
|
+
EXPECT_TRUE(s.ok());
|
|
5499
|
+
const auto* sanitized_table_options =
|
|
5500
|
+
options.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
5501
|
+
const auto sanitized_options_overrides =
|
|
5502
|
+
sanitized_table_options->cache_usage_options.options_overrides;
|
|
5503
|
+
EXPECT_EQ(sanitized_options_overrides.size(), kNumCacheEntryRoles);
|
|
5504
|
+
for (auto options_overrides_iter = sanitized_options_overrides.cbegin();
|
|
5505
|
+
options_overrides_iter != sanitized_options_overrides.cend();
|
|
5506
|
+
++options_overrides_iter) {
|
|
5507
|
+
CacheEntryRoleOptions role_options = options_overrides_iter->second;
|
|
5508
|
+
CacheEntryRoleOptions default_options =
|
|
5509
|
+
sanitized_table_options->cache_usage_options.options;
|
|
5510
|
+
EXPECT_TRUE(role_options == default_options);
|
|
5511
|
+
}
|
|
5512
|
+
Destroy(options);
|
|
5513
|
+
|
|
5514
|
+
// To test option validation on unsupported CacheEntryRole
|
|
5515
|
+
table_options = BlockBasedTableOptions();
|
|
5516
|
+
table_options.cache_usage_options.options_overrides.insert(
|
|
5517
|
+
{CacheEntryRole::kDataBlock,
|
|
5518
|
+
{/*.charged = */ CacheEntryRoleOptions::Decision::kDisabled}});
|
|
5519
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5520
|
+
Destroy(options);
|
|
5521
|
+
s = TryReopen(options);
|
|
5522
|
+
EXPECT_TRUE(s.IsNotSupported());
|
|
5523
|
+
EXPECT_TRUE(
|
|
5524
|
+
s.ToString().find("Enable/Disable CacheEntryRoleOptions::charged") !=
|
|
5525
|
+
std::string::npos);
|
|
5526
|
+
EXPECT_TRUE(
|
|
5527
|
+
s.ToString().find(kCacheEntryRoleToCamelString[static_cast<uint32_t>(
|
|
5528
|
+
CacheEntryRole::kDataBlock)]) != std::string::npos);
|
|
5529
|
+
Destroy(options);
|
|
5530
|
+
|
|
5531
|
+
// To test option validation on existence of block cache
|
|
5532
|
+
table_options = BlockBasedTableOptions();
|
|
5533
|
+
table_options.no_block_cache = true;
|
|
5534
|
+
table_options.cache_usage_options.options_overrides.insert(
|
|
5535
|
+
{CacheEntryRole::kFilterConstruction,
|
|
5536
|
+
{/*.charged = */ CacheEntryRoleOptions::Decision::kEnabled}});
|
|
5537
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
5538
|
+
Destroy(options);
|
|
5539
|
+
s = TryReopen(options);
|
|
5540
|
+
EXPECT_TRUE(s.IsInvalidArgument());
|
|
5541
|
+
EXPECT_TRUE(s.ToString().find("Enable CacheEntryRoleOptions::charged") !=
|
|
5542
|
+
std::string::npos);
|
|
5543
|
+
EXPECT_TRUE(
|
|
5544
|
+
s.ToString().find(kCacheEntryRoleToCamelString[static_cast<std::size_t>(
|
|
5545
|
+
CacheEntryRole::kFilterConstruction)]) != std::string::npos);
|
|
5546
|
+
EXPECT_TRUE(s.ToString().find("block cache is disabled") !=
|
|
5547
|
+
std::string::npos);
|
|
5548
|
+
Destroy(options);
|
|
5549
|
+
}
|
|
5426
5550
|
} // namespace ROCKSDB_NAMESPACE
|
|
5427
5551
|
|
|
5428
5552
|
int main(int argc, char** argv) {
|
|
@@ -58,7 +58,7 @@ Status DecodeSessionId(const std::string &db_session_id, uint64_t *upper,
|
|
|
58
58
|
|
|
59
59
|
Status GetSstInternalUniqueId(const std::string &db_id,
|
|
60
60
|
const std::string &db_session_id,
|
|
61
|
-
uint64_t file_number,
|
|
61
|
+
uint64_t file_number, UniqueIdPtr out) {
|
|
62
62
|
if (db_id.empty()) {
|
|
63
63
|
return Status::NotSupported("Missing db_id");
|
|
64
64
|
}
|
|
@@ -84,7 +84,7 @@ Status GetSstInternalUniqueId(const std::string &db_id,
|
|
|
84
84
|
// that here because of testing and old versions.)
|
|
85
85
|
// We put this first in anticipation of matching a small-ish set of cache
|
|
86
86
|
// key prefixes to cover entries relevant to any DB.
|
|
87
|
-
|
|
87
|
+
out.ptr[0] = session_lower;
|
|
88
88
|
|
|
89
89
|
// Hash the session upper (~39 bits entropy) and DB id (120+ bits entropy)
|
|
90
90
|
// for very high global uniqueness entropy.
|
|
@@ -97,10 +97,12 @@ Status GetSstInternalUniqueId(const std::string &db_id,
|
|
|
97
97
|
// Xor in file number for guaranteed uniqueness by file number for a given
|
|
98
98
|
// session and DB id. (Xor slightly better than + here. See
|
|
99
99
|
// https://github.com/pdillinger/unique_id )
|
|
100
|
-
|
|
100
|
+
out.ptr[1] = db_a ^ file_number;
|
|
101
101
|
|
|
102
102
|
// Extra (optional) global uniqueness
|
|
103
|
-
(
|
|
103
|
+
if (out.extended) {
|
|
104
|
+
out.ptr[2] = db_b;
|
|
105
|
+
}
|
|
104
106
|
|
|
105
107
|
return Status::OK();
|
|
106
108
|
}
|
|
@@ -114,46 +116,63 @@ constexpr uint64_t kHiOffsetForZero = 17391078804906429400U;
|
|
|
114
116
|
constexpr uint64_t kLoOffsetForZero = 6417269962128484497U;
|
|
115
117
|
} // namespace
|
|
116
118
|
|
|
117
|
-
void InternalUniqueIdToExternal(
|
|
119
|
+
void InternalUniqueIdToExternal(UniqueIdPtr in_out) {
|
|
118
120
|
uint64_t hi, lo;
|
|
119
|
-
BijectiveHash2x64(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
(
|
|
121
|
+
BijectiveHash2x64(in_out.ptr[1] + kHiOffsetForZero,
|
|
122
|
+
in_out.ptr[0] + kLoOffsetForZero, &hi, &lo);
|
|
123
|
+
in_out.ptr[0] = lo;
|
|
124
|
+
in_out.ptr[1] = hi;
|
|
125
|
+
if (in_out.extended) {
|
|
126
|
+
in_out.ptr[2] += lo + hi;
|
|
127
|
+
}
|
|
124
128
|
}
|
|
125
129
|
|
|
126
|
-
void ExternalUniqueIdToInternal(
|
|
127
|
-
uint64_t lo =
|
|
128
|
-
uint64_t hi =
|
|
129
|
-
(
|
|
130
|
+
void ExternalUniqueIdToInternal(UniqueIdPtr in_out) {
|
|
131
|
+
uint64_t lo = in_out.ptr[0];
|
|
132
|
+
uint64_t hi = in_out.ptr[1];
|
|
133
|
+
if (in_out.extended) {
|
|
134
|
+
in_out.ptr[2] -= lo + hi;
|
|
135
|
+
}
|
|
130
136
|
BijectiveUnhash2x64(hi, lo, &hi, &lo);
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
in_out.ptr[0] = lo - kLoOffsetForZero;
|
|
138
|
+
in_out.ptr[1] = hi - kHiOffsetForZero;
|
|
133
139
|
}
|
|
134
140
|
|
|
135
|
-
std::string EncodeUniqueIdBytes(
|
|
136
|
-
std::string ret(24U, '\0');
|
|
137
|
-
EncodeFixed64(&ret[0], in[0]);
|
|
138
|
-
EncodeFixed64(&ret[8], in[1]);
|
|
139
|
-
|
|
141
|
+
std::string EncodeUniqueIdBytes(UniqueIdPtr in) {
|
|
142
|
+
std::string ret(in.extended ? 24U : 16U, '\0');
|
|
143
|
+
EncodeFixed64(&ret[0], in.ptr[0]);
|
|
144
|
+
EncodeFixed64(&ret[8], in.ptr[1]);
|
|
145
|
+
if (in.extended) {
|
|
146
|
+
EncodeFixed64(&ret[16], in.ptr[2]);
|
|
147
|
+
}
|
|
140
148
|
return ret;
|
|
141
149
|
}
|
|
142
150
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
template <typename ID>
|
|
152
|
+
Status GetUniqueIdFromTablePropertiesHelper(const TableProperties &props,
|
|
153
|
+
std::string *out_id) {
|
|
154
|
+
ID tmp{};
|
|
146
155
|
Status s = GetSstInternalUniqueId(props.db_id, props.db_session_id,
|
|
147
156
|
props.orig_file_number, &tmp);
|
|
148
157
|
if (s.ok()) {
|
|
149
158
|
InternalUniqueIdToExternal(&tmp);
|
|
150
|
-
*out_id = EncodeUniqueIdBytes(tmp);
|
|
159
|
+
*out_id = EncodeUniqueIdBytes(&tmp);
|
|
151
160
|
} else {
|
|
152
161
|
out_id->clear();
|
|
153
162
|
}
|
|
154
163
|
return s;
|
|
155
164
|
}
|
|
156
165
|
|
|
166
|
+
Status GetExtendedUniqueIdFromTableProperties(const TableProperties &props,
|
|
167
|
+
std::string *out_id) {
|
|
168
|
+
return GetUniqueIdFromTablePropertiesHelper<UniqueId64x3>(props, out_id);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
Status GetUniqueIdFromTableProperties(const TableProperties &props,
|
|
172
|
+
std::string *out_id) {
|
|
173
|
+
return GetUniqueIdFromTablePropertiesHelper<UniqueId64x2>(props, out_id);
|
|
174
|
+
}
|
|
175
|
+
|
|
157
176
|
std::string UniqueIdToHumanString(const std::string &id) {
|
|
158
177
|
// Not so efficient, but that's OK
|
|
159
178
|
std::string str = Slice(id).ToString(/*hex*/ true);
|
|
@@ -163,4 +182,17 @@ std::string UniqueIdToHumanString(const std::string &id) {
|
|
|
163
182
|
return str;
|
|
164
183
|
}
|
|
165
184
|
|
|
185
|
+
std::string InternalUniqueIdToHumanString(UniqueIdPtr in) {
|
|
186
|
+
std::string str = "{";
|
|
187
|
+
str += std::to_string(in.ptr[0]);
|
|
188
|
+
str += ",";
|
|
189
|
+
str += std::to_string(in.ptr[1]);
|
|
190
|
+
if (in.extended) {
|
|
191
|
+
str += ",";
|
|
192
|
+
str += std::to_string(in.ptr[2]);
|
|
193
|
+
}
|
|
194
|
+
str += "}";
|
|
195
|
+
return str;
|
|
196
|
+
}
|
|
197
|
+
|
|
166
198
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -11,8 +11,34 @@
|
|
|
11
11
|
|
|
12
12
|
namespace ROCKSDB_NAMESPACE {
|
|
13
13
|
|
|
14
|
+
// Standard size unique ID, good enough for almost all practical purposes
|
|
15
|
+
using UniqueId64x2 = std::array<uint64_t, 2>;
|
|
16
|
+
|
|
17
|
+
// Value never used as an actual unique ID so can be used for "null"
|
|
18
|
+
constexpr UniqueId64x2 kNullUniqueId64x2 = {};
|
|
19
|
+
|
|
20
|
+
// Extended size unique ID, for extra certainty of uniqueness among SST files
|
|
21
|
+
// spanning many hosts over a long time (rarely if ever needed)
|
|
14
22
|
using UniqueId64x3 = std::array<uint64_t, 3>;
|
|
15
23
|
|
|
24
|
+
// Value never used as an actual unique ID so can be used for "null"
|
|
25
|
+
constexpr UniqueId64x3 kNullUniqueId64x3 = {};
|
|
26
|
+
|
|
27
|
+
// Dynamic pointer wrapper for one of the two above
|
|
28
|
+
struct UniqueIdPtr {
|
|
29
|
+
uint64_t *ptr = nullptr;
|
|
30
|
+
bool extended = false;
|
|
31
|
+
|
|
32
|
+
/*implicit*/ UniqueIdPtr(UniqueId64x2 *id) {
|
|
33
|
+
ptr = (*id).data();
|
|
34
|
+
extended = false;
|
|
35
|
+
}
|
|
36
|
+
/*implicit*/ UniqueIdPtr(UniqueId64x3 *id) {
|
|
37
|
+
ptr = (*id).data();
|
|
38
|
+
extended = true;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
16
42
|
// Helper for GetUniqueIdFromTableProperties. This function can also be used
|
|
17
43
|
// for temporary ids for files without sufficient information in table
|
|
18
44
|
// properties. The internal unique id is more structured than the public
|
|
@@ -21,7 +47,7 @@ using UniqueId64x3 = std::array<uint64_t, 3>;
|
|
|
21
47
|
// is long term stable.
|
|
22
48
|
Status GetSstInternalUniqueId(const std::string &db_id,
|
|
23
49
|
const std::string &db_session_id,
|
|
24
|
-
uint64_t file_number,
|
|
50
|
+
uint64_t file_number, UniqueIdPtr out);
|
|
25
51
|
|
|
26
52
|
// Helper for GetUniqueIdFromTableProperties. External unique ids go through
|
|
27
53
|
// this extra hashing layer so that prefixes of the unique id have predictable
|
|
@@ -29,14 +55,18 @@ Status GetSstInternalUniqueId(const std::string &db_id,
|
|
|
29
55
|
// the full 192 bits.
|
|
30
56
|
// This transformation must be long term stable to ensure
|
|
31
57
|
// GetUniqueIdFromTableProperties is long term stable.
|
|
32
|
-
void InternalUniqueIdToExternal(
|
|
58
|
+
void InternalUniqueIdToExternal(UniqueIdPtr in_out);
|
|
33
59
|
|
|
34
60
|
// Reverse of InternalUniqueIdToExternal mostly for testing purposes
|
|
35
61
|
// (demonstrably 1-to-1 on the first 128 bits and on the full 192 bits).
|
|
36
|
-
void ExternalUniqueIdToInternal(
|
|
62
|
+
void ExternalUniqueIdToInternal(UniqueIdPtr in_out);
|
|
37
63
|
|
|
38
64
|
// Convert numerical format to byte format for public API
|
|
39
|
-
std::string EncodeUniqueIdBytes(
|
|
65
|
+
std::string EncodeUniqueIdBytes(UniqueIdPtr in);
|
|
66
|
+
|
|
67
|
+
// For presenting internal IDs for debugging purposes. Visually distinct from
|
|
68
|
+
// UniqueIdToHumanString for external IDs.
|
|
69
|
+
std::string InternalUniqueIdToHumanString(UniqueIdPtr in);
|
|
40
70
|
|
|
41
71
|
// Reformat a random value down to our "DB session id" format,
|
|
42
72
|
// which is intended to be compact and friendly for use in file names.
|
|
@@ -656,7 +656,7 @@ class SpecialSkipListFactory : public MemTableRepFactory {
|
|
|
656
656
|
std::string GetId() const override {
|
|
657
657
|
std::string id = Name();
|
|
658
658
|
if (num_entries_flush_ > 0) {
|
|
659
|
-
id.append(":").append(
|
|
659
|
+
id.append(":").append(std::to_string(num_entries_flush_));
|
|
660
660
|
}
|
|
661
661
|
return id;
|
|
662
662
|
}
|