@nxtedition/rocksdb 7.0.22 → 7.0.25
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 +9 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +5 -0
- package/deps/rocksdb/rocksdb/Makefile +6 -2
- package/deps/rocksdb/rocksdb/TARGETS +14 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +20 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +44 -31
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +491 -722
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +468 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +51 -52
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +28 -16
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +12 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +170 -36
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +63 -36
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +4 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +57 -38
- package/deps/rocksdb/rocksdb/db/blob/blob_read_request.h +58 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +164 -74
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +42 -29
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +419 -62
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +208 -8
- package/deps/rocksdb/rocksdb/db/c.cc +68 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +95 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +92 -15
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +76 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +52 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +30 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +126 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +203 -1584
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +93 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +87 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +314 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +328 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +174 -33
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +474 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +825 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +46 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +42 -0
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +223 -0
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +255 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +1253 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +32 -8
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -8
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +376 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +103 -78
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +4 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +10 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +21 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +19 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +91 -14
- package/deps/rocksdb/rocksdb/db/db_iter.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +33 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +79 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +185 -0
- package/deps/rocksdb/rocksdb/db/dbformat.cc +1 -4
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -8
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +71 -29
- package/deps/rocksdb/rocksdb/db/internal_stats.h +160 -5
- package/deps/rocksdb/rocksdb/db/log_reader.cc +29 -3
- package/deps/rocksdb/rocksdb/db/log_reader.h +12 -3
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/version_edit.cc +6 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +93 -129
- package/deps/rocksdb/rocksdb/db/version_set.h +4 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +42 -35
- package/deps/rocksdb/rocksdb/db/write_batch.cc +10 -2
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +10 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +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 +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +140 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +12 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +46 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +27 -7
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/env/env_posix.cc +14 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +130 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +7 -1
- package/deps/rocksdb/rocksdb/env/io_posix.cc +18 -50
- package/deps/rocksdb/rocksdb/env/io_posix.h +53 -6
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +8 -10
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +3 -7
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +239 -259
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +84 -19
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +24 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +31 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +37 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +13 -13
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +38 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +17 -0
- package/deps/rocksdb/rocksdb/port/win/env_win.h +8 -0
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +6 -3
- package/deps/rocksdb/rocksdb/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/src.mk +5 -0
- package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +15 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +5 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +1 -2
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +24 -4
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/compression.h +2 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +18 -1
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +67 -4
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +15 -12
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb.gyp +5 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#include "db/compaction/compaction_picker_level.h"
|
|
13
13
|
#include "db/compaction/compaction_picker_universal.h"
|
|
14
14
|
#include "db/compaction/file_pri.h"
|
|
15
|
+
#include "rocksdb/advanced_options.h"
|
|
15
16
|
#include "table/unique_id_impl.h"
|
|
16
17
|
#include "test_util/testharness.h"
|
|
17
18
|
#include "test_util/testutil.h"
|
|
@@ -429,8 +430,7 @@ TEST_F(CompactionPickerTest, LevelTriggerDynamic4) {
|
|
|
429
430
|
#ifndef ROCKSDB_LITE
|
|
430
431
|
TEST_F(CompactionPickerTest, NeedsCompactionUniversal) {
|
|
431
432
|
NewVersionStorage(1, kCompactionStyleUniversal);
|
|
432
|
-
UniversalCompactionPicker universal_compaction_picker(
|
|
433
|
-
ioptions_, &icmp_);
|
|
433
|
+
UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
|
|
434
434
|
UpdateVersionStorageInfo();
|
|
435
435
|
// must return false when there's no files.
|
|
436
436
|
ASSERT_EQ(universal_compaction_picker.NeedsCompaction(vstorage_.get()),
|
|
@@ -2249,6 +2249,92 @@ TEST_F(CompactionPickerTest, IsTrivialMoveOn) {
|
|
|
2249
2249
|
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2250
2250
|
}
|
|
2251
2251
|
|
|
2252
|
+
TEST_F(CompactionPickerTest, L0TrivialMove1) {
|
|
2253
|
+
mutable_cf_options_.max_bytes_for_level_base = 10000000u;
|
|
2254
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = 4;
|
|
2255
|
+
mutable_cf_options_.max_compaction_bytes = 10000000u;
|
|
2256
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2257
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2258
|
+
|
|
2259
|
+
Add(0, 1U, "100", "150", 3000U, 0, 710, 800);
|
|
2260
|
+
Add(0, 2U, "151", "200", 3001U, 0, 610, 700);
|
|
2261
|
+
Add(0, 3U, "301", "350", 3000U, 0, 510, 600);
|
|
2262
|
+
Add(0, 4U, "451", "400", 3000U, 0, 410, 500);
|
|
2263
|
+
|
|
2264
|
+
Add(1, 5U, "120", "130", 7000U);
|
|
2265
|
+
Add(1, 6U, "170", "180", 7000U);
|
|
2266
|
+
Add(1, 7U, "220", "230", 7000U);
|
|
2267
|
+
Add(1, 8U, "270", "280", 7000U);
|
|
2268
|
+
UpdateVersionStorageInfo();
|
|
2269
|
+
|
|
2270
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2271
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2272
|
+
&log_buffer_));
|
|
2273
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2274
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2275
|
+
ASSERT_EQ(2, compaction->num_input_files(0));
|
|
2276
|
+
ASSERT_EQ(3, compaction->input(0, 0)->fd.GetNumber());
|
|
2277
|
+
ASSERT_EQ(4, compaction->input(0, 1)->fd.GetNumber());
|
|
2278
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2279
|
+
}
|
|
2280
|
+
|
|
2281
|
+
TEST_F(CompactionPickerTest, L0TrivialMoveOneFile) {
|
|
2282
|
+
mutable_cf_options_.max_bytes_for_level_base = 10000000u;
|
|
2283
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = 4;
|
|
2284
|
+
mutable_cf_options_.max_compaction_bytes = 10000000u;
|
|
2285
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2286
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2287
|
+
|
|
2288
|
+
Add(0, 1U, "100", "150", 3000U, 0, 710, 800);
|
|
2289
|
+
Add(0, 2U, "551", "600", 3001U, 0, 610, 700);
|
|
2290
|
+
Add(0, 3U, "101", "150", 3000U, 0, 510, 600);
|
|
2291
|
+
Add(0, 4U, "451", "400", 3000U, 0, 410, 500);
|
|
2292
|
+
|
|
2293
|
+
Add(1, 5U, "120", "130", 7000U);
|
|
2294
|
+
Add(1, 6U, "170", "180", 7000U);
|
|
2295
|
+
Add(1, 7U, "220", "230", 7000U);
|
|
2296
|
+
Add(1, 8U, "270", "280", 7000U);
|
|
2297
|
+
UpdateVersionStorageInfo();
|
|
2298
|
+
|
|
2299
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2300
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2301
|
+
&log_buffer_));
|
|
2302
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2303
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2304
|
+
ASSERT_EQ(1, compaction->num_input_files(0));
|
|
2305
|
+
ASSERT_EQ(4, compaction->input(0, 0)->fd.GetNumber());
|
|
2306
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2307
|
+
}
|
|
2308
|
+
|
|
2309
|
+
TEST_F(CompactionPickerTest, L0TrivialMoveWholeL0) {
|
|
2310
|
+
mutable_cf_options_.max_bytes_for_level_base = 10000000u;
|
|
2311
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = 4;
|
|
2312
|
+
mutable_cf_options_.max_compaction_bytes = 10000000u;
|
|
2313
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2314
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2315
|
+
|
|
2316
|
+
Add(0, 1U, "300", "350", 3000U, 0, 710, 800);
|
|
2317
|
+
Add(0, 2U, "651", "600", 3001U, 0, 610, 700);
|
|
2318
|
+
Add(0, 3U, "501", "550", 3000U, 0, 510, 600);
|
|
2319
|
+
Add(0, 4U, "451", "400", 3000U, 0, 410, 500);
|
|
2320
|
+
|
|
2321
|
+
Add(1, 5U, "120", "130", 7000U);
|
|
2322
|
+
Add(1, 6U, "970", "980", 7000U);
|
|
2323
|
+
UpdateVersionStorageInfo();
|
|
2324
|
+
|
|
2325
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2326
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2327
|
+
&log_buffer_));
|
|
2328
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2329
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2330
|
+
ASSERT_EQ(4, compaction->num_input_files(0));
|
|
2331
|
+
ASSERT_EQ(1, compaction->input(0, 0)->fd.GetNumber());
|
|
2332
|
+
ASSERT_EQ(4, compaction->input(0, 1)->fd.GetNumber());
|
|
2333
|
+
ASSERT_EQ(3, compaction->input(0, 2)->fd.GetNumber());
|
|
2334
|
+
ASSERT_EQ(2, compaction->input(0, 3)->fd.GetNumber());
|
|
2335
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2252
2338
|
TEST_F(CompactionPickerTest, IsTrivialMoveOffSstPartitioned) {
|
|
2253
2339
|
mutable_cf_options_.max_bytes_for_level_base = 10000u;
|
|
2254
2340
|
mutable_cf_options_.max_compaction_bytes = 10001u;
|
|
@@ -2297,6 +2383,197 @@ TEST_F(CompactionPickerTest, IsTrivialMoveOff) {
|
|
|
2297
2383
|
ASSERT_FALSE(compaction->IsTrivialMove());
|
|
2298
2384
|
}
|
|
2299
2385
|
|
|
2386
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles1) {
|
|
2387
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2388
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2389
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2390
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2391
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2392
|
+
|
|
2393
|
+
Add(2, 1U, "100", "150", 3000U);
|
|
2394
|
+
Add(2, 2U, "151", "200", 3001U);
|
|
2395
|
+
Add(2, 3U, "301", "350", 3000U);
|
|
2396
|
+
Add(2, 4U, "451", "400", 3000U);
|
|
2397
|
+
Add(2, 5U, "551", "500", 3000U);
|
|
2398
|
+
Add(2, 6U, "651", "600", 3000U);
|
|
2399
|
+
Add(2, 7U, "751", "700", 3000U);
|
|
2400
|
+
Add(2, 8U, "851", "900", 3000U);
|
|
2401
|
+
|
|
2402
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2403
|
+
Add(3, 16U, "170", "180", 700U);
|
|
2404
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2405
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2406
|
+
UpdateVersionStorageInfo();
|
|
2407
|
+
|
|
2408
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2409
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2410
|
+
&log_buffer_));
|
|
2411
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2412
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2413
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2414
|
+
ASSERT_EQ(4, compaction->num_input_files(0));
|
|
2415
|
+
ASSERT_EQ(3, compaction->input(0, 0)->fd.GetNumber());
|
|
2416
|
+
ASSERT_EQ(4, compaction->input(0, 1)->fd.GetNumber());
|
|
2417
|
+
ASSERT_EQ(5, compaction->input(0, 2)->fd.GetNumber());
|
|
2418
|
+
ASSERT_EQ(6, compaction->input(0, 3)->fd.GetNumber());
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles2) {
|
|
2422
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2423
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2424
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2425
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2426
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2427
|
+
|
|
2428
|
+
Add(2, 1U, "100", "150", 3000U);
|
|
2429
|
+
Add(2, 2U, "151", "160", 3001U);
|
|
2430
|
+
Add(2, 3U, "161", "179", 3000U);
|
|
2431
|
+
Add(2, 4U, "220", "400", 3000U);
|
|
2432
|
+
Add(2, 5U, "551", "500", 3000U);
|
|
2433
|
+
Add(2, 6U, "651", "600", 3000U);
|
|
2434
|
+
Add(2, 7U, "751", "700", 3000U);
|
|
2435
|
+
Add(2, 8U, "851", "900", 3000U);
|
|
2436
|
+
|
|
2437
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2438
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2439
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2440
|
+
UpdateVersionStorageInfo();
|
|
2441
|
+
|
|
2442
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2443
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2444
|
+
&log_buffer_));
|
|
2445
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2446
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2447
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2448
|
+
ASSERT_EQ(2, compaction->num_input_files(0));
|
|
2449
|
+
ASSERT_EQ(2, compaction->input(0, 0)->fd.GetNumber());
|
|
2450
|
+
ASSERT_EQ(3, compaction->input(0, 1)->fd.GetNumber());
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles3) {
|
|
2454
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2455
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2456
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2457
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2458
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2459
|
+
|
|
2460
|
+
// Even if consecutive files can be trivial moved, we don't pick them
|
|
2461
|
+
// since in case trivial move can't be issued for a reason, we cannot
|
|
2462
|
+
// fall back to normal compactions.
|
|
2463
|
+
Add(2, 1U, "100", "150", 3000U);
|
|
2464
|
+
Add(2, 2U, "151", "160", 3001U);
|
|
2465
|
+
Add(2, 5U, "551", "500", 3000U);
|
|
2466
|
+
Add(2, 6U, "651", "600", 3000U);
|
|
2467
|
+
Add(2, 7U, "751", "700", 3000U);
|
|
2468
|
+
Add(2, 8U, "851", "900", 3000U);
|
|
2469
|
+
|
|
2470
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2471
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2472
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2473
|
+
UpdateVersionStorageInfo();
|
|
2474
|
+
|
|
2475
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2476
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2477
|
+
&log_buffer_));
|
|
2478
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2479
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2480
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2481
|
+
ASSERT_EQ(1, compaction->num_input_files(0));
|
|
2482
|
+
ASSERT_EQ(2, compaction->input(0, 0)->fd.GetNumber());
|
|
2483
|
+
}
|
|
2484
|
+
|
|
2485
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles4) {
|
|
2486
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2487
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2488
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2489
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2490
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2491
|
+
|
|
2492
|
+
Add(2, 1U, "100", "150", 4000U);
|
|
2493
|
+
Add(2, 2U, "151", "160", 4001U);
|
|
2494
|
+
Add(2, 3U, "161", "179", 4000U);
|
|
2495
|
+
|
|
2496
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2497
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2498
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2499
|
+
UpdateVersionStorageInfo();
|
|
2500
|
+
|
|
2501
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2502
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2503
|
+
&log_buffer_));
|
|
2504
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2505
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2506
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2507
|
+
ASSERT_EQ(2, compaction->num_input_files(0));
|
|
2508
|
+
ASSERT_EQ(2, compaction->input(0, 0)->fd.GetNumber());
|
|
2509
|
+
ASSERT_EQ(3, compaction->input(0, 1)->fd.GetNumber());
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2512
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles5) {
|
|
2513
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2514
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2515
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2516
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2517
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2518
|
+
|
|
2519
|
+
// File 4 and 5 aren't clean cut, so only 2 and 3 are picked.
|
|
2520
|
+
Add(2, 1U, "100", "150", 4000U);
|
|
2521
|
+
Add(2, 2U, "151", "160", 4001U);
|
|
2522
|
+
Add(2, 3U, "161", "179", 4000U);
|
|
2523
|
+
Add(2, 4U, "180", "185", 4000U);
|
|
2524
|
+
Add(2, 5U, "185", "190", 4000U);
|
|
2525
|
+
|
|
2526
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2527
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2528
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2529
|
+
UpdateVersionStorageInfo();
|
|
2530
|
+
|
|
2531
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2532
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2533
|
+
&log_buffer_));
|
|
2534
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2535
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2536
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2537
|
+
ASSERT_EQ(2, compaction->num_input_files(0));
|
|
2538
|
+
ASSERT_EQ(2, compaction->input(0, 0)->fd.GetNumber());
|
|
2539
|
+
ASSERT_EQ(3, compaction->input(0, 1)->fd.GetNumber());
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2542
|
+
TEST_F(CompactionPickerTest, TrivialMoveMultipleFiles6) {
|
|
2543
|
+
mutable_cf_options_.max_bytes_for_level_base = 1000u;
|
|
2544
|
+
mutable_cf_options_.max_compaction_bytes = 10000001u;
|
|
2545
|
+
ioptions_.level_compaction_dynamic_level_bytes = false;
|
|
2546
|
+
ioptions_.compaction_pri = kMinOverlappingRatio;
|
|
2547
|
+
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2548
|
+
|
|
2549
|
+
Add(2, 1U, "100", "150", 3000U);
|
|
2550
|
+
Add(2, 2U, "151", "200", 3001U);
|
|
2551
|
+
Add(2, 3U, "301", "350", 3000U);
|
|
2552
|
+
Add(2, 4U, "451", "400", 3000U);
|
|
2553
|
+
Add(2, 5U, "551", "500", 3000U);
|
|
2554
|
+
file_map_[5U].first->being_compacted = true;
|
|
2555
|
+
Add(2, 6U, "651", "600", 3000U);
|
|
2556
|
+
Add(2, 7U, "751", "700", 3000U);
|
|
2557
|
+
Add(2, 8U, "851", "900", 3000U);
|
|
2558
|
+
|
|
2559
|
+
Add(3, 15U, "120", "130", 700U);
|
|
2560
|
+
Add(3, 16U, "170", "180", 700U);
|
|
2561
|
+
Add(3, 17U, "220", "230", 700U);
|
|
2562
|
+
Add(3, 18U, "870", "880", 700U);
|
|
2563
|
+
UpdateVersionStorageInfo();
|
|
2564
|
+
|
|
2565
|
+
std::unique_ptr<Compaction> compaction(level_compaction_picker.PickCompaction(
|
|
2566
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2567
|
+
&log_buffer_));
|
|
2568
|
+
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2569
|
+
ASSERT_TRUE(compaction->IsTrivialMove());
|
|
2570
|
+
ASSERT_EQ(1, compaction->num_input_levels());
|
|
2571
|
+
// Since the next file is being compacted. Stopping at 3 and 4.
|
|
2572
|
+
ASSERT_EQ(2, compaction->num_input_files(0));
|
|
2573
|
+
ASSERT_EQ(3, compaction->input(0, 0)->fd.GetNumber());
|
|
2574
|
+
ASSERT_EQ(4, compaction->input(0, 1)->fd.GetNumber());
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2300
2577
|
TEST_F(CompactionPickerTest, CacheNextCompactionIndex) {
|
|
2301
2578
|
NewVersionStorage(6, kCompactionStyleLevel);
|
|
2302
2579
|
mutable_cf_options_.max_compaction_bytes = 100000000000u;
|
|
@@ -2311,7 +2588,11 @@ TEST_F(CompactionPickerTest, CacheNextCompactionIndex) {
|
|
|
2311
2588
|
Add(1 /* level */, 4U /* file_number */, "250" /* smallest */,
|
|
2312
2589
|
"299" /* largest */, 700000000U /* file_size */);
|
|
2313
2590
|
Add(2 /* level */, 5U /* file_number */, "150" /* smallest */,
|
|
2314
|
-
"199" /* largest */,
|
|
2591
|
+
"199" /* largest */, 100U /* file_size */);
|
|
2592
|
+
Add(2 /* level */, 6U /* file_number */, "200" /* smallest */,
|
|
2593
|
+
"240" /* largest */, 1U /* file_size */);
|
|
2594
|
+
Add(2 /* level */, 7U /* file_number */, "260" /* smallest */,
|
|
2595
|
+
"270" /* largest */, 1U /* file_size */);
|
|
2315
2596
|
file_map_[5U].first->being_compacted = true;
|
|
2316
2597
|
|
|
2317
2598
|
UpdateVersionStorageInfo();
|
|
@@ -2320,9 +2601,9 @@ TEST_F(CompactionPickerTest, CacheNextCompactionIndex) {
|
|
|
2320
2601
|
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2321
2602
|
&log_buffer_));
|
|
2322
2603
|
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2323
|
-
ASSERT_EQ(
|
|
2604
|
+
ASSERT_EQ(2U, compaction->num_input_levels());
|
|
2324
2605
|
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
2325
|
-
ASSERT_EQ(
|
|
2606
|
+
ASSERT_EQ(1U, compaction->num_input_files(1));
|
|
2326
2607
|
ASSERT_EQ(3U, compaction->input(0, 0)->fd.GetNumber());
|
|
2327
2608
|
ASSERT_EQ(2, vstorage_->NextCompactionIndex(1 /* level */));
|
|
2328
2609
|
|
|
@@ -2330,9 +2611,9 @@ TEST_F(CompactionPickerTest, CacheNextCompactionIndex) {
|
|
|
2330
2611
|
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
2331
2612
|
&log_buffer_));
|
|
2332
2613
|
ASSERT_TRUE(compaction.get() != nullptr);
|
|
2333
|
-
ASSERT_EQ(
|
|
2614
|
+
ASSERT_EQ(2U, compaction->num_input_levels());
|
|
2334
2615
|
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
2335
|
-
ASSERT_EQ(
|
|
2616
|
+
ASSERT_EQ(1U, compaction->num_input_files(1));
|
|
2336
2617
|
ASSERT_EQ(4U, compaction->input(0, 0)->fd.GetNumber());
|
|
2337
2618
|
ASSERT_EQ(3, vstorage_->NextCompactionIndex(1 /* level */));
|
|
2338
2619
|
|
|
@@ -2766,6 +3047,192 @@ TEST_F(CompactionPickerTest, UniversalMarkedManualCompaction) {
|
|
|
2766
3047
|
ASSERT_EQ(0U, vstorage_->FilesMarkedForCompaction().size());
|
|
2767
3048
|
}
|
|
2768
3049
|
|
|
3050
|
+
class PerKeyPlacementCompactionPickerTest
|
|
3051
|
+
: public CompactionPickerTest,
|
|
3052
|
+
public testing::WithParamInterface<bool> {
|
|
3053
|
+
public:
|
|
3054
|
+
PerKeyPlacementCompactionPickerTest() : CompactionPickerTest() {}
|
|
3055
|
+
|
|
3056
|
+
void SetUp() override { enable_per_key_placement_ = GetParam(); }
|
|
3057
|
+
|
|
3058
|
+
protected:
|
|
3059
|
+
bool enable_per_key_placement_ = false;
|
|
3060
|
+
};
|
|
3061
|
+
|
|
3062
|
+
TEST_P(PerKeyPlacementCompactionPickerTest, OverlapWithNormalCompaction) {
|
|
3063
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3064
|
+
"Compaction::SupportsPerKeyPlacement:Enabled", [&](void* arg) {
|
|
3065
|
+
auto supports_per_key_placement = static_cast<bool*>(arg);
|
|
3066
|
+
*supports_per_key_placement = enable_per_key_placement_;
|
|
3067
|
+
});
|
|
3068
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3069
|
+
|
|
3070
|
+
int num_levels = ioptions_.num_levels;
|
|
3071
|
+
NewVersionStorage(num_levels, kCompactionStyleLevel);
|
|
3072
|
+
|
|
3073
|
+
Add(0, 21U, "100", "150", 60000000U);
|
|
3074
|
+
Add(0, 22U, "300", "350", 60000000U);
|
|
3075
|
+
Add(5, 40U, "200", "250", 60000000U);
|
|
3076
|
+
Add(6, 50U, "101", "351", 60000000U);
|
|
3077
|
+
UpdateVersionStorageInfo();
|
|
3078
|
+
|
|
3079
|
+
CompactionOptions comp_options;
|
|
3080
|
+
std::unordered_set<uint64_t> input_set;
|
|
3081
|
+
input_set.insert(40);
|
|
3082
|
+
std::vector<CompactionInputFiles> input_files;
|
|
3083
|
+
ASSERT_OK(level_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3084
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3085
|
+
|
|
3086
|
+
std::unique_ptr<Compaction> comp1(level_compaction_picker.CompactFiles(
|
|
3087
|
+
comp_options, input_files, 5, vstorage_.get(), mutable_cf_options_,
|
|
3088
|
+
mutable_db_options_, 0));
|
|
3089
|
+
|
|
3090
|
+
input_set.clear();
|
|
3091
|
+
input_files.clear();
|
|
3092
|
+
input_set.insert(21);
|
|
3093
|
+
input_set.insert(22);
|
|
3094
|
+
input_set.insert(50);
|
|
3095
|
+
ASSERT_OK(level_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3096
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3097
|
+
|
|
3098
|
+
ASSERT_EQ(
|
|
3099
|
+
enable_per_key_placement_,
|
|
3100
|
+
level_compaction_picker.FilesRangeOverlapWithCompaction(input_files, 6));
|
|
3101
|
+
}
|
|
3102
|
+
|
|
3103
|
+
TEST_P(PerKeyPlacementCompactionPickerTest, NormalCompactionOverlap) {
|
|
3104
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3105
|
+
"Compaction::SupportsPerKeyPlacement:Enabled", [&](void* arg) {
|
|
3106
|
+
auto supports_per_key_placement = static_cast<bool*>(arg);
|
|
3107
|
+
*supports_per_key_placement = enable_per_key_placement_;
|
|
3108
|
+
});
|
|
3109
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3110
|
+
|
|
3111
|
+
int num_levels = ioptions_.num_levels;
|
|
3112
|
+
NewVersionStorage(num_levels, kCompactionStyleLevel);
|
|
3113
|
+
|
|
3114
|
+
Add(0, 21U, "100", "150", 60000000U);
|
|
3115
|
+
Add(0, 22U, "300", "350", 60000000U);
|
|
3116
|
+
Add(4, 40U, "200", "220", 60000000U);
|
|
3117
|
+
Add(4, 41U, "230", "250", 60000000U);
|
|
3118
|
+
Add(6, 50U, "101", "351", 60000000U);
|
|
3119
|
+
UpdateVersionStorageInfo();
|
|
3120
|
+
|
|
3121
|
+
CompactionOptions comp_options;
|
|
3122
|
+
std::unordered_set<uint64_t> input_set;
|
|
3123
|
+
input_set.insert(21);
|
|
3124
|
+
input_set.insert(22);
|
|
3125
|
+
input_set.insert(50);
|
|
3126
|
+
std::vector<CompactionInputFiles> input_files;
|
|
3127
|
+
ASSERT_OK(level_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3128
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3129
|
+
|
|
3130
|
+
std::unique_ptr<Compaction> comp1(level_compaction_picker.CompactFiles(
|
|
3131
|
+
comp_options, input_files, 6, vstorage_.get(), mutable_cf_options_,
|
|
3132
|
+
mutable_db_options_, 0));
|
|
3133
|
+
|
|
3134
|
+
input_set.clear();
|
|
3135
|
+
input_files.clear();
|
|
3136
|
+
input_set.insert(40);
|
|
3137
|
+
input_set.insert(41);
|
|
3138
|
+
ASSERT_OK(level_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3139
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3140
|
+
|
|
3141
|
+
ASSERT_EQ(
|
|
3142
|
+
enable_per_key_placement_,
|
|
3143
|
+
level_compaction_picker.FilesRangeOverlapWithCompaction(input_files, 5));
|
|
3144
|
+
}
|
|
3145
|
+
|
|
3146
|
+
TEST_P(PerKeyPlacementCompactionPickerTest,
|
|
3147
|
+
OverlapWithNormalCompactionUniveral) {
|
|
3148
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3149
|
+
"Compaction::SupportsPerKeyPlacement:Enabled", [&](void* arg) {
|
|
3150
|
+
auto supports_per_key_placement = static_cast<bool*>(arg);
|
|
3151
|
+
*supports_per_key_placement = enable_per_key_placement_;
|
|
3152
|
+
});
|
|
3153
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3154
|
+
|
|
3155
|
+
int num_levels = ioptions_.num_levels;
|
|
3156
|
+
UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
|
|
3157
|
+
NewVersionStorage(num_levels, kCompactionStyleUniversal);
|
|
3158
|
+
|
|
3159
|
+
Add(0, 21U, "100", "150", 60000000U);
|
|
3160
|
+
Add(0, 22U, "300", "350", 60000000U);
|
|
3161
|
+
Add(5, 40U, "200", "250", 60000000U);
|
|
3162
|
+
Add(6, 50U, "101", "351", 60000000U);
|
|
3163
|
+
UpdateVersionStorageInfo();
|
|
3164
|
+
|
|
3165
|
+
CompactionOptions comp_options;
|
|
3166
|
+
std::unordered_set<uint64_t> input_set;
|
|
3167
|
+
input_set.insert(40);
|
|
3168
|
+
std::vector<CompactionInputFiles> input_files;
|
|
3169
|
+
ASSERT_OK(universal_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3170
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3171
|
+
|
|
3172
|
+
std::unique_ptr<Compaction> comp1(universal_compaction_picker.CompactFiles(
|
|
3173
|
+
comp_options, input_files, 5, vstorage_.get(), mutable_cf_options_,
|
|
3174
|
+
mutable_db_options_, 0));
|
|
3175
|
+
|
|
3176
|
+
input_set.clear();
|
|
3177
|
+
input_files.clear();
|
|
3178
|
+
input_set.insert(21);
|
|
3179
|
+
input_set.insert(22);
|
|
3180
|
+
input_set.insert(50);
|
|
3181
|
+
ASSERT_OK(universal_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3182
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3183
|
+
|
|
3184
|
+
ASSERT_EQ(enable_per_key_placement_,
|
|
3185
|
+
universal_compaction_picker.FilesRangeOverlapWithCompaction(
|
|
3186
|
+
input_files, 6));
|
|
3187
|
+
}
|
|
3188
|
+
|
|
3189
|
+
TEST_P(PerKeyPlacementCompactionPickerTest, NormalCompactionOverlapUniversal) {
|
|
3190
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3191
|
+
"Compaction::SupportsPerKeyPlacement:Enabled", [&](void* arg) {
|
|
3192
|
+
auto supports_per_key_placement = static_cast<bool*>(arg);
|
|
3193
|
+
*supports_per_key_placement = enable_per_key_placement_;
|
|
3194
|
+
});
|
|
3195
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3196
|
+
|
|
3197
|
+
int num_levels = ioptions_.num_levels;
|
|
3198
|
+
UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
|
|
3199
|
+
NewVersionStorage(num_levels, kCompactionStyleUniversal);
|
|
3200
|
+
|
|
3201
|
+
Add(0, 21U, "100", "150", 60000000U);
|
|
3202
|
+
Add(0, 22U, "300", "350", 60000000U);
|
|
3203
|
+
Add(4, 40U, "200", "220", 60000000U);
|
|
3204
|
+
Add(4, 41U, "230", "250", 60000000U);
|
|
3205
|
+
Add(6, 50U, "101", "351", 60000000U);
|
|
3206
|
+
UpdateVersionStorageInfo();
|
|
3207
|
+
|
|
3208
|
+
CompactionOptions comp_options;
|
|
3209
|
+
std::unordered_set<uint64_t> input_set;
|
|
3210
|
+
input_set.insert(21);
|
|
3211
|
+
input_set.insert(22);
|
|
3212
|
+
input_set.insert(50);
|
|
3213
|
+
std::vector<CompactionInputFiles> input_files;
|
|
3214
|
+
ASSERT_OK(universal_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3215
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3216
|
+
|
|
3217
|
+
std::unique_ptr<Compaction> comp1(universal_compaction_picker.CompactFiles(
|
|
3218
|
+
comp_options, input_files, 6, vstorage_.get(), mutable_cf_options_,
|
|
3219
|
+
mutable_db_options_, 0));
|
|
3220
|
+
|
|
3221
|
+
input_set.clear();
|
|
3222
|
+
input_files.clear();
|
|
3223
|
+
input_set.insert(40);
|
|
3224
|
+
input_set.insert(41);
|
|
3225
|
+
ASSERT_OK(universal_compaction_picker.GetCompactionInputsFromFileNumbers(
|
|
3226
|
+
&input_files, &input_set, vstorage_.get(), comp_options));
|
|
3227
|
+
|
|
3228
|
+
ASSERT_EQ(enable_per_key_placement_,
|
|
3229
|
+
universal_compaction_picker.FilesRangeOverlapWithCompaction(
|
|
3230
|
+
input_files, 5));
|
|
3231
|
+
}
|
|
3232
|
+
|
|
3233
|
+
INSTANTIATE_TEST_CASE_P(PerKeyPlacementCompactionPickerTest,
|
|
3234
|
+
PerKeyPlacementCompactionPickerTest, ::testing::Bool());
|
|
3235
|
+
|
|
2769
3236
|
#endif // ROCKSDB_LITE
|
|
2770
3237
|
|
|
2771
3238
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -758,7 +758,8 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSortedRuns(
|
|
|
758
758
|
Temperature::kUnknown,
|
|
759
759
|
/* max_subcompactions */ 0, grandparents,
|
|
760
760
|
/* is manual */ false, /* trim_ts */ "", score_,
|
|
761
|
-
false /* deletion_compaction */,
|
|
761
|
+
false /* deletion_compaction */,
|
|
762
|
+
/* l0_files_might_overlap */ true, compaction_reason);
|
|
762
763
|
}
|
|
763
764
|
|
|
764
765
|
// Look at overall size amplification. If size amplification
|
|
@@ -1083,6 +1084,7 @@ Compaction* UniversalCompactionBuilder::PickIncrementalForReduceSizeAmp(
|
|
|
1083
1084
|
Temperature::kUnknown,
|
|
1084
1085
|
/* max_subcompactions */ 0, /* grandparents */ {}, /* is manual */ false,
|
|
1085
1086
|
/* trim_ts */ "", score_, false /* deletion_compaction */,
|
|
1087
|
+
/* l0_files_might_overlap */ true,
|
|
1086
1088
|
CompactionReason::kUniversalSizeAmplification);
|
|
1087
1089
|
}
|
|
1088
1090
|
|
|
@@ -1225,6 +1227,7 @@ Compaction* UniversalCompactionBuilder::PickDeleteTriggeredCompaction() {
|
|
|
1225
1227
|
Temperature::kUnknown,
|
|
1226
1228
|
/* max_subcompactions */ 0, grandparents, /* is manual */ false,
|
|
1227
1229
|
/* trim_ts */ "", score_, false /* deletion_compaction */,
|
|
1230
|
+
/* l0_files_might_overlap */ true,
|
|
1228
1231
|
CompactionReason::kFilesMarkedForCompaction);
|
|
1229
1232
|
}
|
|
1230
1233
|
|
|
@@ -1300,7 +1303,7 @@ Compaction* UniversalCompactionBuilder::PickCompactionToOldest(
|
|
|
1300
1303
|
Temperature::kUnknown,
|
|
1301
1304
|
/* max_subcompactions */ 0, /* grandparents */ {}, /* is manual */ false,
|
|
1302
1305
|
/* trim_ts */ "", score_, false /* deletion_compaction */,
|
|
1303
|
-
compaction_reason);
|
|
1306
|
+
/* l0_files_might_overlap */ true, compaction_reason);
|
|
1304
1307
|
}
|
|
1305
1308
|
|
|
1306
1309
|
Compaction* UniversalCompactionBuilder::PickPeriodicCompaction() {
|