@@ -156,6 +156,7 @@ void AssignUserKey(std::string& key, const Slice& ikey) {
156156 Slice ukey = ExtractUserKey (ikey);
157157 key.assign (ukey.data (), ukey.size ());
158158};
159+
159160} // anonymous namespace
160161
161162bool FindIntraL0Compaction (const std::vector<FileMetaData*>& level_files,
@@ -259,6 +260,29 @@ CompactionPicker::CompactionPicker(TableCache* table_cache,
259260
260261CompactionPicker::~CompactionPicker () {}
261262
263+ CompactionReason CompactionPicker::ConvertCompactionReason (
264+ uint8_t marked, CompactionReason default_reason) {
265+ if (marked & FileMetaData::kMarkedFromUser ) {
266+ return CompactionReason::kFilesMarkedFromUser ;
267+ }
268+ if (marked & FileMetaData::kMarkedFromTableBuilder ) {
269+ return CompactionReason::kFilesMarkedFromTableBuilder ;
270+ }
271+ if (marked & FileMetaData::kMarkedFromRangeDeletion ) {
272+ return CompactionReason::kFilesMarkedFromRangeDeletion ;
273+ }
274+ if (marked & FileMetaData::kMarkedFromTTL ) {
275+ return CompactionReason::kFilesMarkedFromTTL ;
276+ }
277+ if (marked & FileMetaData::kMarkedFromFileSystem ) {
278+ return CompactionReason::kFilesMarkedFromFileSystem ;
279+ }
280+ if (marked & FileMetaData::kMarkedFromUpdateBlob ) {
281+ return CompactionReason::kFilesMarkedFromUpdateBlob ;
282+ }
283+ return default_reason;
284+ }
285+
262286double CompactionPicker::GetQ (std::vector<double >::const_iterator b,
263287 std::vector<double >::const_iterator e, size_t g) {
264288 double S = std::accumulate (b, e, 0.0 );
@@ -2030,8 +2054,12 @@ void CompactionPicker::PickFilesMarkedForCompaction(
20302054 // files as being_compacted, but didn't call ComputeCompactionScore()
20312055 assert (!level_file.second ->being_compacted );
20322056 *start_level = level_file.first ;
2033- *output_level =
2034- (*start_level == 0 ) ? vstorage->base_level () : *start_level + 1 ;
2057+ if (level_file.second ->is_output_to_parent_level ()) {
2058+ *output_level =
2059+ (*start_level == 0 ) ? vstorage->base_level () : *start_level + 1 ;
2060+ } else {
2061+ *output_level = level_file.first ;
2062+ }
20352063
20362064 if (*start_level == 0 && !level0_compactions_in_progress ()->empty ()) {
20372065 return false ;
@@ -2229,7 +2257,9 @@ void LevelCompactionBuilder::SetupInitialFiles() {
22292257 cf_name_, vstorage_, &start_level_, &output_level_,
22302258 &start_level_inputs_);
22312259 if (!start_level_inputs_.empty ()) {
2232- compaction_reason_ = CompactionReason::kFilesMarkedForCompaction ;
2260+ compaction_reason_ = CompactionPicker::ConvertCompactionReason (
2261+ start_level_inputs_.files .front ()->marked_for_compaction ,
2262+ CompactionReason::kUnknown );
22332263 return ;
22342264 }
22352265
@@ -2252,7 +2282,9 @@ void LevelCompactionBuilder::SetupInitialFiles() {
22522282 start_level_inputs_.clear ();
22532283 } else {
22542284 assert (!start_level_inputs_.empty ());
2255- compaction_reason_ = CompactionReason::kBottommostFiles ;
2285+ compaction_reason_ = CompactionPicker::ConvertCompactionReason (
2286+ start_level_inputs_.files .front ()->marked_for_compaction ,
2287+ CompactionReason::kBottommostFiles );
22562288 return ;
22572289 }
22582290
0 commit comments