@nxtedition/rocksdb 7.1.29 → 7.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +34 -0
- 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/index.js +4 -0
- package/package.json +2 -2
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -186,6 +186,13 @@ class RoundRobinSubcompactionsAgainstResources
|
|
|
186
186
|
int max_compaction_limits_;
|
|
187
187
|
};
|
|
188
188
|
|
|
189
|
+
class DBCompactionTestFIFOCheckConsistencyWithParam
|
|
190
|
+
: public DBCompactionTest,
|
|
191
|
+
public testing::WithParamInterface<std::string> {
|
|
192
|
+
public:
|
|
193
|
+
DBCompactionTestFIFOCheckConsistencyWithParam() : DBCompactionTest() {}
|
|
194
|
+
};
|
|
195
|
+
|
|
189
196
|
namespace {
|
|
190
197
|
class FlushedFileCollector : public EventListener {
|
|
191
198
|
public:
|
|
@@ -6457,6 +6464,163 @@ TEST_P(DBCompactionTestWithParam,
|
|
|
6457
6464
|
}
|
|
6458
6465
|
}
|
|
6459
6466
|
|
|
6467
|
+
INSTANTIATE_TEST_CASE_P(DBCompactionTestFIFOCheckConsistencyWithParam,
|
|
6468
|
+
DBCompactionTestFIFOCheckConsistencyWithParam,
|
|
6469
|
+
::testing::Values("FindIntraL0Compaction",
|
|
6470
|
+
"PickCompactionToWarm",
|
|
6471
|
+
"CompactRange", "CompactFile"));
|
|
6472
|
+
|
|
6473
|
+
TEST_P(DBCompactionTestFIFOCheckConsistencyWithParam,
|
|
6474
|
+
FlushAfterIntraL0CompactionWithIngestedFile) {
|
|
6475
|
+
Options options = CurrentOptions();
|
|
6476
|
+
options.create_if_missing = true;
|
|
6477
|
+
options.compression = kNoCompression;
|
|
6478
|
+
|
|
6479
|
+
options.force_consistency_checks = true;
|
|
6480
|
+
options.compaction_style = kCompactionStyleFIFO;
|
|
6481
|
+
options.max_open_files = -1;
|
|
6482
|
+
options.num_levels = 1;
|
|
6483
|
+
options.level0_file_num_compaction_trigger = 3;
|
|
6484
|
+
|
|
6485
|
+
CompactionOptionsFIFO fifo_options;
|
|
6486
|
+
const std::string compaction_path_to_test = GetParam();
|
|
6487
|
+
if (compaction_path_to_test == "FindIntraL0Compaction") {
|
|
6488
|
+
fifo_options.allow_compaction = true;
|
|
6489
|
+
fifo_options.age_for_warm = 0;
|
|
6490
|
+
} else if (compaction_path_to_test == "PickCompactionToWarm") {
|
|
6491
|
+
fifo_options.allow_compaction = false;
|
|
6492
|
+
fifo_options.age_for_warm = 2;
|
|
6493
|
+
} else if (compaction_path_to_test == "CompactRange") {
|
|
6494
|
+
// FIFOCompactionPicker::CompactRange() implementes
|
|
6495
|
+
// on top of regular compaction paths. Here we choose
|
|
6496
|
+
// to trigger FIFOCompactionPicker::PickCompactionToWarm()
|
|
6497
|
+
// for simplicity
|
|
6498
|
+
fifo_options.allow_compaction = false;
|
|
6499
|
+
fifo_options.age_for_warm = 2;
|
|
6500
|
+
options.disable_auto_compactions = true;
|
|
6501
|
+
} else if (compaction_path_to_test == "CompactFile") {
|
|
6502
|
+
fifo_options.allow_compaction = false;
|
|
6503
|
+
fifo_options.age_for_warm = 0;
|
|
6504
|
+
options.disable_auto_compactions = true;
|
|
6505
|
+
} else {
|
|
6506
|
+
assert(false);
|
|
6507
|
+
}
|
|
6508
|
+
options.compaction_options_fifo = fifo_options;
|
|
6509
|
+
|
|
6510
|
+
DestroyAndReopen(options);
|
|
6511
|
+
|
|
6512
|
+
// To force assigning the global seqno to ingested file
|
|
6513
|
+
// for our test purpose
|
|
6514
|
+
const Snapshot* snapshot = db_->GetSnapshot();
|
|
6515
|
+
|
|
6516
|
+
std::atomic<bool> compaction_path_sync_point_called(false);
|
|
6517
|
+
if (compaction_path_to_test == "FindIntraL0Compaction") {
|
|
6518
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6519
|
+
"FindIntraL0Compaction",
|
|
6520
|
+
[&](void* /*arg*/) { compaction_path_sync_point_called.store(true); });
|
|
6521
|
+
} else if (compaction_path_to_test == "PickCompactionToWarm" ||
|
|
6522
|
+
compaction_path_to_test == "CompactRange") {
|
|
6523
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6524
|
+
"PickCompactionToWarm",
|
|
6525
|
+
[&](void* /*arg*/) { compaction_path_sync_point_called.store(true); });
|
|
6526
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
6527
|
+
"PickCompactionToWarm::BeforeGetCurrentTime",
|
|
6528
|
+
[&fifo_options](void* current_time_arg) -> void {
|
|
6529
|
+
// The unit test goes so quickly that there is almost no time
|
|
6530
|
+
// elapsed after we ingest a file and before we check whether ingested
|
|
6531
|
+
// files can compact to warm.
|
|
6532
|
+
// Therefore we need this trick to simulate elapsed
|
|
6533
|
+
// time in reality.
|
|
6534
|
+
int64_t* current_time = (int64_t*)current_time_arg;
|
|
6535
|
+
*current_time = *current_time + fifo_options.age_for_warm + 1;
|
|
6536
|
+
});
|
|
6537
|
+
} else if (compaction_path_to_test == "CompactFile") {
|
|
6538
|
+
// Sync point is not needed in this case
|
|
6539
|
+
compaction_path_sync_point_called.store(true);
|
|
6540
|
+
}
|
|
6541
|
+
|
|
6542
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
6543
|
+
|
|
6544
|
+
// Create an existing SST file s0 of key range [key1,key4] and seqno range
|
|
6545
|
+
// [1,2]
|
|
6546
|
+
ASSERT_OK(Put("key1", "seq1"));
|
|
6547
|
+
ASSERT_OK(Put("key4", "seq2"));
|
|
6548
|
+
ASSERT_OK(Flush());
|
|
6549
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
6550
|
+
|
|
6551
|
+
// Accumulate entries in a memtable m1 of key range [key1,key2] and seqno
|
|
6552
|
+
// range [3,4] Noted that it contains a overlaped key with s0
|
|
6553
|
+
ASSERT_OK(Put("key1", "seq3")); // overlapped key
|
|
6554
|
+
ASSERT_OK(Put("key2", "seq4"));
|
|
6555
|
+
|
|
6556
|
+
ASSERT_TRUE(compaction_path_to_test == "CompactFile" ||
|
|
6557
|
+
!compaction_path_sync_point_called.load());
|
|
6558
|
+
|
|
6559
|
+
// Stop background compaction job to obtain accurate
|
|
6560
|
+
// `NumTableFilesAtLevel(0)` after file ingestion
|
|
6561
|
+
test::SleepingBackgroundTask sleeping_tasks;
|
|
6562
|
+
if (!options.disable_auto_compactions) {
|
|
6563
|
+
env_->SetBackgroundThreads(1, Env::LOW);
|
|
6564
|
+
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_tasks,
|
|
6565
|
+
Env::Priority::LOW);
|
|
6566
|
+
sleeping_tasks.WaitUntilSleeping();
|
|
6567
|
+
}
|
|
6568
|
+
|
|
6569
|
+
// Ingested two SST files, s1 of key range [key5,key5] and seqno range [5,5]
|
|
6570
|
+
// and s2 of key range [key6,key6] and seqno range [6,6]
|
|
6571
|
+
IngestOneKeyValue(dbfull(), "key5", "seq5", options);
|
|
6572
|
+
IngestOneKeyValue(dbfull(), "key6", "seq6", options);
|
|
6573
|
+
// Up to now, L0 contains s0, s1, s2
|
|
6574
|
+
ASSERT_EQ(3, NumTableFilesAtLevel(0));
|
|
6575
|
+
|
|
6576
|
+
// Resume background compaction job so that Intra level0 compaction can be
|
|
6577
|
+
// triggered
|
|
6578
|
+
if (!options.disable_auto_compactions) {
|
|
6579
|
+
sleeping_tasks.WakeUp();
|
|
6580
|
+
sleeping_tasks.WaitUntilDone();
|
|
6581
|
+
}
|
|
6582
|
+
|
|
6583
|
+
if (compaction_path_to_test == "CompactRange") {
|
|
6584
|
+
// `start` and `end` is carefully chosen so that compact range:
|
|
6585
|
+
// (1) doesn't overlap with memtable therefore the memtable won't be flushed
|
|
6586
|
+
// (2) should target at compacting s0 with s1 and s2
|
|
6587
|
+
Slice start("key4"), end("key6");
|
|
6588
|
+
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), &start, &end));
|
|
6589
|
+
} else if (compaction_path_to_test == "CompactFile") {
|
|
6590
|
+
ColumnFamilyMetaData cf_meta_data;
|
|
6591
|
+
db_->GetColumnFamilyMetaData(&cf_meta_data);
|
|
6592
|
+
assert(cf_meta_data.levels[0].files.size() == 3);
|
|
6593
|
+
std::vector<std::string> input_files;
|
|
6594
|
+
for (const auto& file : cf_meta_data.levels[0].files) {
|
|
6595
|
+
input_files.push_back(file.name);
|
|
6596
|
+
}
|
|
6597
|
+
Status s = db_->CompactFiles(CompactionOptions(), input_files, 0);
|
|
6598
|
+
EXPECT_TRUE(s.IsAborted());
|
|
6599
|
+
EXPECT_TRUE(s.ToString().find(
|
|
6600
|
+
"has overlapping seqnos with earliest memtable seqnos") !=
|
|
6601
|
+
std::string::npos);
|
|
6602
|
+
} else {
|
|
6603
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6604
|
+
}
|
|
6605
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
6606
|
+
|
|
6607
|
+
ASSERT_TRUE(compaction_path_to_test == "CompactFile" ||
|
|
6608
|
+
compaction_path_sync_point_called.load());
|
|
6609
|
+
|
|
6610
|
+
// To verify compaction of s0, s1 and s2 (leading to new SST s4) didn't
|
|
6611
|
+
// happen.
|
|
6612
|
+
//
|
|
6613
|
+
// Otherwise, when m1 flushes in the next step and become s3,
|
|
6614
|
+
// we will have s3 of seqnos [3, 4], s4 of seqnos [1, 6], which is a
|
|
6615
|
+
// corruption because s3 is older than s4 based on largest seqno while s2
|
|
6616
|
+
// contains a value of Key(1) newer than the value of Key(1) contained in s4.
|
|
6617
|
+
// And in this case, Flush() will return Status::Corruption() caught by
|
|
6618
|
+
// `force_consistency_checks=1`
|
|
6619
|
+
EXPECT_EQ(3, NumTableFilesAtLevel(0));
|
|
6620
|
+
EXPECT_OK(Flush());
|
|
6621
|
+
db_->ReleaseSnapshot(snapshot);
|
|
6622
|
+
}
|
|
6623
|
+
|
|
6460
6624
|
TEST_P(DBCompactionTestWithBottommostParam, SequenceKeysManualCompaction) {
|
|
6461
6625
|
constexpr int kSstNum = 10;
|
|
6462
6626
|
Options options = CurrentOptions();
|
|
@@ -26,16 +26,16 @@ CompactedDBImpl::CompactedDBImpl(const DBOptions& options,
|
|
|
26
26
|
version_(nullptr),
|
|
27
27
|
user_comparator_(nullptr) {}
|
|
28
28
|
|
|
29
|
-
CompactedDBImpl::~CompactedDBImpl() {
|
|
30
|
-
}
|
|
29
|
+
CompactedDBImpl::~CompactedDBImpl() {}
|
|
31
30
|
|
|
32
31
|
size_t CompactedDBImpl::FindFile(const Slice& key) {
|
|
33
32
|
size_t right = files_.num_files - 1;
|
|
34
33
|
auto cmp = [&](const FdWithKeyRange& f, const Slice& k) -> bool {
|
|
35
34
|
return user_comparator_->Compare(ExtractUserKey(f.largest_key), k) < 0;
|
|
36
35
|
};
|
|
37
|
-
return static_cast<size_t>(
|
|
38
|
-
|
|
36
|
+
return static_cast<size_t>(
|
|
37
|
+
std::lower_bound(files_.files, files_.files + right, key, cmp) -
|
|
38
|
+
files_.files);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
|
|
@@ -228,8 +228,8 @@ Status CompactedDBImpl::Init(const Options& options) {
|
|
|
228
228
|
return Status::NotSupported("no file exists");
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
Status CompactedDBImpl::Open(const Options& options,
|
|
232
|
-
|
|
231
|
+
Status CompactedDBImpl::Open(const Options& options, const std::string& dbname,
|
|
232
|
+
DB** dbptr) {
|
|
233
233
|
*dbptr = nullptr;
|
|
234
234
|
|
|
235
235
|
if (options.max_open_files != -1) {
|
|
@@ -1357,7 +1357,7 @@ Status DBImpl::SetDBOptions(
|
|
|
1357
1357
|
file_options_for_compaction_ = fs_->OptimizeForCompactionTableWrite(
|
|
1358
1358
|
file_options_for_compaction_, immutable_db_options_);
|
|
1359
1359
|
versions_->ChangeFileOptions(mutable_db_options_);
|
|
1360
|
-
//TODO(xiez): clarify why apply optimize for read to write options
|
|
1360
|
+
// TODO(xiez): clarify why apply optimize for read to write options
|
|
1361
1361
|
file_options_for_compaction_ = fs_->OptimizeForCompactionTableRead(
|
|
1362
1362
|
file_options_for_compaction_, immutable_db_options_);
|
|
1363
1363
|
file_options_for_compaction_.compaction_readahead_size =
|
|
@@ -2357,8 +2357,8 @@ std::vector<Status> DBImpl::MultiGet(
|
|
|
2357
2357
|
std::string* timestamp = timestamps ? &(*timestamps)[keys_read] : nullptr;
|
|
2358
2358
|
|
|
2359
2359
|
LookupKey lkey(keys[keys_read], consistent_seqnum, read_options.timestamp);
|
|
2360
|
-
auto cfh =
|
|
2361
|
-
|
|
2360
|
+
auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(
|
|
2361
|
+
column_family[keys_read]);
|
|
2362
2362
|
SequenceNumber max_covering_tombstone_seq = 0;
|
|
2363
2363
|
auto mgd_iter = multiget_cf_data.find(cfh->cfd()->GetID());
|
|
2364
2364
|
assert(mgd_iter != multiget_cf_data.end());
|
|
@@ -3983,8 +3983,7 @@ SuperVersion* DBImpl::GetAndRefSuperVersion(uint32_t column_family_id) {
|
|
|
3983
3983
|
void DBImpl::CleanupSuperVersion(SuperVersion* sv) {
|
|
3984
3984
|
// Release SuperVersion
|
|
3985
3985
|
if (sv->Unref()) {
|
|
3986
|
-
bool defer_purge =
|
|
3987
|
-
immutable_db_options().avoid_unnecessary_blocking_io;
|
|
3986
|
+
bool defer_purge = immutable_db_options().avoid_unnecessary_blocking_io;
|
|
3988
3987
|
{
|
|
3989
3988
|
InstrumentedMutexLock l(&mutex_);
|
|
3990
3989
|
sv->Cleanup();
|
|
@@ -5668,8 +5667,7 @@ Status DBImpl::VerifyChecksumInternal(const ReadOptions& read_options,
|
|
|
5668
5667
|
}
|
|
5669
5668
|
}
|
|
5670
5669
|
|
|
5671
|
-
bool defer_purge =
|
|
5672
|
-
immutable_db_options().avoid_unnecessary_blocking_io;
|
|
5670
|
+
bool defer_purge = immutable_db_options().avoid_unnecessary_blocking_io;
|
|
5673
5671
|
{
|
|
5674
5672
|
InstrumentedMutexLock l(&mutex_);
|
|
5675
5673
|
for (auto sv : sv_list) {
|
|
@@ -1344,8 +1344,18 @@ Status DBImpl::CompactFilesImpl(
|
|
|
1344
1344
|
}
|
|
1345
1345
|
}
|
|
1346
1346
|
|
|
1347
|
+
SequenceNumber earliest_mem_seqno = kMaxSequenceNumber;
|
|
1348
|
+
if (cfd->mem() != nullptr) {
|
|
1349
|
+
earliest_mem_seqno =
|
|
1350
|
+
std::min(cfd->mem()->GetEarliestSequenceNumber(), earliest_mem_seqno);
|
|
1351
|
+
}
|
|
1352
|
+
if (cfd->imm() != nullptr && cfd->imm()->current() != nullptr) {
|
|
1353
|
+
earliest_mem_seqno =
|
|
1354
|
+
std::min(cfd->imm()->current()->GetEarliestSequenceNumber(false),
|
|
1355
|
+
earliest_mem_seqno);
|
|
1356
|
+
}
|
|
1347
1357
|
Status s = cfd->compaction_picker()->SanitizeCompactionInputFiles(
|
|
1348
|
-
&input_set, cf_meta, output_level);
|
|
1358
|
+
&input_set, cf_meta, output_level, earliest_mem_seqno);
|
|
1349
1359
|
if (!s.ok()) {
|
|
1350
1360
|
return s;
|
|
1351
1361
|
}
|
|
@@ -270,7 +270,8 @@ Status DBImpl::ValidateOptions(const DBOptions& db_options) {
|
|
|
270
270
|
if (db_options.unordered_write &&
|
|
271
271
|
!db_options.allow_concurrent_memtable_write) {
|
|
272
272
|
return Status::InvalidArgument(
|
|
273
|
-
"unordered_write is incompatible with
|
|
273
|
+
"unordered_write is incompatible with "
|
|
274
|
+
"!allow_concurrent_memtable_write");
|
|
274
275
|
}
|
|
275
276
|
|
|
276
277
|
if (db_options.unordered_write && db_options.enable_pipelined_write) {
|
|
@@ -1058,9 +1059,8 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& wal_numbers,
|
|
|
1058
1059
|
std::unique_ptr<SequentialFileReader> file_reader;
|
|
1059
1060
|
{
|
|
1060
1061
|
std::unique_ptr<FSSequentialFile> file;
|
|
1061
|
-
status = fs_->NewSequentialFile(
|
|
1062
|
-
|
|
1063
|
-
&file, nullptr);
|
|
1062
|
+
status = fs_->NewSequentialFile(
|
|
1063
|
+
fname, fs_->OptimizeForLogRead(file_options_), &file, nullptr);
|
|
1064
1064
|
if (!status.ok()) {
|
|
1065
1065
|
MaybeIgnoreError(&status);
|
|
1066
1066
|
if (!status.ok()) {
|
|
@@ -157,8 +157,7 @@ Status DBImplSecondary::MaybeInitLogReader(
|
|
|
157
157
|
{
|
|
158
158
|
std::unique_ptr<FSSequentialFile> file;
|
|
159
159
|
Status status = fs_->NewSequentialFile(
|
|
160
|
-
fname, fs_->OptimizeForLogRead(file_options_), &file,
|
|
161
|
-
nullptr);
|
|
160
|
+
fname, fs_->OptimizeForLogRead(file_options_), &file, nullptr);
|
|
162
161
|
if (!status.ok()) {
|
|
163
162
|
*log_reader = nullptr;
|
|
164
163
|
return status;
|
|
@@ -200,7 +199,7 @@ Status DBImplSecondary::RecoverLogFiles(
|
|
|
200
199
|
assert(reader != nullptr);
|
|
201
200
|
}
|
|
202
201
|
for (auto log_number : log_numbers) {
|
|
203
|
-
auto it
|
|
202
|
+
auto it = log_readers_.find(log_number);
|
|
204
203
|
assert(it != log_readers_.end());
|
|
205
204
|
log::FragmentBufferedReader* reader = it->second->reader_;
|
|
206
205
|
Status* wal_read_status = it->second->status_;
|
|
@@ -47,6 +47,7 @@ class LogReaderContainer {
|
|
|
47
47
|
delete reporter_;
|
|
48
48
|
delete status_;
|
|
49
49
|
}
|
|
50
|
+
|
|
50
51
|
private:
|
|
51
52
|
struct LogReporter : public log::Reader::Reporter {
|
|
52
53
|
Env* env;
|
|
@@ -247,7 +248,6 @@ class DBImplSecondary : public DBImpl {
|
|
|
247
248
|
// method can take long time due to all the I/O and CPU costs.
|
|
248
249
|
Status TryCatchUpWithPrimary() override;
|
|
249
250
|
|
|
250
|
-
|
|
251
251
|
// Try to find log reader using log_number from log_readers_ map, initialize
|
|
252
252
|
// if it doesn't exist
|
|
253
253
|
Status MaybeInitLogReader(uint64_t log_number,
|
|
@@ -6923,7 +6923,7 @@ TEST_F(DBTest2, LastLevelTemperatureUniversal) {
|
|
|
6923
6923
|
ASSERT_EQ(size, 0);
|
|
6924
6924
|
ASSERT_EQ(iostats->file_io_stats_by_temperature.hot_file_read_count, 0);
|
|
6925
6925
|
ASSERT_EQ(iostats->file_io_stats_by_temperature.warm_file_read_count, 0);
|
|
6926
|
-
ASSERT_EQ(iostats->file_io_stats_by_temperature.
|
|
6926
|
+
ASSERT_EQ(iostats->file_io_stats_by_temperature.cold_file_read_count, 0);
|
|
6927
6927
|
ASSERT_EQ(options.statistics->getTickerCount(HOT_FILE_READ_BYTES), 0);
|
|
6928
6928
|
ASSERT_EQ(options.statistics->getTickerCount(WARM_FILE_READ_BYTES), 0);
|
|
6929
6929
|
ASSERT_EQ(options.statistics->getTickerCount(COLD_FILE_READ_BYTES), 0);
|
|
@@ -587,10 +587,9 @@ FragmentedRangeTombstoneIterator* MemTable::NewRangeTombstoneIteratorInternal(
|
|
|
587
587
|
auto* unfragmented_iter =
|
|
588
588
|
new MemTableIterator(*this, read_options, nullptr /* arena */,
|
|
589
589
|
true /* use_range_del_table */);
|
|
590
|
-
cache->tombstones
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
comparator_.comparator));
|
|
590
|
+
cache->tombstones.reset(new FragmentedRangeTombstoneList(
|
|
591
|
+
std::unique_ptr<InternalIterator>(unfragmented_iter),
|
|
592
|
+
comparator_.comparator));
|
|
594
593
|
cache->initialized.store(true, std::memory_order_release);
|
|
595
594
|
}
|
|
596
595
|
cache->reader_mutex.unlock();
|
|
@@ -785,7 +784,8 @@ Status MemTable::Add(SequenceNumber s, ValueType type,
|
|
|
785
784
|
std::memory_order_relaxed);
|
|
786
785
|
data_size_.store(data_size_.load(std::memory_order_relaxed) + encoded_len,
|
|
787
786
|
std::memory_order_relaxed);
|
|
788
|
-
if (type == kTypeDeletion
|
|
787
|
+
if (type == kTypeDeletion || type == kTypeSingleDeletion ||
|
|
788
|
+
type == kTypeDeletionWithTimestamp) {
|
|
789
789
|
num_deletes_.store(num_deletes_.load(std::memory_order_relaxed) + 1,
|
|
790
790
|
std::memory_order_relaxed);
|
|
791
791
|
}
|
|
@@ -1065,20 +1065,10 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1065
1065
|
assert(s->do_merge);
|
|
1066
1066
|
|
|
1067
1067
|
if (s->value || s->columns) {
|
|
1068
|
-
std::string result;
|
|
1069
1068
|
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1070
1069
|
merge_operator, s->key->user_key(), &v,
|
|
1071
|
-
merge_context->GetOperands(),
|
|
1072
|
-
s->clock, nullptr /* result_operand */, true);
|
|
1073
|
-
|
|
1074
|
-
if (s->status->ok()) {
|
|
1075
|
-
if (s->value) {
|
|
1076
|
-
*(s->value) = std::move(result);
|
|
1077
|
-
} else {
|
|
1078
|
-
assert(s->columns);
|
|
1079
|
-
s->columns->SetPlainValue(result);
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1070
|
+
merge_context->GetOperands(), s->value, s->columns, s->logger,
|
|
1071
|
+
s->statistics, s->clock, nullptr /* result_operand */, true);
|
|
1082
1072
|
}
|
|
1083
1073
|
} else if (s->value) {
|
|
1084
1074
|
s->value->assign(v.data(), v.size());
|
|
@@ -1149,10 +1139,10 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1149
1139
|
case kTypeSingleDeletion:
|
|
1150
1140
|
case kTypeRangeDeletion: {
|
|
1151
1141
|
if (*(s->merge_in_progress)) {
|
|
1152
|
-
if (s->value
|
|
1142
|
+
if (s->value || s->columns) {
|
|
1153
1143
|
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1154
1144
|
merge_operator, s->key->user_key(), nullptr,
|
|
1155
|
-
merge_context->GetOperands(), s->value, s->logger,
|
|
1145
|
+
merge_context->GetOperands(), s->value, s->columns, s->logger,
|
|
1156
1146
|
s->statistics, s->clock, nullptr /* result_operand */, true);
|
|
1157
1147
|
}
|
|
1158
1148
|
} else {
|
|
@@ -1178,10 +1168,13 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1178
1168
|
v, s->inplace_update_support == false /* operand_pinned */);
|
|
1179
1169
|
if (s->do_merge && merge_operator->ShouldMerge(
|
|
1180
1170
|
merge_context->GetOperandsDirectionBackward())) {
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1171
|
+
if (s->value || s->columns) {
|
|
1172
|
+
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1173
|
+
merge_operator, s->key->user_key(), nullptr,
|
|
1174
|
+
merge_context->GetOperands(), s->value, s->columns, s->logger,
|
|
1175
|
+
s->statistics, s->clock, nullptr /* result_operand */, true);
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1185
1178
|
*(s->found_final_value) = true;
|
|
1186
1179
|
return false;
|
|
1187
1180
|
}
|
|
@@ -110,6 +110,36 @@ Status MergeHelper::TimedFullMerge(const MergeOperator* merge_operator,
|
|
|
110
110
|
return Status::OK();
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
Status MergeHelper::TimedFullMerge(const MergeOperator* merge_operator,
|
|
114
|
+
const Slice& key, const Slice* base_value,
|
|
115
|
+
const std::vector<Slice>& operands,
|
|
116
|
+
std::string* value,
|
|
117
|
+
PinnableWideColumns* columns, Logger* logger,
|
|
118
|
+
Statistics* statistics, SystemClock* clock,
|
|
119
|
+
Slice* result_operand,
|
|
120
|
+
bool update_num_ops_stats) {
|
|
121
|
+
assert(value || columns);
|
|
122
|
+
assert(!value || !columns);
|
|
123
|
+
|
|
124
|
+
std::string result;
|
|
125
|
+
const Status s =
|
|
126
|
+
TimedFullMerge(merge_operator, key, base_value, operands, &result, logger,
|
|
127
|
+
statistics, clock, result_operand, update_num_ops_stats);
|
|
128
|
+
if (!s.ok()) {
|
|
129
|
+
return s;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (value) {
|
|
133
|
+
*value = std::move(result);
|
|
134
|
+
return Status::OK();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
assert(columns);
|
|
138
|
+
columns->SetPlainValue(result);
|
|
139
|
+
|
|
140
|
+
return Status::OK();
|
|
141
|
+
}
|
|
142
|
+
|
|
113
143
|
// PRE: iter points to the first merge type entry
|
|
114
144
|
// POST: iter points to the first entry beyond the merge process (or the end)
|
|
115
145
|
// keys_, operands_ are updated to reflect the merge result.
|
|
@@ -56,6 +56,15 @@ class MergeHelper {
|
|
|
56
56
|
Slice* result_operand = nullptr,
|
|
57
57
|
bool update_num_ops_stats = false);
|
|
58
58
|
|
|
59
|
+
static Status TimedFullMerge(const MergeOperator* merge_operator,
|
|
60
|
+
const Slice& key, const Slice* base_value,
|
|
61
|
+
const std::vector<Slice>& operands,
|
|
62
|
+
std::string* value, PinnableWideColumns* columns,
|
|
63
|
+
Logger* logger, Statistics* statistics,
|
|
64
|
+
SystemClock* clock,
|
|
65
|
+
Slice* result_operand = nullptr,
|
|
66
|
+
bool update_num_ops_stats = false);
|
|
67
|
+
|
|
59
68
|
// Merge entries until we hit
|
|
60
69
|
// - a corrupted key
|
|
61
70
|
// - a Put/Delete,
|
|
@@ -54,12 +54,17 @@ DEFINE_int32(should_deletes_per_run, 1, "number of ShouldDelete calls per run");
|
|
|
54
54
|
DEFINE_int32(add_tombstones_per_run, 1,
|
|
55
55
|
"number of AddTombstones calls per run");
|
|
56
56
|
|
|
57
|
+
DEFINE_bool(use_compaction_range_del_aggregator, false,
|
|
58
|
+
"Whether to use CompactionRangeDelAggregator. Default is to use "
|
|
59
|
+
"ReadRangeDelAggregator.");
|
|
60
|
+
|
|
57
61
|
namespace {
|
|
58
62
|
|
|
59
63
|
struct Stats {
|
|
60
64
|
uint64_t time_add_tombstones = 0;
|
|
61
65
|
uint64_t time_first_should_delete = 0;
|
|
62
66
|
uint64_t time_rest_should_delete = 0;
|
|
67
|
+
uint64_t time_fragment_tombstones = 0;
|
|
63
68
|
};
|
|
64
69
|
|
|
65
70
|
std::ostream& operator<<(std::ostream& os, const Stats& s) {
|
|
@@ -67,6 +72,10 @@ std::ostream& operator<<(std::ostream& os, const Stats& s) {
|
|
|
67
72
|
fmt_holder.copyfmt(os);
|
|
68
73
|
|
|
69
74
|
os << std::left;
|
|
75
|
+
os << std::setw(25) << "Fragment Tombstones: "
|
|
76
|
+
<< s.time_fragment_tombstones /
|
|
77
|
+
(FLAGS_add_tombstones_per_run * FLAGS_num_runs * 1.0e3)
|
|
78
|
+
<< " us\n";
|
|
70
79
|
os << std::setw(25) << "AddTombstones: "
|
|
71
80
|
<< s.time_add_tombstones /
|
|
72
81
|
(FLAGS_add_tombstones_per_run * FLAGS_num_runs * 1.0e3)
|
|
@@ -186,10 +195,17 @@ int main(int argc, char** argv) {
|
|
|
186
195
|
FLAGS_num_range_tombstones);
|
|
187
196
|
}
|
|
188
197
|
auto mode = ROCKSDB_NAMESPACE::RangeDelPositioningMode::kForwardTraversal;
|
|
189
|
-
|
|
198
|
+
std::vector<ROCKSDB_NAMESPACE::SequenceNumber> snapshots{0};
|
|
190
199
|
for (int i = 0; i < FLAGS_num_runs; i++) {
|
|
191
|
-
ROCKSDB_NAMESPACE::
|
|
192
|
-
|
|
200
|
+
std::unique_ptr<ROCKSDB_NAMESPACE::RangeDelAggregator> range_del_agg =
|
|
201
|
+
nullptr;
|
|
202
|
+
if (FLAGS_use_compaction_range_del_aggregator) {
|
|
203
|
+
range_del_agg.reset(new ROCKSDB_NAMESPACE::CompactionRangeDelAggregator(
|
|
204
|
+
&icmp, snapshots));
|
|
205
|
+
} else {
|
|
206
|
+
range_del_agg.reset(new ROCKSDB_NAMESPACE::ReadRangeDelAggregator(
|
|
207
|
+
&icmp, ROCKSDB_NAMESPACE::kMaxSequenceNumber /* upper_bound */));
|
|
208
|
+
}
|
|
193
209
|
|
|
194
210
|
std::vector<
|
|
195
211
|
std::unique_ptr<ROCKSDB_NAMESPACE::FragmentedRangeTombstoneList> >
|
|
@@ -207,12 +223,16 @@ int main(int argc, char** argv) {
|
|
|
207
223
|
ROCKSDB_NAMESPACE::PersistentRangeTombstone(
|
|
208
224
|
ROCKSDB_NAMESPACE::Key(start), ROCKSDB_NAMESPACE::Key(end), j);
|
|
209
225
|
}
|
|
210
|
-
|
|
226
|
+
auto iter =
|
|
227
|
+
ROCKSDB_NAMESPACE::MakeRangeDelIterator(persistent_range_tombstones);
|
|
228
|
+
ROCKSDB_NAMESPACE::StopWatchNano stop_watch_fragment_tombstones(
|
|
229
|
+
clock, true /* auto_start */);
|
|
211
230
|
fragmented_range_tombstone_lists.emplace_back(
|
|
212
231
|
new ROCKSDB_NAMESPACE::FragmentedRangeTombstoneList(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
232
|
+
std::move(iter), icmp, FLAGS_use_compaction_range_del_aggregator,
|
|
233
|
+
snapshots));
|
|
234
|
+
stats.time_fragment_tombstones +=
|
|
235
|
+
stop_watch_fragment_tombstones.ElapsedNanos();
|
|
216
236
|
std::unique_ptr<ROCKSDB_NAMESPACE::FragmentedRangeTombstoneIterator>
|
|
217
237
|
fragmented_range_del_iter(
|
|
218
238
|
new ROCKSDB_NAMESPACE::FragmentedRangeTombstoneIterator(
|
|
@@ -221,7 +241,7 @@ int main(int argc, char** argv) {
|
|
|
221
241
|
|
|
222
242
|
ROCKSDB_NAMESPACE::StopWatchNano stop_watch_add_tombstones(
|
|
223
243
|
clock, true /* auto_start */);
|
|
224
|
-
range_del_agg
|
|
244
|
+
range_del_agg->AddTombstones(std::move(fragmented_range_del_iter));
|
|
225
245
|
stats.time_add_tombstones += stop_watch_add_tombstones.ElapsedNanos();
|
|
226
246
|
}
|
|
227
247
|
|
|
@@ -238,7 +258,7 @@ int main(int argc, char** argv) {
|
|
|
238
258
|
|
|
239
259
|
ROCKSDB_NAMESPACE::StopWatchNano stop_watch_should_delete(
|
|
240
260
|
clock, true /* auto_start */);
|
|
241
|
-
range_del_agg
|
|
261
|
+
range_del_agg->ShouldDelete(parsed_key, mode);
|
|
242
262
|
uint64_t call_time = stop_watch_should_delete.ElapsedNanos();
|
|
243
263
|
|
|
244
264
|
if (j == 0) {
|
|
@@ -156,7 +156,6 @@ void FragmentedRangeTombstoneList::FragmentTombstones(
|
|
|
156
156
|
if (seq <= next_snapshot) {
|
|
157
157
|
// This seqnum is visible by a lower snapshot.
|
|
158
158
|
tombstone_seqs_.push_back(seq);
|
|
159
|
-
seq_set_.insert(seq);
|
|
160
159
|
auto upper_bound_it =
|
|
161
160
|
std::lower_bound(snapshots.begin(), snapshots.end(), seq);
|
|
162
161
|
if (upper_bound_it == snapshots.begin()) {
|
|
@@ -173,7 +172,6 @@ void FragmentedRangeTombstoneList::FragmentTombstones(
|
|
|
173
172
|
// The fragmentation is being done for reads, so preserve all seqnums.
|
|
174
173
|
tombstone_seqs_.insert(tombstone_seqs_.end(), seqnums_to_flush.begin(),
|
|
175
174
|
seqnums_to_flush.end());
|
|
176
|
-
seq_set_.insert(seqnums_to_flush.begin(), seqnums_to_flush.end());
|
|
177
175
|
if (ts_sz) {
|
|
178
176
|
tombstone_timestamps_.insert(tombstone_timestamps_.end(),
|
|
179
177
|
timestamps_to_flush.begin(),
|
|
@@ -258,15 +256,20 @@ void FragmentedRangeTombstoneList::FragmentTombstones(
|
|
|
258
256
|
}
|
|
259
257
|
|
|
260
258
|
bool FragmentedRangeTombstoneList::ContainsRange(SequenceNumber lower,
|
|
261
|
-
SequenceNumber upper)
|
|
259
|
+
SequenceNumber upper) {
|
|
260
|
+
std::call_once(seq_set_init_once_flag_, [this]() {
|
|
261
|
+
for (auto s : tombstone_seqs_) {
|
|
262
|
+
seq_set_.insert(s);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
262
265
|
auto seq_it = seq_set_.lower_bound(lower);
|
|
263
266
|
return seq_it != seq_set_.end() && *seq_it <= upper;
|
|
264
267
|
}
|
|
265
268
|
|
|
266
269
|
FragmentedRangeTombstoneIterator::FragmentedRangeTombstoneIterator(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
+
FragmentedRangeTombstoneList* tombstones, const InternalKeyComparator& icmp,
|
|
271
|
+
SequenceNumber _upper_bound, const Slice* ts_upper_bound,
|
|
272
|
+
SequenceNumber _lower_bound)
|
|
270
273
|
: tombstone_start_cmp_(icmp.user_comparator()),
|
|
271
274
|
tombstone_end_cmp_(icmp.user_comparator()),
|
|
272
275
|
icmp_(&icmp),
|
|
@@ -280,7 +283,7 @@ FragmentedRangeTombstoneIterator::FragmentedRangeTombstoneIterator(
|
|
|
280
283
|
}
|
|
281
284
|
|
|
282
285
|
FragmentedRangeTombstoneIterator::FragmentedRangeTombstoneIterator(
|
|
283
|
-
const std::shared_ptr<
|
|
286
|
+
const std::shared_ptr<FragmentedRangeTombstoneList>& tombstones,
|
|
284
287
|
const InternalKeyComparator& icmp, SequenceNumber _upper_bound,
|
|
285
288
|
const Slice* ts_upper_bound, SequenceNumber _lower_bound)
|
|
286
289
|
: tombstone_start_cmp_(icmp.user_comparator()),
|