@nxtedition/rocksdb 7.1.20 → 7.1.21
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 +13 -6
- package/deps/rocksdb/rocksdb/Makefile +1 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
- package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
- package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
- package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
- package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
- package/index.js +12 -4
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -1055,10 +1055,10 @@ Status DBImpl::CompactRangeInternal(const CompactRangeOptions& options,
|
|
|
1055
1055
|
SelectColumnFamiliesForAtomicFlush(&cfds);
|
|
1056
1056
|
mutex_.Unlock();
|
|
1057
1057
|
s = AtomicFlushMemTables(cfds, fo, FlushReason::kManualCompaction,
|
|
1058
|
-
false /*
|
|
1058
|
+
false /* entered_write_thread */);
|
|
1059
1059
|
} else {
|
|
1060
1060
|
s = FlushMemTable(cfd, fo, FlushReason::kManualCompaction,
|
|
1061
|
-
false /*
|
|
1061
|
+
false /* entered_write_thread */);
|
|
1062
1062
|
}
|
|
1063
1063
|
if (!s.ok()) {
|
|
1064
1064
|
LogFlush(immutable_db_options_.info_log);
|
|
@@ -2016,9 +2016,16 @@ void DBImpl::GenerateFlushRequest(const autovector<ColumnFamilyData*>& cfds,
|
|
|
2016
2016
|
|
|
2017
2017
|
Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
|
|
2018
2018
|
const FlushOptions& flush_options,
|
|
2019
|
-
FlushReason flush_reason,
|
|
2019
|
+
FlushReason flush_reason,
|
|
2020
|
+
bool entered_write_thread) {
|
|
2020
2021
|
// This method should not be called if atomic_flush is true.
|
|
2021
2022
|
assert(!immutable_db_options_.atomic_flush);
|
|
2023
|
+
if (!flush_options.wait && write_controller_.IsStopped()) {
|
|
2024
|
+
std::ostringstream oss;
|
|
2025
|
+
oss << "Writes have been stopped, thus unable to perform manual flush. "
|
|
2026
|
+
"Please try again later after writes are resumed";
|
|
2027
|
+
return Status::TryAgain(oss.str());
|
|
2028
|
+
}
|
|
2022
2029
|
Status s;
|
|
2023
2030
|
if (!flush_options.allow_write_stall) {
|
|
2024
2031
|
bool flush_needed = true;
|
|
@@ -2029,6 +2036,7 @@ Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
|
|
|
2029
2036
|
}
|
|
2030
2037
|
}
|
|
2031
2038
|
|
|
2039
|
+
const bool needs_to_join_write_thread = !entered_write_thread;
|
|
2032
2040
|
autovector<FlushRequest> flush_reqs;
|
|
2033
2041
|
autovector<uint64_t> memtable_ids_to_wait;
|
|
2034
2042
|
{
|
|
@@ -2037,7 +2045,7 @@ Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
|
|
|
2037
2045
|
|
|
2038
2046
|
WriteThread::Writer w;
|
|
2039
2047
|
WriteThread::Writer nonmem_w;
|
|
2040
|
-
if (
|
|
2048
|
+
if (needs_to_join_write_thread) {
|
|
2041
2049
|
write_thread_.EnterUnbatched(&w, &mutex_);
|
|
2042
2050
|
if (two_write_queues_) {
|
|
2043
2051
|
nonmem_write_thread_.EnterUnbatched(&nonmem_w, &mutex_);
|
|
@@ -2120,7 +2128,7 @@ Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
|
|
|
2120
2128
|
MaybeScheduleFlushOrCompaction();
|
|
2121
2129
|
}
|
|
2122
2130
|
|
|
2123
|
-
if (
|
|
2131
|
+
if (needs_to_join_write_thread) {
|
|
2124
2132
|
write_thread_.ExitUnbatched(&w);
|
|
2125
2133
|
if (two_write_queues_) {
|
|
2126
2134
|
nonmem_write_thread_.ExitUnbatched(&nonmem_w);
|
|
@@ -2156,7 +2164,14 @@ Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
|
|
|
2156
2164
|
Status DBImpl::AtomicFlushMemTables(
|
|
2157
2165
|
const autovector<ColumnFamilyData*>& column_family_datas,
|
|
2158
2166
|
const FlushOptions& flush_options, FlushReason flush_reason,
|
|
2159
|
-
bool
|
|
2167
|
+
bool entered_write_thread) {
|
|
2168
|
+
assert(immutable_db_options_.atomic_flush);
|
|
2169
|
+
if (!flush_options.wait && write_controller_.IsStopped()) {
|
|
2170
|
+
std::ostringstream oss;
|
|
2171
|
+
oss << "Writes have been stopped, thus unable to perform manual flush. "
|
|
2172
|
+
"Please try again later after writes are resumed";
|
|
2173
|
+
return Status::TryAgain(oss.str());
|
|
2174
|
+
}
|
|
2160
2175
|
Status s;
|
|
2161
2176
|
if (!flush_options.allow_write_stall) {
|
|
2162
2177
|
int num_cfs_to_flush = 0;
|
|
@@ -2173,6 +2188,7 @@ Status DBImpl::AtomicFlushMemTables(
|
|
|
2173
2188
|
return s;
|
|
2174
2189
|
}
|
|
2175
2190
|
}
|
|
2191
|
+
const bool needs_to_join_write_thread = !entered_write_thread;
|
|
2176
2192
|
FlushRequest flush_req;
|
|
2177
2193
|
autovector<ColumnFamilyData*> cfds;
|
|
2178
2194
|
{
|
|
@@ -2181,7 +2197,7 @@ Status DBImpl::AtomicFlushMemTables(
|
|
|
2181
2197
|
|
|
2182
2198
|
WriteThread::Writer w;
|
|
2183
2199
|
WriteThread::Writer nonmem_w;
|
|
2184
|
-
if (
|
|
2200
|
+
if (needs_to_join_write_thread) {
|
|
2185
2201
|
write_thread_.EnterUnbatched(&w, &mutex_);
|
|
2186
2202
|
if (two_write_queues_) {
|
|
2187
2203
|
nonmem_write_thread_.EnterUnbatched(&nonmem_w, &mutex_);
|
|
@@ -2229,7 +2245,7 @@ Status DBImpl::AtomicFlushMemTables(
|
|
|
2229
2245
|
MaybeScheduleFlushOrCompaction();
|
|
2230
2246
|
}
|
|
2231
2247
|
|
|
2232
|
-
if (
|
|
2248
|
+
if (needs_to_join_write_thread) {
|
|
2233
2249
|
write_thread_.ExitUnbatched(&w);
|
|
2234
2250
|
if (two_write_queues_) {
|
|
2235
2251
|
nonmem_write_thread_.ExitUnbatched(&nonmem_w);
|
|
@@ -3263,7 +3279,6 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
|
|
|
3263
3279
|
TEST_SYNC_POINT_CALLBACK("DBImpl::BackgroundCompaction:BeforeCompaction",
|
|
3264
3280
|
c->column_family_data());
|
|
3265
3281
|
assert(c->num_input_files(1) == 0);
|
|
3266
|
-
assert(c->level() == 0);
|
|
3267
3282
|
assert(c->column_family_data()->ioptions()->compaction_style ==
|
|
3268
3283
|
kCompactionStyleFIFO);
|
|
3269
3284
|
|
|
@@ -3756,9 +3771,11 @@ void DBImpl::InstallSuperVersionAndScheduleWork(
|
|
|
3756
3771
|
// triggered soon anyway.
|
|
3757
3772
|
bottommost_files_mark_threshold_ = kMaxSequenceNumber;
|
|
3758
3773
|
for (auto* my_cfd : *versions_->GetColumnFamilySet()) {
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3774
|
+
if (!my_cfd->ioptions()->allow_ingest_behind) {
|
|
3775
|
+
bottommost_files_mark_threshold_ = std::min(
|
|
3776
|
+
bottommost_files_mark_threshold_,
|
|
3777
|
+
my_cfd->current()->storage_info()->bottommost_files_mark_threshold());
|
|
3778
|
+
}
|
|
3762
3779
|
}
|
|
3763
3780
|
|
|
3764
3781
|
// Whenever we install new SuperVersion, we might need to issue new flushes or
|
|
@@ -31,18 +31,6 @@ Status DBImpl::TEST_SwitchWAL() {
|
|
|
31
31
|
return s;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
bool DBImpl::TEST_WALBufferIsEmpty(bool lock) {
|
|
35
|
-
if (lock) {
|
|
36
|
-
log_write_mutex_.Lock();
|
|
37
|
-
}
|
|
38
|
-
log::Writer* cur_log_writer = logs_.back().writer;
|
|
39
|
-
auto res = cur_log_writer->TEST_BufferIsEmpty();
|
|
40
|
-
if (lock) {
|
|
41
|
-
log_write_mutex_.Unlock();
|
|
42
|
-
}
|
|
43
|
-
return res;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
34
|
uint64_t DBImpl::TEST_MaxNextLevelOverlappingBytes(
|
|
47
35
|
ColumnFamilyHandle* column_family) {
|
|
48
36
|
ColumnFamilyData* cfd;
|
|
@@ -193,11 +193,14 @@ void DBImpl::FindObsoleteFiles(JobContext* job_context, bool force,
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
+
IOOptions io_opts;
|
|
197
|
+
io_opts.do_not_recurse = true;
|
|
196
198
|
for (auto& path : paths) {
|
|
197
199
|
// set of all files in the directory. We'll exclude files that are still
|
|
198
200
|
// alive in the subsequent processings.
|
|
199
201
|
std::vector<std::string> files;
|
|
200
|
-
Status s =
|
|
202
|
+
Status s = immutable_db_options_.fs->GetChildren(
|
|
203
|
+
path, io_opts, &files, /*IODebugContext*=*/nullptr);
|
|
201
204
|
s.PermitUncheckedError(); // TODO: What should we do on error?
|
|
202
205
|
for (const std::string& file : files) {
|
|
203
206
|
uint64_t number;
|
|
@@ -223,7 +226,9 @@ void DBImpl::FindObsoleteFiles(JobContext* job_context, bool force,
|
|
|
223
226
|
// Add log files in wal_dir
|
|
224
227
|
if (!immutable_db_options_.IsWalDirSameAsDBPath(dbname_)) {
|
|
225
228
|
std::vector<std::string> log_files;
|
|
226
|
-
Status s =
|
|
229
|
+
Status s = immutable_db_options_.fs->GetChildren(
|
|
230
|
+
immutable_db_options_.wal_dir, io_opts, &log_files,
|
|
231
|
+
/*IODebugContext*=*/nullptr);
|
|
227
232
|
s.PermitUncheckedError(); // TODO: What should we do on error?
|
|
228
233
|
for (const std::string& log_file : log_files) {
|
|
229
234
|
job_context->full_scan_candidate_files.emplace_back(
|
|
@@ -235,8 +240,9 @@ void DBImpl::FindObsoleteFiles(JobContext* job_context, bool force,
|
|
|
235
240
|
if (!immutable_db_options_.db_log_dir.empty() &&
|
|
236
241
|
immutable_db_options_.db_log_dir != dbname_) {
|
|
237
242
|
std::vector<std::string> info_log_files;
|
|
238
|
-
Status s =
|
|
239
|
-
|
|
243
|
+
Status s = immutable_db_options_.fs->GetChildren(
|
|
244
|
+
immutable_db_options_.db_log_dir, io_opts, &info_log_files,
|
|
245
|
+
/*IODebugContext*=*/nullptr);
|
|
240
246
|
s.PermitUncheckedError(); // TODO: What should we do on error?
|
|
241
247
|
for (std::string& log_file : info_log_files) {
|
|
242
248
|
job_context->full_scan_candidate_files.emplace_back(
|
|
@@ -163,8 +163,11 @@ DBOptions SanitizeOptions(const std::string& dbname, const DBOptions& src,
|
|
|
163
163
|
// DeleteScheduler::CleanupDirectory on the same dir later, it will be
|
|
164
164
|
// safe
|
|
165
165
|
std::vector<std::string> filenames;
|
|
166
|
+
IOOptions io_opts;
|
|
167
|
+
io_opts.do_not_recurse = true;
|
|
166
168
|
auto wal_dir = immutable_db_options.GetWalDir();
|
|
167
|
-
Status s =
|
|
169
|
+
Status s = immutable_db_options.fs->GetChildren(
|
|
170
|
+
wal_dir, io_opts, &filenames, /*IODebugContext*=*/nullptr);
|
|
168
171
|
s.PermitUncheckedError(); //**TODO: What to do on error?
|
|
169
172
|
for (std::string& filename : filenames) {
|
|
170
173
|
if (filename.find(".log.trash", filename.length() -
|
|
@@ -432,7 +435,10 @@ Status DBImpl::Recover(
|
|
|
432
435
|
s = env_->FileExists(current_fname);
|
|
433
436
|
} else {
|
|
434
437
|
s = Status::NotFound();
|
|
435
|
-
|
|
438
|
+
IOOptions io_opts;
|
|
439
|
+
io_opts.do_not_recurse = true;
|
|
440
|
+
Status io_s = immutable_db_options_.fs->GetChildren(
|
|
441
|
+
dbname_, io_opts, &files_in_dbname, /*IODebugContext*=*/nullptr);
|
|
436
442
|
if (!io_s.ok()) {
|
|
437
443
|
s = io_s;
|
|
438
444
|
files_in_dbname.clear();
|
|
@@ -498,7 +504,10 @@ Status DBImpl::Recover(
|
|
|
498
504
|
}
|
|
499
505
|
} else if (immutable_db_options_.best_efforts_recovery) {
|
|
500
506
|
assert(files_in_dbname.empty());
|
|
501
|
-
|
|
507
|
+
IOOptions io_opts;
|
|
508
|
+
io_opts.do_not_recurse = true;
|
|
509
|
+
Status s = immutable_db_options_.fs->GetChildren(
|
|
510
|
+
dbname_, io_opts, &files_in_dbname, /*IODebugContext*=*/nullptr);
|
|
502
511
|
if (s.IsNotFound()) {
|
|
503
512
|
return Status::InvalidArgument(dbname_,
|
|
504
513
|
"does not exist (open for read only)");
|
|
@@ -570,7 +579,10 @@ Status DBImpl::Recover(
|
|
|
570
579
|
// produced by an older version of rocksdb.
|
|
571
580
|
auto wal_dir = immutable_db_options_.GetWalDir();
|
|
572
581
|
if (!immutable_db_options_.best_efforts_recovery) {
|
|
573
|
-
|
|
582
|
+
IOOptions io_opts;
|
|
583
|
+
io_opts.do_not_recurse = true;
|
|
584
|
+
s = immutable_db_options_.fs->GetChildren(
|
|
585
|
+
wal_dir, io_opts, &files_in_wal_dir, /*IODebugContext*=*/nullptr);
|
|
574
586
|
}
|
|
575
587
|
if (s.IsNotFound()) {
|
|
576
588
|
return Status::InvalidArgument("wal_dir not found", wal_dir);
|
|
@@ -678,7 +690,10 @@ Status DBImpl::Recover(
|
|
|
678
690
|
} else if (normalized_dbname == normalized_wal_dir) {
|
|
679
691
|
filenames = std::move(files_in_wal_dir);
|
|
680
692
|
} else {
|
|
681
|
-
|
|
693
|
+
IOOptions io_opts;
|
|
694
|
+
io_opts.do_not_recurse = true;
|
|
695
|
+
s = immutable_db_options_.fs->GetChildren(
|
|
696
|
+
GetName(), io_opts, &filenames, /*IODebugContext*=*/nullptr);
|
|
682
697
|
}
|
|
683
698
|
}
|
|
684
699
|
if (s.ok()) {
|
|
@@ -1929,18 +1944,6 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname,
|
|
|
1929
1944
|
|
|
1930
1945
|
if (s.ok()) {
|
|
1931
1946
|
for (auto cfd : *impl->versions_->GetColumnFamilySet()) {
|
|
1932
|
-
if (cfd->ioptions()->compaction_style == kCompactionStyleFIFO) {
|
|
1933
|
-
auto* vstorage = cfd->current()->storage_info();
|
|
1934
|
-
for (int i = 1; i < vstorage->num_levels(); ++i) {
|
|
1935
|
-
int num_files = vstorage->NumLevelFiles(i);
|
|
1936
|
-
if (num_files > 0) {
|
|
1937
|
-
s = Status::InvalidArgument(
|
|
1938
|
-
"Not all files are at level 0. Cannot "
|
|
1939
|
-
"open with FIFO compaction style.");
|
|
1940
|
-
break;
|
|
1941
|
-
}
|
|
1942
|
-
}
|
|
1943
|
-
}
|
|
1944
1947
|
if (!cfd->mem()->IsSnapshotSupported()) {
|
|
1945
1948
|
impl->is_snapshot_supported_ = false;
|
|
1946
1949
|
}
|
|
@@ -2022,9 +2025,13 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname,
|
|
|
2022
2025
|
// Remove duplicate paths.
|
|
2023
2026
|
std::sort(paths.begin(), paths.end());
|
|
2024
2027
|
paths.erase(std::unique(paths.begin(), paths.end()), paths.end());
|
|
2028
|
+
IOOptions io_opts;
|
|
2029
|
+
io_opts.do_not_recurse = true;
|
|
2025
2030
|
for (auto& path : paths) {
|
|
2026
2031
|
std::vector<std::string> existing_files;
|
|
2027
|
-
impl->immutable_db_options_.
|
|
2032
|
+
impl->immutable_db_options_.fs
|
|
2033
|
+
->GetChildren(path, io_opts, &existing_files,
|
|
2034
|
+
/*IODebugContext*=*/nullptr)
|
|
2028
2035
|
.PermitUncheckedError(); //**TODO: What do to on error?
|
|
2029
2036
|
for (auto& file_name : existing_files) {
|
|
2030
2037
|
uint64_t file_number;
|
|
@@ -2060,10 +2067,16 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname,
|
|
|
2060
2067
|
ROCKS_LOG_HEADER(impl->immutable_db_options_.info_log, "DB pointer %p",
|
|
2061
2068
|
impl);
|
|
2062
2069
|
LogFlush(impl->immutable_db_options_.info_log);
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2070
|
+
if (!impl->WALBufferIsEmpty()) {
|
|
2071
|
+
s = impl->FlushWAL(false);
|
|
2072
|
+
if (s.ok()) {
|
|
2073
|
+
// Sync is needed otherwise WAL buffered data might get lost after a
|
|
2074
|
+
// power reset.
|
|
2075
|
+
log::Writer* log_writer = impl->logs_.back().writer;
|
|
2076
|
+
s = log_writer->file()->Sync(impl->immutable_db_options_.use_fsync);
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
if (s.ok() && !persist_options_status.ok()) {
|
|
2067
2080
|
s = Status::IOError(
|
|
2068
2081
|
"DB::Open() failed --- Unable to persist Options file",
|
|
2069
2082
|
persist_options_status.ToString());
|
|
@@ -100,7 +100,11 @@ Status DBImplSecondary::FindNewLogNumbers(std::vector<uint64_t>* logs) {
|
|
|
100
100
|
assert(logs != nullptr);
|
|
101
101
|
std::vector<std::string> filenames;
|
|
102
102
|
Status s;
|
|
103
|
-
|
|
103
|
+
IOOptions io_opts;
|
|
104
|
+
io_opts.do_not_recurse = true;
|
|
105
|
+
s = immutable_db_options_.fs->GetChildren(immutable_db_options_.GetWalDir(),
|
|
106
|
+
io_opts, &filenames,
|
|
107
|
+
/*IODebugContext*=*/nullptr);
|
|
104
108
|
if (s.IsNotFound()) {
|
|
105
109
|
return Status::InvalidArgument("Failed to open wal_dir",
|
|
106
110
|
immutable_db_options_.GetWalDir());
|
|
@@ -111,6 +111,17 @@ Status DBImpl::DeleteRange(const WriteOptions& write_options,
|
|
|
111
111
|
return DB::DeleteRange(write_options, column_family, begin_key, end_key);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
+
Status DBImpl::DeleteRange(const WriteOptions& write_options,
|
|
115
|
+
ColumnFamilyHandle* column_family,
|
|
116
|
+
const Slice& begin_key, const Slice& end_key,
|
|
117
|
+
const Slice& ts) {
|
|
118
|
+
const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
|
|
119
|
+
if (!s.ok()) {
|
|
120
|
+
return s;
|
|
121
|
+
}
|
|
122
|
+
return DB::DeleteRange(write_options, column_family, begin_key, end_key, ts);
|
|
123
|
+
}
|
|
124
|
+
|
|
114
125
|
void DBImpl::SetRecoverableStatePreReleaseCallback(
|
|
115
126
|
PreReleaseCallback* callback) {
|
|
116
127
|
recoverable_state_pre_release_callback_.reset(callback);
|
|
@@ -1749,6 +1760,7 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
|
|
|
1749
1760
|
&time_delayed);
|
|
1750
1761
|
uint64_t delay =
|
|
1751
1762
|
write_controller_.GetDelay(immutable_db_options_.clock, num_bytes);
|
|
1763
|
+
TEST_SYNC_POINT("DBImpl::DelayWrite:Start");
|
|
1752
1764
|
if (delay > 0) {
|
|
1753
1765
|
if (write_options.no_slowdown) {
|
|
1754
1766
|
return Status::Incomplete("Write stall");
|
|
@@ -1758,8 +1770,8 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
|
|
|
1758
1770
|
// Notify write_thread_ about the stall so it can setup a barrier and
|
|
1759
1771
|
// fail any pending writers with no_slowdown
|
|
1760
1772
|
write_thread_.BeginWriteStall();
|
|
1761
|
-
TEST_SYNC_POINT("DBImpl::DelayWrite:BeginWriteStallDone");
|
|
1762
1773
|
mutex_.Unlock();
|
|
1774
|
+
TEST_SYNC_POINT("DBImpl::DelayWrite:BeginWriteStallDone");
|
|
1763
1775
|
// We will delay the write until we have slept for `delay` microseconds
|
|
1764
1776
|
// or we don't need a delay anymore. We check for cancellation every 1ms
|
|
1765
1777
|
// (slightly longer because WriteController minimum delay is 1ms, in
|
|
@@ -1784,7 +1796,8 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
|
|
|
1784
1796
|
// might wait here indefinitely as the background compaction may never
|
|
1785
1797
|
// finish successfully, resulting in the stall condition lasting
|
|
1786
1798
|
// indefinitely
|
|
1787
|
-
while (error_handler_.GetBGError().ok() && write_controller_.IsStopped()
|
|
1799
|
+
while (error_handler_.GetBGError().ok() && write_controller_.IsStopped() &&
|
|
1800
|
+
!shutting_down_.load(std::memory_order_relaxed)) {
|
|
1788
1801
|
if (write_options.no_slowdown) {
|
|
1789
1802
|
return Status::Incomplete("Write stall");
|
|
1790
1803
|
}
|
|
@@ -1810,9 +1823,13 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
|
|
|
1810
1823
|
// proceed
|
|
1811
1824
|
Status s;
|
|
1812
1825
|
if (write_controller_.IsStopped()) {
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1826
|
+
if (!shutting_down_.load(std::memory_order_relaxed)) {
|
|
1827
|
+
// If writes are still stopped and db not shutdown, it means we bailed
|
|
1828
|
+
// due to a background error
|
|
1829
|
+
s = Status::Incomplete(error_handler_.GetBGError().ToString());
|
|
1830
|
+
} else {
|
|
1831
|
+
s = Status::ShutdownInProgress("stalled writes");
|
|
1832
|
+
}
|
|
1816
1833
|
}
|
|
1817
1834
|
if (error_handler_.IsDBStopped()) {
|
|
1818
1835
|
s = error_handler_.GetBGError();
|
|
@@ -2361,6 +2378,24 @@ Status DB::DeleteRange(const WriteOptions& opt,
|
|
|
2361
2378
|
return Write(opt, &batch);
|
|
2362
2379
|
}
|
|
2363
2380
|
|
|
2381
|
+
Status DB::DeleteRange(const WriteOptions& opt,
|
|
2382
|
+
ColumnFamilyHandle* column_family,
|
|
2383
|
+
const Slice& begin_key, const Slice& end_key,
|
|
2384
|
+
const Slice& ts) {
|
|
2385
|
+
ColumnFamilyHandle* default_cf = DefaultColumnFamily();
|
|
2386
|
+
assert(default_cf);
|
|
2387
|
+
const Comparator* const default_cf_ucmp = default_cf->GetComparator();
|
|
2388
|
+
assert(default_cf_ucmp);
|
|
2389
|
+
WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
|
|
2390
|
+
opt.protection_bytes_per_key,
|
|
2391
|
+
default_cf_ucmp->timestamp_size());
|
|
2392
|
+
Status s = batch.DeleteRange(column_family, begin_key, end_key, ts);
|
|
2393
|
+
if (!s.ok()) {
|
|
2394
|
+
return s;
|
|
2395
|
+
}
|
|
2396
|
+
return Write(opt, &batch);
|
|
2397
|
+
}
|
|
2398
|
+
|
|
2364
2399
|
Status DB::Merge(const WriteOptions& opt, ColumnFamilyHandle* column_family,
|
|
2365
2400
|
const Slice& key, const Slice& value) {
|
|
2366
2401
|
WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
|
|
@@ -652,6 +652,7 @@ TEST_F(DBIteratorStressTest, StressTest) {
|
|
|
652
652
|
} // namespace ROCKSDB_NAMESPACE
|
|
653
653
|
|
|
654
654
|
int main(int argc, char** argv) {
|
|
655
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
655
656
|
::testing::InitGoogleTest(&argc, argv);
|
|
656
657
|
ParseCommandLineFlags(&argc, &argv, true);
|
|
657
658
|
return RUN_ALL_TESTS();
|
|
@@ -3187,6 +3187,7 @@ TEST_F(DBIteratorTest, ReverseToForwardWithDisappearingKeys) {
|
|
|
3187
3187
|
} // namespace ROCKSDB_NAMESPACE
|
|
3188
3188
|
|
|
3189
3189
|
int main(int argc, char** argv) {
|
|
3190
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
3190
3191
|
::testing::InitGoogleTest(&argc, argv);
|
|
3191
3192
|
return RUN_ALL_TESTS();
|
|
3192
3193
|
}
|
|
@@ -3232,6 +3232,28 @@ TEST_F(DBIteratorTest, BackwardIterationOnInplaceUpdateMemtable) {
|
|
|
3232
3232
|
}
|
|
3233
3233
|
}
|
|
3234
3234
|
|
|
3235
|
+
TEST_F(DBIteratorTest, IteratorRefreshReturnSV) {
|
|
3236
|
+
Options options = CurrentOptions();
|
|
3237
|
+
options.disable_auto_compactions = true;
|
|
3238
|
+
DestroyAndReopen(options);
|
|
3239
|
+
ASSERT_OK(
|
|
3240
|
+
db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), "a", "z"));
|
|
3241
|
+
std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
|
|
3242
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3243
|
+
"ArenaWrappedDBIter::Refresh:SV", [&](void*) {
|
|
3244
|
+
ASSERT_OK(db_->Put(WriteOptions(), "dummy", "new SV"));
|
|
3245
|
+
// This makes the local SV obselete.
|
|
3246
|
+
ASSERT_OK(Flush());
|
|
3247
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3248
|
+
});
|
|
3249
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3250
|
+
ASSERT_OK(iter->Refresh());
|
|
3251
|
+
iter.reset();
|
|
3252
|
+
// iter used to not cleanup SV, so the Close() below would hit an assertion
|
|
3253
|
+
// error.
|
|
3254
|
+
Close();
|
|
3255
|
+
}
|
|
3256
|
+
|
|
3235
3257
|
} // namespace ROCKSDB_NAMESPACE
|
|
3236
3258
|
|
|
3237
3259
|
int main(int argc, char** argv) {
|
|
@@ -879,6 +879,7 @@ TEST_P(DbMemtableKVChecksumTest, FlushWithCorruptAfterMemtableInsert) {
|
|
|
879
879
|
} // namespace ROCKSDB_NAMESPACE
|
|
880
880
|
|
|
881
881
|
int main(int argc, char** argv) {
|
|
882
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
882
883
|
::testing::InitGoogleTest(&argc, argv);
|
|
883
884
|
return RUN_ALL_TESTS();
|
|
884
885
|
}
|
|
@@ -515,6 +515,7 @@ TEST_F(DBLogicalBlockSizeCacheTest, MultiDBWithSamePaths) {
|
|
|
515
515
|
#endif // OS_LINUX
|
|
516
516
|
|
|
517
517
|
int main(int argc, char** argv) {
|
|
518
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
518
519
|
::testing::InitGoogleTest(&argc, argv);
|
|
519
520
|
return RUN_ALL_TESTS();
|
|
520
521
|
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
namespace ROCKSDB_NAMESPACE {
|
|
15
15
|
|
|
16
|
+
// TODO(cbi): parameterize the test to cover user-defined timestamp cases
|
|
16
17
|
class DBRangeDelTest : public DBTestBase {
|
|
17
18
|
public:
|
|
18
19
|
DBRangeDelTest() : DBTestBase("db_range_del_test", /*env_do_fsync=*/false) {}
|
|
@@ -1029,7 +1030,11 @@ TEST_F(DBRangeDelTest, CompactionTreatsSplitInputLevelDeletionAtomically) {
|
|
|
1029
1030
|
options.level0_file_num_compaction_trigger = kNumFilesPerLevel;
|
|
1030
1031
|
options.memtable_factory.reset(
|
|
1031
1032
|
test::NewSpecialSkipListFactory(2 /* num_entries_flush */));
|
|
1032
|
-
|
|
1033
|
+
// max file size could be 2x of target file size, so set it to half of that
|
|
1034
|
+
options.target_file_size_base = kValueBytes / 2;
|
|
1035
|
+
// disable dynamic_file_size, as it will cut L1 files into more files (than
|
|
1036
|
+
// kNumFilesPerLevel).
|
|
1037
|
+
options.level_compaction_dynamic_file_size = false;
|
|
1033
1038
|
options.max_compaction_bytes = 1500;
|
|
1034
1039
|
// i == 0: CompactFiles
|
|
1035
1040
|
// i == 1: CompactRange
|
|
@@ -1100,6 +1105,12 @@ TEST_F(DBRangeDelTest, RangeTombstoneEndKeyAsSstableUpperBound) {
|
|
|
1100
1105
|
test::NewSpecialSkipListFactory(2 /* num_entries_flush */));
|
|
1101
1106
|
options.target_file_size_base = kValueBytes;
|
|
1102
1107
|
options.disable_auto_compactions = true;
|
|
1108
|
+
// disable it for now, otherwise the L1 files are going be cut before data 1:
|
|
1109
|
+
// L1: [0] [1,4]
|
|
1110
|
+
// L2: [0,0]
|
|
1111
|
+
// because the grandparent file is between [0]->[1] and it's size is more than
|
|
1112
|
+
// 1/8 of target size (4k).
|
|
1113
|
+
options.level_compaction_dynamic_file_size = false;
|
|
1103
1114
|
|
|
1104
1115
|
DestroyAndReopen(options);
|
|
1105
1116
|
|
|
@@ -1723,9 +1734,8 @@ TEST_F(DBRangeDelTest, OverlappedKeys) {
|
|
|
1723
1734
|
|
|
1724
1735
|
ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, nullptr,
|
|
1725
1736
|
true /* disallow_trivial_move */));
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
2)); // L1->L2 compaction size is limited to max_compaction_bytes
|
|
1737
|
+
// L1->L2 compaction size is limited to max_compaction_bytes
|
|
1738
|
+
ASSERT_EQ(3, NumTableFilesAtLevel(2));
|
|
1729
1739
|
ASSERT_EQ(0, NumTableFilesAtLevel(1));
|
|
1730
1740
|
}
|
|
1731
1741
|
|
|
@@ -1974,6 +1984,40 @@ TEST_F(DBRangeDelTest, TombstoneFromCurrentLevel) {
|
|
|
1974
1984
|
delete iter;
|
|
1975
1985
|
}
|
|
1976
1986
|
|
|
1987
|
+
class TombstoneTestSstPartitioner : public SstPartitioner {
|
|
1988
|
+
public:
|
|
1989
|
+
const char* Name() const override { return "SingleKeySstPartitioner"; }
|
|
1990
|
+
|
|
1991
|
+
PartitionerResult ShouldPartition(
|
|
1992
|
+
const PartitionerRequest& request) override {
|
|
1993
|
+
if (cmp->Compare(*request.current_user_key, DBTestBase::Key(5)) == 0) {
|
|
1994
|
+
return kRequired;
|
|
1995
|
+
} else {
|
|
1996
|
+
return kNotRequired;
|
|
1997
|
+
}
|
|
1998
|
+
}
|
|
1999
|
+
|
|
2000
|
+
bool CanDoTrivialMove(const Slice& /*smallest_user_key*/,
|
|
2001
|
+
const Slice& /*largest_user_key*/) override {
|
|
2002
|
+
return false;
|
|
2003
|
+
}
|
|
2004
|
+
|
|
2005
|
+
const Comparator* cmp = BytewiseComparator();
|
|
2006
|
+
};
|
|
2007
|
+
|
|
2008
|
+
class TombstoneTestSstPartitionerFactory : public SstPartitionerFactory {
|
|
2009
|
+
public:
|
|
2010
|
+
static const char* kClassName() {
|
|
2011
|
+
return "TombstoneTestSstPartitionerFactory";
|
|
2012
|
+
}
|
|
2013
|
+
const char* Name() const override { return kClassName(); }
|
|
2014
|
+
|
|
2015
|
+
std::unique_ptr<SstPartitioner> CreatePartitioner(
|
|
2016
|
+
const SstPartitioner::Context& /* context */) const override {
|
|
2017
|
+
return std::unique_ptr<SstPartitioner>(new TombstoneTestSstPartitioner());
|
|
2018
|
+
}
|
|
2019
|
+
};
|
|
2020
|
+
|
|
1977
2021
|
TEST_F(DBRangeDelTest, TombstoneAcrossFileBoundary) {
|
|
1978
2022
|
// Verify that a range tombstone across file boundary covers keys from older
|
|
1979
2023
|
// levels. Test set up:
|
|
@@ -1987,11 +2031,17 @@ TEST_F(DBRangeDelTest, TombstoneAcrossFileBoundary) {
|
|
|
1987
2031
|
options.target_file_size_base = 2 * 1024;
|
|
1988
2032
|
options.max_compaction_bytes = 2 * 1024;
|
|
1989
2033
|
|
|
2034
|
+
// Make sure L1 files are split before "5"
|
|
2035
|
+
auto factory = std::make_shared<TombstoneTestSstPartitionerFactory>();
|
|
2036
|
+
options.sst_partitioner_factory = factory;
|
|
2037
|
+
|
|
1990
2038
|
DestroyAndReopen(options);
|
|
1991
2039
|
|
|
1992
2040
|
Random rnd(301);
|
|
1993
2041
|
// L2
|
|
1994
|
-
|
|
2042
|
+
// the file should be smaller than max_compaction_bytes, otherwise the file
|
|
2043
|
+
// will be cut before 7.
|
|
2044
|
+
ASSERT_OK(db_->Put(WriteOptions(), Key(5), rnd.RandomString(1 << 9)));
|
|
1995
2045
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
1996
2046
|
MoveFilesToLevel(2);
|
|
1997
2047
|
ASSERT_EQ(1, NumTableFilesAtLevel(2));
|
|
@@ -2687,6 +2737,23 @@ TEST_F(DBRangeDelTest, PrefixSentinelKey) {
|
|
|
2687
2737
|
delete iter;
|
|
2688
2738
|
}
|
|
2689
2739
|
|
|
2740
|
+
TEST_F(DBRangeDelTest, RefreshMemtableIter) {
|
|
2741
|
+
Options options = CurrentOptions();
|
|
2742
|
+
options.disable_auto_compactions = true;
|
|
2743
|
+
DestroyAndReopen(options);
|
|
2744
|
+
ASSERT_OK(
|
|
2745
|
+
db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), "a", "z"));
|
|
2746
|
+
ReadOptions ro;
|
|
2747
|
+
ro.read_tier = kMemtableTier;
|
|
2748
|
+
std::unique_ptr<Iterator> iter{db_->NewIterator(ro)};
|
|
2749
|
+
ASSERT_OK(Flush());
|
|
2750
|
+
// First refresh reinits iter, which had a bug where
|
|
2751
|
+
// iter.memtable_range_tombstone_iter_ was not set to nullptr, and caused
|
|
2752
|
+
// subsequent refresh to double free.
|
|
2753
|
+
ASSERT_OK(iter->Refresh());
|
|
2754
|
+
ASSERT_OK(iter->Refresh());
|
|
2755
|
+
}
|
|
2756
|
+
|
|
2690
2757
|
#endif // ROCKSDB_LITE
|
|
2691
2758
|
|
|
2692
2759
|
} // namespace ROCKSDB_NAMESPACE
|