Skip to content

Commit 25739bd

Browse files
author
Josh Kang
committed
[rocksdb] Support output temperature in CompactFiles
1 parent 2620c85 commit 25739bd

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

db/compaction/compaction_picker.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,13 +375,18 @@ Compaction* CompactionPicker::PickCompactionForCompactFiles(
375375
// without configurable `CompressionOptions`, which is inconsistent.
376376
compression_type = compact_options.compression;
377377
}
378+
379+
auto writeTemperature =
380+
compact_options.output_temperature == Temperature::kUnknown
381+
? mutable_cf_options.default_write_temperature
382+
: compact_options.output_temperature;
383+
378384
auto c = new Compaction(
379385
vstorage, ioptions_, mutable_cf_options, mutable_db_options, input_files,
380386
output_level, compact_options.output_file_size_limit,
381387
mutable_cf_options.max_compaction_bytes, output_path_id, compression_type,
382388
GetCompressionOptions(mutable_cf_options, vstorage, output_level),
383-
mutable_cf_options.default_write_temperature,
384-
compact_options.max_subcompactions,
389+
writeTemperature, compact_options.max_subcompactions,
385390
/* grandparents */ {}, earliest_snapshot, snapshot_checker,
386391
CompactionReason::kManualCompaction);
387392
RegisterCompaction(c);

db/compaction/compaction_picker_test.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,6 +1470,29 @@ TEST_F(CompactionPickerTest, FIFOToHotAndWarm) {
14701470
}
14711471
}
14721472

1473+
TEST_F(CompactionPickerTest, CompactFilesOutputTemperature) {
1474+
NewVersionStorage(6, kCompactionStyleLevel);
1475+
auto file_number = 66U;
1476+
Add(0, file_number, "150", "200", 1000000000U);
1477+
UpdateVersionStorageInfo();
1478+
1479+
std::unordered_set<uint64_t> input{file_number};
1480+
std::vector<CompactionInputFiles> input_files;
1481+
ASSERT_OK(level_compaction_picker.GetCompactionInputsFromFileNumbers(
1482+
&input_files, &input, vstorage_.get(), CompactionOptions()));
1483+
1484+
auto compactionOptions = CompactionOptions();
1485+
compactionOptions.output_temperature = Temperature::kCold;
1486+
1487+
std::unique_ptr<Compaction> compaction(
1488+
level_compaction_picker.PickCompactionForCompactFiles(
1489+
compactionOptions, input_files, 1, vstorage_.get(),
1490+
mutable_cf_options_, mutable_db_options_, /*output_path_id=*/0));
1491+
1492+
ASSERT_TRUE(compaction.get() != nullptr);
1493+
ASSERT_EQ(compaction->output_temperature(), Temperature::kCold);
1494+
}
1495+
14731496
TEST_F(CompactionPickerTest, CompactionPriMinOverlapping1) {
14741497
NewVersionStorage(6, kCompactionStyleLevel);
14751498
ioptions_.compaction_pri = kMinOverlappingRatio;

include/rocksdb/options.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,6 +2351,11 @@ struct CompactionOptions {
23512351
// canceled variable in CompactionOptions, as it does for CompactRangeOptions
23522352
// - this is because ManualCompactionState is not used
23532353

2354+
// Create output compaction file using this file temperature. If unset, will
2355+
// default to "last_level_temperature" if output level is last level otherwise
2356+
// "default_write_temperature"
2357+
Temperature output_temperature = Temperature::kUnknown;
2358+
23542359
CompactionOptions()
23552360
: compression(kDisableCompressionOption),
23562361
output_file_size_limit(std::numeric_limits<uint64_t>::max()),

0 commit comments

Comments
 (0)