Skip to content

Commit 869886d

Browse files
author
Josh Kang
committed
fix proximal level
1 parent 6f92660 commit 869886d

File tree

4 files changed

+35
-16
lines changed

4 files changed

+35
-16
lines changed

db/compaction/compaction.cc

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -281,15 +281,15 @@ Compaction::Compaction(
281281
std::vector<CompactionInputFiles> _inputs, int _output_level,
282282
uint64_t _target_file_size, uint64_t _max_compaction_bytes,
283283
uint32_t _output_path_id, CompressionType _compression,
284-
CompressionOptions _compression_opts,
285-
Temperature _output_temperature_override, uint32_t _max_subcompactions,
286-
std::vector<FileMetaData*> _grandparents,
284+
CompressionOptions _compression_opts, Temperature _output_temperature,
285+
uint32_t _max_subcompactions, std::vector<FileMetaData*> _grandparents,
287286
std::optional<SequenceNumber> _earliest_snapshot,
288287
const SnapshotChecker* _snapshot_checker,
289288
CompactionReason _compaction_reason, const std::string& _trim_ts,
290289
double _score, bool l0_files_might_overlap,
291290
BlobGarbageCollectionPolicy _blob_garbage_collection_policy,
292-
double _blob_garbage_collection_age_cutoff)
291+
double _blob_garbage_collection_age_cutoff,
292+
bool _can_temperature_be_overriden)
293293
: input_vstorage_(vstorage),
294294
start_level_(_inputs[0].level),
295295
output_level_(_output_level),
@@ -304,12 +304,8 @@ Compaction::Compaction(
304304
output_path_id_(_output_path_id),
305305
output_compression_(_compression),
306306
output_compression_opts_(_compression_opts),
307-
output_temperature_(
308-
_output_temperature_override == Temperature::kUnknown
309-
? (is_last_level()
310-
? mutable_cf_options().last_level_temperature
311-
: mutable_cf_options().default_write_temperature)
312-
: _output_temperature_override),
307+
output_temperature_(_output_temperature),
308+
can_temperature_be_overriden_(_can_temperature_be_overriden),
313309
deletion_compaction_(_compaction_reason == CompactionReason::kFIFOTtl ||
314310
_compaction_reason ==
315311
CompactionReason::kFIFOMaxSize),

db/compaction/compaction.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ class Compaction {
9090
uint64_t target_file_size, uint64_t max_compaction_bytes,
9191
uint32_t output_path_id, CompressionType compression,
9292
CompressionOptions compression_opts,
93-
Temperature output_temperature_override,
94-
uint32_t max_subcompactions,
93+
Temperature output_temperature, uint32_t max_subcompactions,
9594
std::vector<FileMetaData*> grandparents,
9695
std::optional<SequenceNumber> earliest_snapshot,
9796
const SnapshotChecker* snapshot_checker,
@@ -100,7 +99,8 @@ class Compaction {
10099
bool l0_files_might_overlap = true,
101100
BlobGarbageCollectionPolicy blob_garbage_collection_policy =
102101
BlobGarbageCollectionPolicy::kUseDefault,
103-
double blob_garbage_collection_age_cutoff = -1);
102+
double blob_garbage_collection_age_cutoff = -1,
103+
bool can_temperature_be_overriden = true);
104104

105105
// The type of the proximal level output range
106106
enum class ProximalOutputRangeType : int {
@@ -411,6 +411,9 @@ class Compaction {
411411
uint64_t max_compaction_bytes() const { return max_compaction_bytes_; }
412412

413413
Temperature output_temperature() const { return output_temperature_; }
414+
bool can_temperature_be_overriden() const {
415+
return can_temperature_be_overriden_;
416+
}
414417

415418
uint32_t max_subcompactions() const { return max_subcompactions_; }
416419

@@ -543,6 +546,7 @@ class Compaction {
543546
CompressionType output_compression_;
544547
CompressionOptions output_compression_opts_;
545548
Temperature output_temperature_;
549+
bool can_temperature_be_overriden_;
546550
// If true, then the compaction can be done by simply deleting input files.
547551
const bool deletion_compaction_;
548552
// should it split the output file using the compact cursor?

db/compaction/compaction_job.cc

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,9 +2119,21 @@ Status CompactionJob::OpenCompactionOutputFile(SubcompactionState* sub_compact,
21192119
&syncpoint_arg);
21202120
#endif
21212121

2122-
// Pass temperature of the last level files to FileSystem.
21232122
FileOptions fo_copy = file_options_;
2124-
auto temperature = sub_compact->compaction->output_temperature();
2123+
Temperature temperature = sub_compact->compaction->output_temperature();
2124+
Temperature last_level_temp =
2125+
sub_compact->compaction->mutable_cf_options().last_level_temperature;
2126+
// Order of precedence for temperature:
2127+
// 1. Manually set output temperature in compaction options
2128+
// 2. Temperature of the last level files if applicable
2129+
// 3. Default write temperature
2130+
if (last_level_temp != Temperature::kUnknown &&
2131+
sub_compact->compaction->is_last_level() &&
2132+
sub_compact->compaction->can_temperature_be_overriden() &&
2133+
!outputs.IsProximalLevel()) {
2134+
temperature = last_level_temp;
2135+
}
2136+
21252137
fo_copy.temperature = temperature;
21262138
fo_copy.write_hint = write_hint_;
21272139

db/compaction/compaction_picker.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,19 @@ Compaction* CompactionPicker::PickCompactionForCompactFiles(
376376
compression_type = compact_options.compression;
377377
}
378378

379+
bool can_temperature_be_overriden =
380+
compact_options.output_temperature == Temperature::kUnknown;
381+
Temperature output_temperature =
382+
can_temperature_be_overriden
383+
? mutable_cf_options.default_write_temperature
384+
: compact_options.output_temperature;
385+
379386
auto c = new Compaction(
380387
vstorage, ioptions_, mutable_cf_options, mutable_db_options, input_files,
381388
output_level, compact_options.output_file_size_limit,
382389
mutable_cf_options.max_compaction_bytes, output_path_id, compression_type,
383390
GetCompressionOptions(mutable_cf_options, vstorage, output_level),
384-
compact_options.output_temperature, compact_options.max_subcompactions,
391+
output_temperature, compact_options.max_subcompactions,
385392
/* grandparents */ {}, earliest_snapshot, snapshot_checker,
386393
CompactionReason::kManualCompaction);
387394
RegisterCompaction(c);

0 commit comments

Comments
 (0)