From a9ecdce5dcc122582d2106d04854108b2262aae4 Mon Sep 17 00:00:00 2001 From: Yang Zhang Date: Wed, 23 Oct 2024 13:39:32 -0700 Subject: [PATCH] Distinguish overlap w/ compactino from w/ db Signed-off-by: Yang Zhang --- db/external_sst_file_ingestion_job.cc | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/db/external_sst_file_ingestion_job.cc b/db/external_sst_file_ingestion_job.cc index 3fd9ba9a10d..3747aed252f 100644 --- a/db/external_sst_file_ingestion_job.cc +++ b/db/external_sst_file_ingestion_job.cc @@ -911,18 +911,6 @@ Status ExternalSstFileIngestionJob::AssignLevelAndSeqnoForIngestedFile( if (lvl > 0 && lvl < vstorage->base_level()) { continue; } - // if (cfd_->RangeOverlapWithCompaction( - // file_to_ingest->smallest_internal_key.user_key(), - // file_to_ingest->largest_internal_key.user_key(), lvl)) { - // // We must use L0 or any level higher than `lvl` to be able to - // overwrite - // // the compaction output keys that we overlap with in this level, We - // also - // // need to assign this file a seqno to overwrite the compaction output - // // keys in level `lvl` - // overlap_with_db = true; - // break; - // } else if (vstorage->NumLevelFiles(lvl) > 0) { if (vstorage->NumLevelFiles(lvl) > 0) { bool overlap_with_level = false; status = sv->current->OverlapWithLevelIterator( @@ -1125,6 +1113,13 @@ bool ExternalSstFileIngestionJob::IngestedFileFitInLevel( return false; } + if (cfd_->RangeOverlapWithCompaction(file_smallest_user_key, + file_largest_user_key, level)) { + // File overlap with a running compaction output that will be stored + // in this level, we cannot add this file to this level + return false; + } + // File did not overlap with level files, nor compaction output return true; }