Tweak external file ingestion seqno logic under universal compaction

Summary:
Right now it is possible that a file gets assigned to L0 but also assigned the seqno from a higher level which it doesn't fit
Under the current impl, it is possibe that seqno in lower levels (Ln) can be equal to smallest seqno of higher levels (Ln-1), which is undesirable from universal compaction's point of view.
This should fix the intermittent failure of `ExternalSSTFileBasicTest.IngestFileWithGlobalSeqnoPickedSeqno`
Closes https://github.com/facebook/rocksdb/pull/3411

Differential Revision: D6813802

Pulled By: miasantreble

fbshipit-source-id: 693d0462fa94725ccfb9d8858743e6d2d9992d14
This commit is contained in:
Zhongyi Xie 2018-02-15 14:11:08 -08:00 committed by Facebook Github Bot
parent 6a30b98fdc
commit c88c57cde1

View File

@ -473,7 +473,10 @@ Status ExternalSstFileIngestionJob::AssignLevelAndSeqnoForIngestedFile(
return f1->largest_seqno < f2->largest_seqno; return f1->largest_seqno < f2->largest_seqno;
})) }))
->largest_seqno; ->largest_seqno;
if (level_largest_seqno != 0) { // should only assign seqno to current level's largest seqno when
// the file fits
if (level_largest_seqno != 0 &&
IngestedFileFitInLevel(file_to_ingest, lvl)) {
*assigned_seqno = level_largest_seqno; *assigned_seqno = level_largest_seqno;
} else { } else {
continue; continue;