@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
|
@@ -18,15 +18,22 @@
|
|
|
18
18
|
|
|
19
19
|
namespace ROCKSDB_NAMESPACE {
|
|
20
20
|
|
|
21
|
-
class DBTestTailingIterator : public DBTestBase
|
|
21
|
+
class DBTestTailingIterator : public DBTestBase,
|
|
22
|
+
public ::testing::WithParamInterface<bool> {
|
|
22
23
|
public:
|
|
23
24
|
DBTestTailingIterator()
|
|
24
25
|
: DBTestBase("db_tailing_iterator_test", /*env_do_fsync=*/true) {}
|
|
25
26
|
};
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
INSTANTIATE_TEST_CASE_P(DBTestTailingIterator, DBTestTailingIterator,
|
|
29
|
+
::testing::Bool());
|
|
30
|
+
|
|
31
|
+
TEST_P(DBTestTailingIterator, TailingIteratorSingle) {
|
|
28
32
|
ReadOptions read_options;
|
|
29
33
|
read_options.tailing = true;
|
|
34
|
+
if (GetParam()) {
|
|
35
|
+
read_options.async_io = true;
|
|
36
|
+
}
|
|
30
37
|
|
|
31
38
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
|
|
32
39
|
iter->SeekToFirst();
|
|
@@ -43,11 +50,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorSingle) {
|
|
|
43
50
|
ASSERT_TRUE(!iter->Valid());
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
TEST_P(DBTestTailingIterator, TailingIteratorKeepAdding) {
|
|
47
54
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
48
55
|
ReadOptions read_options;
|
|
49
56
|
read_options.tailing = true;
|
|
50
|
-
|
|
57
|
+
if (GetParam()) {
|
|
58
|
+
read_options.async_io = true;
|
|
59
|
+
}
|
|
51
60
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
|
|
52
61
|
ASSERT_OK(iter->status());
|
|
53
62
|
std::string value(1024, 'a');
|
|
@@ -66,11 +75,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorKeepAdding) {
|
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
|
|
78
|
+
TEST_P(DBTestTailingIterator, TailingIteratorSeekToNext) {
|
|
70
79
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
71
80
|
ReadOptions read_options;
|
|
72
81
|
read_options.tailing = true;
|
|
73
|
-
|
|
82
|
+
if (GetParam()) {
|
|
83
|
+
read_options.async_io = true;
|
|
84
|
+
}
|
|
74
85
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
|
|
75
86
|
ASSERT_OK(iter->status());
|
|
76
87
|
std::unique_ptr<Iterator> itern(db_->NewIterator(read_options, handles_[1]));
|
|
@@ -125,7 +136,7 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToNext) {
|
|
|
125
136
|
}
|
|
126
137
|
}
|
|
127
138
|
|
|
128
|
-
|
|
139
|
+
TEST_P(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
|
|
129
140
|
const uint64_t k150KB = 150 * 1024;
|
|
130
141
|
Options options;
|
|
131
142
|
options.write_buffer_size = k150KB;
|
|
@@ -135,6 +146,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
|
|
|
135
146
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
136
147
|
ReadOptions read_options;
|
|
137
148
|
read_options.tailing = true;
|
|
149
|
+
if (GetParam()) {
|
|
150
|
+
read_options.async_io = true;
|
|
151
|
+
}
|
|
138
152
|
int num_iters, deleted_iters;
|
|
139
153
|
|
|
140
154
|
char bufe[32];
|
|
@@ -265,10 +279,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
|
|
|
265
279
|
}
|
|
266
280
|
}
|
|
267
281
|
|
|
268
|
-
|
|
282
|
+
TEST_P(DBTestTailingIterator, TailingIteratorDeletes) {
|
|
269
283
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
270
284
|
ReadOptions read_options;
|
|
271
285
|
read_options.tailing = true;
|
|
286
|
+
if (GetParam()) {
|
|
287
|
+
read_options.async_io = true;
|
|
288
|
+
}
|
|
272
289
|
|
|
273
290
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
|
|
274
291
|
ASSERT_OK(iter->status());
|
|
@@ -300,15 +317,18 @@ TEST_F(DBTestTailingIterator, TailingIteratorDeletes) {
|
|
|
300
317
|
|
|
301
318
|
// make sure we can read all new records using the existing iterator
|
|
302
319
|
int count = 0;
|
|
303
|
-
for (; iter->Valid(); iter->Next(), ++count)
|
|
320
|
+
for (; iter->Valid(); iter->Next(), ++count)
|
|
321
|
+
;
|
|
304
322
|
|
|
305
323
|
ASSERT_EQ(count, num_records);
|
|
306
324
|
}
|
|
307
325
|
|
|
308
|
-
|
|
326
|
+
TEST_P(DBTestTailingIterator, TailingIteratorPrefixSeek) {
|
|
309
327
|
ReadOptions read_options;
|
|
310
328
|
read_options.tailing = true;
|
|
311
|
-
|
|
329
|
+
if (GetParam()) {
|
|
330
|
+
read_options.async_io = true;
|
|
331
|
+
}
|
|
312
332
|
Options options = CurrentOptions();
|
|
313
333
|
options.create_if_missing = true;
|
|
314
334
|
options.disable_auto_compactions = true;
|
|
@@ -338,10 +358,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorPrefixSeek) {
|
|
|
338
358
|
ASSERT_TRUE(!iter->Valid());
|
|
339
359
|
}
|
|
340
360
|
|
|
341
|
-
|
|
361
|
+
TEST_P(DBTestTailingIterator, TailingIteratorIncomplete) {
|
|
342
362
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
343
363
|
ReadOptions read_options;
|
|
344
364
|
read_options.tailing = true;
|
|
365
|
+
if (GetParam()) {
|
|
366
|
+
read_options.async_io = true;
|
|
367
|
+
}
|
|
345
368
|
read_options.read_tier = kBlockCacheTier;
|
|
346
369
|
|
|
347
370
|
std::string key("key");
|
|
@@ -361,7 +384,7 @@ TEST_F(DBTestTailingIterator, TailingIteratorIncomplete) {
|
|
|
361
384
|
ASSERT_TRUE(iter->Valid() || iter->status().IsIncomplete());
|
|
362
385
|
}
|
|
363
386
|
|
|
364
|
-
|
|
387
|
+
TEST_P(DBTestTailingIterator, TailingIteratorSeekToSame) {
|
|
365
388
|
Options options = CurrentOptions();
|
|
366
389
|
options.compaction_style = kCompactionStyleUniversal;
|
|
367
390
|
options.write_buffer_size = 1000;
|
|
@@ -369,7 +392,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToSame) {
|
|
|
369
392
|
|
|
370
393
|
ReadOptions read_options;
|
|
371
394
|
read_options.tailing = true;
|
|
372
|
-
|
|
395
|
+
if (GetParam()) {
|
|
396
|
+
read_options.async_io = true;
|
|
397
|
+
}
|
|
373
398
|
const int NROWS = 10000;
|
|
374
399
|
// Write rows with keys 00000, 00002, 00004 etc.
|
|
375
400
|
for (int i = 0; i < NROWS; ++i) {
|
|
@@ -400,14 +425,16 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToSame) {
|
|
|
400
425
|
// Sets iterate_upper_bound and verifies that ForwardIterator doesn't call
|
|
401
426
|
// Seek() on immutable iterators when target key is >= prev_key and all
|
|
402
427
|
// iterators, including the memtable iterator, are over the upper bound.
|
|
403
|
-
|
|
428
|
+
TEST_P(DBTestTailingIterator, TailingIteratorUpperBound) {
|
|
404
429
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
405
430
|
|
|
406
431
|
const Slice upper_bound("20", 3);
|
|
407
432
|
ReadOptions read_options;
|
|
408
433
|
read_options.tailing = true;
|
|
409
434
|
read_options.iterate_upper_bound = &upper_bound;
|
|
410
|
-
|
|
435
|
+
if (GetParam()) {
|
|
436
|
+
read_options.async_io = true;
|
|
437
|
+
}
|
|
411
438
|
ASSERT_OK(Put(1, "11", "11"));
|
|
412
439
|
ASSERT_OK(Put(1, "12", "12"));
|
|
413
440
|
ASSERT_OK(Put(1, "22", "22"));
|
|
@@ -439,10 +466,14 @@ TEST_F(DBTestTailingIterator, TailingIteratorUpperBound) {
|
|
|
439
466
|
|
|
440
467
|
ASSERT_FALSE(it->Valid());
|
|
441
468
|
ASSERT_OK(it->status());
|
|
442
|
-
|
|
469
|
+
if (GetParam()) {
|
|
470
|
+
ASSERT_EQ(1, immutable_seeks);
|
|
471
|
+
} else {
|
|
472
|
+
ASSERT_EQ(0, immutable_seeks);
|
|
473
|
+
}
|
|
443
474
|
}
|
|
444
475
|
|
|
445
|
-
|
|
476
|
+
TEST_P(DBTestTailingIterator, TailingIteratorGap) {
|
|
446
477
|
// level 1: [20, 25] [35, 40]
|
|
447
478
|
// level 2: [10 - 15] [45 - 50]
|
|
448
479
|
// level 3: [20, 30, 40]
|
|
@@ -455,7 +486,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorGap) {
|
|
|
455
486
|
|
|
456
487
|
ReadOptions read_options;
|
|
457
488
|
read_options.tailing = true;
|
|
458
|
-
|
|
489
|
+
if (GetParam()) {
|
|
490
|
+
read_options.async_io = true;
|
|
491
|
+
}
|
|
459
492
|
ASSERT_OK(Put(1, "20", "20"));
|
|
460
493
|
ASSERT_OK(Put(1, "30", "30"));
|
|
461
494
|
ASSERT_OK(Put(1, "40", "40"));
|
|
@@ -497,9 +530,12 @@ TEST_F(DBTestTailingIterator, TailingIteratorGap) {
|
|
|
497
530
|
ASSERT_OK(it->status());
|
|
498
531
|
}
|
|
499
532
|
|
|
500
|
-
|
|
533
|
+
TEST_P(DBTestTailingIterator, SeekWithUpperBoundBug) {
|
|
501
534
|
ReadOptions read_options;
|
|
502
535
|
read_options.tailing = true;
|
|
536
|
+
if (GetParam()) {
|
|
537
|
+
read_options.async_io = true;
|
|
538
|
+
}
|
|
503
539
|
const Slice upper_bound("cc", 3);
|
|
504
540
|
read_options.iterate_upper_bound = &upper_bound;
|
|
505
541
|
|
|
@@ -520,9 +556,12 @@ TEST_F(DBTestTailingIterator, SeekWithUpperBoundBug) {
|
|
|
520
556
|
ASSERT_EQ(iter->key().ToString(), "aa");
|
|
521
557
|
}
|
|
522
558
|
|
|
523
|
-
|
|
559
|
+
TEST_P(DBTestTailingIterator, SeekToFirstWithUpperBoundBug) {
|
|
524
560
|
ReadOptions read_options;
|
|
525
561
|
read_options.tailing = true;
|
|
562
|
+
if (GetParam()) {
|
|
563
|
+
read_options.async_io = true;
|
|
564
|
+
}
|
|
526
565
|
const Slice upper_bound("cc", 3);
|
|
527
566
|
read_options.iterate_upper_bound = &upper_bound;
|
|
528
567
|
|
|
@@ -483,6 +483,135 @@ TEST_F(DBTest, LevelLimitReopen) {
|
|
|
483
483
|
}
|
|
484
484
|
#endif // ROCKSDB_LITE
|
|
485
485
|
|
|
486
|
+
#ifndef ROCKSDB_LITE
|
|
487
|
+
TEST_F(DBTest, LevelReopenWithFIFO) {
|
|
488
|
+
const int kLevelCount = 4;
|
|
489
|
+
const int kKeyCount = 5;
|
|
490
|
+
const int kTotalSstFileCount = kLevelCount * kKeyCount;
|
|
491
|
+
const int kCF = 1;
|
|
492
|
+
|
|
493
|
+
Options options = CurrentOptions();
|
|
494
|
+
// Config level0_file_num_compaction_trigger to prevent L0 files being
|
|
495
|
+
// automatically compacted while we are constructing a LSM tree structure
|
|
496
|
+
// to test multi-level FIFO compaction.
|
|
497
|
+
options.level0_file_num_compaction_trigger = kKeyCount + 1;
|
|
498
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
499
|
+
|
|
500
|
+
// The expected number of files per level after each file creation.
|
|
501
|
+
const std::string expected_files_per_level[kLevelCount][kKeyCount] = {
|
|
502
|
+
{"0,0,0,1", "0,0,0,2", "0,0,0,3", "0,0,0,4", "0,0,0,5"},
|
|
503
|
+
{"0,0,1,5", "0,0,2,5", "0,0,3,5", "0,0,4,5", "0,0,5,5"},
|
|
504
|
+
{"0,1,5,5", "0,2,5,5", "0,3,5,5", "0,4,5,5", "0,5,5,5"},
|
|
505
|
+
{"1,5,5,5", "2,5,5,5", "3,5,5,5", "4,5,5,5", "5,5,5,5"},
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
const std::string expected_entries[kKeyCount][kLevelCount + 1] = {
|
|
509
|
+
{"[ ]", "[ a3 ]", "[ a2, a3 ]", "[ a1, a2, a3 ]", "[ a0, a1, a2, a3 ]"},
|
|
510
|
+
{"[ ]", "[ b3 ]", "[ b2, b3 ]", "[ b1, b2, b3 ]", "[ b0, b1, b2, b3 ]"},
|
|
511
|
+
{"[ ]", "[ c3 ]", "[ c2, c3 ]", "[ c1, c2, c3 ]", "[ c0, c1, c2, c3 ]"},
|
|
512
|
+
{"[ ]", "[ d3 ]", "[ d2, d3 ]", "[ d1, d2, d3 ]", "[ d0, d1, d2, d3 ]"},
|
|
513
|
+
{"[ ]", "[ e3 ]", "[ e2, e3 ]", "[ e1, e2, e3 ]", "[ e0, e1, e2, e3 ]"},
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
// The loop below creates the following LSM tree where each (k, v) pair
|
|
517
|
+
// represents a file that contains that entry. When a file is created,
|
|
518
|
+
// the db is reopend with FIFO compaction and verified the LSM tree
|
|
519
|
+
// structure is still the same.
|
|
520
|
+
//
|
|
521
|
+
// The resulting LSM tree will contain 5 different keys. Each key as
|
|
522
|
+
// 4 different versions, located in different level.
|
|
523
|
+
//
|
|
524
|
+
// L0: (e, e0) (d, d0) (c, c0) (b, b0) (a, a0)
|
|
525
|
+
// L1: (a, a1) (b, b1) (c, c1) (d, d1) (e, e1)
|
|
526
|
+
// L2: (a, a2) (b, b2) (c, c2) (d, d2) (e, e2)
|
|
527
|
+
// L3: (a, a3) (b, b3) (c, c3) (d, d3) (e, e3)
|
|
528
|
+
for (int l = 0; l < kLevelCount; ++l) {
|
|
529
|
+
int level = kLevelCount - 1 - l;
|
|
530
|
+
for (int p = 0; p < kKeyCount; ++p) {
|
|
531
|
+
std::string put_key = std::string(1, char('a' + p));
|
|
532
|
+
ASSERT_OK(Put(kCF, put_key, put_key + std::to_string(level)));
|
|
533
|
+
ASSERT_OK(Flush(kCF));
|
|
534
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
535
|
+
for (int g = 0; g < kKeyCount; ++g) {
|
|
536
|
+
int entry_count = (p >= g) ? l + 1 : l;
|
|
537
|
+
std::string get_key = std::string(1, char('a' + g));
|
|
538
|
+
CheckAllEntriesWithFifoReopen(expected_entries[g][entry_count], get_key,
|
|
539
|
+
kCF, {"pikachu"}, options);
|
|
540
|
+
}
|
|
541
|
+
if (level != 0) {
|
|
542
|
+
MoveFilesToLevel(level, kCF);
|
|
543
|
+
for (int g = 0; g < kKeyCount; ++g) {
|
|
544
|
+
int entry_count = (p >= g) ? l + 1 : l;
|
|
545
|
+
std::string get_key = std::string(1, char('a' + g));
|
|
546
|
+
CheckAllEntriesWithFifoReopen(expected_entries[g][entry_count],
|
|
547
|
+
get_key, kCF, {"pikachu"}, options);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
ASSERT_EQ(expected_files_per_level[l][p], FilesPerLevel(kCF));
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// The expected number of sst files in each level after each FIFO compaction
|
|
555
|
+
// that deletes the oldest sst file.
|
|
556
|
+
const std::string expected_files_per_level_after_fifo[] = {
|
|
557
|
+
"5,5,5,4", "5,5,5,3", "5,5,5,2", "5,5,5,1", "5,5,5", "5,5,4", "5,5,3",
|
|
558
|
+
"5,5,2", "5,5,1", "5,5", "5,4", "5,3", "5,2", "5,1",
|
|
559
|
+
"5", "4", "3", "2", "1", "",
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
// The expected value entries of each key after each FIFO compaction.
|
|
563
|
+
// This verifies whether FIFO removes the file with the smallest key in non-L0
|
|
564
|
+
// files first then the oldest files in L0.
|
|
565
|
+
const std::string expected_entries_after_fifo[kKeyCount][kLevelCount + 1] = {
|
|
566
|
+
{"[ a0, a1, a2, a3 ]", "[ a0, a1, a2 ]", "[ a0, a1 ]", "[ a0 ]", "[ ]"},
|
|
567
|
+
{"[ b0, b1, b2, b3 ]", "[ b0, b1, b2 ]", "[ b0, b1 ]", "[ b0 ]", "[ ]"},
|
|
568
|
+
{"[ c0, c1, c2, c3 ]", "[ c0, c1, c2 ]", "[ c0, c1 ]", "[ c0 ]", "[ ]"},
|
|
569
|
+
{"[ d0, d1, d2, d3 ]", "[ d0, d1, d2 ]", "[ d0, d1 ]", "[ d0 ]", "[ ]"},
|
|
570
|
+
{"[ e0, e1, e2, e3 ]", "[ e0, e1, e2 ]", "[ e0, e1 ]", "[ e0 ]", "[ ]"},
|
|
571
|
+
};
|
|
572
|
+
|
|
573
|
+
// In the 2nd phase, we reopen the DB with FIFO compaction. In each reopen,
|
|
574
|
+
// we config max_table_files_size so that FIFO will remove exactly one file
|
|
575
|
+
// at a time upon compaction, and we will use it to verify whether the sst
|
|
576
|
+
// files are deleted in the correct order.
|
|
577
|
+
for (int i = 0; i < kTotalSstFileCount; ++i) {
|
|
578
|
+
uint64_t total_sst_files_size = 0;
|
|
579
|
+
ASSERT_TRUE(dbfull()->GetIntProperty(
|
|
580
|
+
handles_[1], "rocksdb.total-sst-files-size", &total_sst_files_size));
|
|
581
|
+
ASSERT_TRUE(total_sst_files_size > 0);
|
|
582
|
+
|
|
583
|
+
Options fifo_options(options);
|
|
584
|
+
fifo_options.compaction_style = kCompactionStyleFIFO;
|
|
585
|
+
options.create_if_missing = false;
|
|
586
|
+
fifo_options.max_open_files = -1;
|
|
587
|
+
fifo_options.disable_auto_compactions = false;
|
|
588
|
+
// Config max_table_files_size to be total_sst_files_size - 1 so that
|
|
589
|
+
// FIFO will delete one file.
|
|
590
|
+
fifo_options.compaction_options_fifo.max_table_files_size =
|
|
591
|
+
total_sst_files_size - 1;
|
|
592
|
+
ASSERT_OK(
|
|
593
|
+
TryReopenWithColumnFamilies({"default", "pikachu"}, fifo_options));
|
|
594
|
+
// For FIFO to pick a compaction
|
|
595
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
|
|
596
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact(false));
|
|
597
|
+
for (int g = 0; g < kKeyCount; ++g) {
|
|
598
|
+
std::string get_key = std::string(1, char('a' + g));
|
|
599
|
+
int status_index = i / kKeyCount;
|
|
600
|
+
if ((i % kKeyCount) >= g) {
|
|
601
|
+
// If true, then it means the sst file containing the get_key in the
|
|
602
|
+
// current level has already been deleted, so we need to move the
|
|
603
|
+
// status_index for checking the expected value.
|
|
604
|
+
status_index++;
|
|
605
|
+
}
|
|
606
|
+
CheckAllEntriesWithFifoReopen(
|
|
607
|
+
expected_entries_after_fifo[g][status_index], get_key, kCF,
|
|
608
|
+
{"pikachu"}, options);
|
|
609
|
+
}
|
|
610
|
+
ASSERT_EQ(expected_files_per_level_after_fifo[i], FilesPerLevel(kCF));
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
#endif // !ROCKSDB_LITE
|
|
614
|
+
|
|
486
615
|
TEST_F(DBTest, PutSingleDeleteGet) {
|
|
487
616
|
do {
|
|
488
617
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
|
|
@@ -668,7 +797,7 @@ TEST_F(DBTest, SingleDeletePutFlush) {
|
|
|
668
797
|
ASSERT_OK(Flush(1));
|
|
669
798
|
|
|
670
799
|
ASSERT_EQ("[ ]", AllEntriesFor("a", 1));
|
|
671
|
-
// Skip FIFO and universal compaction
|
|
800
|
+
// Skip FIFO and universal compaction because they do not apply to the test
|
|
672
801
|
// case. Skip MergePut because single delete does not get removed when it
|
|
673
802
|
// encounters a merge.
|
|
674
803
|
} while (ChangeOptions(kSkipFIFOCompaction | kSkipUniversalCompaction |
|
|
@@ -7211,6 +7340,46 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
|
|
|
7211
7340
|
}
|
|
7212
7341
|
}
|
|
7213
7342
|
|
|
7343
|
+
TEST_F(DBTest, ShuttingDownNotBlockStalledWrites) {
|
|
7344
|
+
Options options = CurrentOptions();
|
|
7345
|
+
options.disable_auto_compactions = true;
|
|
7346
|
+
Reopen(options);
|
|
7347
|
+
Random rnd(403);
|
|
7348
|
+
|
|
7349
|
+
for (int i = 0; i < 20; i++) {
|
|
7350
|
+
ASSERT_OK(Put("key_" + std::to_string(i), rnd.RandomString(10)));
|
|
7351
|
+
ASSERT_OK(Flush());
|
|
7352
|
+
}
|
|
7353
|
+
ASSERT_EQ(GetSstFileCount(dbname_), 20);
|
|
7354
|
+
|
|
7355
|
+
// We need !disable_auto_compactions for writes to stall but also want to
|
|
7356
|
+
// delay compaction so stalled writes unblocked due to kShutdownInProgress. BG
|
|
7357
|
+
// compaction will first wait for the sync point
|
|
7358
|
+
// DBTest::ShuttingDownNotBlockStalledWrites. Then it waits extra 2 sec to
|
|
7359
|
+
// allow CancelAllBackgroundWork() to set shutting_down_.
|
|
7360
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
7361
|
+
"BackgroundCallCompaction:0",
|
|
7362
|
+
[&](void* /* arg */) { env_->SleepForMicroseconds(2 * 1000 * 1000); });
|
|
7363
|
+
SyncPoint::GetInstance()->LoadDependency(
|
|
7364
|
+
{{"DBImpl::DelayWrite:Wait", "DBTest::ShuttingDownNotBlockStalledWrites"},
|
|
7365
|
+
{"DBTest::ShuttingDownNotBlockStalledWrites",
|
|
7366
|
+
"BackgroundCallCompaction:0"}});
|
|
7367
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
7368
|
+
|
|
7369
|
+
options.level0_stop_writes_trigger = 20;
|
|
7370
|
+
options.disable_auto_compactions = false;
|
|
7371
|
+
Reopen(options);
|
|
7372
|
+
|
|
7373
|
+
std::thread thd([&]() {
|
|
7374
|
+
Status s = Put("key_" + std::to_string(101), "101");
|
|
7375
|
+
ASSERT_EQ(s.code(), Status::kShutdownInProgress);
|
|
7376
|
+
});
|
|
7377
|
+
|
|
7378
|
+
TEST_SYNC_POINT("DBTest::ShuttingDownNotBlockStalledWrites");
|
|
7379
|
+
CancelAllBackgroundWork(db_, true);
|
|
7380
|
+
|
|
7381
|
+
thd.join();
|
|
7382
|
+
}
|
|
7214
7383
|
#endif
|
|
7215
7384
|
|
|
7216
7385
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -2379,9 +2379,15 @@ TEST_F(DBTest2, MaxCompactionBytesTest) {
|
|
|
2379
2379
|
}
|
|
2380
2380
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
2381
2381
|
|
|
2382
|
-
// Output files to L1 are cut to
|
|
2383
|
-
// options.max_compaction_bytes
|
|
2384
|
-
|
|
2382
|
+
// Output files to L1 are cut to 4 pieces, according to
|
|
2383
|
+
// options.max_compaction_bytes (300K)
|
|
2384
|
+
// There are 8 files on L2 (grandparents level), each one is 100K. The first
|
|
2385
|
+
// file overlaps with a, b which max_compaction_bytes is less than 300K, the
|
|
2386
|
+
// second one overlaps with d, e, which is also less than 300K. Including any
|
|
2387
|
+
// extra grandparent file will make the future compaction larger than 300K.
|
|
2388
|
+
// L1: [ 1 ] [ 2 ] [ 3 ] [ 4 ]
|
|
2389
|
+
// L2: [a] [b] [c] [d] [e] [f] [g] [h]
|
|
2390
|
+
ASSERT_EQ("0,4,8", FilesPerLevel(0));
|
|
2385
2391
|
}
|
|
2386
2392
|
|
|
2387
2393
|
static void UniqueIdCallback(void* arg) {
|
|
@@ -963,6 +963,25 @@ std::string DBTestBase::Contents(int cf) {
|
|
|
963
963
|
return result;
|
|
964
964
|
}
|
|
965
965
|
|
|
966
|
+
void DBTestBase::CheckAllEntriesWithFifoReopen(
|
|
967
|
+
const std::string& expected_value, const Slice& user_key, int cf,
|
|
968
|
+
const std::vector<std::string>& cfs, const Options& options) {
|
|
969
|
+
ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
|
|
970
|
+
|
|
971
|
+
std::vector<std::string> cfs_plus_default = cfs;
|
|
972
|
+
cfs_plus_default.insert(cfs_plus_default.begin(), kDefaultColumnFamilyName);
|
|
973
|
+
|
|
974
|
+
Options fifo_options(options);
|
|
975
|
+
fifo_options.compaction_style = kCompactionStyleFIFO;
|
|
976
|
+
fifo_options.max_open_files = -1;
|
|
977
|
+
fifo_options.disable_auto_compactions = true;
|
|
978
|
+
ASSERT_OK(TryReopenWithColumnFamilies(cfs_plus_default, fifo_options));
|
|
979
|
+
ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
|
|
980
|
+
|
|
981
|
+
ASSERT_OK(TryReopenWithColumnFamilies(cfs_plus_default, options));
|
|
982
|
+
ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
|
|
983
|
+
}
|
|
984
|
+
|
|
966
985
|
std::string DBTestBase::AllEntriesFor(const Slice& user_key, int cf) {
|
|
967
986
|
Arena arena;
|
|
968
987
|
auto options = CurrentOptions();
|
|
@@ -49,6 +49,9 @@
|
|
|
49
49
|
#include "util/string_util.h"
|
|
50
50
|
#include "utilities/merge_operators.h"
|
|
51
51
|
|
|
52
|
+
// In case defined by Windows headers
|
|
53
|
+
#undef small
|
|
54
|
+
|
|
52
55
|
namespace ROCKSDB_NAMESPACE {
|
|
53
56
|
class MockEnv;
|
|
54
57
|
|
|
@@ -714,6 +717,16 @@ class FileTemperatureTestFS : public FileSystemWrapper {
|
|
|
714
717
|
MutexLock lock(&mu_);
|
|
715
718
|
requested_sst_file_temperatures_.emplace_back(number, opts.temperature);
|
|
716
719
|
if (s.ok()) {
|
|
720
|
+
if (opts.temperature != Temperature::kUnknown) {
|
|
721
|
+
// Be extra picky and don't open if a wrong non-unknown temperature is
|
|
722
|
+
// provided
|
|
723
|
+
auto e = current_sst_file_temperatures_.find(number);
|
|
724
|
+
if (e != current_sst_file_temperatures_.end() &&
|
|
725
|
+
e->second != opts.temperature) {
|
|
726
|
+
result->reset();
|
|
727
|
+
return IOStatus::PathNotFound("Temperature mismatch on " + fname);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
717
730
|
*result = WrapWithTemperature<FSSequentialFileOwnerWrapper>(
|
|
718
731
|
number, std::move(*result));
|
|
719
732
|
}
|
|
@@ -733,6 +746,16 @@ class FileTemperatureTestFS : public FileSystemWrapper {
|
|
|
733
746
|
MutexLock lock(&mu_);
|
|
734
747
|
requested_sst_file_temperatures_.emplace_back(number, opts.temperature);
|
|
735
748
|
if (s.ok()) {
|
|
749
|
+
if (opts.temperature != Temperature::kUnknown) {
|
|
750
|
+
// Be extra picky and don't open if a wrong non-unknown temperature is
|
|
751
|
+
// provided
|
|
752
|
+
auto e = current_sst_file_temperatures_.find(number);
|
|
753
|
+
if (e != current_sst_file_temperatures_.end() &&
|
|
754
|
+
e->second != opts.temperature) {
|
|
755
|
+
result->reset();
|
|
756
|
+
return IOStatus::PathNotFound("Temperature mismatch on " + fname);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
736
759
|
*result = WrapWithTemperature<FSRandomAccessFileOwnerWrapper>(
|
|
737
760
|
number, std::move(*result));
|
|
738
761
|
}
|
|
@@ -1219,6 +1242,15 @@ class DBTestBase : public testing::Test {
|
|
|
1219
1242
|
|
|
1220
1243
|
std::string AllEntriesFor(const Slice& user_key, int cf = 0);
|
|
1221
1244
|
|
|
1245
|
+
// Similar to AllEntriesFor but this function also covers reopen with fifo.
|
|
1246
|
+
// Note that test cases with snapshots or entries in memtable should simply
|
|
1247
|
+
// use AllEntriesFor instead as snapshots and entries in memtable will
|
|
1248
|
+
// survive after db reopen.
|
|
1249
|
+
void CheckAllEntriesWithFifoReopen(const std::string& expected_value,
|
|
1250
|
+
const Slice& user_key, int cf,
|
|
1251
|
+
const std::vector<std::string>& cfs,
|
|
1252
|
+
const Options& options);
|
|
1253
|
+
|
|
1222
1254
|
#ifndef ROCKSDB_LITE
|
|
1223
1255
|
int NumSortedRuns(int cf = 0);
|
|
1224
1256
|
|