@nxtedition/rocksdb 7.1.30 → 7.1.32
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/deps/rocksdb/rocksdb/CMakeLists.txt +2 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +15 -23
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +4 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -1
- package/deps/rocksdb/rocksdb/crash_test.mk +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +15 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +78 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +32 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +47 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +105 -166
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +46 -15
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +47 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +17 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +11 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +12 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +337 -103
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +524 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +164 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -23
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +30 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.h +9 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +29 -9
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +10 -7
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_set.cc +11 -6
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +59 -53
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +0 -2
- package/deps/rocksdb/rocksdb/env/env.cc +16 -19
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +20 -20
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +62 -60
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_test.cc +179 -176
- package/deps/rocksdb/rocksdb/env/file_system.cc +3 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -2
- package/deps/rocksdb/rocksdb/env/io_posix.h +1 -2
- package/deps/rocksdb/rocksdb/env/mock_env.h +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +4 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +6 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +2 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +6 -7
- package/deps/rocksdb/rocksdb/file/file_util.cc +1 -1
- package/deps/rocksdb/rocksdb/file/filename.cc +16 -17
- package/deps/rocksdb/rocksdb/file/filename.h +4 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +492 -496
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +1 -3
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +1 -0
- package/deps/rocksdb/rocksdb/file/read_write_util.h +1 -0
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +6 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/block_cache_trace_writer.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +166 -167
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +0 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +3 -7
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +20 -23
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger.cc +1 -3
- package/deps/rocksdb/rocksdb/logging/event_logger.h +4 -5
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +2 -1
- package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -3
- package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -2
- package/deps/rocksdb/rocksdb/logging/logging.h +3 -3
- package/deps/rocksdb/rocksdb/memory/allocator.h +1 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +2 -0
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -0
- package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +17 -20
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +13 -15
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +11 -10
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +3 -3
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +30 -28
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +4 -6
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +73 -70
- package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +1 -1
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +21 -23
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +24 -38
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +10 -17
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +19 -19
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +22 -30
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +4 -6
- package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +4 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +12 -14
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +2 -3
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -3
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +7 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +12 -22
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +7 -10
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/port/lang.h +3 -1
- package/deps/rocksdb/rocksdb/port/likely.h +2 -2
- package/deps/rocksdb/rocksdb/port/mmap.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_dirent.h +2 -2
- package/deps/rocksdb/rocksdb/port/port_posix.cc +32 -27
- package/deps/rocksdb/rocksdb/port/port_posix.h +31 -30
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -1
- package/deps/rocksdb/rocksdb/port/sys_time.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/io_win.h +6 -7
- package/deps/rocksdb/rocksdb/port/win/port_win.h +12 -20
- package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -4
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +30 -49
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +5 -5
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -62
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +2 -2
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +4 -3
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -6
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +1 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -6
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +90 -80
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +5 -4
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +63 -69
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +58 -57
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +3 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +35 -30
- package/deps/rocksdb/rocksdb/table/get_context.cc +16 -10
- package/deps/rocksdb/rocksdb/table/iter_heap.h +2 -0
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -3
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +31 -16
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +6 -6
- package/deps/rocksdb/rocksdb/table/multiget_context.h +5 -6
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +7 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +4 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +2 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +10 -21
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +14 -12
- package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +2 -5
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -3
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +0 -6
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +0 -33
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -6
- package/deps/rocksdb/rocksdb/table/table_properties.cc +24 -37
- package/deps/rocksdb/rocksdb/table/table_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +9 -8
- package/deps/rocksdb/rocksdb/table/table_test.cc +77 -82
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +8 -18
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +2 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +13 -18
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -7
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +1 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -7
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +3 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +296 -314
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +6 -6
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +57 -64
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +6 -5
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +10 -10
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +6 -3
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +12 -31
- package/deps/rocksdb/rocksdb/util/autovector.h +3 -6
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +12 -12
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +8 -12
- package/deps/rocksdb/rocksdb/util/coding.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding.h +17 -15
- package/deps/rocksdb/rocksdb/util/coding_test.cc +14 -15
- package/deps/rocksdb/rocksdb/util/comparator.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +6 -3
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +5 -8
- package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +202 -297
- package/deps/rocksdb/rocksdb/util/crc32c.h +2 -3
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +2 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +39 -54
- package/deps/rocksdb/rocksdb/util/defer.h +2 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +24 -29
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +4 -4
- package/deps/rocksdb/rocksdb/util/hash_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/heap.h +5 -4
- package/deps/rocksdb/rocksdb/util/heap_test.cc +15 -25
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.cc +7 -2
- package/deps/rocksdb/rocksdb/util/murmurhash.h +4 -3
- package/deps/rocksdb/rocksdb/util/mutexlock.h +5 -11
- package/deps/rocksdb/rocksdb/util/random.cc +1 -0
- package/deps/rocksdb/rocksdb/util/random.h +2 -4
- package/deps/rocksdb/rocksdb/util/random_test.cc +2 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +4 -3
- package/deps/rocksdb/rocksdb/util/slice.cc +1 -1
- package/deps/rocksdb/rocksdb/util/slice_test.cc +1 -2
- package/deps/rocksdb/rocksdb/util/status.cc +2 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +64 -76
- package/deps/rocksdb/rocksdb/util/thread_local.cc +18 -32
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -3
- package/deps/rocksdb/rocksdb/util/thread_operation.h +34 -43
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +54 -73
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +18 -18
- package/deps/rocksdb/rocksdb/util/timer.h +4 -9
- package/deps/rocksdb/rocksdb/util/timer_queue.h +1 -0
- package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +1 -2
- package/deps/rocksdb/rocksdb/util/xxhash.h +7 -4
- package/deps/rocksdb/rocksdb/util/xxph3.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +16 -24
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +106 -104
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +11 -15
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +12 -12
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +56 -55
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +91 -74
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +17 -34
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +21 -45
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +74 -97
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +17 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +19 -19
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +19 -18
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +7 -10
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +3 -4
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +10 -15
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -13
- package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +7 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +2 -4
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +39 -50
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +5 -7
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +5 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +3 -6
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +18 -13
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +1 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +15 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +14 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +5 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +2 -6
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +80 -79
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -17
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -84,7 +84,9 @@ struct FragmentedRangeTombstoneList {
|
|
|
84
84
|
|
|
85
85
|
// Returns true if the stored tombstones contain with one with a sequence
|
|
86
86
|
// number in [lower, upper].
|
|
87
|
-
|
|
87
|
+
// This method is not const as it internally lazy initialize a set of
|
|
88
|
+
// sequence numbers (`seq_set_`).
|
|
89
|
+
bool ContainsRange(SequenceNumber lower, SequenceNumber upper);
|
|
88
90
|
|
|
89
91
|
uint64_t num_unfragmented_tombstones() const {
|
|
90
92
|
return num_unfragmented_tombstones_;
|
|
@@ -113,6 +115,7 @@ struct FragmentedRangeTombstoneList {
|
|
|
113
115
|
std::vector<RangeTombstoneStack> tombstones_;
|
|
114
116
|
std::vector<SequenceNumber> tombstone_seqs_;
|
|
115
117
|
std::vector<Slice> tombstone_timestamps_;
|
|
118
|
+
std::once_flag seq_set_init_once_flag_;
|
|
116
119
|
std::set<SequenceNumber> seq_set_;
|
|
117
120
|
std::list<std::string> pinned_slices_;
|
|
118
121
|
PinnedIteratorsManager pinned_iters_mgr_;
|
|
@@ -131,12 +134,13 @@ struct FragmentedRangeTombstoneList {
|
|
|
131
134
|
// tombstone collapsing is always O(n log n).
|
|
132
135
|
class FragmentedRangeTombstoneIterator : public InternalIterator {
|
|
133
136
|
public:
|
|
137
|
+
FragmentedRangeTombstoneIterator(FragmentedRangeTombstoneList* tombstones,
|
|
138
|
+
const InternalKeyComparator& icmp,
|
|
139
|
+
SequenceNumber upper_bound,
|
|
140
|
+
const Slice* ts_upper_bound = nullptr,
|
|
141
|
+
SequenceNumber lower_bound = 0);
|
|
134
142
|
FragmentedRangeTombstoneIterator(
|
|
135
|
-
const FragmentedRangeTombstoneList
|
|
136
|
-
const InternalKeyComparator& icmp, SequenceNumber upper_bound,
|
|
137
|
-
const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0);
|
|
138
|
-
FragmentedRangeTombstoneIterator(
|
|
139
|
-
const std::shared_ptr<const FragmentedRangeTombstoneList>& tombstones,
|
|
143
|
+
const std::shared_ptr<FragmentedRangeTombstoneList>& tombstones,
|
|
140
144
|
const InternalKeyComparator& icmp, SequenceNumber upper_bound,
|
|
141
145
|
const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0);
|
|
142
146
|
FragmentedRangeTombstoneIterator(
|
|
@@ -311,9 +315,9 @@ class FragmentedRangeTombstoneIterator : public InternalIterator {
|
|
|
311
315
|
const RangeTombstoneStackEndComparator tombstone_end_cmp_;
|
|
312
316
|
const InternalKeyComparator* icmp_;
|
|
313
317
|
const Comparator* ucmp_;
|
|
314
|
-
std::shared_ptr<
|
|
318
|
+
std::shared_ptr<FragmentedRangeTombstoneList> tombstones_ref_;
|
|
315
319
|
std::shared_ptr<FragmentedRangeTombstoneListCache> tombstones_cache_ref_;
|
|
316
|
-
|
|
320
|
+
FragmentedRangeTombstoneList* tombstones_;
|
|
317
321
|
SequenceNumber upper_bound_;
|
|
318
322
|
SequenceNumber lower_bound_;
|
|
319
323
|
// Only consider timestamps <= ts_upper_bound_.
|
|
@@ -2403,12 +2403,16 @@ void Version::Get(const ReadOptions& read_options, const LookupKey& k,
|
|
|
2403
2403
|
// merge_operands are in saver and we hit the beginning of the key history
|
|
2404
2404
|
// do a final merge of nullptr and operands;
|
|
2405
2405
|
std::string* str_value = value != nullptr ? value->GetSelf() : nullptr;
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2406
|
+
if (str_value || columns) {
|
|
2407
|
+
*status = MergeHelper::TimedFullMerge(
|
|
2408
|
+
merge_operator_, user_key, nullptr, merge_context->GetOperands(),
|
|
2409
|
+
str_value, columns, info_log_, db_statistics_, clock_,
|
|
2410
|
+
nullptr /* result_operand */, true);
|
|
2411
|
+
if (status->ok()) {
|
|
2412
|
+
if (LIKELY(value != nullptr)) {
|
|
2413
|
+
value->PinSelf();
|
|
2414
|
+
}
|
|
2415
|
+
}
|
|
2412
2416
|
}
|
|
2413
2417
|
} else {
|
|
2414
2418
|
if (key_exists != nullptr) {
|
|
@@ -2833,6 +2837,7 @@ Status Version::MultiGetAsync(
|
|
|
2833
2837
|
std::vector<Status> statuses = folly::coro::blockingWait(
|
|
2834
2838
|
folly::coro::collectAllRange(std::move(mget_tasks))
|
|
2835
2839
|
.scheduleOn(&range->context()->executor()));
|
|
2840
|
+
mget_tasks.clear();
|
|
2836
2841
|
for (Status stat : statuses) {
|
|
2837
2842
|
if (!stat.ok()) {
|
|
2838
2843
|
s = stat;
|
|
@@ -209,6 +209,148 @@ TEST_F(DBWideBasicTest, PutEntityColumnFamily) {
|
|
|
209
209
|
ASSERT_OK(db_->Write(WriteOptions(), &batch));
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
TEST_F(DBWideBasicTest, MergePlainKeyValue) {
|
|
213
|
+
Options options = GetDefaultOptions();
|
|
214
|
+
options.create_if_missing = true;
|
|
215
|
+
options.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
216
|
+
Reopen(options);
|
|
217
|
+
|
|
218
|
+
// Put + Merge
|
|
219
|
+
constexpr char first_key[] = "first";
|
|
220
|
+
constexpr char first_base_value[] = "hello";
|
|
221
|
+
constexpr char first_merge_op[] = "world";
|
|
222
|
+
|
|
223
|
+
// Delete + Merge
|
|
224
|
+
constexpr char second_key[] = "second";
|
|
225
|
+
constexpr char second_merge_op[] = "foo";
|
|
226
|
+
|
|
227
|
+
// Merge without any preceding KV
|
|
228
|
+
constexpr char third_key[] = "third";
|
|
229
|
+
constexpr char third_merge_op[] = "bar";
|
|
230
|
+
|
|
231
|
+
auto write_base = [&]() {
|
|
232
|
+
// Write "base" KVs: a Put for the 1st key and a Delete for the 2nd one;
|
|
233
|
+
// note there is no "base" KV for the 3rd
|
|
234
|
+
ASSERT_OK(db_->Put(WriteOptions(), db_->DefaultColumnFamily(), first_key,
|
|
235
|
+
first_base_value));
|
|
236
|
+
ASSERT_OK(
|
|
237
|
+
db_->Delete(WriteOptions(), db_->DefaultColumnFamily(), second_key));
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
auto write_merge = [&]() {
|
|
241
|
+
// Write Merge operands
|
|
242
|
+
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), first_key,
|
|
243
|
+
first_merge_op));
|
|
244
|
+
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), second_key,
|
|
245
|
+
second_merge_op));
|
|
246
|
+
ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), third_key,
|
|
247
|
+
third_merge_op));
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
const std::string expected_first_column(std::string(first_base_value) + "," +
|
|
251
|
+
first_merge_op);
|
|
252
|
+
const WideColumns expected_first_columns{
|
|
253
|
+
{kDefaultWideColumnName, expected_first_column}};
|
|
254
|
+
const WideColumns expected_second_columns{
|
|
255
|
+
{kDefaultWideColumnName, second_merge_op}};
|
|
256
|
+
const WideColumns expected_third_columns{
|
|
257
|
+
{kDefaultWideColumnName, third_merge_op}};
|
|
258
|
+
|
|
259
|
+
auto verify = [&]() {
|
|
260
|
+
{
|
|
261
|
+
PinnableWideColumns result;
|
|
262
|
+
ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
|
|
263
|
+
first_key, &result));
|
|
264
|
+
ASSERT_EQ(result.columns(), expected_first_columns);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
{
|
|
268
|
+
PinnableWideColumns result;
|
|
269
|
+
ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
|
|
270
|
+
second_key, &result));
|
|
271
|
+
ASSERT_EQ(result.columns(), expected_second_columns);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
{
|
|
275
|
+
PinnableWideColumns result;
|
|
276
|
+
ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
|
|
277
|
+
third_key, &result));
|
|
278
|
+
|
|
279
|
+
ASSERT_EQ(result.columns(), expected_third_columns);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
{
|
|
283
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
|
|
284
|
+
|
|
285
|
+
iter->SeekToFirst();
|
|
286
|
+
ASSERT_TRUE(iter->Valid());
|
|
287
|
+
ASSERT_OK(iter->status());
|
|
288
|
+
ASSERT_EQ(iter->key(), first_key);
|
|
289
|
+
ASSERT_EQ(iter->value(), expected_first_columns[0].value());
|
|
290
|
+
ASSERT_EQ(iter->columns(), expected_first_columns);
|
|
291
|
+
|
|
292
|
+
iter->Next();
|
|
293
|
+
ASSERT_TRUE(iter->Valid());
|
|
294
|
+
ASSERT_OK(iter->status());
|
|
295
|
+
ASSERT_EQ(iter->key(), second_key);
|
|
296
|
+
ASSERT_EQ(iter->value(), expected_second_columns[0].value());
|
|
297
|
+
ASSERT_EQ(iter->columns(), expected_second_columns);
|
|
298
|
+
|
|
299
|
+
iter->Next();
|
|
300
|
+
ASSERT_TRUE(iter->Valid());
|
|
301
|
+
ASSERT_OK(iter->status());
|
|
302
|
+
ASSERT_EQ(iter->key(), third_key);
|
|
303
|
+
ASSERT_EQ(iter->value(), expected_third_columns[0].value());
|
|
304
|
+
ASSERT_EQ(iter->columns(), expected_third_columns);
|
|
305
|
+
|
|
306
|
+
iter->Next();
|
|
307
|
+
ASSERT_FALSE(iter->Valid());
|
|
308
|
+
ASSERT_OK(iter->status());
|
|
309
|
+
|
|
310
|
+
iter->SeekToLast();
|
|
311
|
+
ASSERT_TRUE(iter->Valid());
|
|
312
|
+
ASSERT_OK(iter->status());
|
|
313
|
+
ASSERT_EQ(iter->key(), third_key);
|
|
314
|
+
ASSERT_EQ(iter->value(), expected_third_columns[0].value());
|
|
315
|
+
ASSERT_EQ(iter->columns(), expected_third_columns);
|
|
316
|
+
|
|
317
|
+
iter->Prev();
|
|
318
|
+
ASSERT_TRUE(iter->Valid());
|
|
319
|
+
ASSERT_OK(iter->status());
|
|
320
|
+
ASSERT_EQ(iter->key(), second_key);
|
|
321
|
+
ASSERT_EQ(iter->value(), expected_second_columns[0].value());
|
|
322
|
+
ASSERT_EQ(iter->columns(), expected_second_columns);
|
|
323
|
+
|
|
324
|
+
iter->Prev();
|
|
325
|
+
ASSERT_TRUE(iter->Valid());
|
|
326
|
+
ASSERT_OK(iter->status());
|
|
327
|
+
ASSERT_EQ(iter->key(), first_key);
|
|
328
|
+
ASSERT_EQ(iter->value(), expected_first_columns[0].value());
|
|
329
|
+
ASSERT_EQ(iter->columns(), expected_first_columns);
|
|
330
|
+
|
|
331
|
+
iter->Prev();
|
|
332
|
+
ASSERT_FALSE(iter->Valid());
|
|
333
|
+
ASSERT_OK(iter->status());
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
// Base KVs (if any) and Merge operands both in memtable
|
|
338
|
+
write_base();
|
|
339
|
+
write_merge();
|
|
340
|
+
verify();
|
|
341
|
+
|
|
342
|
+
// Base KVs (if any) and Merge operands both in storage
|
|
343
|
+
ASSERT_OK(Flush());
|
|
344
|
+
verify();
|
|
345
|
+
|
|
346
|
+
// Base KVs (if any) in storage, Merge operands in memtable
|
|
347
|
+
DestroyAndReopen(options);
|
|
348
|
+
write_base();
|
|
349
|
+
ASSERT_OK(Flush());
|
|
350
|
+
write_merge();
|
|
351
|
+
verify();
|
|
352
|
+
}
|
|
353
|
+
|
|
212
354
|
TEST_F(DBWideBasicTest, PutEntityMergeNotSupported) {
|
|
213
355
|
Options options = GetDefaultOptions();
|
|
214
356
|
options.merge_operator = MergeOperators::CreateStringAppendOperator();
|
|
@@ -18,8 +18,8 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
18
18
|
|
|
19
19
|
bool IsStateTracked() const override { return false; }
|
|
20
20
|
|
|
21
|
-
// Given a key K and value V, this puts ("0"+K, "0"
|
|
22
|
-
// ("9"+K, "9"
|
|
21
|
+
// Given a key K and value V, this puts ("0"+K, V+"0"), ("1"+K, V+"1"), ...,
|
|
22
|
+
// ("9"+K, V+"9") in DB atomically i.e in a single batch.
|
|
23
23
|
// Also refer BatchedOpsStressTest::TestGet
|
|
24
24
|
Status TestPut(ThreadState* thread, WriteOptions& write_opts,
|
|
25
25
|
const ReadOptions& /* read_opts */,
|
|
@@ -29,12 +29,12 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
29
29
|
assert(!rand_column_families.empty());
|
|
30
30
|
assert(!rand_keys.empty());
|
|
31
31
|
|
|
32
|
-
const std::string
|
|
32
|
+
const std::string key_body = Key(rand_keys[0]);
|
|
33
33
|
|
|
34
34
|
const uint32_t value_base =
|
|
35
35
|
thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
|
|
36
36
|
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
37
|
-
const std::string
|
|
37
|
+
const std::string value_body = Slice(value, sz).ToString();
|
|
38
38
|
|
|
39
39
|
WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
|
|
40
40
|
FLAGS_batch_protection_bytes_per_key,
|
|
@@ -44,10 +44,14 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
44
44
|
assert(cfh);
|
|
45
45
|
|
|
46
46
|
for (int i = 9; i >= 0; --i) {
|
|
47
|
-
const std::string
|
|
47
|
+
const std::string num = std::to_string(i);
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
// Note: the digit in num is prepended to the key; however, it is appended
|
|
50
|
+
// to the value because we want the "value base" to be encoded uniformly
|
|
51
|
+
// at the beginning of the value for all types of stress tests (e.g.
|
|
52
|
+
// batched, non-batched, CF consistency).
|
|
53
|
+
const std::string k = num + key_body;
|
|
54
|
+
const std::string v = value_body + num;
|
|
51
55
|
|
|
52
56
|
if (FLAGS_use_merge) {
|
|
53
57
|
batch.Merge(cfh, k, v);
|
|
@@ -72,7 +76,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
72
76
|
return s;
|
|
73
77
|
}
|
|
74
78
|
|
|
75
|
-
// Given a key K, this deletes ("0"+K), ("1"+K)
|
|
79
|
+
// Given a key K, this deletes ("0"+K), ("1"+K), ..., ("9"+K)
|
|
76
80
|
// in DB atomically i.e in a single batch. Also refer MultiGet.
|
|
77
81
|
Status TestDelete(ThreadState* thread, WriteOptions& writeoptions,
|
|
78
82
|
const std::vector<int>& rand_column_families,
|
|
@@ -122,9 +126,9 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
122
126
|
std::terminate();
|
|
123
127
|
}
|
|
124
128
|
|
|
125
|
-
// Given a key K, this gets values for "0"+K, "1"+K
|
|
129
|
+
// Given a key K, this gets values for "0"+K, "1"+K, ..., "9"+K
|
|
126
130
|
// in the same snapshot, and verifies that all the values are of the form
|
|
127
|
-
// "0"
|
|
131
|
+
// V+"0", V+"1", ..., V+"9".
|
|
128
132
|
// ASSUMES that BatchedOpsStressTest::TestPut was used to put (K, V) into
|
|
129
133
|
// the DB.
|
|
130
134
|
Status TestGet(ThreadState* thread, const ReadOptions& readoptions,
|
|
@@ -156,13 +160,19 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
156
160
|
} else {
|
|
157
161
|
values[i] = from_db;
|
|
158
162
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
assert(!keys[i].empty());
|
|
164
|
+
assert(!values[i].empty());
|
|
165
|
+
|
|
166
|
+
const char expected = keys[i].front();
|
|
167
|
+
const char actual = values[i].back();
|
|
168
|
+
|
|
169
|
+
if (expected != actual) {
|
|
170
|
+
fprintf(stderr, "get error expected = %c actual = %c\n", expected,
|
|
171
|
+
actual);
|
|
164
172
|
}
|
|
165
|
-
|
|
173
|
+
|
|
174
|
+
values[i].pop_back(); // get rid of the differing character
|
|
175
|
+
|
|
166
176
|
thread->stats.AddGets(1, 1);
|
|
167
177
|
}
|
|
168
178
|
}
|
|
@@ -171,7 +181,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
171
181
|
// Now that we retrieved all values, check that they all match
|
|
172
182
|
for (int i = 1; i < 10; i++) {
|
|
173
183
|
if (values[i] != values[0]) {
|
|
174
|
-
fprintf(stderr, "error
|
|
184
|
+
fprintf(stderr, "get error: inconsistent values for key %s: %s, %s\n",
|
|
175
185
|
key.ToString(true).c_str(), StringToHex(values[0]).c_str(),
|
|
176
186
|
StringToHex(values[i]).c_str());
|
|
177
187
|
// we continue after error rather than exiting so that we can
|
|
@@ -188,8 +198,8 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
188
198
|
const std::vector<int64_t>& rand_keys) override {
|
|
189
199
|
size_t num_keys = rand_keys.size();
|
|
190
200
|
std::vector<Status> ret_status(num_keys);
|
|
191
|
-
std::array<std::string, 10> keys = {
|
|
192
|
-
|
|
201
|
+
std::array<std::string, 10> keys = {
|
|
202
|
+
{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}};
|
|
193
203
|
size_t num_prefixes = keys.size();
|
|
194
204
|
for (size_t rand_key = 0; rand_key < num_keys; ++rand_key) {
|
|
195
205
|
std::vector<Slice> key_slices;
|
|
@@ -214,7 +224,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
214
224
|
for (size_t i = 0; i < num_prefixes; i++) {
|
|
215
225
|
Status s = statuses[i];
|
|
216
226
|
if (!s.ok() && !s.IsNotFound()) {
|
|
217
|
-
fprintf(stderr, "
|
|
227
|
+
fprintf(stderr, "multiget error: %s\n", s.ToString().c_str());
|
|
218
228
|
thread->stats.AddErrors(1);
|
|
219
229
|
ret_status[rand_key] = s;
|
|
220
230
|
// we continue after error rather than exiting so that we can
|
|
@@ -223,17 +233,19 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
223
233
|
thread->stats.AddGets(1, 0);
|
|
224
234
|
ret_status[rand_key] = s;
|
|
225
235
|
} else {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
236
|
+
assert(!keys[i].empty());
|
|
237
|
+
assert(!values[i].empty());
|
|
238
|
+
|
|
239
|
+
const char expected = keys[i][0];
|
|
240
|
+
const char actual = values[i][values[i].size() - 1];
|
|
241
|
+
|
|
242
|
+
if (expected != actual) {
|
|
243
|
+
fprintf(stderr, "multiget error expected = %c actual = %c\n",
|
|
244
|
+
expected, actual);
|
|
231
245
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
str[0] = ' '; // blank out the differing character
|
|
236
|
-
values[i].PinSelf(str);
|
|
246
|
+
|
|
247
|
+
values[i].remove_suffix(1); // get rid of the differing character
|
|
248
|
+
|
|
237
249
|
thread->stats.AddGets(1, 1);
|
|
238
250
|
}
|
|
239
251
|
}
|
|
@@ -242,7 +254,8 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
242
254
|
// Now that we retrieved all values, check that they all match
|
|
243
255
|
for (size_t i = 1; i < num_prefixes; i++) {
|
|
244
256
|
if (values[i] != values[0]) {
|
|
245
|
-
fprintf(stderr,
|
|
257
|
+
fprintf(stderr,
|
|
258
|
+
"multiget error: inconsistent values for key %s: %s, %s\n",
|
|
246
259
|
StringToHex(key_str[i]).c_str(),
|
|
247
260
|
StringToHex(values[0].ToString()).c_str(),
|
|
248
261
|
StringToHex(values[i].ToString()).c_str());
|
|
@@ -255,11 +268,11 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
255
268
|
return ret_status;
|
|
256
269
|
}
|
|
257
270
|
|
|
258
|
-
// Given a key, this does prefix scans for "0"+P, "1"+P
|
|
271
|
+
// Given a key, this does prefix scans for "0"+P, "1"+P, ..., "9"+P
|
|
259
272
|
// in the same snapshot where P is the first FLAGS_prefix_size - 1 bytes
|
|
260
273
|
// of the key. Each of these 10 scans returns a series of values;
|
|
261
274
|
// each series should be the same length, and it is verified for each
|
|
262
|
-
// index i that all the i'th values are of the form "0"
|
|
275
|
+
// index i that all the i'th values are of the form V+"0", V+"1", ..., V+"9".
|
|
263
276
|
// ASSUMES that MultiPut was used to put (K, V)
|
|
264
277
|
Status TestPrefixScan(ThreadState* thread, const ReadOptions& readoptions,
|
|
265
278
|
const std::vector<int>& rand_column_families,
|
|
@@ -317,21 +330,24 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
317
330
|
iters[i]->key().starts_with(prefix_slices[i]));
|
|
318
331
|
values[i] = iters[i]->value().ToString();
|
|
319
332
|
|
|
320
|
-
// make sure the
|
|
321
|
-
|
|
322
|
-
|
|
333
|
+
// make sure the last character of the value is the expected digit
|
|
334
|
+
assert(!prefixes[i].empty());
|
|
335
|
+
assert(!values[i].empty());
|
|
336
|
+
|
|
337
|
+
const char expected = prefixes[i].front();
|
|
338
|
+
const char actual = values[i].back();
|
|
323
339
|
|
|
324
|
-
if (
|
|
325
|
-
fprintf(stderr, "error expected
|
|
326
|
-
|
|
340
|
+
if (expected != actual) {
|
|
341
|
+
fprintf(stderr, "prefix scan error expected = %c actual = %c\n",
|
|
342
|
+
expected, actual);
|
|
327
343
|
}
|
|
328
344
|
|
|
329
|
-
values[i]
|
|
345
|
+
values[i].pop_back(); // get rid of the differing character
|
|
330
346
|
|
|
331
347
|
// make sure all values are equivalent
|
|
332
348
|
if (values[i] != values[0]) {
|
|
333
349
|
fprintf(stderr,
|
|
334
|
-
"error : %" ROCKSDB_PRIszt
|
|
350
|
+
"prefix scan error : %" ROCKSDB_PRIszt
|
|
335
351
|
", inconsistent values for prefix %s: %s, %s\n",
|
|
336
352
|
i, prefix_slices[i].ToString(/* hex */ true).c_str(),
|
|
337
353
|
StringToHex(values[0]).c_str(),
|
|
@@ -341,16 +357,11 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
341
357
|
}
|
|
342
358
|
|
|
343
359
|
// make sure value() and columns() are consistent
|
|
344
|
-
// note: in these tests, value base is stored after a single-digit
|
|
345
|
-
// prefix
|
|
346
|
-
Slice value_base_slice = iters[i]->value();
|
|
347
|
-
value_base_slice.remove_prefix(1);
|
|
348
|
-
|
|
349
360
|
const WideColumns expected_columns = GenerateExpectedWideColumns(
|
|
350
|
-
GetValueBase(
|
|
361
|
+
GetValueBase(iters[i]->value()), iters[i]->value());
|
|
351
362
|
if (iters[i]->columns() != expected_columns) {
|
|
352
363
|
fprintf(stderr,
|
|
353
|
-
"error : %" ROCKSDB_PRIszt
|
|
364
|
+
"prefix scan error : %" ROCKSDB_PRIszt
|
|
354
365
|
", value and columns inconsistent for prefix %s: %s\n",
|
|
355
366
|
i, prefix_slices[i].ToString(/* hex */ true).c_str(),
|
|
356
367
|
DebugString(iters[i]->value(), iters[i]->columns(),
|
|
@@ -377,11 +388,6 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
377
388
|
return Status::OK();
|
|
378
389
|
}
|
|
379
390
|
|
|
380
|
-
Slice GetValueBaseSlice(Slice slice) override {
|
|
381
|
-
slice.remove_prefix(1);
|
|
382
|
-
return slice;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
391
|
void VerifyDb(ThreadState* /* thread */) const override {}
|
|
386
392
|
|
|
387
393
|
void ContinuouslyVerifyDb(ThreadState* /* thread */) const override {}
|
|
@@ -150,6 +150,7 @@ DECLARE_string(cache_type);
|
|
|
150
150
|
DECLARE_uint64(subcompactions);
|
|
151
151
|
DECLARE_uint64(periodic_compaction_seconds);
|
|
152
152
|
DECLARE_uint64(compaction_ttl);
|
|
153
|
+
DECLARE_bool(fifo_allow_compaction);
|
|
153
154
|
DECLARE_bool(allow_concurrent_memtable_write);
|
|
154
155
|
DECLARE_double(experimental_mempurge_threshold);
|
|
155
156
|
DECLARE_bool(enable_write_thread_adaptive_yield);
|
|
@@ -508,8 +509,8 @@ extern inline std::string Key(int64_t val) {
|
|
|
508
509
|
if (offset < weight) {
|
|
509
510
|
// Use the bottom 3 bits of offset as the number of trailing 'x's in the
|
|
510
511
|
// key. If the next key is going to be of the next level, then skip the
|
|
511
|
-
// trailer as it would break ordering. If the key length is already at
|
|
512
|
-
// skip the trailer.
|
|
512
|
+
// trailer as it would break ordering. If the key length is already at
|
|
513
|
+
// max, skip the trailer.
|
|
513
514
|
if (offset < weight - 1 && level < levels - 1) {
|
|
514
515
|
size_t trailer_len = offset & 0x7;
|
|
515
516
|
key.append(trailer_len, 'x');
|
|
@@ -379,6 +379,10 @@ DEFINE_uint64(compaction_ttl, 1000,
|
|
|
379
379
|
DEFINE_bool(allow_concurrent_memtable_write, false,
|
|
380
380
|
"Allow multi-writers to update mem tables in parallel.");
|
|
381
381
|
|
|
382
|
+
DEFINE_bool(fifo_allow_compaction, false,
|
|
383
|
+
"If true, set `Options::compaction_options_fifo.allow_compaction = "
|
|
384
|
+
"true`. It only take effect when FIFO compaction is used.");
|
|
385
|
+
|
|
382
386
|
DEFINE_double(experimental_mempurge_threshold, 0.0,
|
|
383
387
|
"Maximum estimated useful payload that triggers a "
|
|
384
388
|
"mempurge process to collect memtable garbage bytes.");
|
|
@@ -333,9 +333,7 @@ class SharedState {
|
|
|
333
333
|
uint64_t GetStartTimestamp() const { return start_timestamp_; }
|
|
334
334
|
|
|
335
335
|
private:
|
|
336
|
-
static void IgnoreReadErrorCallback(void*) {
|
|
337
|
-
ignore_read_error = true;
|
|
338
|
-
}
|
|
336
|
+
static void IgnoreReadErrorCallback(void*) { ignore_read_error = true; }
|
|
339
337
|
|
|
340
338
|
// Pick random keys in each column family that will not experience overwrite.
|
|
341
339
|
std::unordered_set<int64_t> GenerateNoOverwriteIds() const {
|
|
@@ -1487,10 +1487,8 @@ void StressTest::VerifyIterator(ThreadState* thread,
|
|
|
1487
1487
|
}
|
|
1488
1488
|
|
|
1489
1489
|
if (!*diverged && iter->Valid()) {
|
|
1490
|
-
const
|
|
1491
|
-
|
|
1492
|
-
const WideColumns expected_columns = GenerateExpectedWideColumns(
|
|
1493
|
-
GetValueBase(value_base_slice), iter->value());
|
|
1490
|
+
const WideColumns expected_columns =
|
|
1491
|
+
GenerateExpectedWideColumns(GetValueBase(iter->value()), iter->value());
|
|
1494
1492
|
if (iter->columns() != expected_columns) {
|
|
1495
1493
|
fprintf(stderr, "Value and columns inconsistent for iterator: %s\n",
|
|
1496
1494
|
DebugString(iter->value(), iter->columns(), expected_columns)
|
|
@@ -3123,6 +3121,11 @@ void InitializeOptionsFromFlags(
|
|
|
3123
3121
|
options.max_background_flushes = FLAGS_max_background_flushes;
|
|
3124
3122
|
options.compaction_style =
|
|
3125
3123
|
static_cast<ROCKSDB_NAMESPACE::CompactionStyle>(FLAGS_compaction_style);
|
|
3124
|
+
if (options.compaction_style ==
|
|
3125
|
+
ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleFIFO) {
|
|
3126
|
+
options.compaction_options_fifo.allow_compaction =
|
|
3127
|
+
FLAGS_fifo_allow_compaction;
|
|
3128
|
+
}
|
|
3126
3129
|
options.compaction_pri =
|
|
3127
3130
|
static_cast<ROCKSDB_NAMESPACE::CompactionPri>(FLAGS_compaction_pri);
|
|
3128
3131
|
options.num_levels = FLAGS_num_levels;
|
|
@@ -139,8 +139,6 @@ class StressTest {
|
|
|
139
139
|
return column_families_[column_family_id];
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
virtual Slice GetValueBaseSlice(Slice slice) { return slice; }
|
|
143
|
-
|
|
144
142
|
#ifndef ROCKSDB_LITE
|
|
145
143
|
// Generated a list of keys that close to boundaries of SST keys.
|
|
146
144
|
// If there isn't any SST file in the DB, return empty list.
|
|
@@ -633,8 +633,7 @@ Env::Env(const std::shared_ptr<FileSystem>& fs,
|
|
|
633
633
|
const std::shared_ptr<SystemClock>& clock)
|
|
634
634
|
: thread_status_updater_(nullptr), file_system_(fs), system_clock_(clock) {}
|
|
635
635
|
|
|
636
|
-
Env::~Env() {
|
|
637
|
-
}
|
|
636
|
+
Env::~Env() {}
|
|
638
637
|
|
|
639
638
|
Status Env::NewLogger(const std::string& fname,
|
|
640
639
|
std::shared_ptr<Logger>* result) {
|
|
@@ -841,14 +840,11 @@ std::string Env::GenerateUniqueId() {
|
|
|
841
840
|
return result;
|
|
842
841
|
}
|
|
843
842
|
|
|
844
|
-
SequentialFile::~SequentialFile() {
|
|
845
|
-
}
|
|
843
|
+
SequentialFile::~SequentialFile() {}
|
|
846
844
|
|
|
847
|
-
RandomAccessFile::~RandomAccessFile() {
|
|
848
|
-
}
|
|
845
|
+
RandomAccessFile::~RandomAccessFile() {}
|
|
849
846
|
|
|
850
|
-
WritableFile::~WritableFile() {
|
|
851
|
-
}
|
|
847
|
+
WritableFile::~WritableFile() {}
|
|
852
848
|
|
|
853
849
|
MemoryMappedFileBuffer::~MemoryMappedFileBuffer() {}
|
|
854
850
|
|
|
@@ -865,16 +861,15 @@ Status Logger::Close() {
|
|
|
865
861
|
|
|
866
862
|
Status Logger::CloseImpl() { return Status::NotSupported(); }
|
|
867
863
|
|
|
868
|
-
FileLock::~FileLock() {
|
|
869
|
-
}
|
|
864
|
+
FileLock::~FileLock() {}
|
|
870
865
|
|
|
871
|
-
void LogFlush(Logger
|
|
866
|
+
void LogFlush(Logger* info_log) {
|
|
872
867
|
if (info_log) {
|
|
873
868
|
info_log->Flush();
|
|
874
869
|
}
|
|
875
870
|
}
|
|
876
871
|
|
|
877
|
-
static void Logv(Logger
|
|
872
|
+
static void Logv(Logger* info_log, const char* format, va_list ap) {
|
|
878
873
|
if (info_log && info_log->GetInfoLogLevel() <= InfoLogLevel::INFO_LEVEL) {
|
|
879
874
|
info_log->Logv(InfoLogLevel::INFO_LEVEL, format, ap);
|
|
880
875
|
}
|
|
@@ -887,9 +882,10 @@ void Log(Logger* info_log, const char* format, ...) {
|
|
|
887
882
|
va_end(ap);
|
|
888
883
|
}
|
|
889
884
|
|
|
890
|
-
void Logger::Logv(const InfoLogLevel log_level, const char* format,
|
|
891
|
-
|
|
892
|
-
|
|
885
|
+
void Logger::Logv(const InfoLogLevel log_level, const char* format,
|
|
886
|
+
va_list ap) {
|
|
887
|
+
static const char* kInfoLogLevelNames[5] = {"DEBUG", "INFO", "WARN", "ERROR",
|
|
888
|
+
"FATAL"};
|
|
893
889
|
if (log_level < log_level_) {
|
|
894
890
|
return;
|
|
895
891
|
}
|
|
@@ -906,7 +902,7 @@ void Logger::Logv(const InfoLogLevel log_level, const char* format, va_list ap)
|
|
|
906
902
|
} else {
|
|
907
903
|
char new_format[500];
|
|
908
904
|
snprintf(new_format, sizeof(new_format) - 1, "[%s] %s",
|
|
909
|
-
|
|
905
|
+
kInfoLogLevelNames[log_level], format);
|
|
910
906
|
Logv(new_format, ap);
|
|
911
907
|
}
|
|
912
908
|
|
|
@@ -919,7 +915,8 @@ void Logger::Logv(const InfoLogLevel log_level, const char* format, va_list ap)
|
|
|
919
915
|
}
|
|
920
916
|
}
|
|
921
917
|
|
|
922
|
-
static void Logv(const InfoLogLevel log_level, Logger
|
|
918
|
+
static void Logv(const InfoLogLevel log_level, Logger* info_log,
|
|
919
|
+
const char* format, va_list ap) {
|
|
923
920
|
if (info_log && info_log->GetInfoLogLevel() <= log_level) {
|
|
924
921
|
if (log_level == InfoLogLevel::HEADER_LEVEL) {
|
|
925
922
|
info_log->LogHeader(format, ap);
|
|
@@ -937,7 +934,7 @@ void Log(const InfoLogLevel log_level, Logger* info_log, const char* format,
|
|
|
937
934
|
va_end(ap);
|
|
938
935
|
}
|
|
939
936
|
|
|
940
|
-
static void Headerv(Logger
|
|
937
|
+
static void Headerv(Logger* info_log, const char* format, va_list ap) {
|
|
941
938
|
if (info_log) {
|
|
942
939
|
info_log->LogHeader(format, ap);
|
|
943
940
|
}
|
|
@@ -1106,7 +1103,7 @@ void AssignEnvOptions(EnvOptions* env_options, const DBOptions& options) {
|
|
|
1106
1103
|
options.env->SanitizeEnvOptions(env_options);
|
|
1107
1104
|
}
|
|
1108
1105
|
|
|
1109
|
-
}
|
|
1106
|
+
} // namespace
|
|
1110
1107
|
|
|
1111
1108
|
EnvOptions Env::OptimizeForLogWrite(const EnvOptions& env_options,
|
|
1112
1109
|
const DBOptions& db_options) const {
|